diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2021-05-06 12:59:45 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2021-05-06 13:15:53 +0300 |
commit | 40526fd7abea00ea6549b2abfdd0653523ddef39 (patch) | |
tree | af2181a7ec0cc3a09841ebb145628bdb01dfc835 | |
parent | 8734589e921ba03730ca68fb06d36682b7aa46af (diff) |
vkd3d: Don't try to use fallback SRV aux heap.no-rtas-fallback-binding
DXR requires buffer_device_address, so it's meaningless to attempt a
fallback.
Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
-rw-r--r-- | libs/vkd3d/state.c | 16 |
1 files 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)) { |