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;