Henri Verbeet : wined3d: Figure out the index data pointer inside drawPrimitive().
Module: wine Branch: master Commit: a8a201cf61b39f79be980c4f193905bf8c0276c4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a8a201cf61b39f79be980c4f19... Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Tue May 1 20:25:28 2012 +0200 wined3d: Figure out the index data pointer inside drawPrimitive(). We want to do this after context_apply_draw_state(), when resource locations are all setup. --- dlls/wined3d/device.c | 9 ++------- dlls/wined3d/drawprim.c | 24 +++++++++++++++++------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 030add2..0b0b600 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -4008,14 +4008,11 @@ HRESULT CDECL wined3d_device_draw_primitive(struct wined3d_device *device, UINT HRESULT CDECL wined3d_device_draw_indexed_primitive(struct wined3d_device *device, UINT start_idx, UINT index_count) { - struct wined3d_buffer *index_buffer; - GLuint vbo; const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; TRACE("device %p, start_idx %u, index_count %u.\n", device, start_idx, index_count); - index_buffer = device->stateBlock->state.index_buffer; - if (!index_buffer) + if (!device->stateBlock->state.index_buffer) { /* D3D9 returns D3DERR_INVALIDCALL when DrawIndexedPrimitive is called * without an index buffer set. (The first time at least...) @@ -4036,7 +4033,6 @@ HRESULT CDECL wined3d_device_draw_indexed_primitive(struct wined3d_device *devic device_invalidate_state(device, STATE_INDEXBUFFER); device->stateBlock->state.user_stream = FALSE; } - vbo = index_buffer->buffer_object; if (!gl_info->supported[ARB_DRAW_ELEMENTS_BASE_VERTEX] && device->stateBlock->state.load_base_vertex_index != device->stateBlock->state.base_vertex_index) @@ -4045,8 +4041,7 @@ HRESULT CDECL wined3d_device_draw_indexed_primitive(struct wined3d_device *devic device_invalidate_state(device, STATE_BASEVERTEXINDEX); } - drawPrimitive(device, index_count, start_idx, TRUE, - vbo ? NULL : index_buffer->resource.allocatedMemory); + drawPrimitive(device, index_count, start_idx, TRUE, NULL); return WINED3D_OK; } diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c index 136c8f5..18b8f3f 100644 --- a/dlls/wined3d/drawprim.c +++ b/dlls/wined3d/drawprim.c @@ -669,14 +669,24 @@ void drawPrimitive(struct wined3d_device *device, UINT index_count, UINT StartId BOOL emulation = FALSE; const struct wined3d_stream_info *stream_info = &device->strided_streams; struct wined3d_stream_info stridedlcl; - UINT idx_size; + UINT idx_size = 0; - if (!indexed) - idx_size = 0; - else if (state->index_format == WINED3DFMT_R16_UINT) - idx_size = 2; - else - idx_size = 4; + if (indexed) + { + if (!state->user_stream) + { + struct wined3d_buffer *index_buffer = state->index_buffer; + if (!index_buffer->buffer_object) + idxData = index_buffer->resource.allocatedMemory; + else + idxData = NULL; + } + + if (state->index_format == WINED3DFMT_R16_UINT) + idx_size = 2; + else + idx_size = 4; + } if (!use_vs(state)) {
participants (1)
-
Alexandre Julliard