Nikolay Sivov : d3d11: Always use dxgi resource private store for 1D and 2D textures.

Alexandre Julliard julliard at winehq.org
Wed Jun 15 16:05:58 CDT 2022


Module: wine
Branch: master
Commit: 9b220b8079f882cca80351ec5ee1dd8c153d1950
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=9b220b8079f882cca80351ec5ee1dd8c153d1950

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Jun  8 20:00:59 2022 +0300

d3d11: Always use dxgi resource private store for 1D and 2D textures.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>

---

 dlls/d3d11/d3d11_private.h |  2 --
 dlls/d3d11/texture.c       | 78 ++++++++++++++++++----------------------------
 2 files changed, 30 insertions(+), 50 deletions(-)

diff --git a/dlls/d3d11/d3d11_private.h b/dlls/d3d11/d3d11_private.h
index 4e4efcae098..cc236699871 100644
--- a/dlls/d3d11/d3d11_private.h
+++ b/dlls/d3d11/d3d11_private.h
@@ -129,7 +129,6 @@ struct d3d_texture1d
     ID3D10Texture1D ID3D10Texture1D_iface;
     LONG refcount;
 
-    struct wined3d_private_store private_store;
     IUnknown *dxgi_resource;
     struct wined3d_texture *wined3d_texture;
     D3D11_TEXTURE1D_DESC desc;
@@ -148,7 +147,6 @@ struct d3d_texture2d
     ID3D10Texture2D ID3D10Texture2D_iface;
     LONG refcount;
 
-    struct wined3d_private_store private_store;
     IUnknown *dxgi_resource;
     struct wined3d_texture *wined3d_texture;
     D3D11_TEXTURE2D_DESC desc;
diff --git a/dlls/d3d11/texture.c b/dlls/d3d11/texture.c
index 513a656aebe..775b7df43f1 100644
--- a/dlls/d3d11/texture.c
+++ b/dlls/d3d11/texture.c
@@ -115,60 +115,54 @@ static HRESULT STDMETHODCALLTYPE d3d11_texture1d_GetPrivateData(ID3D11Texture1D
         REFGUID guid, UINT *data_size, void *data)
 {
     struct d3d_texture1d *texture = impl_from_ID3D11Texture1D(iface);
-    IDXGISurface *dxgi_surface;
+    IDXGIResource *dxgi_resource;
     HRESULT hr;
 
     TRACE("iface %p, guid %s, data_size %p, data %p.\n", iface, debugstr_guid(guid), data_size, data);
 
-    if (texture->dxgi_resource
-            && SUCCEEDED(IUnknown_QueryInterface(texture->dxgi_resource, &IID_IDXGISurface, (void **)&dxgi_surface)))
+    if (SUCCEEDED(hr = IUnknown_QueryInterface(texture->dxgi_resource, &IID_IDXGIResource, (void **)&dxgi_resource)))
     {
-        hr = IDXGISurface_GetPrivateData(dxgi_surface, guid, data_size, data);
-        IDXGISurface_Release(dxgi_surface);
-        return hr;
+        hr = IDXGIResource_GetPrivateData(dxgi_resource, guid, data_size, data);
+        IDXGIResource_Release(dxgi_resource);
     }
 
-    return d3d_get_private_data(&texture->private_store, guid, data_size, data);
+    return hr;
 }
 
 static HRESULT STDMETHODCALLTYPE d3d11_texture1d_SetPrivateData(ID3D11Texture1D *iface,
         REFGUID guid, UINT data_size, const void *data)
 {
     struct d3d_texture1d *texture = impl_from_ID3D11Texture1D(iface);
-    IDXGISurface *dxgi_surface;
+    IDXGIResource *dxgi_resource;
     HRESULT hr;
 
     TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
 
-    if (texture->dxgi_resource
-            && SUCCEEDED(IUnknown_QueryInterface(texture->dxgi_resource, &IID_IDXGISurface, (void **)&dxgi_surface)))
+    if (SUCCEEDED(hr = IUnknown_QueryInterface(texture->dxgi_resource, &IID_IDXGIResource, (void **)&dxgi_resource)))
     {
-        hr = IDXGISurface_SetPrivateData(dxgi_surface, guid, data_size, data);
-        IDXGISurface_Release(dxgi_surface);
-        return hr;
+        hr = IDXGIResource_SetPrivateData(dxgi_resource, guid, data_size, data);
+        IDXGIResource_Release(dxgi_resource);
     }
 
-    return d3d_set_private_data(&texture->private_store, guid, data_size, data);
+    return hr;
 }
 
 static HRESULT STDMETHODCALLTYPE d3d11_texture1d_SetPrivateDataInterface(ID3D11Texture1D *iface,
         REFGUID guid, const IUnknown *data)
 {
     struct d3d_texture1d *texture = impl_from_ID3D11Texture1D(iface);
-    IDXGISurface *dxgi_surface;
+    IDXGIResource *dxgi_resource;
     HRESULT hr;
 
     TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
 
-    if (texture->dxgi_resource
-            && SUCCEEDED(IUnknown_QueryInterface(texture->dxgi_resource, &IID_IDXGISurface, (void **)&dxgi_surface)))
+    if (SUCCEEDED(hr = IUnknown_QueryInterface(texture->dxgi_resource, &IID_IDXGIResource, (void **)&dxgi_resource)))
     {
-        hr = IDXGISurface_SetPrivateDataInterface(dxgi_surface, guid, data);
-        IDXGISurface_Release(dxgi_surface);
-        return hr;
+        hr = IDXGIResource_SetPrivateDataInterface(dxgi_resource, guid, data);
+        IDXGIResource_Release(dxgi_resource);
     }
 
-    return d3d_set_private_data_interface(&texture->private_store, guid, data);
+    return hr;
 }
 
 static void STDMETHODCALLTYPE d3d11_texture1d_GetType(ID3D11Texture1D *iface,
@@ -258,7 +252,6 @@ static void STDMETHODCALLTYPE d3d_texture1d_wined3d_object_released(void *parent
 
     if (texture->dxgi_resource)
         IUnknown_Release(texture->dxgi_resource);
-    wined3d_private_store_cleanup(&texture->private_store);
     heap_free(texture);
 }
 
@@ -460,7 +453,6 @@ HRESULT d3d_texture1d_create(struct d3d_device *device, const D3D11_TEXTURE1D_DE
     texture->ID3D11Texture1D_iface.lpVtbl = &d3d11_texture1d_vtbl;
     texture->ID3D10Texture1D_iface.lpVtbl = &d3d10_texture1d_vtbl;
     texture->refcount = 1;
-    wined3d_private_store_init(&texture->private_store);
     texture->desc = *desc;
     levels = desc->MipLevels ? desc->MipLevels : wined3d_log2i(desc->Width) + 1;
     texture->desc.MipLevels = levels;
@@ -489,7 +481,6 @@ HRESULT d3d_texture1d_create(struct d3d_device *device, const D3D11_TEXTURE1D_DE
             texture, &d3d_texture1d_wined3d_parent_ops, &texture->wined3d_texture)))
     {
         WARN("Failed to create wined3d texture, hr %#lx.\n", hr);
-        wined3d_private_store_cleanup(&texture->private_store);
         heap_free(texture);
         wined3d_mutex_unlock();
         if (hr == WINED3DERR_NOTAVAILABLE || hr == WINED3DERR_INVALIDCALL)
@@ -605,60 +596,54 @@ static HRESULT STDMETHODCALLTYPE d3d11_texture2d_GetPrivateData(ID3D11Texture2D
         REFGUID guid, UINT *data_size, void *data)
 {
     struct d3d_texture2d *texture = impl_from_ID3D11Texture2D(iface);
-    IDXGISurface *dxgi_surface;
+    IDXGIResource *dxgi_resource;
     HRESULT hr;
 
     TRACE("iface %p, guid %s, data_size %p, data %p.\n", iface, debugstr_guid(guid), data_size, data);
 
-    if (texture->dxgi_resource
-            && SUCCEEDED(IUnknown_QueryInterface(texture->dxgi_resource, &IID_IDXGISurface, (void **)&dxgi_surface)))
+    if (SUCCEEDED(hr = IUnknown_QueryInterface(texture->dxgi_resource, &IID_IDXGIResource, (void **)&dxgi_resource)))
     {
-        hr = IDXGISurface_GetPrivateData(dxgi_surface, guid, data_size, data);
-        IDXGISurface_Release(dxgi_surface);
-        return hr;
+        hr = IDXGIResource_GetPrivateData(dxgi_resource, guid, data_size, data);
+        IDXGIResource_Release(dxgi_resource);
     }
 
-    return d3d_get_private_data(&texture->private_store, guid, data_size, data);
+    return hr;
 }
 
 static HRESULT STDMETHODCALLTYPE d3d11_texture2d_SetPrivateData(ID3D11Texture2D *iface,
         REFGUID guid, UINT data_size, const void *data)
 {
     struct d3d_texture2d *texture = impl_from_ID3D11Texture2D(iface);
-    IDXGISurface *dxgi_surface;
+    IDXGIResource *dxgi_resource;
     HRESULT hr;
 
     TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
 
-    if (texture->dxgi_resource
-            && SUCCEEDED(IUnknown_QueryInterface(texture->dxgi_resource, &IID_IDXGISurface, (void **)&dxgi_surface)))
+    if (SUCCEEDED(hr = IUnknown_QueryInterface(texture->dxgi_resource, &IID_IDXGIResource, (void **)&dxgi_resource)))
     {
-        hr = IDXGISurface_SetPrivateData(dxgi_surface, guid, data_size, data);
-        IDXGISurface_Release(dxgi_surface);
-        return hr;
+        hr = IDXGIResource_SetPrivateData(dxgi_resource, guid, data_size, data);
+        IDXGIResource_Release(dxgi_resource);
     }
 
-    return d3d_set_private_data(&texture->private_store, guid, data_size, data);
+    return hr;
 }
 
 static HRESULT STDMETHODCALLTYPE d3d11_texture2d_SetPrivateDataInterface(ID3D11Texture2D *iface,
         REFGUID guid, const IUnknown *data)
 {
     struct d3d_texture2d *texture = impl_from_ID3D11Texture2D(iface);
-    IDXGISurface *dxgi_surface;
+    IDXGIResource *dxgi_resource;
     HRESULT hr;
 
     TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
 
-    if (texture->dxgi_resource
-            && SUCCEEDED(IUnknown_QueryInterface(texture->dxgi_resource, &IID_IDXGISurface, (void **)&dxgi_surface)))
+    if (SUCCEEDED(hr = IUnknown_QueryInterface(texture->dxgi_resource, &IID_IDXGIResource, (void **)&dxgi_resource)))
     {
-        hr = IDXGISurface_SetPrivateDataInterface(dxgi_surface, guid, data);
-        IDXGISurface_Release(dxgi_surface);
-        return hr;
+        hr = IDXGIResource_SetPrivateDataInterface(dxgi_resource, guid, data);
+        IDXGIResource_Release(dxgi_resource);
     }
 
-    return d3d_set_private_data_interface(&texture->private_store, guid, data);
+    return hr;
 }
 
 static void STDMETHODCALLTYPE d3d11_texture2d_GetType(ID3D11Texture2D *iface,
@@ -762,7 +747,6 @@ static void STDMETHODCALLTYPE d3d_texture2d_wined3d_object_released(void *parent
     struct d3d_texture2d *texture = parent;
 
     if (texture->dxgi_resource) IUnknown_Release(texture->dxgi_resource);
-    wined3d_private_store_cleanup(&texture->private_store);
     heap_free(texture);
 }
 
@@ -994,7 +978,6 @@ HRESULT d3d_texture2d_create(struct d3d_device *device, const D3D11_TEXTURE2D_DE
     texture->ID3D10Texture2D_iface.lpVtbl = &d3d10_texture2d_vtbl;
     texture->refcount = 1;
     wined3d_mutex_lock();
-    wined3d_private_store_init(&texture->private_store);
     texture->desc = *desc;
 
     wined3d_desc.resource_type = WINED3D_RTYPE_TEXTURE_2D;
@@ -1022,7 +1005,6 @@ HRESULT d3d_texture2d_create(struct d3d_device *device, const D3D11_TEXTURE2D_DE
             texture, &d3d_texture2d_wined3d_parent_ops, &texture->wined3d_texture)))
     {
         WARN("Failed to create wined3d texture, hr %#lx.\n", hr);
-        wined3d_private_store_cleanup(&texture->private_store);
         heap_free(texture);
         wined3d_mutex_unlock();
         if (hr == WINED3DERR_NOTAVAILABLE || hr == WINED3DERR_INVALIDCALL)




More information about the wine-cvs mailing list