WINED3D: D3d8 shaders can have a NULL pFunction,
but a valid vertex declaration.
H. Verbeet
hverbeet at gmail.com
Mon Jul 24 17:50:43 CDT 2006
In d3d8 shaders can have a NULL pFunction, but a valid vertex
declaration. This has the same effect as just setting a vertex
declaration without a shader in d3d9. This patch fixes a regression in
U2:XMP, Battlefield 1942 and probably others.
-------------- next part --------------
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index b9dd6f8..bb48982 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -423,7 +423,7 @@ void primitiveDeclarationConvertToStride
int reg;
/* Locate the vertex declaration */
- if (useVertexShaderFunction && ((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->vertexDeclaration) {
+ if (This->stateBlock->vertexShader && ((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->vertexDeclaration) {
TRACE("Using vertex declaration from shader\n");
vertexDeclaration = (IWineD3DVertexDeclarationImpl *)((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->vertexDeclaration;
} else {
@@ -2091,7 +2091,7 @@ void drawPrimitive(IWineD3DDevice *iface
fixup = FALSE;
}
- else if (This->stateBlock->vertexDecl != NULL || useVertexShaderFunction) {
+ else if (This->stateBlock->vertexDecl || This->stateBlock->vertexShader) {
/* Note: This is a fixed function or shader codepath.
* This means it must handle both types of strided data.
diff --git a/dlls/wined3d/vertexbuffer.c b/dlls/wined3d/vertexbuffer.c
index b67a1ca..cea45fd 100644
--- a/dlls/wined3d/vertexbuffer.c
+++ b/dlls/wined3d/vertexbuffer.c
@@ -222,7 +222,7 @@ static void WINAPI IWineD3DVertexBuf
/* Check against updated declarations */
memset(&strided, 0, sizeof(strided));
- if(device->stateBlock->vertexDecl != NULL) {
+ if(device->stateBlock->vertexDecl || device->stateBlock->vertexShader) {
/* Check against the stream offset and make sure it is 0 */
This->Flags |= VBFLAG_LOAD;
More information about the wine-patches
mailing list