From a008003ccc330a69212e4fd6c1c5e5780bd68c23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20D=C3=B6singer?= Date: Tue, 19 Dec 2006 23:22:48 +0100 Subject: [PATCH] wined3d: Catch nop pixel shader changes. --- dlls/wined3d/device.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 1bc25c2a92b..dd42bf7053e 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -3700,6 +3700,11 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetPixelShader(IWineD3DDevice *iface, I return WINED3D_OK; } + if(pShader == oldShader) { + TRACE("App is setting the old pixel shader over, nothing to do\n"); + return WINED3D_OK; + } + TRACE("(%p) : setting pShader(%p)\n", This, pShader); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_PIXELSHADER); return WINED3D_OK; @@ -6033,10 +6038,13 @@ static void device_reapply_stateblock(IWineD3DDeviceImpl* This) { /* Temporaryily mark all render states dirty to force reapplication * until the context management for is integrated with the state management + * The same for the pixel shader, sampler states and texture stage states are marked + * dirty my StateBlock::Apply already */ for(i = 1; i < WINEHIGHEST_RENDER_STATE; i++) { IWineD3DDeviceImpl_MarkStateDirty(This, STATE_RENDER(i)); } + IWineD3DDeviceImpl_MarkStateDirty(This, STATE_PIXELSHADER); /* Restore recording */ This->isRecordingState = oldRecording;