Skip to content

Commit e49a566

Browse files
vinsentlimeta-codesync[bot]
authored andcommitted
igl | Introduce new param 'attributeStride' for RenderCommandEncoder::bindVertexBuffer() (#423)
Summary: Pull Request resolved: #423 Reviewed By: rudybear Differential Revision: D114761433 Pulled By: corporateshark fbshipit-source-id: e6b85c74ad3e4d0ddaa6b7788c7e74b7d6b58460
1 parent 2e98b50 commit e49a566

9 files changed

Lines changed: 36 additions & 9 deletions

src/igl/RenderCommandEncoder.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,10 @@ class IRenderCommandEncoder : public ICommandEncoder {
6161
// On Vulkan and OpenGL: bind a vertex buffer (as in "a buffer with vertices").
6262
// On Metal: bind any buffer to the vertex stage. Apps should take care there are no 'index'
6363
// collisions between bindVertexBuffer() and bindBuffer()
64-
virtual void bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset = 0) = 0;
64+
virtual void bindVertexBuffer(uint32_t index,
65+
IBuffer& buffer,
66+
size_t bufferOffset = 0,
67+
size_t attributeStride = 0) = 0;
6568
virtual void bindIndexBuffer(IBuffer& buffer, IndexFormat format, size_t bufferOffset = 0) = 0;
6669
/// Creates and binds a temporary buffer to the specified buffer index.
6770
virtual void bindBytes(size_t index, uint8_t target, const void* data, size_t length) = 0;

src/igl/d3d12/RenderCommandEncoder.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -827,7 +827,10 @@ void RenderCommandEncoder::bindRenderPipelineState(
827827
void RenderCommandEncoder::bindDepthStencilState(
828828
const std::shared_ptr<IDepthStencilState>& /*depthStencilState*/) {}
829829

830-
void RenderCommandEncoder::bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) {
830+
void RenderCommandEncoder::bindVertexBuffer(uint32_t index,
831+
IBuffer& buffer,
832+
size_t bufferOffset,
833+
size_t /*attributeStride*/) {
831834
IGL_D3D12_LOG_VERBOSE("bindVertexBuffer called: index=%u\n", index);
832835
if (index >= IGL_BUFFER_BINDINGS_MAX) {
833836
IGL_LOG_ERROR("bindVertexBuffer: index %u exceeds max %u\n", index, IGL_BUFFER_BINDINGS_MAX);

src/igl/d3d12/RenderCommandEncoder.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,10 @@ class RenderCommandEncoder final : public IRenderCommandEncoder {
6060
void bindRenderPipelineState(const std::shared_ptr<IRenderPipelineState>& pipelineState) override;
6161
void bindDepthStencilState(const std::shared_ptr<IDepthStencilState>& depthStencilState) override;
6262

63-
void bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset = 0) override;
63+
void bindVertexBuffer(uint32_t index,
64+
IBuffer& buffer,
65+
size_t bufferOffset,
66+
size_t attributeStride) override;
6467
void bindIndexBuffer(IBuffer& buffer, IndexFormat format, size_t bufferOffset = 0) override;
6568

6669
void bindBytes(size_t index, uint8_t target, const void* data, size_t length) override;

src/igl/metal/RenderCommandEncoder.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ class RenderCommandEncoder final : public IRenderCommandEncoder {
4545
size_t bufferOffset,
4646
size_t bufferSize) override;
4747
void bindBuffer(uint32_t index, IBuffer* buffer, size_t bufferOffset, size_t bufferSize) override;
48-
void bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) override;
48+
void bindVertexBuffer(uint32_t index,
49+
IBuffer& buffer,
50+
size_t bufferOffset,
51+
size_t attributeStride) override;
4952
void bindIndexBuffer(IBuffer& buffer, IndexFormat format, size_t bufferOffset) override;
5053
void bindBytes(size_t index, uint8_t bindTarget, const void* data, size_t length) override;
5154
void bindPushConstants(const void* data, size_t length, size_t offset) override;

src/igl/metal/RenderCommandEncoder.mm

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,10 @@
372372
}
373373
}
374374

375-
void RenderCommandEncoder::bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) {
375+
void RenderCommandEncoder::bindVertexBuffer(uint32_t index,
376+
IBuffer& buffer,
377+
size_t bufferOffset,
378+
size_t attributeStride) {
376379
IGL_DEBUG_ASSERT(encoder_);
377380
IGL_DEBUG_ASSERT(index < IGL_BUFFER_BINDINGS_MAX);
378381

src/igl/opengl/RenderCommandEncoder.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,10 @@ void RenderCommandEncoder::bindBuffer(uint32_t index,
413413
}
414414
}
415415

416-
void RenderCommandEncoder::bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) {
416+
void RenderCommandEncoder::bindVertexBuffer(uint32_t index,
417+
IBuffer& buffer,
418+
size_t bufferOffset,
419+
size_t attributeStride) {
417420
IGL_PROFILER_FUNCTION();
418421
if (IGL_DEBUG_VERIFY(adapter_)) {
419422
Buffer& glBuffer = static_cast<Buffer&>(buffer);

src/igl/opengl/RenderCommandEncoder.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,10 @@ class RenderCommandEncoder final : public IRenderCommandEncoder, public WithCont
6363
size_t bufferOffset,
6464
size_t bufferSize) override;
6565
void bindBuffer(uint32_t index, IBuffer* buffer, size_t bufferOffset, size_t bufferSize) override;
66-
void bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) override;
66+
void bindVertexBuffer(uint32_t index,
67+
IBuffer& buffer,
68+
size_t bufferOffset,
69+
size_t attributeStride) override;
6770
void bindIndexBuffer(IBuffer& buffer, IndexFormat format, size_t bufferOffset) override;
6871
void bindBytes(size_t index, uint8_t target, const void* data, size_t length) override;
6972
void bindPushConstants(const void* data, size_t length, size_t offset) override;

src/igl/vulkan/RenderCommandEncoder.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,10 @@ void RenderCommandEncoder::bindBuffer(uint32_t index,
512512
binder_.bindBuffer(index, buf, bufferOffset, bufferSize);
513513
}
514514

515-
void RenderCommandEncoder::bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) {
515+
void RenderCommandEncoder::bindVertexBuffer(uint32_t index,
516+
IBuffer& buffer,
517+
size_t bufferOffset,
518+
size_t attributeStride) {
516519
IGL_PROFILER_FUNCTION();
517520
IGL_PROFILER_ZONE_GPU_VK("bindVertexBuffer()", ctx_.tracyCtx_, cmdBuffer_);
518521

src/igl/vulkan/RenderCommandEncoder.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ class RenderCommandEncoder : public IRenderCommandEncoder {
6464
size_t bufferOffset,
6565
size_t bufferSize) override;
6666
void bindBuffer(uint32_t index, IBuffer* buffer, size_t bufferOffset, size_t bufferSize) override;
67-
void bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) override;
67+
void bindVertexBuffer(uint32_t index,
68+
IBuffer& buffer,
69+
size_t bufferOffset,
70+
size_t attributeStride) override;
6871
void bindIndexBuffer(IBuffer& buffer, IndexFormat format, size_t bufferOffset) override;
6972

7073
/// @brief Not implemented

0 commit comments

Comments
 (0)