Remove VK_KHR_xlib_surface support
XCB is a smaller and more direct interface to the client-side X11
protocol than Xlib, so VK_KHR_xcb_surface should be used instead of
VK_KHR_xlib_surface.
Bug: swiftshader:170
Change-Id: I9d707e3fd48ba79d6c4b4d5784d3b6a890982016
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/61049
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5771526..4600d3b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -111,7 +111,6 @@
check_symbol_exists(mallinfo2 malloc.h HAVE_MALLINFO2)
endif()
-find_library(X11 X11)
find_library(XCB xcb)
if(SWIFTSHADER_BUILD_WSI_WAYLAND)
find_library(WAYLAND wayland-client)
@@ -771,9 +770,6 @@
if(WIN32)
target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_WIN32_KHR")
elseif(LINUX)
- if(X11)
- target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_XLIB_KHR")
- endif()
if(XCB)
target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_XCB_KHR")
endif()
diff --git a/src/Vulkan/BUILD.gn b/src/Vulkan/BUILD.gn
index 58bc87c..dcf48a6 100644
--- a/src/Vulkan/BUILD.gn
+++ b/src/Vulkan/BUILD.gn
@@ -20,7 +20,6 @@
config("swiftshader_libvulkan_private_config") {
if (is_linux || is_chromeos) {
defines = [
- "VK_USE_PLATFORM_XLIB_KHR",
"VK_USE_PLATFORM_XCB_KHR",
"VK_EXPORT=__attribute__((visibility(\"default\")))",
]
diff --git a/src/Vulkan/VkGetProcAddress.cpp b/src/Vulkan/VkGetProcAddress.cpp
index 0290510..84d666e 100644
--- a/src/Vulkan/VkGetProcAddress.cpp
+++ b/src/Vulkan/VkGetProcAddress.cpp
@@ -117,11 +117,6 @@
MAKE_VULKAN_INSTANCE_ENTRY(vkCreateXcbSurfaceKHR),
MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceXcbPresentationSupportKHR),
#endif
-#ifdef VK_USE_PLATFORM_XLIB_KHR
- // VK_KHR_xlib_surface
- MAKE_VULKAN_INSTANCE_ENTRY(vkCreateXlibSurfaceKHR),
- MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceXlibPresentationSupportKHR),
-#endif
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
// VK_KHR_wayland_surface
MAKE_VULKAN_INSTANCE_ENTRY(vkCreateWaylandSurfaceKHR),
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index 2f8da98..33de5c9 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -59,10 +59,6 @@
# include "WSI/XcbSurfaceKHR.hpp"
#endif
-#ifdef VK_USE_PLATFORM_XLIB_KHR
-# include "WSI/XlibSurfaceKHR.hpp"
-#endif
-
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
# include "WSI/WaylandSurfaceKHR.hpp"
#endif
@@ -315,9 +311,6 @@
#ifdef VK_USE_PLATFORM_XCB_KHR
{ { VK_KHR_XCB_SURFACE_EXTENSION_NAME, VK_KHR_XCB_SURFACE_SPEC_VERSION }, [] { return vk::XcbSurfaceKHR::isSupported(); } },
#endif
-#ifdef VK_USE_PLATFORM_XLIB_KHR
- { { VK_KHR_XLIB_SURFACE_EXTENSION_NAME, VK_KHR_XLIB_SURFACE_SPEC_VERSION }, [] { return vk::XlibSurfaceKHR::isSupported(); } },
-#endif
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
{ { VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME, VK_KHR_WAYLAND_SURFACE_SPEC_VERSION } },
#endif
@@ -3943,27 +3936,6 @@
}
#endif
-#ifdef VK_USE_PLATFORM_XLIB_KHR
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
-{
- TRACE("(VkInstance instance = %p, VkXlibSurfaceCreateInfoKHR* pCreateInfo = %p, VkAllocationCallbacks* pAllocator = %p, VkSurface* pSurface = %p)",
- instance, pCreateInfo, pAllocator, pSurface);
-
- // VUID-VkXlibSurfaceCreateInfoKHR-dpy-01313: dpy must point to a valid Xlib Display
- ASSERT(pCreateInfo->dpy);
-
- return vk::XlibSurfaceKHR::Create(pAllocator, pCreateInfo, pSurface);
-}
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display *dpy, VisualID visualID)
-{
- TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t queueFamilyIndex = %d, Display* dpy = %p, VisualID visualID = %lu)",
- physicalDevice, int(queueFamilyIndex), dpy, visualID);
-
- return VK_TRUE;
-}
-#endif
-
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
{
diff --git a/src/WSI/BUILD.gn b/src/WSI/BUILD.gn
index 22af89f..3357650 100644
--- a/src/WSI/BUILD.gn
+++ b/src/WSI/BUILD.gn
@@ -37,10 +37,6 @@
sources += [
"XcbSurfaceKHR.cpp",
"XcbSurfaceKHR.hpp",
- "XlibSurfaceKHR.cpp",
- "XlibSurfaceKHR.hpp",
- "libX11.cpp",
- "libX11.hpp",
"libXCB.cpp",
"libXCB.hpp",
]
diff --git a/src/WSI/CMakeLists.txt b/src/WSI/CMakeLists.txt
index 844975d..0e14f95 100644
--- a/src/WSI/CMakeLists.txt
+++ b/src/WSI/CMakeLists.txt
@@ -32,15 +32,6 @@
Win32SurfaceKHR.hpp
)
elseif(LINUX)
- if(X11)
- list(APPEND WSI_SRC_FILES
- XlibSurfaceKHR.cpp
- XlibSurfaceKHR.hpp
- libX11.cpp
- libX11.hpp
- )
- endif()
-
if(XCB)
list(APPEND WSI_SRC_FILES
XcbSurfaceKHR.cpp
diff --git a/src/WSI/XlibSurfaceKHR.cpp b/src/WSI/XlibSurfaceKHR.cpp
deleted file mode 100644
index 881f436..0000000
--- a/src/WSI/XlibSurfaceKHR.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2019 The SwiftShader Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "XlibSurfaceKHR.hpp"
-
-#include "Vulkan/VkDeviceMemory.hpp"
-#include "Vulkan/VkImage.hpp"
-
-namespace vk {
-
-bool XlibSurfaceKHR::isSupported()
-{
- return libX11.isPresent();
-}
-
-XlibSurfaceKHR::XlibSurfaceKHR(const VkXlibSurfaceCreateInfoKHR *pCreateInfo, void *mem)
- : pDisplay(pCreateInfo->dpy)
- , window(pCreateInfo->window)
-{
- ASSERT(isSupported());
-
- int screen = DefaultScreen(pDisplay);
- gc = libX11->XDefaultGC(pDisplay, screen);
-
- XVisualInfo xVisual;
- Status status = libX11->XMatchVisualInfo(pDisplay, screen, 32, TrueColor, &xVisual);
- bool match = (status != 0 && xVisual.blue_mask == 0xFF);
- visual = match ? xVisual.visual : libX11->XDefaultVisual(pDisplay, screen);
-}
-
-void XlibSurfaceKHR::destroySurface(const VkAllocationCallbacks *pAllocator)
-{
-}
-
-size_t XlibSurfaceKHR::ComputeRequiredAllocationSize(const VkXlibSurfaceCreateInfoKHR *pCreateInfo)
-{
- return 0;
-}
-
-VkResult XlibSurfaceKHR::getSurfaceCapabilities(VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) const
-{
- setCommonSurfaceCapabilities(pSurfaceCapabilities);
-
- XWindowAttributes attr;
- libX11->XGetWindowAttributes(pDisplay, window, &attr);
- VkExtent2D extent = { static_cast<uint32_t>(attr.width), static_cast<uint32_t>(attr.height) };
-
- pSurfaceCapabilities->currentExtent = extent;
- pSurfaceCapabilities->minImageExtent = extent;
- pSurfaceCapabilities->maxImageExtent = extent;
- return VK_SUCCESS;
-}
-
-void XlibSurfaceKHR::attachImage(PresentImage *image)
-{
- XWindowAttributes attr;
- libX11->XGetWindowAttributes(pDisplay, window, &attr);
-
- const VkExtent3D &extent = image->getImage()->getExtent();
-
- int bytes_per_line = image->getImage()->rowPitchBytes(VK_IMAGE_ASPECT_COLOR_BIT, 0);
- char *buffer = static_cast<char *>(image->getImageMemory()->getOffsetPointer(0));
-
- XImage *xImage = libX11->XCreateImage(pDisplay, visual, attr.depth, ZPixmap, 0, buffer, extent.width, extent.height, 32, bytes_per_line);
-
- imageMap[image] = xImage;
-}
-
-void XlibSurfaceKHR::detachImage(PresentImage *image)
-{
- auto it = imageMap.find(image);
- if(it != imageMap.end())
- {
- XImage *xImage = it->second;
- xImage->data = nullptr; // the XImage does not actually own the buffer
- XDestroyImage(xImage);
- imageMap.erase(it);
- }
-}
-
-VkResult XlibSurfaceKHR::present(PresentImage *image)
-{
- auto it = imageMap.find(image);
- if(it != imageMap.end())
- {
- XImage *xImage = it->second;
-
- if(xImage->data)
- {
- XWindowAttributes attr;
- libX11->XGetWindowAttributes(pDisplay, window, &attr);
- VkExtent2D windowExtent = { static_cast<uint32_t>(attr.width), static_cast<uint32_t>(attr.height) };
- const VkExtent3D &extent = image->getImage()->getExtent();
-
- if(windowExtent.width != extent.width || windowExtent.height != extent.height)
- {
- return VK_ERROR_OUT_OF_DATE_KHR;
- }
-
- libX11->XPutImage(pDisplay, window, gc, xImage, 0, 0, 0, 0, extent.width, extent.height);
- }
- }
-
- return VK_SUCCESS;
-}
-
-} // namespace vk
\ No newline at end of file
diff --git a/src/WSI/XlibSurfaceKHR.hpp b/src/WSI/XlibSurfaceKHR.hpp
deleted file mode 100644
index a0e6aba..0000000
--- a/src/WSI/XlibSurfaceKHR.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2018 The SwiftShader Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef SWIFTSHADER_XLIBSURFACEKHR_HPP
-#define SWIFTSHADER_XLIBSURFACEKHR_HPP
-
-#include "VkSurfaceKHR.hpp"
-#include "libX11.hpp"
-#include "Vulkan/VkObject.hpp"
-
-#include <vulkan/vulkan_xlib.h>
-
-#include <unordered_map>
-
-namespace vk {
-
-class XlibSurfaceKHR : public SurfaceKHR, public ObjectBase<XlibSurfaceKHR, VkSurfaceKHR>
-{
-public:
- static bool isSupported();
- XlibSurfaceKHR(const VkXlibSurfaceCreateInfoKHR *pCreateInfo, void *mem);
-
- void destroySurface(const VkAllocationCallbacks *pAllocator) override;
-
- static size_t ComputeRequiredAllocationSize(const VkXlibSurfaceCreateInfoKHR *pCreateInfo);
-
- VkResult getSurfaceCapabilities(VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) const override;
-
- virtual void attachImage(PresentImage *image) override;
- virtual void detachImage(PresentImage *image) override;
- VkResult present(PresentImage *image) override;
-
-private:
- Display *const pDisplay;
- const Window window;
- GC gc;
- Visual *visual = nullptr;
- std::unordered_map<PresentImage *, XImage *> imageMap;
-};
-
-} // namespace vk
-#endif // SWIFTSHADER_XLIBSURFACEKHR_HPP
diff --git a/src/WSI/libX11.cpp b/src/WSI/libX11.cpp
deleted file mode 100644
index 42e2267..0000000
--- a/src/WSI/libX11.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "libX11.hpp"
-
-#include "System/SharedLibrary.hpp"
-
-#include <memory>
-
-LibX11exports::LibX11exports(void *libX11, void *libXext)
-{
- getFuncAddress(libX11, "XOpenDisplay", &XOpenDisplay);
- getFuncAddress(libX11, "XGetWindowAttributes", &XGetWindowAttributes);
- getFuncAddress(libX11, "XDefaultScreenOfDisplay", &XDefaultScreenOfDisplay);
- getFuncAddress(libX11, "XWidthOfScreen", &XWidthOfScreen);
- getFuncAddress(libX11, "XHeightOfScreen", &XHeightOfScreen);
- getFuncAddress(libX11, "XPlanesOfScreen", &XPlanesOfScreen);
- getFuncAddress(libX11, "XDefaultGC", &XDefaultGC);
- getFuncAddress(libX11, "XDefaultDepth", &XDefaultDepth);
- getFuncAddress(libX11, "XMatchVisualInfo", &XMatchVisualInfo);
- getFuncAddress(libX11, "XDefaultVisual", &XDefaultVisual);
- getFuncAddress(libX11, "XSetErrorHandler", &XSetErrorHandler);
- getFuncAddress(libX11, "XSync", &XSync);
- getFuncAddress(libX11, "XCreateImage", &XCreateImage);
- getFuncAddress(libX11, "XCloseDisplay", &XCloseDisplay);
- getFuncAddress(libX11, "XPutImage", &XPutImage);
- getFuncAddress(libX11, "XDrawString", &XDrawString);
-
- getFuncAddress(libXext, "XShmQueryExtension", &XShmQueryExtension);
- getFuncAddress(libXext, "XShmCreateImage", &XShmCreateImage);
- getFuncAddress(libXext, "XShmAttach", &XShmAttach);
- getFuncAddress(libXext, "XShmDetach", &XShmDetach);
- getFuncAddress(libXext, "XShmPutImage", &XShmPutImage);
-}
-
-LibX11exports *LibX11::operator->()
-{
- return loadExports();
-}
-
-LibX11exports *LibX11::loadExports()
-{
- static LibX11exports exports = [] {
- if(getProcAddress(RTLD_DEFAULT, "XOpenDisplay")) // Search the global scope for pre-loaded X11 library.
- {
- return LibX11exports(RTLD_DEFAULT, RTLD_DEFAULT);
- }
-
- void *libX11 = loadLibrary("libX11.so");
-
- if(libX11)
- {
- void *libXext = loadLibrary("libXext.so");
- return LibX11exports(libX11, libXext);
- }
-
- return LibX11exports();
- }();
-
- return exports.XOpenDisplay ? &exports : nullptr;
-}
-
-LibX11 libX11;
diff --git a/src/WSI/libX11.hpp b/src/WSI/libX11.hpp
deleted file mode 100644
index ef354c9..0000000
--- a/src/WSI/libX11.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef libX11_hpp
-#define libX11_hpp
-
-#define Bool int
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/extensions/XShm.h>
-
-struct LibX11exports
-{
- LibX11exports() {}
- LibX11exports(void *libX11, void *libXext);
-
- Display *(*XOpenDisplay)(char *display_name) = nullptr;
- Status (*XGetWindowAttributes)(Display *display, Window w, XWindowAttributes *window_attributes_return) = nullptr;
- Screen *(*XDefaultScreenOfDisplay)(Display *display) = nullptr;
- int (*XWidthOfScreen)(Screen *screen) = nullptr;
- int (*XHeightOfScreen)(Screen *screen) = nullptr;
- int (*XPlanesOfScreen)(Screen *screen) = nullptr;
- GC(*XDefaultGC)
- (Display *display, int screen_number) = nullptr;
- int (*XDefaultDepth)(Display *display, int screen_number) = nullptr;
- Status (*XMatchVisualInfo)(Display *display, int screen, int depth, int screen_class, XVisualInfo *vinfo_return) = nullptr;
- Visual *(*XDefaultVisual)(Display *display, int screen_number) = nullptr;
- int (*(*XSetErrorHandler)(int (*handler)(Display *, XErrorEvent *)))(Display *, XErrorEvent *) = nullptr;
- int (*XSync)(Display *display, Bool discard) = nullptr;
- XImage *(*XCreateImage)(Display *display, Visual *visual, unsigned int depth, int format, int offset, char *data, unsigned int width, unsigned int height, int bitmap_pad, int bytes_per_line) = nullptr;
- int (*XCloseDisplay)(Display *display) = nullptr;
- int (*XPutImage)(Display *display, Drawable d, GC gc, XImage *image, int src_x, int src_y, int dest_x, int dest_y, unsigned int width, unsigned int height) = nullptr;
- int (*XDrawString)(Display *display, Drawable d, GC gc, int x, int y, char *string, int length) = nullptr;
-
- Bool (*XShmQueryExtension)(Display *display) = nullptr;
- XImage *(*XShmCreateImage)(Display *display, Visual *visual, unsigned int depth, int format, char *data, XShmSegmentInfo *shminfo, unsigned int width, unsigned int height) = nullptr;
- Bool (*XShmAttach)(Display *display, XShmSegmentInfo *shminfo) = nullptr;
- Bool (*XShmDetach)(Display *display, XShmSegmentInfo *shminfo) = nullptr;
- int (*XShmPutImage)(Display *display, Drawable d, GC gc, XImage *image, int src_x, int src_y, int dest_x, int dest_y, unsigned int width, unsigned int height, bool send_event) = nullptr;
-};
-
-class LibX11
-{
-public:
- bool isPresent()
- {
- return loadExports() != nullptr;
- }
-
- LibX11exports *operator->();
-
-private:
- LibX11exports *loadExports();
-};
-
-extern LibX11 libX11;
-
-#endif // libX11_hpp