mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 05:00:09 +01:00
v3dv: handle unsized arrays in SSBOs
CTS coverage for this was hiding behind compute shaders so we didn't notice this was not working properly until now. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>
This commit is contained in:
parent
7e990683fd
commit
2f1c15116f
3 changed files with 18 additions and 4 deletions
|
|
@ -927,6 +927,12 @@ v3dv_UpdateDescriptorSets(VkDevice _device,
|
|||
|
||||
descriptor->buffer = buffer;
|
||||
descriptor->offset = buffer_info->offset;
|
||||
if (buffer_info->range == VK_WHOLE_SIZE) {
|
||||
descriptor->range = buffer->size - buffer_info->offset;
|
||||
} else {
|
||||
assert(descriptor->range <= UINT32_MAX);
|
||||
descriptor->range = buffer_info->range;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLER: {
|
||||
|
|
|
|||
|
|
@ -945,6 +945,7 @@ struct v3dv_descriptor {
|
|||
struct {
|
||||
struct v3dv_buffer *buffer;
|
||||
uint32_t offset;
|
||||
uint32_t range;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -198,11 +198,17 @@ write_ubo_ssbo_uniforms(struct v3dv_cmd_buffer *cmd_buffer,
|
|||
index, &dynamic_offset);
|
||||
assert(descriptor);
|
||||
assert(descriptor->buffer);
|
||||
assert(descriptor->buffer->mem);
|
||||
assert(descriptor->buffer->mem->bo);
|
||||
|
||||
cl_aligned_reloc(&job->indirect, uniforms,
|
||||
descriptor->buffer->mem->bo,
|
||||
descriptor->buffer->mem_offset +
|
||||
descriptor->offset + offset + dynamic_offset);
|
||||
if (content == QUNIFORM_GET_BUFFER_SIZE) {
|
||||
cl_aligned_u32(uniforms, descriptor->range);
|
||||
} else {
|
||||
cl_aligned_reloc(&job->indirect, uniforms,
|
||||
descriptor->buffer->mem->bo,
|
||||
descriptor->buffer->mem_offset +
|
||||
descriptor->offset + offset + dynamic_offset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -303,6 +309,7 @@ v3dv_write_uniforms(struct v3dv_cmd_buffer *cmd_buffer,
|
|||
|
||||
case QUNIFORM_SSBO_OFFSET:
|
||||
case QUNIFORM_UBO_ADDR:
|
||||
case QUNIFORM_GET_BUFFER_SIZE:
|
||||
write_ubo_ssbo_uniforms(cmd_buffer, pipeline, &uniforms,
|
||||
uinfo->contents[i], data);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue