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
