Skip to content

Commit 61598c5

Browse files
committed
Merge pull request #96349 from pkdawson/metal-idx-offset
Metal: Bind index buffer with offset
2 parents ace4529 + f381cee commit 61598c5

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

drivers/metal/metal_objects.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ class API_AVAILABLE(macos(11.0), ios(14.0)) MDCommandBuffer {
227227
id<MTLRenderCommandEncoder> encoder = nil;
228228
id<MTLBuffer> __unsafe_unretained index_buffer = nil; // Buffer is owned by RDD.
229229
MTLIndexType index_type = MTLIndexTypeUInt16;
230+
uint32_t index_offset = 0;
230231
LocalVector<id<MTLBuffer> __unsafe_unretained> vertex_buffers;
231232
LocalVector<NSUInteger> vertex_offsets;
232233
// clang-format off

drivers/metal/metal_objects.mm

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,7 @@
717717

718718
render.index_buffer = rid::get(p_buffer);
719719
render.index_type = p_format == RDD::IndexBufferFormat::INDEX_BUFFER_FORMAT_UINT16 ? MTLIndexTypeUInt16 : MTLIndexTypeUInt32;
720+
render.index_offset = p_offset;
720721
}
721722

722723
void MDCommandBuffer::render_draw_indexed(uint32_t p_index_count,
@@ -729,13 +730,16 @@
729730

730731
id<MTLRenderCommandEncoder> enc = render.encoder;
731732

733+
uint32_t index_offset = render.index_offset;
734+
index_offset += p_first_index * (render.index_type == MTLIndexTypeUInt16 ? sizeof(uint16_t) : sizeof(uint32_t));
735+
732736
[enc drawIndexedPrimitives:render.pipeline->raster_state.render_primitive
733737
indexCount:p_index_count
734738
indexType:render.index_type
735739
indexBuffer:render.index_buffer
736-
indexBufferOffset:p_vertex_offset
740+
indexBufferOffset:index_offset
737741
instanceCount:p_instance_count
738-
baseVertex:p_first_index
742+
baseVertex:p_vertex_offset
739743
baseInstance:p_first_instance];
740744
}
741745

0 commit comments

Comments
 (0)