anv: fix vkUpdateDescriptorSets with inline uniform blocks
With inline uniform blocks descriptor, the meaning of descriptorCount
is a number of bytes to copy into the descriptor. Don't try to use
that size as an index into the descriptor table.
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Fixes: 43f40dc7cb
("anv: Implement VK_EXT_inline_uniform_block")
Gitlab: https://gitlab.freedesktop.org/mesa/mesa/issues/1195
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
@@ -1470,9 +1470,6 @@ void anv_UpdateDescriptorSets(
|
|||||||
&dst->descriptors[dst_layout->descriptor_index];
|
&dst->descriptors[dst_layout->descriptor_index];
|
||||||
dst_desc += copy->dstArrayElement;
|
dst_desc += copy->dstArrayElement;
|
||||||
|
|
||||||
for (uint32_t j = 0; j < copy->descriptorCount; j++)
|
|
||||||
dst_desc[j] = src_desc[j];
|
|
||||||
|
|
||||||
if (src_layout->data & ANV_DESCRIPTOR_INLINE_UNIFORM) {
|
if (src_layout->data & ANV_DESCRIPTOR_INLINE_UNIFORM) {
|
||||||
assert(src_layout->data == ANV_DESCRIPTOR_INLINE_UNIFORM);
|
assert(src_layout->data == ANV_DESCRIPTOR_INLINE_UNIFORM);
|
||||||
memcpy(dst->desc_mem.map + dst_layout->descriptor_offset +
|
memcpy(dst->desc_mem.map + dst_layout->descriptor_offset +
|
||||||
@@ -1481,6 +1478,9 @@ void anv_UpdateDescriptorSets(
|
|||||||
copy->srcArrayElement,
|
copy->srcArrayElement,
|
||||||
copy->descriptorCount);
|
copy->descriptorCount);
|
||||||
} else {
|
} else {
|
||||||
|
for (uint32_t j = 0; j < copy->descriptorCount; j++)
|
||||||
|
dst_desc[j] = src_desc[j];
|
||||||
|
|
||||||
unsigned desc_size = anv_descriptor_size(src_layout);
|
unsigned desc_size = anv_descriptor_size(src_layout);
|
||||||
if (desc_size > 0) {
|
if (desc_size > 0) {
|
||||||
assert(desc_size == anv_descriptor_size(dst_layout));
|
assert(desc_size == anv_descriptor_size(dst_layout));
|
||||||
|
Reference in New Issue
Block a user