summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>2019-07-29 16:52:23 +0200
committerJuan A. Suarez Romero <jasuarez@igalia.com>2019-07-30 08:32:07 +0000
commit8fbadb152cfb60e6b3b095e5b1e8b919707a543b (patch)
tree0d1129ed98e04b2a62d695d74501f051a7a76fb4
parentb1df082b003bf7864660350f9f4e404d6a49fae4 (diff)
radv: Take variable descriptor counts into account for buffer entries.
Fixes: b5e04e9217b "radv: Support allocating variable size descriptor sets." Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111019 Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> (cherry picked from commit aac492901a9c717e1c667a5313fdf7ba1b750cf2)
-rw-r--r--src/amd/vulkan/radv_descriptor_set.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c
index 9a6e9cead9c..89d451cd728 100644
--- a/src/amd/vulkan/radv_descriptor_set.c
+++ b/src/amd/vulkan/radv_descriptor_set.c
@@ -477,8 +477,17 @@ radv_descriptor_set_create(struct radv_device *device,
struct radv_descriptor_set **out_set)
{
struct radv_descriptor_set *set;
+ uint32_t buffer_count = layout->buffer_count;
+ if (variable_count) {
+ unsigned stride = 1;
+ if (layout->binding[layout->binding_count - 1].type == VK_DESCRIPTOR_TYPE_SAMPLER ||
+ layout->binding[layout->binding_count - 1].type == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT)
+ stride = 0;
+ buffer_count = layout->binding[layout->binding_count - 1].buffer_offset +
+ *variable_count * stride;
+ }
unsigned range_offset = sizeof(struct radv_descriptor_set) +
- sizeof(struct radeon_winsys_bo *) * layout->buffer_count;
+ sizeof(struct radeon_winsys_bo *) * buffer_count;
unsigned mem_size = range_offset +
sizeof(struct radv_descriptor_range) * layout->dynamic_offset_count;