wined3d: Keep track of shaders.
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 @@
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 @@
IWineD3DVertexShader_Release(*ppVertexShader);
return WINED3DERR_INVALIDCALL;
}
+ list_add_head(&This->shaders, &object->baseShader.shader_list_entry);
return WINED3D_OK;
}
@@ -1897,6 +1898,7 @@
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 @@
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 @@
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 @@
/* Pointer to the parent device */
IWineD3DDevice *device;
+ struct list shader_list_entry;
} IWineD3DBaseShaderClass;