From fdb62cbaebb68a784993276cb80de1f73f6466b1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20D=C3=B6singer?= Date: Sat, 6 Jan 2007 18:21:35 +0100 Subject: [PATCH] wined3d: Do not activate vertex shaders needlessly. --- dlls/wined3d/state.c | 21 ++++++++++++--------- dlls/wined3d/wined3d_private.h | 1 + 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c index cdb250e59ed..0e36a083ebe 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -2675,19 +2675,22 @@ static void vertexdeclaration(DWORD state, IWineD3DStateBlockImpl *stateblock) { IWineD3DVertexShader_CompileShader(stateblock->vertexShader); } - /* Vertex and pixel shaders are applied together for now, so let the last dirty state do the - * application - */ - if(!isStateDirty(device, STATE_PIXELSHADER)) { + if(useVertexShaderFunction || device->last_was_vshader) { BOOL usePixelShaderFunction = device->ps_selected_mode != SHADER_NONE && - stateblock->pixelShader && - ((IWineD3DPixelShaderImpl *)stateblock->pixelShader)->baseShader.function; + stateblock->pixelShader && + ((IWineD3DPixelShaderImpl *)stateblock->pixelShader)->baseShader.function; - device->shader_backend->shader_select((IWineD3DDevice *) device, usePixelShaderFunction, useVertexShaderFunction); + /* Vertex and pixel shaders are applied together for now, so let the last dirty state do the + * application + */ + if(!isStateDirty(device, STATE_PIXELSHADER)) { + device->shader_backend->shader_select((IWineD3DDevice *) device, usePixelShaderFunction, useVertexShaderFunction); - if(!isStateDirty(stateblock->wineD3DDevice, STATE_VERTEXSHADERCONSTANT) && (useVertexShaderFunction || usePixelShaderFunction)) { - shaderconstant(STATE_VERTEXSHADERCONSTANT, stateblock); + if(!isStateDirty(stateblock->wineD3DDevice, STATE_VERTEXSHADERCONSTANT) && (useVertexShaderFunction || usePixelShaderFunction)) { + shaderconstant(STATE_VERTEXSHADERCONSTANT, stateblock); + } } + device->last_was_vshader = useVertexShaderFunction; } if(updateFog) { diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 27f95c8467f..83a8f17e402 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -583,6 +583,7 @@ typedef struct IWineD3DDeviceImpl BOOL last_was_notclipped; BOOL untransformed; BOOL last_was_pshader; + BOOL last_was_vshader; BOOL last_was_foggy_shader; BOOL namedArraysLoaded, numberedArraysLoaded; -- 2.11.4.GIT