wined3d: Update refcounts when storing references in IWineD3DStateBlockImpl_Capture.
Move TRACEs to the top of their code blocks.
diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c
index c1e3e94..1ef2a52 100644
--- a/dlls/wined3d/stateblock.c
+++ b/dlls/wined3d/stateblock.c
@@ -148,8 +148,16 @@
/* Recorded => Only update 'changed' values */
if (This->vertexShader != targetStateBlock->vertexShader) {
+ TRACE("Updating vertex shader from %p to %p\n", This->vertexShader, targetStateBlock->vertexShader);
+
+ if (targetStateBlock->vertexShader) {
+ IWineD3DVertexShader_AddRef(targetStateBlock->vertexShader);
+ }
+ if (This->vertexShader) {
+ IWineD3DVertexShader_Release(This->vertexShader);
+ }
+
This->vertexShader = targetStateBlock->vertexShader;
- TRACE("Updating vertex shader to %p\n", targetStateBlock->vertexShader);
}
/* Vertex Shader Constants */
@@ -204,8 +212,16 @@
/* Recorded => Only update 'changed' values */
if (This->pixelShader != targetStateBlock->pixelShader) {
+ TRACE("Updating pixel shader from %p to %p\n", This->pixelShader, targetStateBlock->pixelShader);
+
+ if (targetStateBlock->pixelShader) {
+ IWineD3DPixelShader_AddRef(targetStateBlock->pixelShader);
+ }
+ if (This->pixelShader) {
+ IWineD3DPixelShader_Release(This->pixelShader);
+ }
+
This->pixelShader = targetStateBlock->pixelShader;
- TRACE("Updating pixrl shader to %p\n", targetStateBlock->pixelShader);
}
/* Pixel Shader Constants */
@@ -244,6 +260,15 @@
}
if(This->set.vertexDecl && This->vertexDecl != targetStateBlock->vertexDecl){
+ TRACE("Updating vertex declaration from %p to %p\n", This->vertexDecl, targetStateBlock->vertexDecl);
+
+ if (targetStateBlock->vertexDecl) {
+ IWineD3DVertexDeclaration_AddRef(targetStateBlock->vertexDecl);
+ }
+ if (This->vertexDecl) {
+ IWineD3DVertexDeclaration_Release(This->vertexDecl);
+ }
+
This->vertexDecl = targetStateBlock->vertexDecl;
}