mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-21 10:49:14 +00:00
Reland "Vulkan: Fallback to XCB for Xlib surfaces"
This is a reland of fb0bf70459
Reland after making libx11-xcb dynamically loaded since it isn't present
on all Linux deployment targets of Chromium. Also includes a couple of
additional cosmetic changes to d3d12/PlatformFunctions noticed while
looking at it for inspiration.
Original change's description:
> Vulkan: Fallback to XCB for Xlib surfaces
>
> Chromium builds the Vulkan loader without support Xlib (because it
> prefers XCB) which caused Xlib wgpu::SwapChain creation to fail on the
> Vulkan backend.
>
> This CL adds a fallback to use VK_KHR_xcb_surface if VK_KHR_xlib_surface
> isn't present.
>
> Bug: dawn:662
> Change-Id: I0e0128ee6b5c75da03998dbae231d17e48bacc81
> Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/41180
> Reviewed-by: Austin Eng <enga@chromium.org>
> Commit-Queue: Austin Eng <enga@chromium.org>
> Auto-Submit: Corentin Wallez <cwallez@chromium.org>
Bug: dawn:662
Change-Id: I617fcd1059dddfa05c29ac20d77f891ca6962342
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/41380
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Auto-Submit: Corentin Wallez <cwallez@chromium.org>
This commit is contained in:
committed by
Commit Bot service account
parent
7e80cce1a9
commit
aa0e1be0e8
@@ -19,6 +19,10 @@
|
||||
#include "dawn_native/ErrorData.h"
|
||||
#include "dawn_native/Surface.h"
|
||||
|
||||
#if defined(DAWN_USE_X11)
|
||||
# include "dawn_native/XlibXcbFunctions.h"
|
||||
#endif // defined(DAWN_USE_X11)
|
||||
|
||||
namespace dawn_native {
|
||||
|
||||
// Forward definitions of each backend's "Connect" function that creates new BackendConnection.
|
||||
@@ -223,6 +227,17 @@ namespace dawn_native {
|
||||
return mPlatform;
|
||||
}
|
||||
|
||||
const XlibXcbFunctions* InstanceBase::GetOrCreateXlibXcbFunctions() {
|
||||
#if defined(DAWN_USE_X11)
|
||||
if (mXlibXcbFunctions == nullptr) {
|
||||
mXlibXcbFunctions = std::make_unique<XlibXcbFunctions>();
|
||||
}
|
||||
return mXlibXcbFunctions.get();
|
||||
#else
|
||||
UNREACHABLE();
|
||||
#endif // defined(DAWN_USE_X11)
|
||||
}
|
||||
|
||||
Surface* InstanceBase::CreateSurface(const SurfaceDescriptor* descriptor) {
|
||||
if (ConsumedError(ValidateSurfaceDescriptor(this, descriptor))) {
|
||||
return nullptr;
|
||||
|
||||
Reference in New Issue
Block a user