Commit 943c3bc1 by Jian Li Committed by Commit Bot

Vulkan: Fix transform feedback on AMD platform

Make sure pCounterBufferOffsets is never a null pointer when counterBufferCount is greater than zero. Bug: angleproject:3206 Change-Id: If161473239b53d2a65b1cccaaf1426a4fefd243a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2152030 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 005793e4
...@@ -493,8 +493,12 @@ void SecondaryCommandBuffer::executeCommands(VkCommandBuffer cmdBuffer) ...@@ -493,8 +493,12 @@ void SecondaryCommandBuffer::executeCommands(VkCommandBuffer cmdBuffer)
getParamPtr<BeginTransformFeedbackParams>(currentCommand); getParamPtr<BeginTransformFeedbackParams>(currentCommand);
const VkBuffer *counterBuffers = const VkBuffer *counterBuffers =
Offset<VkBuffer>(params, sizeof(BeginTransformFeedbackParams)); Offset<VkBuffer>(params, sizeof(BeginTransformFeedbackParams));
// Workaround for AMD driver bug where it expects the offsets array to be
// non-null
gl::TransformFeedbackBuffersArray<VkDeviceSize> offsets;
offsets.fill(0);
vkCmdBeginTransformFeedbackEXT(cmdBuffer, 0, params->bufferCount, vkCmdBeginTransformFeedbackEXT(cmdBuffer, 0, params->bufferCount,
counterBuffers, nullptr); counterBuffers, offsets.data());
break; break;
} }
case CommandID::EndTransformFeedback: case CommandID::EndTransformFeedback:
...@@ -503,8 +507,12 @@ void SecondaryCommandBuffer::executeCommands(VkCommandBuffer cmdBuffer) ...@@ -503,8 +507,12 @@ void SecondaryCommandBuffer::executeCommands(VkCommandBuffer cmdBuffer)
getParamPtr<EndTransformFeedbackParams>(currentCommand); getParamPtr<EndTransformFeedbackParams>(currentCommand);
const VkBuffer *counterBuffers = const VkBuffer *counterBuffers =
Offset<VkBuffer>(params, sizeof(EndTransformFeedbackParams)); Offset<VkBuffer>(params, sizeof(EndTransformFeedbackParams));
// Workaround for AMD driver bug where it expects the offsets array to be
// non-null
gl::TransformFeedbackBuffersArray<VkDeviceSize> offsets;
offsets.fill(0);
vkCmdEndTransformFeedbackEXT(cmdBuffer, 0, params->bufferCount, counterBuffers, vkCmdEndTransformFeedbackEXT(cmdBuffer, 0, params->bufferCount, counterBuffers,
nullptr); offsets.data());
break; break;
} }
default: default:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment