yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1// metal-framebuffer.cpp 2#include "metal-framebuffer.h" 3 4#include "metal-device.h" 5#include "metal-helper-functions.h" 6#include "metal-resource-views.h" 7 8namespace gfx 9{ 10 11using namespace Slang ; 12 13namespace metal 14{ 15 16Result FramebufferLayoutImpl ::init (const IFramebufferLayout ::Desc & desc ) 17{ 18for (Index i = 0 ;i < desc .renderTargetCount ;++ i ) 19 { 20m_renderTargets .add (desc .renderTargets [i ]); 21 } 22if (desc .depthStencil ) 23 { 24m_depthStencil = * desc .depthStencil ; 25 } 26else 27 { 28m_depthStencil = {}; 29 } 30return SLANG_OK ; 31} 32 33Result FramebufferImpl ::init (DeviceImpl * device ,const IFramebuffer ::Desc & desc ) 34{ 35m_device = device ; 36m_layout = static_cast < FramebufferLayoutImpl *> (desc .layout ); 37m_renderTargetViews .setCount (desc .renderTargetCount ); 38for (Index i = 0 ;i < desc .renderTargetCount ;++ i ) 39 { 40m_renderTargetViews [i ]= static_cast < TextureResourceViewImpl *> (desc .renderTargetViews [i ]); 41 } 42m_depthStencilView = static_cast < TextureResourceViewImpl *> (desc .depthStencilView ); 43 44// Determine framebuffer dimensions & sample count; 45m_width = 1 ; 46m_height = 1 ; 47m_sampleCount = 1 ; 48 49auto visitView = [this ](TextureResourceViewImpl * view ) 50 { 51const ITextureResource ::Desc * textureDesc = view -> m_texture -> getDesc (); 52const IResourceView ::Desc * viewDesc = view -> getViewDesc (); 53m_width = 54Math ::Max (1u ,uint32_t (textureDesc -> size .width >>viewDesc -> subresourceRange .mipLevel )); 55m_height = Math ::Max ( 561u , 57uint32_t (textureDesc -> size .height >>viewDesc -> subresourceRange .mipLevel )); 58m_sampleCount = Math ::Max (m_sampleCount ,uint32_t (textureDesc -> sampleDesc .numSamples )); 59return SLANG_OK ; 60 }; 61 62for (auto view :m_renderTargetViews ) 63 { 64visitView (view ); 65 } 66if (m_depthStencilView ) 67 { 68visitView (m_depthStencilView ); 69 } 70 71return SLANG_OK ; 72} 73 74}// namespace metal 75}// namespace gfx