diff --git a/src/d3d11/d3d11_buffer.h b/src/d3d11/d3d11_buffer.h
index 7ede40ff5..e9e9f1b35 100644
--- a/src/d3d11/d3d11_buffer.h
+++ b/src/d3d11/d3d11_buffer.h
@@ -28,13 +28,14 @@ namespace dxvk {
             D3D11_RESOURCE_DIMENSION *pResourceDimension) final;
     
     void GetDesc(
-            D3D11_BUFFER_DESC *pDesc);
+            D3D11_BUFFER_DESC *pDesc) final;
     
   private:
     
-    Com<D3D11Device>  m_device;
-    D3D11_BUFFER_DESC m_desc;
-    Rc<DxvkBuffer>    m_buffer;
+    Com<D3D11Device>    m_device;
+    
+    D3D11_BUFFER_DESC   m_desc;
+    Rc<DxvkBuffer>      m_buffer;
     
     Rc<DxvkBuffer> createBuffer();
     
diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp
index efedcdec3..7cdaf51a9 100644
--- a/src/d3d11/d3d11_device.cpp
+++ b/src/d3d11/d3d11_device.cpp
@@ -7,7 +7,7 @@
 namespace dxvk {
   
   D3D11Device::D3D11Device(
-          IDXVKDevice*        dxgiDevice,
+          IDXGIDevicePrivate* dxgiDevice,
           D3D_FEATURE_LEVEL   featureLevel,
           UINT                featureFlags)
   : m_dxgiDevice  (dxgiDevice),
@@ -29,7 +29,7 @@ namespace dxvk {
     COM_QUERY_IFACE(riid, ppvObject, IUnknown);
     COM_QUERY_IFACE(riid, ppvObject, ID3D11Device);
     
-    if (riid == __uuidof(IDXVKDevice)
+    if (riid == __uuidof(IDXGIDevicePrivate)
      || riid == __uuidof(IDXGIDevice))
       return m_dxgiDevice->QueryInterface(riid, ppvObject);
     
diff --git a/src/d3d11/d3d11_device.h b/src/d3d11/d3d11_device.h
index 96026ba2c..45e1f247c 100644
--- a/src/d3d11/d3d11_device.h
+++ b/src/d3d11/d3d11_device.h
@@ -17,7 +17,7 @@ namespace dxvk {
   public:
     
     D3D11Device(
-            IDXVKDevice*            dxgiDevice,
+            IDXGIDevicePrivate*     dxgiDevice,
             D3D_FEATURE_LEVEL       featureLevel,
             UINT                    featureFlags);
     ~D3D11Device();
@@ -224,14 +224,14 @@ namespace dxvk {
     
   private:
     
-    const Com<IDXVKDevice>    m_dxgiDevice;
-    const D3D_FEATURE_LEVEL   m_featureLevel;
-    const UINT                m_featureFlags;
+    const Com<IDXGIDevicePrivate> m_dxgiDevice;
+    const D3D_FEATURE_LEVEL       m_featureLevel;
+    const UINT                    m_featureFlags;
     
-    const Rc<DxvkDevice>      m_dxvkDevice;
-    const Rc<DxvkAdapter>     m_dxvkAdapter;
+    const Rc<DxvkDevice>          m_dxvkDevice;
+    const Rc<DxvkAdapter>         m_dxvkAdapter;
     
-    Com<ID3D11DeviceContext>  m_context;
+    Com<ID3D11DeviceContext>      m_context;
     
   };
   
diff --git a/src/d3d11/d3d11_main.cpp b/src/d3d11/d3d11_main.cpp
index ef256959d..d16de7845 100644
--- a/src/d3d11/d3d11_main.cpp
+++ b/src/d3d11/d3d11_main.cpp
@@ -19,8 +19,8 @@ extern "C" {
           ID3D11Device        **ppDevice,
           D3D_FEATURE_LEVEL   *pFeatureLevel,
           ID3D11DeviceContext **ppImmediateContext) {
-    Com<IDXGIAdapter> dxgiAdapter = pAdapter;
-    Com<IDXVKAdapter> dxvkAdapter = nullptr;
+    Com<IDXGIAdapter>        dxgiAdapter = pAdapter;
+    Com<IDXGIAdapterPrivate> dxvkAdapter = nullptr;
     
     if (dxgiAdapter == nullptr) {
       // We'll treat everything as hardware, even if the
@@ -55,7 +55,7 @@ extern "C" {
     
     // The adapter must obviously be a DXVK-compatible adapter so
     // that we can create a DXVK-compatible DXGI device from it.
-    if (FAILED(dxgiAdapter->QueryInterface(__uuidof(IDXVKAdapter),
+    if (FAILED(dxgiAdapter->QueryInterface(__uuidof(IDXGIAdapterPrivate),
         reinterpret_cast<void**>(&dxvkAdapter)))) {
       Logger::err("D3D11CreateDevice: Adapter is not a DXVK adapter");
       return E_FAIL;
@@ -103,7 +103,7 @@ extern "C" {
       // does not hold a strong reference to the device that owns it, so
       // if we cannot write back the device, it would be destroyed.
       if (ppDevice != nullptr) {
-        Com<IDXVKDevice> dxvkDevice = nullptr;
+        Com<IDXGIDevicePrivate> dxvkDevice = nullptr;
         
         if (FAILED(DXGICreateDXVKDevice(dxvkAdapter.ptr(), &dxvkDevice))) {
           Logger::err("D3D11CreateDevice: Failed to create DXGI device");
diff --git a/src/d3d11/meson.build b/src/d3d11/meson.build
index 75b1eeeec..9d2fbadf0 100644
--- a/src/d3d11/meson.build
+++ b/src/d3d11/meson.build
@@ -3,6 +3,7 @@ d3d11_src = [
   'd3d11_context.cpp',
   'd3d11_device.cpp',
   'd3d11_main.cpp',
+  'd3d11_texture.cpp',
 ]
 
 d3d11_dll = shared_library('d3d11', d3d11_src,
diff --git a/src/dxgi/dxgi_adapter.cpp b/src/dxgi/dxgi_adapter.cpp
index 866971131..af54c1a4a 100644
--- a/src/dxgi/dxgi_adapter.cpp
+++ b/src/dxgi/dxgi_adapter.cpp
@@ -28,7 +28,7 @@ namespace dxvk {
     COM_QUERY_IFACE(riid, ppvObject, IDXGIObject);
     COM_QUERY_IFACE(riid, ppvObject, IDXGIAdapter);
     COM_QUERY_IFACE(riid, ppvObject, IDXGIAdapter1);
-    COM_QUERY_IFACE(riid, ppvObject, IDXVKAdapter);
+    COM_QUERY_IFACE(riid, ppvObject, IDXGIAdapterPrivate);
     
     Logger::warn("DxgiAdapter::QueryInterface: Unknown interface query");
     return E_NOINTERFACE;
diff --git a/src/dxgi/dxgi_adapter.h b/src/dxgi/dxgi_adapter.h
index d5904daf1..65818d279 100644
--- a/src/dxgi/dxgi_adapter.h
+++ b/src/dxgi/dxgi_adapter.h
@@ -13,7 +13,7 @@ namespace dxvk {
   class DxgiFactory;
   class DxgiOutput;
   
-  class DxgiAdapter : public DxgiObject<IDXVKAdapter> {
+  class DxgiAdapter : public DxgiObject<IDXGIAdapterPrivate> {
     
   public:
     
diff --git a/src/dxgi/dxgi_device.cpp b/src/dxgi/dxgi_device.cpp
index cf35c7cc2..155f95dff 100644
--- a/src/dxgi/dxgi_device.cpp
+++ b/src/dxgi/dxgi_device.cpp
@@ -3,7 +3,7 @@
 
 namespace dxvk {
   
-  DxgiDevice::DxgiDevice(IDXVKAdapter* adapter)
+  DxgiDevice::DxgiDevice(IDXGIAdapterPrivate* adapter)
   : m_adapter(adapter) {
     m_device = m_adapter->GetDXVKAdapter()->createDevice();
   }
@@ -18,7 +18,7 @@ namespace dxvk {
     COM_QUERY_IFACE(riid, ppvObject, IUnknown);
     COM_QUERY_IFACE(riid, ppvObject, IDXGIObject);
     COM_QUERY_IFACE(riid, ppvObject, IDXGIDevice);
-    COM_QUERY_IFACE(riid, ppvObject, IDXVKDevice);
+    COM_QUERY_IFACE(riid, ppvObject, IDXGIDevicePrivate);
     
     if (m_layer != nullptr)
       return m_layer->QueryInterface(riid, ppvObject);
@@ -92,8 +92,8 @@ namespace dxvk {
 extern "C" {
   
   DLLEXPORT HRESULT __stdcall DXGICreateDXVKDevice(
-          IDXVKAdapter*   pAdapter,
-          IDXVKDevice**   ppDevice) {
+          IDXGIAdapterPrivate*   pAdapter,
+          IDXGIDevicePrivate**   ppDevice) {
     try {
       *ppDevice = dxvk::ref(new dxvk::DxgiDevice(pAdapter));
       return S_OK;
diff --git a/src/dxgi/dxgi_device.h b/src/dxgi/dxgi_device.h
index b4d5203f1..d209cf336 100644
--- a/src/dxgi/dxgi_device.h
+++ b/src/dxgi/dxgi_device.h
@@ -9,11 +9,11 @@ namespace dxvk {
   
   class DxgiFactory;
   
-  class DxgiDevice : public DxgiObject<IDXVKDevice> {
+  class DxgiDevice : public DxgiObject<IDXGIDevicePrivate> {
     
   public:
     
-    DxgiDevice(IDXVKAdapter* adapter);
+    DxgiDevice(IDXGIAdapterPrivate* adapter);
     ~DxgiDevice();
     
     HRESULT QueryInterface(
@@ -52,10 +52,10 @@ namespace dxvk {
     
   private:
     
-    Com<IDXVKAdapter> m_adapter;
-    Rc<DxvkDevice>    m_device;
+    Com<IDXGIAdapterPrivate> m_adapter;
+    Rc<DxvkDevice>           m_device;
     
-    IUnknown*         m_layer = nullptr;
+    IUnknown* m_layer = nullptr;
     
   };
 
@@ -65,7 +65,7 @@ namespace dxvk {
 extern "C" {
   
   DLLEXPORT HRESULT __stdcall DXGICreateDXVKDevice(
-          IDXVKAdapter*   pAdapter,
-          IDXVKDevice**   ppDevice);
+          IDXGIAdapterPrivate*   pAdapter,
+          IDXGIDevicePrivate**   ppDevice);
   
 }
\ No newline at end of file
diff --git a/src/dxgi/dxgi_interfaces.h b/src/dxgi/dxgi_interfaces.h
index cb1800c0a..af784c7c7 100644
--- a/src/dxgi/dxgi_interfaces.h
+++ b/src/dxgi/dxgi_interfaces.h
@@ -16,7 +16,7 @@ namespace dxvk {
  * this interface.
  */
 MIDL_INTERFACE("907bf281-ea3c-43b4-a8e4-9f231107b4ff")
-IDXVKAdapter : public IDXGIAdapter1 {
+IDXGIAdapterPrivate : public IDXGIAdapter1 {
   static const GUID guid;
   
   virtual dxvk::Rc<dxvk::DxvkAdapter> GetDXVKAdapter() = 0;
@@ -31,7 +31,7 @@ IDXVKAdapter : public IDXGIAdapter1 {
  * this interface.
  */
 MIDL_INTERFACE("7a622cf6-627a-46b2-b52f-360ef3da831c")
-IDXVKDevice : public IDXGIDevice {
+IDXGIDevicePrivate : public IDXGIDevice {
   static const GUID guid;
   
   virtual void SetDeviceLayer(
@@ -41,5 +41,5 @@ IDXVKDevice : public IDXGIDevice {
 };
 
 
-template<> inline GUID const& __mingw_uuidof<IDXVKAdapter>() { return IDXVKAdapter::guid; }
-template<> inline GUID const& __mingw_uuidof<IDXVKDevice> () { return IDXVKDevice ::guid; }
+template<> inline GUID const& __mingw_uuidof<IDXGIAdapterPrivate>() { return IDXGIAdapterPrivate::guid; }
+template<> inline GUID const& __mingw_uuidof<IDXGIDevicePrivate> () { return IDXGIDevicePrivate ::guid; }
diff --git a/src/dxgi/dxgi_swapchain.cpp b/src/dxgi/dxgi_swapchain.cpp
index f6064406b..c186f2afe 100644
--- a/src/dxgi/dxgi_swapchain.cpp
+++ b/src/dxgi/dxgi_swapchain.cpp
@@ -12,7 +12,7 @@ namespace dxvk {
     
     // Retrieve a device pointer that allows us to
     // communicate with the underlying D3D device
-    if (FAILED(pDevice->QueryInterface(__uuidof(IDXVKDevice),
+    if (FAILED(pDevice->QueryInterface(__uuidof(IDXGIDevicePrivate),
         reinterpret_cast<void**>(&m_device))))
       throw DxvkError("DxgiSwapChain::DxgiSwapChain: Invalid device");
     
diff --git a/src/dxgi/dxgi_swapchain.h b/src/dxgi/dxgi_swapchain.h
index 35401f6eb..95f623576 100644
--- a/src/dxgi/dxgi_swapchain.h
+++ b/src/dxgi/dxgi_swapchain.h
@@ -78,8 +78,8 @@ namespace dxvk {
     
     std::mutex m_mutex;
     
-    Com<DxgiFactory> m_factory;
-    Com<IDXVKDevice> m_device;
+    Com<DxgiFactory>        m_factory;
+    Com<IDXGIDevicePrivate> m_device;
     
     DXGI_SWAP_CHAIN_DESC  m_desc;
     DXGI_FRAME_STATISTICS m_stats;
diff --git a/src/util/com/com_guid.cpp b/src/util/com/com_guid.cpp
index e308a8e8f..6f32fdb9e 100644
--- a/src/util/com/com_guid.cpp
+++ b/src/util/com/com_guid.cpp
@@ -2,8 +2,8 @@
 
 #include "../../dxgi/dxgi_interfaces.h"
 
-const GUID IDXVKAdapter::guid     = {0x907bf281,0xea3c,0x43b4,{0xa8,0xe4,0x9f,0x23,0x11,0x07,0xb4,0xff}};
-const GUID IDXVKDevice::guid      = {0x7a622cf6,0x627a,0x46b2,{0xb5,0x2f,0x36,0x0e,0xf3,0xda,0x83,0x1c}};
+const GUID IDXGIAdapterPrivate::guid     = {0x907bf281,0xea3c,0x43b4,{0xa8,0xe4,0x9f,0x23,0x11,0x07,0xb4,0xff}};
+const GUID IDXGIDevicePrivate::guid      = {0x7a622cf6,0x627a,0x46b2,{0xb5,0x2f,0x36,0x0e,0xf3,0xda,0x83,0x1c}};
 
 std::ostream& operator << (std::ostream& os, REFIID guid) {
   os.width(8);