yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1// metal-sampler.cpp 2#include "metal-sampler.h" 3 4#include "metal-util.h" 5 6namespace gfx 7{ 8 9using namespace Slang ; 10 11namespace metal 12{ 13 14SamplerStateImpl ::~SamplerStateImpl () {} 15 16Result SamplerStateImpl ::init (DeviceImpl * device ,const ISamplerState ::Desc & desc ) 17{ 18m_device = device ; 19 20NS ::SharedPtr < MTL ::SamplerDescriptor > samplerDesc = 21NS ::TransferPtr (MTL ::SamplerDescriptor ::alloc ()-> init ()); 22 23samplerDesc -> setMinFilter (MetalUtil ::translateSamplerMinMagFilter (desc .minFilter )); 24samplerDesc -> setMagFilter (MetalUtil ::translateSamplerMinMagFilter (desc .magFilter )); 25samplerDesc -> setMipFilter (MetalUtil ::translateSamplerMipFilter (desc .mipFilter )); 26 27samplerDesc -> setSAddressMode (MetalUtil ::translateSamplerAddressMode (desc .addressU )); 28samplerDesc -> setTAddressMode (MetalUtil ::translateSamplerAddressMode (desc .addressV )); 29samplerDesc -> setRAddressMode (MetalUtil ::translateSamplerAddressMode (desc .addressW )); 30 31samplerDesc -> setMaxAnisotropy (Math ::Clamp (desc .maxAnisotropy ,1u ,16u )); 32 33// TODO: support translation of border color... 34MTL ::SamplerBorderColor borderColor = MTL ::SamplerBorderColorOpaqueBlack ; 35samplerDesc -> setBorderColor (borderColor ); 36 37samplerDesc -> setNormalizedCoordinates (true); 38 39samplerDesc -> setCompareFunction (MetalUtil ::translateCompareFunction (desc .comparisonFunc )); 40samplerDesc -> setLodMinClamp (Math ::Clamp (desc .minLOD ,0.f ,1000.f )); 41samplerDesc -> setLodMaxClamp (Math ::Clamp (desc .maxLOD ,samplerDesc -> lodMinClamp (),1000.f )); 42 43samplerDesc -> setSupportArgumentBuffers (true); 44 45// TODO: no support for reduction op 46 47m_samplerState = NS ::TransferPtr (m_device -> m_device -> newSamplerState (samplerDesc .get ())); 48 49return m_samplerState ?SLANG_OK :SLANG_FAIL ; 50} 51 52Result SamplerStateImpl ::getNativeHandle (InteropHandle * outHandle ) 53{ 54outHandle -> api = InteropHandleAPI ::Metal ; 55outHandle -> handleValue = reinterpret_cast < intptr_t > (m_samplerState .get ()); 56return SLANG_OK ; 57} 58 59}// namespace metal 60}// namespace gfx