Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/HansKristian-Work/vkd3d-proton.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2021-05-06 12:59:45 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2021-05-06 13:15:53 +0300
commit40526fd7abea00ea6549b2abfdd0653523ddef39 (patch)
treeaf2181a7ec0cc3a09841ebb145628bdb01dfc835
parent8734589e921ba03730ca68fb06d36682b7aa46af (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.c16
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))
{