@@ -907,24 +907,47 @@ - (void)setDepthBoundsTestAMD:(BOOL)enable minDepth:(float)minDepth maxDepth:(fl
907
907
auto * pipeline = _cmdEncoder->getGraphicsPipeline ();
908
908
bool fullImageViewSwizzle = pipeline->fullImageViewSwizzle () || _cmdEncoder->getMetalFeatures ().nativeTextureSwizzle ;
909
909
bool forTessellation = pipeline->isTessellationPipeline ();
910
- bool isDynamicVertexStride = pipeline->isDynamicState (VertexStride);
910
+ bool isDynamicVertexStride = pipeline->isDynamicState (VertexStride) && _cmdEncoder-> getMetalFeatures (). dynamicVertexStride ;
911
911
912
912
if (stage == kMVKGraphicsStageVertex ) {
913
913
encodeBindings (kMVKShaderStageVertex , " vertex" , fullImageViewSwizzle,
914
- [](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b)->void {
915
- if (b.isInline )
916
- cmdEncoder->setComputeBytes (cmdEncoder->getMTLComputeEncoder (kMVKCommandUseTessellationVertexTessCtl ),
917
- b.mtlBytes ,
918
- b.size ,
919
- b.index );
920
- else if (b.justOffset )
921
- [cmdEncoder->getMTLComputeEncoder (kMVKCommandUseTessellationVertexTessCtl )
922
- setBufferOffset: b.offset
923
- atIndex: b.index];
924
- else
925
- [cmdEncoder->getMTLComputeEncoder (kMVKCommandUseTessellationVertexTessCtl ) setBuffer: b.mtlBuffer
926
- offset: b.offset
927
- atIndex: b.index];
914
+ [isDynamicVertexStride](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b)->void {
915
+ if (isDynamicVertexStride) {
916
+ #if MVK_XCODE_15
917
+ if (b.isInline )
918
+ cmdEncoder->setComputeBytesWithStride (cmdEncoder->getMTLComputeEncoder (kMVKCommandUseTessellationVertexTessCtl ),
919
+ b.mtlBytes ,
920
+ b.size ,
921
+ b.index ,
922
+ b.stride );
923
+ else if (b.justOffset )
924
+ [cmdEncoder->getMTLComputeEncoder (kMVKCommandUseTessellationVertexTessCtl )
925
+ setBufferOffset: b.offset
926
+ attributeStride: b.stride
927
+ atIndex: b.index];
928
+ else
929
+ [cmdEncoder->getMTLComputeEncoder (kMVKCommandUseTessellationVertexTessCtl )
930
+ setBuffer: b.mtlBuffer
931
+ offset: b.offset
932
+ attributeStride: b.stride
933
+ atIndex: b.index];
934
+ #endif
935
+ } else {
936
+ if (b.isInline )
937
+ cmdEncoder->setComputeBytes (cmdEncoder->getMTLComputeEncoder (kMVKCommandUseTessellationVertexTessCtl ),
938
+ b.mtlBytes ,
939
+ b.size ,
940
+ b.index );
941
+ else if (b.justOffset )
942
+ [cmdEncoder->getMTLComputeEncoder (kMVKCommandUseTessellationVertexTessCtl )
943
+ setBufferOffset: b.offset
944
+ atIndex: b.index];
945
+ else
946
+ [cmdEncoder->getMTLComputeEncoder (kMVKCommandUseTessellationVertexTessCtl )
947
+ setBuffer: b.mtlBuffer
948
+ offset: b.offset
949
+ atIndex: b.index];
950
+ }
928
951
},
929
952
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, MVKArrayRef<const uint32_t > s)->void {
930
953
cmdEncoder->setComputeBytes (cmdEncoder->getMTLComputeEncoder (kMVKCommandUseTessellationVertexTessCtl ),
0 commit comments