Commit 85aa8ab8 authored by Ivan Gyurdiev's avatar Ivan Gyurdiev Committed by Alexandre Julliard

wined3d: Add position_transformed flag to Strided data format.

parent fc2611d4
...@@ -3076,7 +3076,9 @@ IDirect3DDeviceImpl_7_DrawPrimitiveStrided(IDirect3DDevice7 *iface, ...@@ -3076,7 +3076,9 @@ IDirect3DDeviceImpl_7_DrawPrimitiveStrided(IDirect3DDevice7 *iface,
if (VertexType & D3DFVF_XYZRHW) if (VertexType & D3DFVF_XYZRHW)
{ {
WineD3DStrided.u.s.position.dwType = WINED3DDECLTYPE_FLOAT4; WineD3DStrided.u.s.position.dwType = WINED3DDECLTYPE_FLOAT4;
} WineD3DStrided.u.s.position_transformed = TRUE;
} else
WineD3DStrided.u.s.position_transformed = FALSE;
} }
if(VertexType & D3DFVF_NORMAL) if(VertexType & D3DFVF_NORMAL)
......
...@@ -117,7 +117,6 @@ static void WINAPI IWineD3DVertexBufferImpl_PreLoad(IWineD3DVertexBuffer *if ...@@ -117,7 +117,6 @@ static void WINAPI IWineD3DVertexBufferImpl_PreLoad(IWineD3DVertexBuffer *if
BOOL useVertexShaderFunction = FALSE, fixup = FALSE; BOOL useVertexShaderFunction = FALSE, fixup = FALSE;
BYTE *data; BYTE *data;
UINT i; UINT i;
DWORD declFVF; /* Not interested */
UINT start = 0, end = 0, stride = 0; UINT start = 0, end = 0, stride = 0;
if(This->Flags & VBFLAG_DIRTY) { if(This->Flags & VBFLAG_DIRTY) {
...@@ -173,7 +172,6 @@ static void WINAPI IWineD3DVertexBufferImpl_PreLoad(IWineD3DVertexBuffer *if ...@@ -173,7 +172,6 @@ static void WINAPI IWineD3DVertexBufferImpl_PreLoad(IWineD3DVertexBuffer *if
useVertexShaderFunction, useVertexShaderFunction,
&strided, &strided,
0, 0,
&declFVF,
&fixup); &fixup);
This->Flags &= ~VBFLAG_LOAD; This->Flags &= ~VBFLAG_LOAD;
...@@ -198,7 +196,7 @@ static void WINAPI IWineD3DVertexBufferImpl_PreLoad(IWineD3DVertexBuffer *if ...@@ -198,7 +196,7 @@ static void WINAPI IWineD3DVertexBufferImpl_PreLoad(IWineD3DVertexBuffer *if
} }
/* If any data that needs conversion has changed we have to reload the whole buffer */ /* If any data that needs conversion has changed we have to reload the whole buffer */
if( ( (This->strided.u.s.position.dwType != WINED3DDECLTYPE_FLOAT4 || strided.u.s.position.dwType != WINED3DDECLTYPE_FLOAT4) && if( ( (This->strided.u.s.position_transformed || strided.u.s.position_transformed) &&
This->strided.u.s.position.lpData != strided.u.s.position.lpData) || This->strided.u.s.position.lpData != strided.u.s.position.lpData) ||
!(This->strided.u.s.diffuse.lpData == strided.u.s.diffuse.lpData || strided.u.s.diffuse.VBO != This->vbo) || !(This->strided.u.s.diffuse.lpData == strided.u.s.diffuse.lpData || strided.u.s.diffuse.VBO != This->vbo) ||
!(This->strided.u.s.specular.lpData == strided.u.s.specular.lpData || strided.u.s.specular.VBO != This->vbo) ) { !(This->strided.u.s.specular.lpData == strided.u.s.specular.lpData || strided.u.s.specular.VBO != This->vbo) ) {
...@@ -240,8 +238,9 @@ static void WINAPI IWineD3DVertexBufferImpl_PreLoad(IWineD3DVertexBuffer *if ...@@ -240,8 +238,9 @@ static void WINAPI IWineD3DVertexBufferImpl_PreLoad(IWineD3DVertexBuffer *if
memcpy(data, This->resource.allocatedMemory + start, end - start); memcpy(data, This->resource.allocatedMemory + start, end - start);
for(i = 0; i < ( end - start) / stride; i++) { for(i = 0; i < ( end - start) / stride; i++) {
if(strided.u.s.position.dwType == WINED3DDECLTYPE_FLOAT4 ) { if(strided.u.s.position_transformed) {
float *p = (float *) (((int) This->resource.allocatedMemory + (int) strided.u.s.position.lpData) + start + i * stride); float *p = (float *) (((int) This->resource.allocatedMemory +
(int) strided.u.s.position.lpData) + start + i * stride);
float x, y, z, w; float x, y, z, w;
/* rhw conversion like in drawStridedSlow */ /* rhw conversion like in drawStridedSlow */
......
...@@ -366,7 +366,6 @@ void primitiveDeclarationConvertToStridedData( ...@@ -366,7 +366,6 @@ void primitiveDeclarationConvertToStridedData(
BOOL useVertexShaderFunction, BOOL useVertexShaderFunction,
WineDirect3DVertexStridedData *strided, WineDirect3DVertexStridedData *strided,
LONG BaseVertexIndex, LONG BaseVertexIndex,
DWORD *fvf,
BOOL *fixup); BOOL *fixup);
void primitiveConvertFVFtoOffset(DWORD thisFVF, void primitiveConvertFVFtoOffset(DWORD thisFVF,
......
...@@ -905,6 +905,7 @@ typedef struct WineDirect3DVertexStridedData { ...@@ -905,6 +905,7 @@ typedef struct WineDirect3DVertexStridedData {
union { union {
struct { struct {
WineDirect3DStridedData position; WineDirect3DStridedData position;
BOOL position_transformed;
WineDirect3DStridedData blendWeights; WineDirect3DStridedData blendWeights;
WineDirect3DStridedData blendMatrixIndices; WineDirect3DStridedData blendMatrixIndices;
WineDirect3DStridedData normal; WineDirect3DStridedData normal;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment