Commit ca035803 by Jamie Madill Committed by Commit Bot

Vulkan: Add missing wrapper functions for XFB.

Found when working on the command graph refactor. Also replace the offsets array with nullptr which should have the same effect. Bug: angleproject:4029 Change-Id: I72e31c5403c645d72619e14aafef612e454183f1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2043270 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarTim Van Patten <timvp@google.com>
parent 51fd2958
...@@ -213,11 +213,8 @@ void InsertBeginTransformFeedback(PrimaryCommandBuffer *primCmdBuffer, ...@@ -213,11 +213,8 @@ void InsertBeginTransformFeedback(PrimaryCommandBuffer *primCmdBuffer,
const VkBuffer *counterBuffers, const VkBuffer *counterBuffers,
bool rebindBuffer) bool rebindBuffer)
{ {
gl::TransformFeedbackBuffersArray<VkDeviceSize> offsets = {0, 0, 0, 0}; uint32_t counterBufferCount = (rebindBuffer) ? 0 : validBufferCount;
uint32_t counterBufferSize = (rebindBuffer) ? 0 : validBufferCount; primCmdBuffer->beginTransformFeedbackEXT(0, counterBufferCount, counterBuffers, nullptr);
vkCmdBeginTransformFeedbackEXT(primCmdBuffer->getHandle(), 0, counterBufferSize, counterBuffers,
offsets.data());
} }
ANGLE_MAYBE_UNUSED ANGLE_MAYBE_UNUSED
...@@ -226,10 +223,7 @@ void InsertEndTransformFeedback(PrimaryCommandBuffer *primCmdBuffer, ...@@ -226,10 +223,7 @@ void InsertEndTransformFeedback(PrimaryCommandBuffer *primCmdBuffer,
uint32_t validBufferCount, uint32_t validBufferCount,
const VkBuffer *counterBuffers) const VkBuffer *counterBuffers)
{ {
gl::TransformFeedbackBuffersArray<VkDeviceSize> offsets = {0, 0, 0, 0}; primCmdBuffer->endTransformFeedbackEXT(0, validBufferCount, counterBuffers, nullptr);
vkCmdEndTransformFeedbackEXT(primCmdBuffer->getHandle(), 0, validBufferCount, counterBuffers,
offsets.data());
} }
ANGLE_MAYBE_UNUSED ANGLE_MAYBE_UNUSED
......
...@@ -1266,9 +1266,9 @@ angle::Result ContextVk::handleDirtyGraphicsTransformFeedbackBuffersExtension( ...@@ -1266,9 +1266,9 @@ angle::Result ContextVk::handleDirtyGraphicsTransformFeedbackBuffersExtension(
const TransformFeedbackBufferRange &xfbBufferRangeExtension = const TransformFeedbackBufferRange &xfbBufferRangeExtension =
transformFeedbackVk->getTransformFeedbackBufferRange(); transformFeedbackVk->getTransformFeedbackBufferRange();
commandBuffer->bindTransformFeedbackBuffers(bufferCount, bufferHandles.data(), commandBuffer->bindTransformFeedbackBuffers(
xfbBufferRangeExtension.offsets.data(), static_cast<uint32_t>(bufferCount), bufferHandles.data(),
xfbBufferRangeExtension.sizes.data()); xfbBufferRangeExtension.offsets.data(), xfbBufferRangeExtension.sizes.data());
vk::FramebufferHelper *framebuffer = mDrawFramebuffer->getFramebuffer(); vk::FramebufferHelper *framebuffer = mDrawFramebuffer->getFramebuffer();
transformFeedbackVk->addFramebufferDependency(this, mProgram->getState(), framebuffer); transformFeedbackVk->addFramebufferDependency(this, mProgram->getState(), framebuffer);
......
...@@ -451,7 +451,7 @@ class SecondaryCommandBuffer final : angle::NonCopyable ...@@ -451,7 +451,7 @@ class SecondaryCommandBuffer final : angle::NonCopyable
void bindIndexBuffer(const Buffer &buffer, VkDeviceSize offset, VkIndexType indexType); void bindIndexBuffer(const Buffer &buffer, VkDeviceSize offset, VkIndexType indexType);
void bindTransformFeedbackBuffers(size_t bindingCount, void bindTransformFeedbackBuffers(uint32_t bindingCount,
const VkBuffer *buffers, const VkBuffer *buffers,
const VkDeviceSize *offsets, const VkDeviceSize *offsets,
const VkDeviceSize *sizes); const VkDeviceSize *sizes);
...@@ -796,7 +796,7 @@ ANGLE_INLINE void SecondaryCommandBuffer::bindIndexBuffer(const Buffer &buffer, ...@@ -796,7 +796,7 @@ ANGLE_INLINE void SecondaryCommandBuffer::bindIndexBuffer(const Buffer &buffer,
paramStruct->indexType = indexType; paramStruct->indexType = indexType;
} }
ANGLE_INLINE void SecondaryCommandBuffer::bindTransformFeedbackBuffers(size_t bindingCount, ANGLE_INLINE void SecondaryCommandBuffer::bindTransformFeedbackBuffers(uint32_t bindingCount,
const VkBuffer *buffers, const VkBuffer *buffers,
const VkDeviceSize *offsets, const VkDeviceSize *offsets,
const VkDeviceSize *sizes) const VkDeviceSize *sizes)
...@@ -810,7 +810,7 @@ ANGLE_INLINE void SecondaryCommandBuffer::bindTransformFeedbackBuffers(size_t bi ...@@ -810,7 +810,7 @@ ANGLE_INLINE void SecondaryCommandBuffer::bindTransformFeedbackBuffers(size_t bi
buffersSize + offsetsSize + sizesSize, buffersSize + offsetsSize + sizesSize,
&writePtr); &writePtr);
// Copy params // Copy params
paramStruct->bindingCount = static_cast<uint32_t>(bindingCount); paramStruct->bindingCount = bindingCount;
writePtr = storePointerParameter(writePtr, buffers, buffersSize); writePtr = storePointerParameter(writePtr, buffers, buffersSize);
writePtr = storePointerParameter(writePtr, offsets, offsetsSize); writePtr = storePointerParameter(writePtr, offsets, offsetsSize);
storePointerParameter(writePtr, sizes, sizesSize); storePointerParameter(writePtr, sizes, sizesSize);
......
...@@ -356,6 +356,21 @@ class CommandBuffer : public WrappedObject<CommandBuffer, VkCommandBuffer> ...@@ -356,6 +356,21 @@ class CommandBuffer : public WrappedObject<CommandBuffer, VkCommandBuffer>
void writeTimestamp(VkPipelineStageFlagBits pipelineStage, void writeTimestamp(VkPipelineStageFlagBits pipelineStage,
VkQueryPool queryPool, VkQueryPool queryPool,
uint32_t query); uint32_t query);
// VK_EXT_transform_feedback
void beginTransformFeedbackEXT(uint32_t firstCounterBuffer,
uint32_t counterBufferCount,
const VkBuffer *counterBuffers,
const VkDeviceSize *counterBufferOffsets);
void endTransformFeedbackEXT(uint32_t firstCounterBuffer,
uint32_t counterBufferCount,
const VkBuffer *counterBuffers,
const VkDeviceSize *counterBufferOffsets);
void bindTransformFeedbackBuffersEXT(uint32_t firstBinding,
uint32_t bindingCount,
const VkBuffer *buffers,
const VkDeviceSize *offsets,
const VkDeviceSize *sizes);
}; };
} // namespace priv } // namespace priv
...@@ -1065,6 +1080,36 @@ ANGLE_INLINE void CommandBuffer::bindVertexBuffers(uint32_t firstBinding, ...@@ -1065,6 +1080,36 @@ ANGLE_INLINE void CommandBuffer::bindVertexBuffers(uint32_t firstBinding,
vkCmdBindVertexBuffers(mHandle, firstBinding, bindingCount, buffers, offsets); vkCmdBindVertexBuffers(mHandle, firstBinding, bindingCount, buffers, offsets);
} }
ANGLE_INLINE void CommandBuffer::beginTransformFeedbackEXT(uint32_t firstCounterBuffer,
uint32_t counterBufferCount,
const VkBuffer *counterBuffers,
const VkDeviceSize *counterBufferOffsets)
{
ASSERT(valid());
vkCmdBeginTransformFeedbackEXT(mHandle, firstCounterBuffer, counterBufferCount, counterBuffers,
counterBufferOffsets);
}
ANGLE_INLINE void CommandBuffer::endTransformFeedbackEXT(uint32_t firstCounterBuffer,
uint32_t counterBufferCount,
const VkBuffer *counterBuffers,
const VkDeviceSize *counterBufferOffsets)
{
ASSERT(valid());
vkCmdEndTransformFeedbackEXT(mHandle, firstCounterBuffer, counterBufferCount, counterBuffers,
counterBufferOffsets);
}
ANGLE_INLINE void CommandBuffer::bindTransformFeedbackBuffersEXT(uint32_t firstBinding,
uint32_t bindingCount,
const VkBuffer *buffers,
const VkDeviceSize *offsets,
const VkDeviceSize *sizes)
{
ASSERT(valid());
vkCmdBindTransformFeedbackBuffersEXT(mHandle, firstBinding, bindingCount, buffers, offsets,
sizes);
}
} // namespace priv } // namespace priv
// Image implementation. // Image implementation.
......
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