yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1// cuda-command-encoder.h 2#pragma once 3#include "cuda-base.h" 4 5namespace gfx 6{ 7#ifdef GFX_ENABLE_CUDA 8using namespace Slang ; 9 10namespace cuda 11{ 12 13class ResourceCommandEncoderImpl :public IResourceCommandEncoder 14{ 15public : 16CommandWriter * m_writer ; 17 18virtual void * getInterface (SlangUUID const & uuid ) 19 { 20if (uuid == GfxGUID ::IID_IResourceCommandEncoder || uuid == ISlangUnknown ::getTypeGuid ()) 21return this ; 22return nullptr ; 23 } 24virtual SLANG_NO_THROW SlangResult SLANG_MCALL 25queryInterface (SlangUUID const & uuid ,void ** outObject )override 26 { 27if (auto ptr = getInterface (uuid )) 28 { 29* outObject = ptr ; 30return SLANG_OK ; 31 } 32return SLANG_E_NO_INTERFACE ; 33 } 34virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef ()override {return 1 ; } 35virtual SLANG_NO_THROW uint32_t SLANG_MCALL release ()override {return 1 ; } 36 37void init (CommandBufferImpl * cmdBuffer ); 38 39virtual SLANG_NO_THROW void SLANG_MCALL endEncoding ()override {} 40virtual SLANG_NO_THROW void SLANG_MCALL copyBuffer ( 41IBufferResource * dst , 42Offset dstOffset , 43IBufferResource * src , 44Offset srcOffset , 45Size size )override ; 46 47virtual SLANG_NO_THROW void SLANG_MCALL textureBarrier ( 48GfxCount count , 49ITextureResource * const * textures , 50ResourceState src , 51ResourceState dst )override 52 { 53 } 54 55virtual SLANG_NO_THROW void SLANG_MCALL bufferBarrier ( 56GfxCount count , 57IBufferResource * const * buffers , 58ResourceState src , 59ResourceState dst )override 60 { 61 } 62 63virtual SLANG_NO_THROW void SLANG_MCALL 64uploadBufferData (IBufferResource * dst ,Offset offset ,Size size ,void * data )override ; 65 66virtual SLANG_NO_THROW void SLANG_MCALL 67writeTimestamp (IQueryPool * pool ,GfxIndex index )override ; 68 69virtual SLANG_NO_THROW void SLANG_MCALL copyTexture ( 70ITextureResource * dst , 71ResourceState dstState , 72SubresourceRange dstSubresource , 73ITextureResource ::Offset3D dstOffset , 74ITextureResource * src , 75ResourceState srcState , 76SubresourceRange srcSubresource , 77ITextureResource ::Offset3D srcOffset , 78ITextureResource ::Extents extent )override ; 79 80virtual SLANG_NO_THROW void SLANG_MCALL uploadTextureData ( 81ITextureResource * dst , 82SubresourceRange subResourceRange , 83ITextureResource ::Offset3D offset , 84ITextureResource ::Extents extent , 85ITextureResource ::SubresourceData * subResourceData , 86GfxCount subResourceDataCount )override ; 87 88virtual SLANG_NO_THROW void SLANG_MCALL clearResourceView ( 89IResourceView * view , 90ClearValue * clearValue , 91ClearResourceViewFlags ::Enum flags )override ; 92 93virtual SLANG_NO_THROW void SLANG_MCALL resolveResource ( 94ITextureResource * source , 95ResourceState sourceState , 96SubresourceRange sourceRange , 97ITextureResource * dest , 98ResourceState destState , 99SubresourceRange destRange )override ; 100 101virtual SLANG_NO_THROW void SLANG_MCALL resolveQuery ( 102IQueryPool * queryPool , 103GfxIndex index , 104GfxCount count , 105IBufferResource * buffer , 106Offset offset )override ; 107 108virtual SLANG_NO_THROW void SLANG_MCALL copyTextureToBuffer ( 109IBufferResource * dst , 110Offset dstOffset , 111Size dstSize , 112Size dstRowStride , 113ITextureResource * src , 114ResourceState srcState , 115SubresourceRange srcSubresource , 116ITextureResource ::Offset3D srcOffset , 117ITextureResource ::Extents extent )override ; 118 119virtual SLANG_NO_THROW void SLANG_MCALL textureSubresourceBarrier ( 120ITextureResource * texture , 121SubresourceRange subresourceRange , 122ResourceState src , 123ResourceState dst )override ; 124virtual SLANG_NO_THROW void SLANG_MCALL 125beginDebugEvent (const char * name ,float rgbColor [3 ])override ; 126virtual SLANG_NO_THROW void SLANG_MCALL endDebugEvent ()override {} 127}; 128 129class ComputeCommandEncoderImpl :public IComputeCommandEncoder ,public ResourceCommandEncoderImpl 130{ 131public : 132SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL (ResourceCommandEncoderImpl ) 133virtual void * getInterface (SlangUUID const & uuid )override 134 { 135if (uuid == GfxGUID ::IID_IResourceCommandEncoder || 136uuid == GfxGUID ::IID_IComputeCommandEncoder || uuid == ISlangUnknown ::getTypeGuid ()) 137return this ; 138return nullptr ; 139 } 140 141public : 142CommandWriter * m_writer ; 143CommandBufferImpl * m_commandBuffer ; 144RefPtr < ShaderObjectBase > m_rootObject ; 145virtual SLANG_NO_THROW void SLANG_MCALL endEncoding ()override {} 146void init (CommandBufferImpl * cmdBuffer ); 147 148virtual SLANG_NO_THROW Result SLANG_MCALL 149bindPipeline (IPipelineState * state ,IShaderObject ** outRootObject )override ; 150 151virtual SLANG_NO_THROW Result SLANG_MCALL 152bindPipelineWithRootObject (IPipelineState * state ,IShaderObject * rootObject )override ; 153 154virtual SLANG_NO_THROW Result SLANG_MCALL dispatchCompute (int x ,int y ,int z )override ; 155 156virtual SLANG_NO_THROW Result SLANG_MCALL 157dispatchComputeIndirect (IBufferResource * argBuffer ,Offset offset )override ; 158}; 159 160}// namespace cuda 161#endif 162}// namespace gfx