mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
radv/ac: fix multiple descriptor sets with dynamic buffers
The dynamic_offset_offset in the descriptor set binding layout is relative to the dynamic_offset_start for the set in the pipeline layout. Cc: 17.0 <mesa-stable@lists.freedesktop.org> Signed-off-by: Fredrik Höglund <fredrik@kde.org> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
71bb1a9c3c
commit
162beb2abb
1 changed files with 5 additions and 3 deletions
|
|
@ -1777,15 +1777,17 @@ static LLVMValueRef visit_vulkan_resource_index(struct nir_to_llvm_context *ctx,
|
|||
unsigned desc_set = nir_intrinsic_desc_set(instr);
|
||||
unsigned binding = nir_intrinsic_binding(instr);
|
||||
LLVMValueRef desc_ptr = ctx->descriptor_sets[desc_set];
|
||||
struct radv_descriptor_set_layout *layout = ctx->options->layout->set[desc_set].layout;
|
||||
struct radv_pipeline_layout *pipeline_layout = ctx->options->layout;
|
||||
struct radv_descriptor_set_layout *layout = pipeline_layout->set[desc_set].layout;
|
||||
unsigned base_offset = layout->binding[binding].offset;
|
||||
LLVMValueRef offset, stride;
|
||||
|
||||
if (layout->binding[binding].type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC ||
|
||||
layout->binding[binding].type == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC) {
|
||||
unsigned idx = pipeline_layout->set[desc_set].dynamic_offset_start +
|
||||
layout->binding[binding].dynamic_offset_offset;
|
||||
desc_ptr = ctx->push_constants;
|
||||
base_offset = ctx->options->layout->push_constant_size;
|
||||
base_offset += 16 * layout->binding[binding].dynamic_offset_offset;
|
||||
base_offset = pipeline_layout->push_constant_size + 16 * idx;
|
||||
stride = LLVMConstInt(ctx->i32, 16, false);
|
||||
} else
|
||||
stride = LLVMConstInt(ctx->i32, layout->binding[binding].size, false);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue