[1/2] wined3d: Always select the correct shader pair in the
vertexdeclaration() state handler
H. Verbeet
hverbeet at gmail.com
Tue Feb 13 12:53:11 CST 2007
On 13/02/07, H. Verbeet <hverbeet at gmail.com> wrote:
> Changelog:
> - Always select the correct shader pair in the vertexdeclaration()
> state handler
>
This conflicts with 380930dc54337ba2e486e295714edb13c569f3ea, use the
attached patch instead.
-------------- next part --------------
---
dlls/wined3d/state.c | 25 +++++++++++--------------
1 files changed, 11 insertions(+), 14 deletions(-)
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index ee5ba98..b4a1ab9 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -2663,6 +2663,8 @@ static inline void handleStreams(IWineD3DStateBlockImpl *stateblock, BOOL useVer
static void vertexdeclaration(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext *context) {
BOOL useVertexShaderFunction = FALSE, updateFog = FALSE;
+ BOOL usePixelShaderFunction = stateblock->wineD3DDevice->ps_selected_mode != SHADER_NONE && stateblock->pixelShader
+ && ((IWineD3DPixelShaderImpl *)stateblock->pixelShader)->baseShader.function;
BOOL transformed;
/* Some stuff is in the device until we have per context tracking */
IWineD3DDeviceImpl *device = stateblock->wineD3DDevice;
@@ -2758,24 +2760,19 @@ static void vertexdeclaration(DWORD state, IWineD3DStateBlockImpl *stateblock, W
IWineD3DVertexShader_CompileShader(stateblock->vertexShader);
}
- if(useVertexShaderFunction || context->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(context, STATE_PIXELSHADER)) {
- 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(context, STATE_PIXELSHADER)) {
+ device->shader_backend->shader_select((IWineD3DDevice *)device, usePixelShaderFunction, useVertexShaderFunction);
- if(!isStateDirty(context, STATE_VERTEXSHADERCONSTANT) && (useVertexShaderFunction || usePixelShaderFunction)) {
- shaderconstant(STATE_VERTEXSHADERCONSTANT, stateblock, context);
- }
+ if (!isStateDirty(context, STATE_VERTEXSHADERCONSTANT) && (useVertexShaderFunction || usePixelShaderFunction)) {
+ shaderconstant(STATE_VERTEXSHADERCONSTANT, stateblock, context);
}
- context->last_was_vshader = useVertexShaderFunction;
}
+ context->last_was_vshader = useVertexShaderFunction;
+
if(updateFog) {
state_fog(STATE_RENDER(WINED3DRS_FOGENABLE), stateblock, context);
}
More information about the wine-patches
mailing list