[2/10] WineD3D: Pass the user pointer strided structure via the
device implementation
Stefan Dösinger
stefandoesinger at gmx.at
Tue Jan 2 14:13:28 CST 2007
The vertexdeclaration state will need it, and it can't access the
parameters passed to drawPrimitive().
It is argueable if this belongs to the device or the stateblock.
WineD3D unsets it after drawing, so it is not really a permanent
state, it doesn't have a setter or a getter, so I put it into the
device.
-------------- next part --------------
From b74aa634f3aefb4c3ec437c9e8a1db7158edfe77 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Stefan_D=C3=B6singer?= <stefan at imac.local>
Date: Tue, 2 Jan 2007 19:08:39 +0100
Subject: [PATCH] WineD3D: Pass the user pointer strided information via the device implementation
---
dlls/wined3d/device.c | 12 +++++++-----
dlls/wined3d/drawprim.c | 7 +++----
dlls/wined3d/wined3d_private.h | 4 ++--
3 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index d5a1f1e..29279a0 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -4699,7 +4699,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl
if(StartVertex - This->stateBlock->baseVertexIndex < 0) ERR("Drawing negative\n");
/* Account for the loading offset due to index buffers. Instead of reloading all sources correct it with the startvertex parameter */
drawPrimitive(iface, PrimitiveType, PrimitiveCount, StartVertex - This->stateBlock->baseVertexIndex, 0/* NumVertices */, -1 /* indxStart */,
- 0 /* indxSize */, NULL /* indxData */, 0 /* minIndex */, NULL);
+ 0 /* indxSize */, NULL /* indxData */, 0 /* minIndex */);
return WINED3D_OK;
}
@@ -4728,7 +4728,7 @@ static HRESULT WINAPI IWineD3DDeviceIm
}
drawPrimitive(iface, PrimitiveType, primCount, 0, NumVertices, startIndex,
- idxStride, ((IWineD3DIndexBufferImpl *) pIB)->resource.allocatedMemory, minIndex, NULL);
+ idxStride, ((IWineD3DIndexBufferImpl *) pIB)->resource.allocatedMemory, minIndex);
return WINED3D_OK;
}
@@ -4753,7 +4753,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl
This->stateBlock->streamIsUP = TRUE;
drawPrimitive(iface, PrimitiveType, PrimitiveCount, -This->stateBlock->baseVertexIndex /* start vertex */, 0 /* NumVertices */,
- 0 /* indxStart*/, 0 /* indxSize*/, NULL /* indxData */, 0 /* indxMin */, NULL);
+ 0 /* indxStart*/, 0 /* indxSize*/, NULL /* indxData */, 0 /* indxMin */);
/* MSDN specifies stream zero settings must be set to NULL */
This->stateBlock->streamStride[0] = 0;
@@ -4800,7 +4800,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl
/* Set to 0 as per msdn. Do it now due to the stream source loading during drawPrimitive */
This->stateBlock->baseVertexIndex = 0;
- drawPrimitive(iface, PrimitiveType, PrimitiveCount, 0 /* vertexStart */, NumVertices, 0 /* indxStart */, idxStride, pIndexData, MinVertexIndex, NULL);
+ drawPrimitive(iface, PrimitiveType, PrimitiveCount, 0 /* vertexStart */, NumVertices, 0 /* indxStart */, idxStride, pIndexData, MinVertexIndex);
/* MSDN specifies stream zero settings and index buffer must be set to NULL */
This->stateBlock->streamSource[0] = NULL;
@@ -4819,7 +4819,9 @@ static HRESULT WINAPI IWineD3DDeviceImpl
*/
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_VDECL);
This->stateBlock->baseVertexIndex = 0;
- drawPrimitive(iface, PrimitiveType, PrimitiveCount, 0, 0, 0, 0, NULL, 0, DrawPrimStrideData);
+ This->up_strided = DrawPrimStrideData;
+ drawPrimitive(iface, PrimitiveType, PrimitiveCount, 0, 0, 0, 0, NULL, 0);
+ This->up_strided = NULL;
return WINED3D_OK;
}
/* Yet another way to update a texture, some apps use this to load default textures instead of using surface/texture lock/unlock */
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index 4e39ae1..23c2d88 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -1936,8 +1936,7 @@ void drawPrimitive(IWineD3DDevice *iface
long StartIdx,
short idxSize,
const void *idxData,
- int minIndex,
- WineDirect3DVertexStridedData *DrawPrimStrideData) {
+ int minIndex) {
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
BOOL useVertexShaderFunction = FALSE;
@@ -1991,12 +1990,12 @@ void drawPrimitive(IWineD3DDevice *iface
}
This->depth_copy_state = WINED3D_DCS_INITIAL;
- if(DrawPrimStrideData) {
+ if(This->up_strided) {
/* Note: this is a ddraw fixed-function code path */
TRACE("================ Strided Input ===================\n");
- memcpy(&This->strided_streams, DrawPrimStrideData, sizeof(This->strided_streams));
+ memcpy(&This->strided_streams, This->up_strided, sizeof(This->strided_streams));
drawPrimitiveTraceDataLocations(&This->strided_streams);
fixup = FALSE;
}
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 37f4664..9ca13c1 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -382,8 +382,7 @@ void drawPrimitive(IWineD3DDevice *iface
long StartIdx,
short idxBytes,
const void *idxData,
- int minIndex,
- WineDirect3DVertexStridedData *DrawPrimStrideData);
+ int minIndex);
void primitiveConvertToStridedData(IWineD3DDevice *iface, WineDirect3DVertexStridedData *strided, BOOL *fixup);
@@ -669,6 +668,7 @@ #define NEEDS_DI
/* Stream source management */
WineDirect3DVertexStridedData strided_streams;
+ WineDirect3DVertexStridedData *up_strided;
} IWineD3DDeviceImpl;
--
1.4.2.4
More information about the wine-patches
mailing list