[PATCH] wined3d: Do not try to use not available texture stages in set_tex_op_nvr

Henri Verbeet hverbeet at gmail.com
Wed Jan 6 04:16:22 CST 2010


2010/1/5 Christian Costa <titan.costa at wanadoo.fr>:
> Here it is. The fixme message is :
> fixme:d3d:set_tex_op_nvrc >>>>>>>>>>>>>>>>> GL_INVALID_ENUM (0x500) from
> set_tex_op_nvrc() @ nvidia_texture_shader.c / 460
>
Looks like the context creation code invalidates those states simply
because they exist. Does the attached patch make the errors go away?
-------------- next part --------------
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index adb426b..10fa94f 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -5733,6 +5733,7 @@ HRESULT compile_state_table(struct StateEntry *StateTable, APPLYSTATEFUNC **dev_
     APPLYSTATEFUNC multistate_funcs[STATE_HIGHEST + 1][3];
     const struct StateEntryTemplate *cur;
     BOOL set[STATE_HIGHEST + 1];
+    unsigned int start, last;
 
     memset(multistate_funcs, 0, sizeof(multistate_funcs));
 
@@ -5824,6 +5825,14 @@ HRESULT compile_state_table(struct StateEntry *StateTable, APPLYSTATEFUNC **dev_
         }
     }
 
+    start = STATE_TEXTURESTAGE(gl_info->limits.texture_stages, 0);
+    last = STATE_TEXTURESTAGE(MAX_TEXTURES - 1, WINED3D_HIGHEST_TEXTURE_STATE);
+    for (i = start; i <= last; ++i)
+    {
+        StateTable[i].representative = 0;
+        StateTable[i].apply = state_undefined;
+    }
+
     return WINED3D_OK;
 
 out_of_mem:


More information about the wine-devel mailing list