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 <post@arntzen-software.no>
This commit is contained in:
Hans-Kristian Arntzen 2021-05-06 11:59:45 +02:00 committed by Joshie
parent 1744896142
commit 9d405f0366
1 changed files with 13 additions and 3 deletions

View File

@ -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))
{