anv: Check for VK_WHOLE_SIZE in anv_CmdFillBuffer
authorNicolas Koch <nioko1337@gmail.com>
Tue, 20 Sep 2016 15:37:36 +0000 (17:37 +0200)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 23 Sep 2016 07:20:16 +0000 (00:20 -0700)
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.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/anv_meta_clear.c

index ed4d1db9d450cf25f48665c0850867a44e45effd..fd0797f31d70ff23ae46290508c1618d9d88b6fd 100644 (file)
@@ -1012,6 +1012,12 @@ void anv_CmdFillBuffer(
 
    meta_clear_begin(&saved_state, cmd_buffer);
 
+   if (fillSize == VK_WHOLE_SIZE) {
+      fillSize = dst_buffer->size - dstOffset;
+      /* Make sure fillSize is a multiple of 4 */
+      fillSize -= fillSize & 3;
+   }
+
    VkFormat format;
    int bs;
    if ((fillSize & 15) == 0 && (dstOffset & 15) == 0) {