From 4afc7470fb630035c911a1bf1d48f66bf16c230c Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Tue, 21 Jun 2016 10:32:45 +0200 Subject: [PATCH] wined3d: Resolve "load_base_vertex_index" in wined3d_cs_exec_draw(). Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- dlls/wined3d/cs.c | 10 +++++++++- dlls/wined3d/device.c | 15 --------------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 2ab3ca5a12a..bbd5c0d1688 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -311,9 +311,17 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT * static void wined3d_cs_exec_draw(struct wined3d_cs *cs, const void *data) { + struct wined3d_state *state = &cs->device->state; const struct wined3d_cs_draw *op = data; - draw_primitive(cs->device, &cs->device->state, op->base_vertex_idx, op->start_idx, + if (!cs->device->adapter->gl_info.supported[ARB_DRAW_ELEMENTS_BASE_VERTEX] + && state->load_base_vertex_index != op->base_vertex_idx) + { + state->load_base_vertex_index = op->base_vertex_idx; + device_invalidate_state(cs->device, STATE_BASEVERTEXINDEX); + } + + draw_primitive(cs->device, state, op->base_vertex_idx, op->start_idx, op->index_count, op->start_instance, op->instance_count, op->indexed); } diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 66782191e90..b52970fb18e 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -3497,12 +3497,6 @@ HRESULT CDECL wined3d_device_draw_primitive(struct wined3d_device *device, UINT { TRACE("device %p, start_vertex %u, vertex_count %u.\n", device, start_vertex, vertex_count); - if (device->state.load_base_vertex_index) - { - device->state.load_base_vertex_index = 0; - device_invalidate_state(device, STATE_BASEVERTEXINDEX); - } - wined3d_cs_emit_draw(device->cs, 0, start_vertex, vertex_count, 0, 0, FALSE); return WINED3D_OK; @@ -3519,8 +3513,6 @@ void CDECL wined3d_device_draw_primitive_instanced(struct wined3d_device *device HRESULT CDECL wined3d_device_draw_indexed_primitive(struct wined3d_device *device, UINT start_idx, UINT index_count) { - 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); if (!device->state.index_buffer) @@ -3533,13 +3525,6 @@ HRESULT CDECL wined3d_device_draw_indexed_primitive(struct wined3d_device *devic return WINED3DERR_INVALIDCALL; } - if (!gl_info->supported[ARB_DRAW_ELEMENTS_BASE_VERTEX] && - device->state.load_base_vertex_index != device->state.base_vertex_index) - { - device->state.load_base_vertex_index = device->state.base_vertex_index; - device_invalidate_state(device, STATE_BASEVERTEXINDEX); - } - wined3d_cs_emit_draw(device->cs, device->state.base_vertex_index, start_idx, index_count, 0, 0, TRUE); return WINED3D_OK; -- 2.11.4.GIT