wined3d: Pass gl_info and state parameters directly to drawStridedSlowVs().

This commit is contained in:
Henri Verbeet 2010-09-30 11:44:30 +02:00 committed by Alexandre Julliard
parent f065a5e54b
commit 132158cbf5
1 changed files with 14 additions and 14 deletions

View File

@ -411,17 +411,15 @@ static inline void send_attribute(const struct wined3d_gl_info *gl_info,
} }
/* GL locking is done by the caller */ /* GL locking is done by the caller */
static void drawStridedSlowVs(IWineD3DDevice *iface, const struct wined3d_stream_info *si, UINT numberOfVertices, static void drawStridedSlowVs(const struct wined3d_gl_info *gl_info, const struct wined3d_state *state,
GLenum glPrimitiveType, const void *idxData, UINT idxSize, UINT startIdx) const struct wined3d_stream_info *si, UINT numberOfVertices, GLenum glPrimitiveType,
const void *idxData, UINT idxSize, UINT startIdx)
{ {
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *) iface; LONG SkipnStrides = startIdx + state->load_base_vertex_index;
const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
LONG SkipnStrides = startIdx + This->stateBlock->state.load_base_vertex_index;
const DWORD *pIdxBufL = NULL; const DWORD *pIdxBufL = NULL;
const WORD *pIdxBufS = NULL; const WORD *pIdxBufS = NULL;
UINT vx_index; UINT vx_index;
int i; int i;
IWineD3DStateBlockImpl *stateblock = This->stateBlock;
const BYTE *ptr; const BYTE *ptr;
if (idxSize) if (idxSize)
@ -431,7 +429,7 @@ static void drawStridedSlowVs(IWineD3DDevice *iface, const struct wined3d_stream
* supported or other reason), or with user pointer drawing idxData * supported or other reason), or with user pointer drawing idxData
* will be non-NULL. */ * will be non-NULL. */
if (!idxData) if (!idxData)
idxData = buffer_get_sysmem(This->stateBlock->state.index_buffer, gl_info); idxData = buffer_get_sysmem(state->index_buffer, gl_info);
if (idxSize == 2) pIdxBufS = idxData; if (idxSize == 2) pIdxBufS = idxData;
else pIdxBufL = idxData; else pIdxBufL = idxData;
@ -449,18 +447,17 @@ 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->state.load_base_vertex_index; SkipnStrides = pIdxBufS[startIdx + vx_index] + state->load_base_vertex_index;
else else
SkipnStrides = pIdxBufL[startIdx + vx_index] + stateblock->state.load_base_vertex_index; SkipnStrides = pIdxBufL[startIdx + vx_index] + state->load_base_vertex_index;
} }
for (i = MAX_ATTRIBS - 1; i >= 0; i--) for (i = MAX_ATTRIBS - 1; i >= 0; i--)
{ {
if (!(si->use_map & (1 << i))) continue; if (!(si->use_map & (1 << i))) continue;
ptr = si->elements[i].data ptr = si->elements[i].data + si->elements[i].stride * SkipnStrides
+ si->elements[i].stride * SkipnStrides + state->streams[si->elements[i].stream_idx].offset;
+ stateblock->state.streams[si->elements[i].stream_idx].offset;
send_attribute(gl_info, si->elements[i].format->id, i, ptr); send_attribute(gl_info, si->elements[i].format->id, i, ptr);
} }
@ -707,8 +704,11 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT StartIdx, UINT
} else { } else {
TRACE("Using immediate mode with vertex shaders for half float emulation\n"); TRACE("Using immediate mode with vertex shaders for half float emulation\n");
} }
drawStridedSlowVs(iface, stream_info, index_count, glPrimType, idxData, idxSize, StartIdx); drawStridedSlowVs(context->gl_info, state, stream_info,
} else { index_count, glPrimType, idxData, idxSize, StartIdx);
}
else
{
drawStridedSlow(iface, context, stream_info, index_count, drawStridedSlow(iface, context, stream_info, index_count,
glPrimType, idxData, idxSize, StartIdx); glPrimType, idxData, idxSize, StartIdx);
} }