radv: fix optional pSizes parameter when binding streamout buffers

The Vulkan spec 1.2.135 says:

   "pSizes is an optional array of buffer sizes, specifying the maximum
   number of bytes to capture to the corresponding transform feedback
   buffer. If pSizes is NULL, or the value of the pSizes array element
   is VK_WHOLE_SIZE, then the maximum bytes captured will be the size
   of the corresponding buffer minus the buffer offset."

Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/2650
Fixes: b4eb029062 ("radv: implement VK_EXT_transform_feedback")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4232>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4232>
(cherry picked from commit 2d3223ca90)
This commit is contained in:
Samuel Pitoiset 2020-03-18 18:49:23 +01:00 committed by Dylan Baker
parent 3ab95d1846
commit f3766dada2
2 changed files with 7 additions and 2 deletions

View file

@ -121,7 +121,7 @@
"description": "radv: fix optional pSizes parameter when binding streamout buffers",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"master_sha": null,
"because_sha": "b4eb029062a944c428d6214447a852318e36016e"
},

View file

@ -5905,7 +5905,12 @@ void radv_CmdBindTransformFeedbackBuffersEXT(
sb[idx].buffer = radv_buffer_from_handle(pBuffers[i]);
sb[idx].offset = pOffsets[i];
sb[idx].size = pSizes[i];
if (!pSizes || pSizes[i] == VK_WHOLE_SIZE) {
sb[idx].size = sb[idx].buffer->size - sb[idx].offset;
} else {
sb[idx].size = pSizes[i];
}
radv_cs_add_buffer(cmd_buffer->device->ws, cmd_buffer->cs,
sb[idx].buffer->bo);