From 9d405f03667392afb1a1bdc2a207b670d696cbd3 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Thu, 6 May 2021 11:59:45 +0200 Subject: [PATCH] vkd3d: Don't try to use fallback SRV aux heap. DXR requires buffer_device_address, so it's meaningless to attempt a fallback. Signed-off-by: Hans-Kristian Arntzen --- libs/vkd3d/state.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c index f9dde6b0..381677ba 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -632,6 +632,7 @@ static HRESULT d3d12_root_signature_init_root_descriptor_tables(struct d3d12_roo unsigned int i, j, t, range_count; uint32_t range_descriptor_offset; bool local_root_signature; + bool has_aux_buffer; local_root_signature = !!(desc->Flags & D3D12_ROOT_SIGNATURE_FLAG_LOCAL_ROOT_SIGNATURE); @@ -694,15 +695,24 @@ static HRESULT d3d12_root_signature_init_root_descriptor_tables(struct d3d12_roo case D3D12_DESCRIPTOR_RANGE_TYPE_SRV: binding.flags = VKD3D_SHADER_BINDING_FLAG_BINDLESS | VKD3D_SHADER_BINDING_FLAG_AUX_BUFFER; + has_aux_buffer = false; if (root_signature->flags & VKD3D_ROOT_SIGNATURE_USE_RAW_VA_AUX_BUFFER) { binding.flags |= VKD3D_SHADER_BINDING_FLAG_RAW_VA; binding.binding = root_signature->raw_va_aux_buffer_binding; + has_aux_buffer = true; + } + else if (range->RangeType == D3D12_DESCRIPTOR_RANGE_TYPE_UAV) + { + /* There is no fallback heap for RTAS (SRV), this is only relevant for UAV counters. */ + if (vkd3d_bindless_state_find_binding(bindless_state, range_flag | VKD3D_BINDLESS_SET_AUX_BUFFER, &binding.binding)) + has_aux_buffer = true; + else + ERR("Failed to find aux buffer binding.\n"); } - else if (!vkd3d_bindless_state_find_binding(bindless_state, range_flag | VKD3D_BINDLESS_SET_AUX_BUFFER, &binding.binding)) - ERR("Failed to find aux buffer binding.\n"); - table->first_binding[table->binding_count++] = binding; + if (has_aux_buffer) + table->first_binding[table->binding_count++] = binding; if (vkd3d_bindless_state_find_binding(bindless_state, range_flag | VKD3D_BINDLESS_SET_BUFFER, &binding.binding)) {