wined3d: Do not activate vertex shaders needlessly.
This commit is contained in:
parent
09ab812e79
commit
fdb62cbaeb
|
@ -2675,20 +2675,23 @@ 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;
|
||||
|
||||
/* 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);
|
||||
}
|
||||
}
|
||||
device->last_was_vshader = useVertexShaderFunction;
|
||||
}
|
||||
|
||||
if(updateFog) {
|
||||
state_fog(STATE_RENDER(WINED3DRS_FOGENABLE), stateblock);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue