yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1// metal-command-buffer.h 2#pragma once 3 4#include "../simple-transient-resource-heap.h" 5#include "metal-base.h" 6#include "metal-command-encoder.h" 7#include "metal-shader-object.h" 8 9namespace gfx 10{ 11 12using namespace Slang ; 13 14namespace metal 15{ 16 17class CommandBufferImpl :public ICommandBuffer ,public ComObject 18{ 19public : 20SLANG_COM_OBJECT_IUNKNOWN_ALL 21ICommandBuffer * getInterface (const Guid & guid ); 22 23public : 24RefPtr < DeviceImpl > m_device ; 25NS ::SharedPtr < MTL ::CommandBuffer > m_commandBuffer ; 26RootShaderObjectImpl m_rootObject ; 27// RefPtr<MutableRootShaderObjectImpl> m_mutableRootShaderObject; 28 29RefPtr < ResourceCommandEncoder > m_resourceCommandEncoder = nullptr ; 30RefPtr < ComputeCommandEncoder > m_computeCommandEncoder = nullptr ; 31RefPtr < RenderCommandEncoder > m_renderCommandEncoder = nullptr ; 32RefPtr < RayTracingCommandEncoder > m_rayTracingCommandEncoder = nullptr ; 33 34NS ::SharedPtr < MTL ::RenderCommandEncoder > m_metalRenderCommandEncoder ; 35NS ::SharedPtr < MTL ::ComputeCommandEncoder > m_metalComputeCommandEncoder ; 36NS ::SharedPtr < MTL ::BlitCommandEncoder > m_metalBlitCommandEncoder ; 37 38// Command buffers are deallocated by its command pool, 39// so no need to free individually. 40 ~CommandBufferImpl ()= default ; 41 42Result init (DeviceImpl * device ,TransientResourceHeapImpl * transientHeap ); 43 44void beginCommandBuffer (); 45 46MTL ::RenderCommandEncoder * getMetalRenderCommandEncoder ( 47MTL ::RenderPassDescriptor * renderPassDesc ); 48MTL ::ComputeCommandEncoder * getMetalComputeCommandEncoder (); 49MTL ::BlitCommandEncoder * getMetalBlitCommandEncoder (); 50void endMetalCommandEncoder (); 51 52public : 53virtual SLANG_NO_THROW void SLANG_MCALL encodeRenderCommands ( 54IRenderPassLayout * renderPass , 55IFramebuffer * framebuffer , 56IRenderCommandEncoder ** outEncoder )override ; 57virtual SLANG_NO_THROW void SLANG_MCALL 58encodeComputeCommands (IComputeCommandEncoder ** outEncoder )override ; 59virtual SLANG_NO_THROW void SLANG_MCALL 60encodeResourceCommands (IResourceCommandEncoder ** outEncoder )override ; 61virtual SLANG_NO_THROW void SLANG_MCALL 62encodeRayTracingCommands (IRayTracingCommandEncoder ** outEncoder )override ; 63virtual SLANG_NO_THROW void SLANG_MCALL close ()override ; 64virtual SLANG_NO_THROW Result SLANG_MCALL getNativeHandle ( InteropHandle * outHandle) override; 65}; 66 67} // namespace metal 68} // namespace gfx