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,
const VkBuffer *counterBuffers,
bool rebindBuffer)
{
gl::TransformFeedbackBuffersArray<VkDeviceSize> offsets = {0, 0, 0, 0};
uint32_t counterBufferSize = (rebindBuffer) ? 0 : validBufferCount;
vkCmdBeginTransformFeedbackEXT(primCmdBuffer->getHandle(), 0, counterBufferSize, counterBuffers,
offsets.data());
uint32_t counterBufferCount = (rebindBuffer) ? 0 : validBufferCount;
primCmdBuffer->beginTransformFeedbackEXT(0, counterBufferCount, counterBuffers, nullptr);
}
ANGLE_MAYBE_UNUSED
......@@ -226,10 +223,7 @@ void InsertEndTransformFeedback(PrimaryCommandBuffer *primCmdBuffer,
uint32_t validBufferCount,
const VkBuffer *counterBuffers)
{
gl::TransformFeedbackBuffersArray<VkDeviceSize> offsets = {0, 0, 0, 0};
vkCmdEndTransformFeedbackEXT(primCmdBuffer->getHandle(), 0, validBufferCount, counterBuffers,
offsets.data());
primCmdBuffer->endTransformFeedbackEXT(0, validBufferCount, counterBuffers, nullptr);
}
ANGLE_MAYBE_UNUSED
......
......@@ -1266,9 +1266,9 @@ angle::Result ContextVk::handleDirtyGraphicsTransformFeedbackBuffersExtension(
const TransformFeedbackBufferRange &xfbBufferRangeExtension =
transformFeedbackVk->getTransformFeedbackBufferRange();
commandBuffer->bindTransformFeedbackBuffers(bufferCount, bufferHandles.data(),
xfbBufferRangeExtension.offsets.data(),
xfbBufferRangeExtension.sizes.data());
commandBuffer->bindTransformFeedbackBuffers(
static_cast<uint32_t>(bufferCount), bufferHandles.data(),
xfbBufferRangeExtension.offsets.data(), xfbBufferRangeExtension.sizes.data());
vk::FramebufferHelper *framebuffer = mDrawFramebuffer->getFramebuffer();
transformFeedbackVk->addFramebufferDependency(this, mProgram->getState(), framebuffer);
......
......@@ -451,7 +451,7 @@ class SecondaryCommandBuffer final : angle::NonCopyable
void bindIndexBuffer(const Buffer &buffer, VkDeviceSize offset, VkIndexType indexType);
void bindTransformFeedbackBuffers(size_t bindingCount,
void bindTransformFeedbackBuffers(uint32_t bindingCount,
const VkBuffer *buffers,
const VkDeviceSize *offsets,
const VkDeviceSize *sizes);
......@@ -796,7 +796,7 @@ ANGLE_INLINE void SecondaryCommandBuffer::bindIndexBuffer(const Buffer &buffer,
paramStruct->indexType = indexType;
}
ANGLE_INLINE void SecondaryCommandBuffer::bindTransformFeedbackBuffers(size_t bindingCount,
ANGLE_INLINE void SecondaryCommandBuffer::bindTransformFeedbackBuffers(uint32_t bindingCount,
const VkBuffer *buffers,
const VkDeviceSize *offsets,
const VkDeviceSize *sizes)
......@@ -810,7 +810,7 @@ ANGLE_INLINE void SecondaryCommandBuffer::bindTransformFeedbackBuffers(size_t bi
buffersSize + offsetsSize + sizesSize,
&writePtr);
// Copy params
paramStruct->bindingCount = static_cast<uint32_t>(bindingCount);
paramStruct->bindingCount = bindingCount;
writePtr = storePointerParameter(writePtr, buffers, buffersSize);
writePtr = storePointerParameter(writePtr, offsets, offsetsSize);
storePointerParameter(writePtr, sizes, sizesSize);
......
......@@ -356,6 +356,21 @@ class CommandBuffer : public WrappedObject<CommandBuffer, VkCommandBuffer>
void writeTimestamp(VkPipelineStageFlagBits pipelineStage,
VkQueryPool queryPool,
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
......@@ -1065,6 +1080,36 @@ ANGLE_INLINE void CommandBuffer::bindVertexBuffers(uint32_t firstBinding,
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
// 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