wined3d: Cleanup the pixelshader() state handler a little bit.
This commit is contained in:
parent
1636bc1aec
commit
2a309f503d
|
@ -1905,9 +1905,11 @@ static void shaderconstant(DWORD state, IWineD3DStateBlockImpl *stateblock, Wine
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pixelshader(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext *context) {
|
static void pixelshader(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext *context) {
|
||||||
|
BOOL use_ps = stateblock->pixelShader && ((IWineD3DPixelShaderImpl *)stateblock->pixelShader)->baseShader.function != NULL;
|
||||||
|
BOOL use_vs = stateblock->vertexShader && ((IWineD3DVertexShaderImpl *)stateblock->vertexShader)->baseShader.function != NULL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if(stateblock->pixelShader && ((IWineD3DPixelShaderImpl *) stateblock->pixelShader)->baseShader.function != NULL) {
|
if (use_ps) {
|
||||||
if(!context->last_was_pshader) {
|
if(!context->last_was_pshader) {
|
||||||
/* Former draw without a pixel shader, some samplers
|
/* Former draw without a pixel shader, some samplers
|
||||||
* may be disabled because of WINED3DTSS_COLOROP = WINED3DTOP_DISABLE
|
* may be disabled because of WINED3DTSS_COLOROP = WINED3DTOP_DISABLE
|
||||||
|
@ -1926,18 +1928,6 @@ static void pixelshader(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D
|
||||||
|
|
||||||
/* Compile and bind the shader */
|
/* Compile and bind the shader */
|
||||||
IWineD3DPixelShader_CompileShader(stateblock->pixelShader);
|
IWineD3DPixelShader_CompileShader(stateblock->pixelShader);
|
||||||
|
|
||||||
if(!isStateDirty(context, StateTable[STATE_VSHADER].representative)) {
|
|
||||||
stateblock->wineD3DDevice->shader_backend->shader_select(
|
|
||||||
(IWineD3DDevice *) stateblock->wineD3DDevice,
|
|
||||||
TRUE,
|
|
||||||
!stateblock->vertexShader ? FALSE : ((IWineD3DVertexShaderImpl *) stateblock->vertexShader)->baseShader.function != NULL);
|
|
||||||
|
|
||||||
if(!isStateDirty(context, STATE_VERTEXSHADERCONSTANT)) {
|
|
||||||
shaderconstant(STATE_VERTEXSHADERCONSTANT, stateblock, context);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
context->last_was_pshader = TRUE;
|
|
||||||
} else {
|
} else {
|
||||||
/* Disabled the pixel shader - color ops weren't applied
|
/* Disabled the pixel shader - color ops weren't applied
|
||||||
* while it was enabled, so re-apply them.
|
* while it was enabled, so re-apply them.
|
||||||
|
@ -1947,19 +1937,17 @@ static void pixelshader(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D
|
||||||
tex_colorop(STATE_TEXTURESTAGE(i, WINED3DTSS_COLOROP), stateblock, context);
|
tex_colorop(STATE_TEXTURESTAGE(i, WINED3DTSS_COLOROP), stateblock, context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
context->last_was_pshader = FALSE;
|
}
|
||||||
|
|
||||||
if(!isStateDirty(context, StateTable[STATE_VSHADER].representative)) {
|
if(!isStateDirty(context, StateTable[STATE_VSHADER].representative)) {
|
||||||
stateblock->wineD3DDevice->shader_backend->shader_select(
|
stateblock->wineD3DDevice->shader_backend->shader_select((IWineD3DDevice *)stateblock->wineD3DDevice, use_ps, use_vs);
|
||||||
(IWineD3DDevice *) stateblock->wineD3DDevice,
|
|
||||||
FALSE,
|
|
||||||
!stateblock->vertexShader ? FALSE : ((IWineD3DVertexShaderImpl *) stateblock->vertexShader)->baseShader.function != NULL);
|
|
||||||
|
|
||||||
if(!isStateDirty(context, STATE_VERTEXSHADERCONSTANT)) {
|
if(!isStateDirty(context, STATE_VERTEXSHADERCONSTANT) && (use_vs || use_ps)) {
|
||||||
shaderconstant(STATE_VERTEXSHADERCONSTANT, stateblock, context);
|
shaderconstant(STATE_VERTEXSHADERCONSTANT, stateblock, context);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
context->last_was_pshader = use_ps;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void transform_world(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext *context) {
|
static void transform_world(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext *context) {
|
||||||
|
|
Loading…
Reference in New Issue