Stefan Dösinger : wined3d: Keep track of shaders.

Alexandre Julliard julliard at winehq.org
Mon Jan 14 09:33:22 CST 2008


Module: wine
Branch: master
Commit: 09bf3d5aeaa27f0e1c6c0244e4237c3ab7d20757
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=09bf3d5aeaa27f0e1c6c0244e4237c3ab7d20757

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Tue Jan  8 20:45:59 2008 +0100

wined3d: Keep track of shaders.

---

 dlls/wined3d/baseshader.c      |    1 +
 dlls/wined3d/device.c          |    2 ++
 dlls/wined3d/directx.c         |    1 +
 dlls/wined3d/wined3d_private.h |    2 ++
 4 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index 0a0c10e..858bf7f 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -1142,6 +1142,7 @@ ULONG  WINAPI IWineD3DBaseShaderImpl_Release(IWineD3DBaseShader *iface) {
         shader_delete_constant_list(&This->baseShader.constantsF);
         shader_delete_constant_list(&This->baseShader.constantsB);
         shader_delete_constant_list(&This->baseShader.constantsI);
+        list_remove(&This->baseShader.shader_list_entry);
         HeapFree(GetProcessHeap(), 0, This);
     }
     return ref;
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index e5721d1..e0e3bf2 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -1883,6 +1883,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexShader(IWineD3DDevice *ifac
         IWineD3DVertexShader_Release(*ppVertexShader);
         return WINED3DERR_INVALIDCALL;
     }
+    list_add_head(&This->shaders, &object->baseShader.shader_list_entry);
 
     return WINED3D_OK;
 }
@@ -1897,6 +1898,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreatePixelShader(IWineD3DDevice *iface
     hr = IWineD3DPixelShader_SetFunction(*ppPixelShader, pFunction);
     if (WINED3D_OK == hr) {
         TRACE("(%p) : Created Pixel shader %p\n", This, *ppPixelShader);
+        list_add_head(&This->shaders, &object->baseShader.shader_list_entry);
     } else {
         WARN("(%p) : Failed to create pixel shader\n", This);
     }
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index aac3c7b..f1c7100 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -2742,6 +2742,7 @@ static HRESULT  WINAPI IWineD3DImpl_CreateDevice(IWineD3D *iface, UINT Adapter,
     IWineD3D_AddRef(object->wineD3D);
     object->parent  = parent;
     list_init(&object->resources);
+    list_init(&object->shaders);
 
     if(This->dxVersion == 7) {
         object->surface_alignment = 8;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 41c036d..7c95275 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -675,6 +675,7 @@ struct IWineD3DDeviceImpl
     UINT                    NumberOfSwapChains;
 
     struct list             resources; /* a linked list to track resources created by the device */
+    struct list             shaders;   /* a linked list to track shaders (pixel and vertex)      */
 
     /* Render Target Support */
     IWineD3DSurface       **render_targets;
@@ -1970,6 +1971,7 @@ typedef struct IWineD3DBaseShaderClass
 
     /* Pointer to the parent device */
     IWineD3DDevice *device;
+    struct list     shader_list_entry;
 
 } IWineD3DBaseShaderClass;
 




More information about the wine-cvs mailing list