From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/d3d11/tests/d3d11.c | 4 ++++ dlls/wined3d/device.c | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c index 3f4db50efb0..e03057a1845 100644 --- a/dlls/d3d11/tests/d3d11.c +++ b/dlls/d3d11/tests/d3d11.c @@ -21002,6 +21002,10 @@ static void test_index_buffer_offset(void) } release_resource_readback(&rb);
+ /* Without index buffer */ + ID3D11DeviceContext_IASetIndexBuffer(context, NULL, DXGI_FORMAT_R32_UINT, 0); + ID3D11DeviceContext_DrawIndexed(context, 4, 0, 0); + /* indirect draws */ args_buffer = create_buffer_misc(device, 0, D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS, sizeof(argument_data), argument_data); diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index a5b3c246485..443bf10ab76 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -2651,8 +2651,11 @@ void CDECL wined3d_device_context_draw_indexed(struct wined3d_device_context *co context, base_vertex_index, start_index, index_count, start_instance, instance_count);
wined3d_device_context_lock(context); - wined3d_device_context_emit_draw(context, state->primitive_type, state->patch_vertex_count, - base_vertex_index, start_index, index_count, start_instance, instance_count, true); + if (state->index_buffer) + { + wined3d_device_context_emit_draw(context, state->primitive_type, state->patch_vertex_count, + base_vertex_index, start_index, index_count, start_instance, instance_count, true); + } wined3d_device_context_unlock(context); }
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/d3d11/tests/d3d11.c | 4 ++++ dlls/wined3d/cs.c | 7 +++++++ 2 files changed, 11 insertions(+)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c index e03057a1845..fce02156b65 100644 --- a/dlls/d3d11/tests/d3d11.c +++ b/dlls/d3d11/tests/d3d11.c @@ -21034,6 +21034,10 @@ static void test_index_buffer_offset(void) } release_resource_readback(&rb);
+ /* Without index buffer */ + ID3D11DeviceContext_IASetIndexBuffer(context, NULL, DXGI_FORMAT_R32_UINT, 0); + ID3D11DeviceContext_DrawIndexedInstancedIndirect(context, args_buffer, 0); + ID3D11Buffer_Release(so_buffer); ID3D11Buffer_Release(args_buffer); ID3D11Buffer_Release(ib); diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 83c74c56ed0..dc1e071e9ca 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -1204,6 +1204,13 @@ void CDECL wined3d_device_context_draw_indirect(struct wined3d_device_context *c struct wined3d_cs_draw *op;
wined3d_device_context_lock(context); + + if (indexed && !state->index_buffer) + { + wined3d_device_context_unlock(context); + return; + } + op = wined3d_device_context_require_space(context, sizeof(*op), WINED3D_CS_QUEUE_DEFAULT); op->opcode = WINED3D_CS_OP_DRAW; op->primitive_type = state->primitive_type;
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/wined3d/cs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index dc1e071e9ca..21ed1264971 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -1137,7 +1137,7 @@ static void wined3d_cs_exec_draw(struct wined3d_cs *cs, const void *data) }
static void reference_graphics_pipeline_resources(struct wined3d_device_context *context, - BOOL indexed, const struct wined3d_d3d_info *d3d_info) + bool indexed, const struct wined3d_d3d_info *d3d_info) { const struct wined3d_state *state = context->state; unsigned int i;
This merge request was approved by Elizabeth Figura.
This merge request was approved by Jan Sikorski.