yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1// metal-vertex-layout.cpp 2#include "metal-vertex-layout.h" 3 4#include "metal-util.h" 5 6namespace gfx 7{ 8 9using namespace Slang ; 10 11namespace metal 12{ 13 14Result InputLayoutImpl ::init (const IInputLayout ::Desc & desc ) 15{ 16for (Index i = 0 ;i < desc .inputElementCount ;i ++ ) 17 { 18if (MetalUtil ::translateVertexFormat (desc .inputElements [i ].format )== 19MTL ::VertexFormatInvalid ) 20 { 21return SLANG_E_INVALID_ARG ; 22 } 23m_inputElements .add (desc .inputElements [i ]); 24 } 25for (Index i = 0 ;i < desc .vertexStreamCount ;i ++ ) 26 { 27m_vertexStreams .add (desc .vertexStreams [i ]); 28 } 29return SLANG_OK ; 30} 31 32NS ::SharedPtr < MTL ::VertexDescriptor > InputLayoutImpl ::createVertexDescriptor ( 33NS ::UInteger vertexBufferIndexOffset ) 34{ 35NS ::SharedPtr < MTL ::VertexDescriptor > vertexDescriptor = 36NS ::TransferPtr (MTL ::VertexDescriptor ::alloc ()-> init ()); 37 38for (Index i = 0 ;i < m_inputElements .getCount ();i ++ ) 39 { 40const auto & inputElement = m_inputElements [i ]; 41MTL ::VertexAttributeDescriptor * desc = vertexDescriptor -> attributes ()-> object (i ); 42desc -> setOffset (inputElement .offset ); 43desc -> setBufferIndex (inputElement .bufferSlotIndex + vertexBufferIndexOffset ); 44MTL ::VertexFormat metalFormat = MetalUtil ::translateVertexFormat (inputElement .format ); 45desc -> setFormat (metalFormat ); 46 } 47 48for (Index i = 0 ;i < m_vertexStreams .getCount ();i ++ ) 49 { 50const auto & vertexStream = m_vertexStreams [i ]; 51MTL ::VertexBufferLayoutDescriptor * desc = 52vertexDescriptor -> layouts ()-> object (i + vertexBufferIndexOffset ); 53desc -> setStepFunction (MetalUtil ::translateVertexStepFunction (vertexStream .slotClass )); 54desc -> setStepRate ( 55vertexStream .slotClass == InputSlotClass ::PerVertex 56 ?1 57 :vertexStream .instanceDataStepRate ); 58desc -> setStride (vertexStream .stride ); 59 } 60 61return vertexDescriptor ; 62} 63 64}// namespace metal 65}// namespace gfx