diff --git a/src/panfrost/ci/deqp-panfrost-g52-vk.toml b/src/panfrost/ci/deqp-panfrost-g52-vk.toml index 24affc9aae6..c0044b140ce 100644 --- a/src/panfrost/ci/deqp-panfrost-g52-vk.toml +++ b/src/panfrost/ci/deqp-panfrost-g52-vk.toml @@ -11,6 +11,7 @@ include = [ "dEQP-VK.api.command_buffers.render_pass_continue", "dEQP-VK.api.command_buffers.render_pass_continue_no_fb", "dEQP-VK.api.copy_and_blit.core.*", + "dEQP-VK.api.fill_and_update_buffer.suballocation.*", "dEQP-VK.binding_model.descriptor_copy.compute.*", "dEQP-VK.compute.builtin_var.*", "dEQP-VK.draw.renderpass.instanced.draw_indexed_vk_*", diff --git a/src/panfrost/vulkan/panvk_vX_meta_copy.c b/src/panfrost/vulkan/panvk_vX_meta_copy.c index e86d0f1c783..6df1d52429b 100644 --- a/src/panfrost/vulkan/panvk_vX_meta_copy.c +++ b/src/panfrost/vulkan/panvk_vX_meta_copy.c @@ -2000,6 +2000,16 @@ panvk_meta_fill_buf(struct panvk_cmd_buffer *cmdbuf, }; size = panvk_buffer_range(dst, offset, size); + /* From the Vulkan spec: + * + * "size is the number of bytes to fill, and must be either a multiple + * of 4, or VK_WHOLE_SIZE to fill the range from offset to the end of + * the buffer. If VK_WHOLE_SIZE is used and the remaining size of the + * buffer is not a multiple of 4, then the nearest smaller multiple is + * used." + */ + size &= ~3ull; + assert(!(offset & 3) && !(size & 3)); unsigned nwords = size / sizeof(uint32_t);