Commit 98a91e84 authored by Henri Verbeet's avatar Henri Verbeet Committed by Alexandre Julliard

wined3d: Move base vertex state to wined3d_state.

parent 902630ef
...@@ -220,12 +220,13 @@ void device_stream_info_from_declaration(IWineD3DDeviceImpl *This, ...@@ -220,12 +220,13 @@ void device_stream_info_from_declaration(IWineD3DDeviceImpl *This,
* sources. In most sane cases the pointer - offset will still be > 0, otherwise it will wrap * sources. In most sane cases the pointer - offset will still be > 0, otherwise it will wrap
* around to some big value. Hope that with the indices, the driver wraps it back internally. If * around to some big value. Hope that with the indices, the driver wraps it back internally. If
* not, drawStridedSlow is needed, including a vertex buffer path. */ * not, drawStridedSlow is needed, including a vertex buffer path. */
if (This->stateBlock->loadBaseVertexIndex < 0) if (This->stateBlock->state.load_base_vertex_index < 0)
{ {
WARN("loadBaseVertexIndex is < 0 (%d), not using vbos\n", This->stateBlock->loadBaseVertexIndex); WARN("load_base_vertex_index is < 0 (%d), not using VBOs.\n",
This->stateBlock->state.load_base_vertex_index);
buffer_object = 0; buffer_object = 0;
data = buffer_get_sysmem(buffer, &This->adapter->gl_info); data = buffer_get_sysmem(buffer, &This->adapter->gl_info);
if ((UINT_PTR)data < -This->stateBlock->loadBaseVertexIndex * stride) if ((UINT_PTR)data < -This->stateBlock->state.load_base_vertex_index * stride)
{ {
FIXME("System memory vertex data load offset is negative!\n"); FIXME("System memory vertex data load offset is negative!\n");
} }
...@@ -2974,12 +2975,13 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetBaseVertexIndex(IWineD3DDevice *ifac ...@@ -2974,12 +2975,13 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetBaseVertexIndex(IWineD3DDevice *ifac
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
TRACE("(%p)->(%d)\n", This, BaseIndex); TRACE("(%p)->(%d)\n", This, BaseIndex);
if(This->updateStateBlock->baseVertexIndex == BaseIndex) { if (This->updateStateBlock->state.base_vertex_index == BaseIndex)
{
TRACE("Application is setting the old value over, nothing to do\n"); TRACE("Application is setting the old value over, nothing to do\n");
return WINED3D_OK; return WINED3D_OK;
} }
This->updateStateBlock->baseVertexIndex = BaseIndex; This->updateStateBlock->state.base_vertex_index = BaseIndex;
if (This->isRecordingState) { if (This->isRecordingState) {
TRACE("Recording... not performing anything\n"); TRACE("Recording... not performing anything\n");
...@@ -2994,7 +2996,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetBaseVertexIndex(IWineD3DDevice *ifac ...@@ -2994,7 +2996,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetBaseVertexIndex(IWineD3DDevice *ifac
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
TRACE("(%p) : base_index %p\n", This, base_index); TRACE("(%p) : base_index %p\n", This, base_index);
*base_index = This->stateBlock->baseVertexIndex; *base_index = This->stateBlock->state.base_vertex_index;
TRACE("Returning %u\n", *base_index); TRACE("Returning %u\n", *base_index);
...@@ -4687,9 +4689,9 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitive(IWineD3DDevice *iface, UI ...@@ -4687,9 +4689,9 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitive(IWineD3DDevice *iface, UI
This->stateBlock->state.user_stream = FALSE; This->stateBlock->state.user_stream = FALSE;
} }
if (This->stateBlock->loadBaseVertexIndex) if (This->stateBlock->state.load_base_vertex_index)
{ {
This->stateBlock->loadBaseVertexIndex = 0; This->stateBlock->state.load_base_vertex_index = 0;
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_STREAMSRC); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_STREAMSRC);
} }
/* Account for the loading offset due to index buffers. Instead of reloading all sources correct it with the startvertex parameter */ /* Account for the loading offset due to index buffers. Instead of reloading all sources correct it with the startvertex parameter */
...@@ -4735,8 +4737,9 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitive(IWineD3DDevice *if ...@@ -4735,8 +4737,9 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitive(IWineD3DDevice *if
else else
idxStride = 4; idxStride = 4;
if(This->stateBlock->loadBaseVertexIndex != This->stateBlock->baseVertexIndex) { if (This->stateBlock->state.load_base_vertex_index != This->stateBlock->state.base_vertex_index)
This->stateBlock->loadBaseVertexIndex = This->stateBlock->baseVertexIndex; {
This->stateBlock->state.load_base_vertex_index = This->stateBlock->state.base_vertex_index;
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_STREAMSRC); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_STREAMSRC);
} }
...@@ -4770,7 +4773,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitiveUP(IWineD3DDevice *iface, ...@@ -4770,7 +4773,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitiveUP(IWineD3DDevice *iface,
stream->offset = 0; stream->offset = 0;
stream->stride = VertexStreamZeroStride; stream->stride = VertexStreamZeroStride;
This->stateBlock->state.user_stream = TRUE; This->stateBlock->state.user_stream = TRUE;
This->stateBlock->loadBaseVertexIndex = 0; This->stateBlock->state.load_base_vertex_index = 0;
/* TODO: Only mark dirty if drawing from a different UP address */ /* TODO: Only mark dirty if drawing from a different UP address */
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_STREAMSRC); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_STREAMSRC);
...@@ -4821,8 +4824,8 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitiveUP(IWineD3DDevice * ...@@ -4821,8 +4824,8 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitiveUP(IWineD3DDevice *
This->stateBlock->state.user_stream = TRUE; This->stateBlock->state.user_stream = TRUE;
/* Set to 0 as per msdn. Do it now due to the stream source loading during drawPrimitive */ /* Set to 0 as per msdn. Do it now due to the stream source loading during drawPrimitive */
This->stateBlock->baseVertexIndex = 0; This->stateBlock->state.base_vertex_index = 0;
This->stateBlock->loadBaseVertexIndex = 0; This->stateBlock->state.load_base_vertex_index = 0;
/* Mark the state dirty until we have nicer tracking of the stream source pointers */ /* Mark the state dirty until we have nicer tracking of the stream source pointers */
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_VDECL); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_VDECL);
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_INDEXBUFFER); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_INDEXBUFFER);
...@@ -4856,7 +4859,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitiveStrided(IWineD3DDevice *if ...@@ -4856,7 +4859,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitiveStrided(IWineD3DDevice *if
*/ */
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_VDECL); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_VDECL);
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_INDEXBUFFER); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_INDEXBUFFER);
This->stateBlock->baseVertexIndex = 0; This->stateBlock->state.base_vertex_index = 0;
This->up_strided = DrawPrimStrideData; This->up_strided = DrawPrimStrideData;
drawPrimitive(iface, vertex_count, 0, 0, NULL); drawPrimitive(iface, vertex_count, 0, 0, NULL);
This->up_strided = NULL; This->up_strided = NULL;
...@@ -4877,7 +4880,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitiveStrided(IWineD3DDev ...@@ -4877,7 +4880,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitiveStrided(IWineD3DDev
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_VDECL); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_VDECL);
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_INDEXBUFFER); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_INDEXBUFFER);
This->stateBlock->state.user_stream = TRUE; This->stateBlock->state.user_stream = TRUE;
This->stateBlock->baseVertexIndex = 0; This->stateBlock->state.base_vertex_index = 0;
This->up_strided = DrawPrimStrideData; This->up_strided = DrawPrimStrideData;
drawPrimitive(iface, vertex_count, 0 /* start_idx */, idxSize, pIndexData); drawPrimitive(iface, vertex_count, 0 /* start_idx */, idxSize, pIndexData);
This->up_strided = NULL; This->up_strided = NULL;
......
...@@ -70,7 +70,7 @@ static void drawStridedSlow(IWineD3DDevice *iface, const struct wined3d_context ...@@ -70,7 +70,7 @@ static void drawStridedSlow(IWineD3DDevice *iface, const struct wined3d_context
UINT vx_index; UINT vx_index;
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
const struct wined3d_stream_state *streams = This->stateBlock->state.streams; const struct wined3d_stream_state *streams = This->stateBlock->state.streams;
LONG SkipnStrides = startIdx + This->stateBlock->loadBaseVertexIndex; LONG SkipnStrides = startIdx + This->stateBlock->state.load_base_vertex_index;
BOOL pixelShader = use_ps(This->stateBlock); BOOL pixelShader = use_ps(This->stateBlock);
BOOL specular_fog = FALSE; BOOL specular_fog = FALSE;
const BYTE *texCoords[WINED3DDP_MAXTEXCOORD]; const BYTE *texCoords[WINED3DDP_MAXTEXCOORD];
...@@ -225,9 +225,9 @@ static void drawStridedSlow(IWineD3DDevice *iface, const struct wined3d_context ...@@ -225,9 +225,9 @@ static void drawStridedSlow(IWineD3DDevice *iface, const struct wined3d_context
{ {
/* Indexed so work out the number of strides to skip */ /* Indexed so work out the number of strides to skip */
if (idxSize == 2) if (idxSize == 2)
SkipnStrides = pIdxBufS[startIdx + vx_index] + This->stateBlock->loadBaseVertexIndex; SkipnStrides = pIdxBufS[startIdx + vx_index] + This->stateBlock->state.load_base_vertex_index;
else else
SkipnStrides = pIdxBufL[startIdx + vx_index] + This->stateBlock->loadBaseVertexIndex; SkipnStrides = pIdxBufL[startIdx + vx_index] + This->stateBlock->state.load_base_vertex_index;
} }
tmp_tex_mask = tex_mask; tmp_tex_mask = tex_mask;
...@@ -422,9 +422,9 @@ static void drawStridedSlowVs(IWineD3DDevice *iface, const struct wined3d_stream ...@@ -422,9 +422,9 @@ static void drawStridedSlowVs(IWineD3DDevice *iface, const struct wined3d_stream
{ {
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *) iface; IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *) iface;
const struct wined3d_gl_info *gl_info = &This->adapter->gl_info; const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
LONG SkipnStrides = startIdx + This->stateBlock->loadBaseVertexIndex; LONG SkipnStrides = startIdx + This->stateBlock->state.load_base_vertex_index;
const WORD *pIdxBufS = NULL; const DWORD *pIdxBufL = NULL;
const DWORD *pIdxBufL = NULL; const WORD *pIdxBufS = NULL;
UINT vx_index; UINT vx_index;
int i; int i;
IWineD3DStateBlockImpl *stateblock = This->stateBlock; IWineD3DStateBlockImpl *stateblock = This->stateBlock;
...@@ -455,9 +455,9 @@ static void drawStridedSlowVs(IWineD3DDevice *iface, const struct wined3d_stream ...@@ -455,9 +455,9 @@ static void drawStridedSlowVs(IWineD3DDevice *iface, const struct wined3d_stream
{ {
/* Indexed so work out the number of strides to skip */ /* Indexed so work out the number of strides to skip */
if (idxSize == 2) if (idxSize == 2)
SkipnStrides = pIdxBufS[startIdx + vx_index] + stateblock->loadBaseVertexIndex; SkipnStrides = pIdxBufS[startIdx + vx_index] + stateblock->state.load_base_vertex_index;
else else
SkipnStrides = pIdxBufL[startIdx + vx_index] + stateblock->loadBaseVertexIndex; SkipnStrides = pIdxBufL[startIdx + vx_index] + stateblock->state.load_base_vertex_index;
} }
for (i = MAX_ATTRIBS - 1; i >= 0; i--) for (i = MAX_ATTRIBS - 1; i >= 0; i--)
......
...@@ -3350,7 +3350,7 @@ static void loadTexCoords(const struct wined3d_gl_info *gl_info, IWineD3DStateBl ...@@ -3350,7 +3350,7 @@ static void loadTexCoords(const struct wined3d_gl_info *gl_info, IWineD3DStateBl
/* The coords to supply depend completely on the fvf / vertex shader */ /* The coords to supply depend completely on the fvf / vertex shader */
glTexCoordPointer(e->format->gl_vtx_format, e->format->gl_vtx_type, e->stride, glTexCoordPointer(e->format->gl_vtx_format, e->format->gl_vtx_type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY);
} else { } else {
GL_EXTCALL(glMultiTexCoord4fARB(GL_TEXTURE0_ARB + mapped_stage, 0, 0, 0, 1)); GL_EXTCALL(glMultiTexCoord4fARB(GL_TEXTURE0_ARB + mapped_stage, 0, 0, 0, 1));
...@@ -4187,7 +4187,7 @@ static inline void loadNumberedArrays(IWineD3DStateBlockImpl *stateblock, ...@@ -4187,7 +4187,7 @@ static inline void loadNumberedArrays(IWineD3DStateBlockImpl *stateblock,
stream_info->elements[i].format->gl_vtx_type, stream_info->elements[i].format->gl_vtx_type,
stream_info->elements[i].format->gl_normalized, stream_info->elements[i].format->gl_normalized,
vb->conversion_stride, stream_info->elements[i].data + vb->conversion_shift[shift_index] vb->conversion_stride, stream_info->elements[i].data + vb->conversion_shift[shift_index]
+ stateblock->loadBaseVertexIndex * stream_info->elements[i].stride + stateblock->state.load_base_vertex_index * stream_info->elements[i].stride
+ stream->offset)); + stream->offset));
} else { } else {
...@@ -4195,7 +4195,7 @@ static inline void loadNumberedArrays(IWineD3DStateBlockImpl *stateblock, ...@@ -4195,7 +4195,7 @@ static inline void loadNumberedArrays(IWineD3DStateBlockImpl *stateblock,
stream_info->elements[i].format->gl_vtx_type, stream_info->elements[i].format->gl_vtx_type,
stream_info->elements[i].format->gl_normalized, stream_info->elements[i].format->gl_normalized,
stream_info->elements[i].stride, stream_info->elements[i].data stream_info->elements[i].stride, stream_info->elements[i].data
+ stateblock->loadBaseVertexIndex * stream_info->elements[i].stride + stateblock->state.load_base_vertex_index * stream_info->elements[i].stride
+ stream->offset)); + stream->offset));
} }
...@@ -4332,7 +4332,7 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB ...@@ -4332,7 +4332,7 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
if (gl_info->supported[ARB_VERTEX_BLEND]) if (gl_info->supported[ARB_VERTEX_BLEND])
{ {
TRACE("Blend %u %p %u\n", e->format->component_count, TRACE("Blend %u %p %u\n", e->format->component_count,
e->data + stateblock->loadBaseVertexIndex * e->stride, e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride, e->stride + stream->offset);
glEnableClientState(GL_WEIGHT_ARRAY_ARB); glEnableClientState(GL_WEIGHT_ARRAY_ARB);
checkGLcall("glEnableClientState(GL_WEIGHT_ARRAY_ARB)"); checkGLcall("glEnableClientState(GL_WEIGHT_ARRAY_ARB)");
...@@ -4350,9 +4350,9 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB ...@@ -4350,9 +4350,9 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
e->format->gl_vtx_format, e->format->gl_vtx_format,
e->format->gl_vtx_type, e->format->gl_vtx_type,
e->stride, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
GL_EXTCALL(glWeightPointerARB(e->format->gl_vtx_format, e->format->gl_vtx_type, e->stride, GL_EXTCALL(glWeightPointerARB(e->format->gl_vtx_format, e->format->gl_vtx_type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset)); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset));
checkGLcall("glWeightPointerARB"); checkGLcall("glWeightPointerARB");
...@@ -4414,17 +4414,17 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB ...@@ -4414,17 +4414,17 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
if (!e->buffer_object) if (!e->buffer_object)
{ {
TRACE("glVertexPointer(3, %#x, %#x, %p);\n", e->format->gl_vtx_type, e->stride, TRACE("glVertexPointer(3, %#x, %#x, %p);\n", e->format->gl_vtx_type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
glVertexPointer(3 /* min(e->format->gl_vtx_format, 3) */, e->format->gl_vtx_type, e->stride, glVertexPointer(3 /* min(e->format->gl_vtx_format, 3) */, e->format->gl_vtx_type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
} }
else else
{ {
TRACE("glVertexPointer(%#x, %#x, %#x, %p);\n", TRACE("glVertexPointer(%#x, %#x, %#x, %p);\n",
e->format->gl_vtx_format, e->format->gl_vtx_type, e->stride, e->format->gl_vtx_format, e->format->gl_vtx_type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
glVertexPointer(e->format->gl_vtx_format, e->format->gl_vtx_type, e->stride, glVertexPointer(e->format->gl_vtx_format, e->format->gl_vtx_type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
} }
checkGLcall("glVertexPointer(...)"); checkGLcall("glVertexPointer(...)");
glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_VERTEX_ARRAY);
...@@ -4445,9 +4445,9 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB ...@@ -4445,9 +4445,9 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
} }
TRACE("glNormalPointer(%#x, %#x, %p);\n", e->format->gl_vtx_type, e->stride, TRACE("glNormalPointer(%#x, %#x, %p);\n", e->format->gl_vtx_type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
glNormalPointer(e->format->gl_vtx_type, e->stride, glNormalPointer(e->format->gl_vtx_type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
checkGLcall("glNormalPointer(...)"); checkGLcall("glNormalPointer(...)");
glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_NORMAL_ARRAY);
checkGLcall("glEnableClientState(GL_NORMAL_ARRAY)"); checkGLcall("glEnableClientState(GL_NORMAL_ARRAY)");
...@@ -4480,9 +4480,9 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB ...@@ -4480,9 +4480,9 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
TRACE("glColorPointer(%#x, %#x %#x, %p);\n", TRACE("glColorPointer(%#x, %#x %#x, %p);\n",
e->format->gl_vtx_format, e->format->gl_vtx_type, e->stride, e->format->gl_vtx_format, e->format->gl_vtx_type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
glColorPointer(e->format->gl_vtx_format, e->format->gl_vtx_type, e->stride, glColorPointer(e->format->gl_vtx_format, e->format->gl_vtx_type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
checkGLcall("glColorPointer(4, GL_UNSIGNED_BYTE, ...)"); checkGLcall("glColorPointer(4, GL_UNSIGNED_BYTE, ...)");
glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_COLOR_ARRAY);
checkGLcall("glEnableClientState(GL_COLOR_ARRAY)"); checkGLcall("glEnableClientState(GL_COLOR_ARRAY)");
...@@ -4520,9 +4520,9 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB ...@@ -4520,9 +4520,9 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
* 4 component secondary colors use it * 4 component secondary colors use it
*/ */
TRACE("glSecondaryColorPointer(%#x, %#x, %#x, %p);\n", format, type, e->stride, TRACE("glSecondaryColorPointer(%#x, %#x, %#x, %p);\n", format, type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
GL_EXTCALL(glSecondaryColorPointerEXT(format, type, e->stride, GL_EXTCALL(glSecondaryColorPointerEXT(format, type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset)); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset));
checkGLcall("glSecondaryColorPointerEXT(format, type, ...)"); checkGLcall("glSecondaryColorPointerEXT(format, type, ...)");
} }
else else
...@@ -4531,9 +4531,9 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB ...@@ -4531,9 +4531,9 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
{ {
case GL_UNSIGNED_BYTE: case GL_UNSIGNED_BYTE:
TRACE("glSecondaryColorPointer(3, GL_UNSIGNED_BYTE, %#x, %p);\n", e->stride, TRACE("glSecondaryColorPointer(3, GL_UNSIGNED_BYTE, %#x, %p);\n", e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
GL_EXTCALL(glSecondaryColorPointerEXT(3, GL_UNSIGNED_BYTE, e->stride, GL_EXTCALL(glSecondaryColorPointerEXT(3, GL_UNSIGNED_BYTE, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset)); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset));
checkGLcall("glSecondaryColorPointerEXT(3, GL_UNSIGNED_BYTE, ...)"); checkGLcall("glSecondaryColorPointerEXT(3, GL_UNSIGNED_BYTE, ...)");
break; break;
...@@ -4541,9 +4541,9 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB ...@@ -4541,9 +4541,9 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
FIXME("Add 4 component specular color pointers for type %x\n", type); FIXME("Add 4 component specular color pointers for type %x\n", type);
/* Make sure that the right color component is dropped */ /* Make sure that the right color component is dropped */
TRACE("glSecondaryColorPointer(3, %#x, %#x, %p);\n", type, e->stride, TRACE("glSecondaryColorPointer(3, %#x, %#x, %p);\n", type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
GL_EXTCALL(glSecondaryColorPointerEXT(3, type, e->stride, GL_EXTCALL(glSecondaryColorPointerEXT(3, type, e->stride,
e->data + stateblock->loadBaseVertexIndex * e->stride + stream->offset)); e->data + stateblock->state.load_base_vertex_index * e->stride + stream->offset));
checkGLcall("glSecondaryColorPointerEXT(3, type, ...)"); checkGLcall("glSecondaryColorPointerEXT(3, type, ...)");
} }
} }
......
...@@ -722,18 +722,18 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface) ...@@ -722,18 +722,18 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
if (This->changed.indices if (This->changed.indices
&& ((This->state.index_buffer != targetStateBlock->state.index_buffer) && ((This->state.index_buffer != targetStateBlock->state.index_buffer)
|| (This->baseVertexIndex != targetStateBlock->baseVertexIndex) || (This->state.base_vertex_index != targetStateBlock->state.base_vertex_index)
|| (This->state.index_format != targetStateBlock->state.index_format))) || (This->state.index_format != targetStateBlock->state.index_format)))
{ {
TRACE("Updating index buffer to %p, baseVertexIndex to %d.\n", TRACE("Updating index buffer to %p, baseVertexIndex to %d.\n",
targetStateBlock->state.index_buffer, targetStateBlock->baseVertexIndex); targetStateBlock->state.index_buffer, targetStateBlock->state.base_vertex_index);
if (targetStateBlock->state.index_buffer) if (targetStateBlock->state.index_buffer)
IWineD3DBuffer_AddRef((IWineD3DBuffer *)targetStateBlock->state.index_buffer); IWineD3DBuffer_AddRef((IWineD3DBuffer *)targetStateBlock->state.index_buffer);
if (This->state.index_buffer) if (This->state.index_buffer)
IWineD3DBuffer_Release((IWineD3DBuffer *)This->state.index_buffer); IWineD3DBuffer_Release((IWineD3DBuffer *)This->state.index_buffer);
This->state.index_buffer = targetStateBlock->state.index_buffer; This->state.index_buffer = targetStateBlock->state.index_buffer;
This->baseVertexIndex = targetStateBlock->baseVertexIndex; This->state.base_vertex_index = targetStateBlock->state.base_vertex_index;
This->state.index_format = targetStateBlock->state.index_format; This->state.index_format = targetStateBlock->state.index_format;
} }
...@@ -1001,7 +1001,7 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Apply(IWineD3DStateBlock *iface) ...@@ -1001,7 +1001,7 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Apply(IWineD3DStateBlock *iface)
if (This->changed.indices) if (This->changed.indices)
{ {
IWineD3DDevice_SetIndexBuffer(device, (IWineD3DBuffer *)This->state.index_buffer, This->state.index_format); IWineD3DDevice_SetIndexBuffer(device, (IWineD3DBuffer *)This->state.index_buffer, This->state.index_format);
IWineD3DDevice_SetBaseVertexIndex(device, This->baseVertexIndex); IWineD3DDevice_SetBaseVertexIndex(device, This->state.base_vertex_index);
} }
if (This->changed.vertexDecl && This->state.vertex_declaration) if (This->changed.vertexDecl && This->state.vertex_declaration)
......
...@@ -2354,6 +2354,8 @@ struct wined3d_state ...@@ -2354,6 +2354,8 @@ struct wined3d_state
BOOL user_stream; BOOL user_stream;
struct wined3d_buffer *index_buffer; struct wined3d_buffer *index_buffer;
enum wined3d_format_id index_format; enum wined3d_format_id index_format;
INT base_vertex_index;
INT load_base_vertex_index; /* Non-indexed drawing needs 0 here, indexed needs base_vertex_index. */
struct IWineD3DVertexShaderImpl *vertex_shader; struct IWineD3DVertexShaderImpl *vertex_shader;
BOOL vs_consts_b[MAX_CONST_B]; BOOL vs_consts_b[MAX_CONST_B];
...@@ -2395,9 +2397,6 @@ struct IWineD3DStateBlockImpl ...@@ -2395,9 +2397,6 @@ struct IWineD3DStateBlockImpl
/* primitive type */ /* primitive type */
GLenum gl_primitive_type; GLenum gl_primitive_type;
INT baseVertexIndex;
INT loadBaseVertexIndex; /* non-indexed drawing needs 0 here, indexed baseVertexIndex */
/* Light hashmap . Collisions are handled using standard wine double linked lists */ /* Light hashmap . Collisions are handled using standard wine double linked lists */
#define LIGHTMAP_SIZE 43 /* Use of a prime number recommended. Set to 1 for a linked list! */ #define LIGHTMAP_SIZE 43 /* Use of a prime number recommended. Set to 1 for a linked list! */
#define LIGHTMAP_HASHFUNC(x) ((x) % LIGHTMAP_SIZE) /* Primitive and simple function */ #define LIGHTMAP_HASHFUNC(x) ((x) % LIGHTMAP_SIZE) /* Primitive and simple function */
......
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