vkd3d: Do not execute indirect commands if count buffer is unsupported.
Also be a bit more uniform with using break/return on fail conditions. Otherwise, the indirect command will read data from the count buffer instead, which may lead to bugs or GPU hangs. Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
parent
02c7ec404c
commit
1d869e3e21
|
@ -9979,7 +9979,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_ExecuteIndirect(d3d12_command_l
|
||||||
|
|
||||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED:
|
case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED:
|
||||||
if (!d3d12_command_list_update_index_buffer(list))
|
if (!d3d12_command_list_update_index_buffer(list))
|
||||||
return;
|
break;
|
||||||
|
|
||||||
if (!d3d12_command_list_begin_render_pass(list))
|
if (!d3d12_command_list_begin_render_pass(list))
|
||||||
{
|
{
|
||||||
|
@ -10007,12 +10007,15 @@ static void STDMETHODCALLTYPE d3d12_command_list_ExecuteIndirect(d3d12_command_l
|
||||||
FIXME("Ignoring command count %u.\n", max_command_count);
|
FIXME("Ignoring command count %u.\n", max_command_count);
|
||||||
|
|
||||||
if (count_buffer)
|
if (count_buffer)
|
||||||
|
{
|
||||||
FIXME_ONCE("Count buffers not supported for indirect dispatch.\n");
|
FIXME_ONCE("Count buffers not supported for indirect dispatch.\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (!d3d12_command_list_update_compute_state(list))
|
if (!d3d12_command_list_update_compute_state(list))
|
||||||
{
|
{
|
||||||
WARN("Failed to update compute state, ignoring dispatch.\n");
|
WARN("Failed to update compute state, ignoring dispatch.\n");
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
VK_CALL(vkCmdDispatchIndirect(list->vk_command_buffer, scratch.buffer, scratch.offset));
|
VK_CALL(vkCmdDispatchIndirect(list->vk_command_buffer, scratch.buffer, scratch.offset));
|
||||||
|
@ -10023,12 +10026,15 @@ static void STDMETHODCALLTYPE d3d12_command_list_ExecuteIndirect(d3d12_command_l
|
||||||
FIXME("Ignoring command count %u.\n", max_command_count);
|
FIXME("Ignoring command count %u.\n", max_command_count);
|
||||||
|
|
||||||
if (count_buffer)
|
if (count_buffer)
|
||||||
|
{
|
||||||
FIXME_ONCE("Count buffers not supported for indirect ray dispatch.\n");
|
FIXME_ONCE("Count buffers not supported for indirect ray dispatch.\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (!d3d12_command_list_update_raygen_state(list))
|
if (!d3d12_command_list_update_raygen_state(list))
|
||||||
{
|
{
|
||||||
WARN("Failed to update raygen state, ignoring ray dispatch.\n");
|
WARN("Failed to update raygen state, ignoring ray dispatch.\n");
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!list->device->device_info.ray_tracing_maintenance1_features.rayTracingPipelineTraceRaysIndirect2)
|
if (!list->device->device_info.ray_tracing_maintenance1_features.rayTracingPipelineTraceRaysIndirect2)
|
||||||
|
|
Loading…
Reference in New Issue