vkd3d-shader: Don't apply offset buffers for non-bindless resources.

Fixes root descriptors when BDA support is disabled.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
Hans-Kristian Arntzen 2021-05-27 18:07:20 +02:00
parent 1a7b470681
commit a83c99ba77
1 changed files with 15 additions and 0 deletions

View File

@ -8796,6 +8796,17 @@ static uint32_t vkd3d_dxbc_compiler_get_resource_index(struct vkd3d_dxbc_compile
return index_id;
}
static bool vkd3d_dxbc_compiler_resource_is_bindless(struct vkd3d_dxbc_compiler *compiler,
const struct vkd3d_shader_register *reg)
{
const struct vkd3d_shader_resource_binding *binding;
const struct vkd3d_symbol *symbol;
symbol = vkd3d_dxbc_compiler_find_resource(compiler, reg);
binding = symbol->info.resource.resource_binding;
return binding && !!(binding->flags & VKD3D_SHADER_BINDING_FLAG_BINDLESS);
}
static uint32_t vkd3d_dxbc_compiler_get_resource_pointer(struct vkd3d_dxbc_compiler *compiler,
const struct vkd3d_shader_register *reg)
{
@ -9330,6 +9341,8 @@ static uint32_t vkd3d_dxbc_compiler_adjust_ssbo_offset(struct vkd3d_dxbc_compile
if (!(compiler->shader_interface.flags & VKD3D_SHADER_INTERFACE_SSBO_OFFSET_BUFFER))
return coordinate_id;
if (!vkd3d_dxbc_compiler_resource_is_bindless(compiler, reg))
return coordinate_id;
symbol = vkd3d_dxbc_compiler_find_resource(compiler, reg);
@ -9379,6 +9392,8 @@ static uint32_t vkd3d_dxbc_compiler_adjust_typed_buffer_offset(struct vkd3d_dxbc
if (!(compiler->shader_interface.flags & VKD3D_SHADER_INTERFACE_TYPED_OFFSET_BUFFER))
return coordinate_id;
if (!vkd3d_dxbc_compiler_resource_is_bindless(compiler, reg))
return coordinate_id;
symbol = vkd3d_dxbc_compiler_find_resource(compiler, reg);
bounds_id = vkd3d_dxbc_compiler_get_buffer_bounds(compiler, reg, true, symbol->info.resource.resource_binding);