yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1// debug-command-encoder.h 2#pragma once 3#include "debug-base.h" 4 5namespace gfx 6{ 7using namespace Slang ; 8 9namespace debug 10{ 11 12class DebugResourceCommandEncoderImpl 13{ 14public : 15virtual DebugCommandBuffer * getCommandBuffer ()= 0 ; 16virtual bool getIsOpen ()= 0 ; 17virtual IResourceCommandEncoder * getBaseResourceEncoder ()= 0 ; 18virtual void * getInterface (SlangUUID const & uuid )= 0 ; 19SlangResult queryInterface (SlangUUID const & uuid ,void ** outObject ) 20 { 21if (auto ptr = getInterface (uuid )) 22 { 23* outObject = ptr ; 24return SLANG_OK ; 25 } 26return SLANG_E_NO_INTERFACE ; 27 } 28uint32_t addRef () {return 1 ; } 29uint32_t release () {return 1 ; } 30 31public : 32virtual SLANG_NO_THROW void SLANG_MCALL copyBuffer ( 33IBufferResource * dst , 34Offset dstOffset , 35IBufferResource * src , 36Offset srcOffset , 37Size size ); 38virtual SLANG_NO_THROW void SLANG_MCALL 39uploadBufferData (IBufferResource * dst ,Offset offset ,Size size ,void * data ); 40virtual SLANG_NO_THROW void SLANG_MCALL writeTimestamp (IQueryPool * pool ,GfxIndex index ); 41virtual SLANG_NO_THROW void SLANG_MCALL textureBarrier ( 42GfxCount count , 43ITextureResource * const * textures , 44ResourceState src , 45ResourceState dst ); 46virtual SLANG_NO_THROW void SLANG_MCALL bufferBarrier ( 47GfxCount count , 48IBufferResource * const * buffers , 49ResourceState src , 50ResourceState dst ); 51virtual SLANG_NO_THROW void SLANG_MCALL copyTexture ( 52ITextureResource * dst , 53ResourceState dstState , 54SubresourceRange dstSubresource , 55ITextureResource ::Offset3D dstOffset , 56ITextureResource * src , 57ResourceState srcState , 58SubresourceRange srcSubresource , 59ITextureResource ::Offset3D srcOffset , 60ITextureResource ::Extents extent ); 61virtual SLANG_NO_THROW void SLANG_MCALL uploadTextureData ( 62ITextureResource * dst , 63SubresourceRange subResourceRange , 64ITextureResource ::Offset3D offset , 65ITextureResource ::Extents extent , 66ITextureResource ::SubresourceData * subResourceData , 67GfxCount subResourceDataCount ); 68virtual SLANG_NO_THROW void SLANG_MCALL clearResourceView ( 69IResourceView * view , 70ClearValue * clearValue , 71ClearResourceViewFlags ::Enum flags ); 72virtual SLANG_NO_THROW void SLANG_MCALL resolveResource ( 73ITextureResource * source , 74ResourceState sourceState , 75SubresourceRange sourceRange , 76ITextureResource * dest , 77ResourceState destState , 78SubresourceRange destRange ); 79virtual SLANG_NO_THROW void SLANG_MCALL copyTextureToBuffer ( 80IBufferResource * dst , 81Offset dstOffset , 82Size dstSize , 83Size dstRowStride , 84ITextureResource * src , 85ResourceState srcState , 86SubresourceRange srcSubresource , 87ITextureResource ::Offset3D srcOffset , 88ITextureResource ::Extents extent ); 89virtual SLANG_NO_THROW void SLANG_MCALL textureSubresourceBarrier ( 90ITextureResource * texture , 91SubresourceRange subresourceRange , 92ResourceState src , 93ResourceState dst ); 94virtual SLANG_NO_THROW void SLANG_MCALL resolveQuery ( 95IQueryPool * queryPool , 96GfxIndex index , 97GfxCount count , 98IBufferResource * buffer , 99Offset offset ); 100virtual SLANG_NO_THROW void SLANG_MCALL beginDebugEvent (const char * name ,float rgbColor [3 ]); 101virtual SLANG_NO_THROW void SLANG_MCALL endDebugEvent (); 102}; 103 104class DebugComputeCommandEncoder :public UnownedDebugObject < IComputeCommandEncoder > , 105public DebugResourceCommandEncoderImpl 106{ 107public : 108SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL (DebugResourceCommandEncoderImpl ) 109virtual DebugCommandBuffer * getCommandBuffer ()override {return commandBuffer ; } 110virtual bool getIsOpen ()override {return isOpen ; } 111virtual IResourceCommandEncoder * getBaseResourceEncoder ()override {return baseObject ; } 112virtual void * getInterface (SlangUUID const & uuid )override 113 { 114if (uuid == GfxGUID ::IID_IResourceCommandEncoder || 115uuid == GfxGUID ::IID_IComputeCommandEncoder || uuid == ISlangUnknown ::getTypeGuid ()) 116 { 117return this ; 118 } 119return nullptr ; 120 } 121 122public : 123virtual SLANG_NO_THROW void SLANG_MCALL endEncoding ()override ; 124virtual SLANG_NO_THROW Result SLANG_MCALL 125bindPipeline ( IPipelineState * state, IShaderObject ** outRootShaderObject) override; 126virtual SLANG_NO_THROW Result SLANG_MCALL 127bindPipelineWithRootObject ( IPipelineState * state, IShaderObject * rootObject) override; 128virtual SLANG_NO_THROW Result SLANG_MCALL dispatchCompute ( int x, int y, int z) override; 129virtual SLANG_NO_THROW Result SLANG_MCALL 130dispatchComputeIndirect ( IBufferResource * cmdBuffer, Offset offset) override; 131 132public: 133DebugCommandBuffer * commandBuffer; 134bool isOpen = false; 135}; 136 137class DebugResourceCommandEncoder : public UnownedDebugObject < IResourceCommandEncoder > , 138public DebugResourceCommandEncoderImpl 139{ 140public : 141SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL ( DebugResourceCommandEncoderImpl ) 142virtual DebugCommandBuffer * getCommandBuffer () override { return commandBuffer; } 143virtual bool getIsOpen () override { return isOpen; } 144virtual IResourceCommandEncoder * getBaseResourceEncoder () override { return baseObject; } 145virtual void * getInterface ( SlangUUID const & uuid) override 146{ 147if (uuid == GfxGUID::IID_IResourceCommandEncoder || uuid == ISlangUnknown:: getTypeGuid ()) 148{ 149return this; 150} 151return nullptr ; 152} 153 154public : 155virtual SLANG_NO_THROW void SLANG_MCALL endEncoding () override ; 156 157public : 158DebugCommandBuffer * commandBuffer; 159bool isOpen = false; 160}; 161 162class DebugRenderCommandEncoder : public UnownedDebugObject < IRenderCommandEncoder > , 163public DebugResourceCommandEncoderImpl 164{ 165public : 166SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL ( DebugResourceCommandEncoderImpl ) 167virtual DebugCommandBuffer * getCommandBuffer () override { return commandBuffer; } 168virtual bool getIsOpen () override { return isOpen; } 169virtual IResourceCommandEncoder * getBaseResourceEncoder () override { return baseObject; } 170virtual void * getInterface ( SlangUUID const & uuid) override 171{ 172if (uuid == GfxGUID::IID_IResourceCommandEncoder || 173uuid == GfxGUID::IID_IRenderCommandEncoder || uuid == ISlangUnknown:: getTypeGuid ()) 174{ 175return this; 176} 177return nullptr ; 178} 179 180public : 181virtual SLANG_NO_THROW void SLANG_MCALL endEncoding () override ; 182virtual SLANG_NO_THROW Result SLANG_MCALL 183bindPipeline ( IPipelineState * state, IShaderObject ** outRootShaderObject) override; 184virtual SLANG_NO_THROW Result SLANG_MCALL 185bindPipelineWithRootObject ( IPipelineState * state, IShaderObject * rootObject) override; 186virtual SLANG_NO_THROW void SLANG_MCALL 187setViewports ( GfxCount count, const Viewport * viewports) override; 188virtual SLANG_NO_THROW void SLANG_MCALL 189setScissorRects ( GfxCount count, const ScissorRect * scissors) override; 190virtual SLANG_NO_THROW void SLANG_MCALL 191setPrimitiveTopology ( PrimitiveTopology topology) override; 192virtual SLANG_NO_THROW void SLANG_MCALL setVertexBuffers ( 193GfxIndex startSlot, 194GfxCount slotCount, 195IBufferResource * const * buffers, 196const Offset * offsets) override; 197virtual SLANG_NO_THROW void SLANG_MCALL 198setIndexBuffer ( IBufferResource * buffer, Format indexFormat, Offset offset = 0 ) override; 199virtual SLANG_NO_THROW Result SLANG_MCALL 200draw ( GfxCount vertexCount, GfxIndex startVertex = 0 ) override; 201virtual SLANG_NO_THROW Result SLANG_MCALL 202drawIndexed ( GfxCount indexCount, GfxIndex startIndex = 0 , GfxIndex baseVertex = 0 ) override; 203virtual SLANG_NO_THROW Result SLANG_MCALL drawIndirect ( 204GfxCount maxDrawCount, 205IBufferResource * argBuffer, 206Offset argOffset, 207IBufferResource * countBuffer, 208Offset countOffset) override; 209virtual SLANG_NO_THROW Result SLANG_MCALL drawIndexedIndirect ( 210GfxCount maxDrawCount, 211IBufferResource * argBuffer, 212Offset argOffset, 213IBufferResource * countBuffer, 214Offset countOffset) override; 215virtual SLANG_NO_THROW void SLANG_MCALL setStencilReference ( uint32_t referenceValue) override; 216virtual SLANG_NO_THROW Result SLANG_MCALL setSamplePositions ( 217GfxCount samplesPerPixel, 218GfxCount pixelCount, 219const SamplePosition * samplePositions) override; 220virtual SLANG_NO_THROW Result SLANG_MCALL drawInstanced ( 221GfxCount vertexCount, 222GfxCount instanceCount, 223GfxIndex startVertex, 224GfxIndex startInstanceLocation) override; 225 226virtual SLANG_NO_THROW Result SLANG_MCALL drawIndexedInstanced ( 227GfxCount indexCount, 228GfxCount instanceCount, 229GfxIndex startIndexLocation, 230GfxIndex baseVertexLocation, 231GfxIndex startInstanceLocation) override; 232 233virtual SLANG_NO_THROW Result SLANG_MCALL drawMeshTasks ( int x, int y, int z) override; 234 235public: 236DebugCommandBuffer * commandBuffer; 237bool isOpen = false; 238}; 239 240class DebugRayTracingCommandEncoder : public UnownedDebugObject < IRayTracingCommandEncoder > , 241public DebugResourceCommandEncoderImpl 242{ 243public : 244SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL ( DebugResourceCommandEncoderImpl ) 245virtual DebugCommandBuffer * getCommandBuffer () override { return commandBuffer; } 246virtual bool getIsOpen () override { return isOpen; } 247virtual IResourceCommandEncoder * getBaseResourceEncoder () override { return baseObject; } 248virtual void * getInterface ( SlangUUID const & uuid) override 249{ 250if (uuid == GfxGUID::IID_IResourceCommandEncoder || 251uuid == GfxGUID::IID_IRayTracingCommandEncoder || uuid == ISlangUnknown:: getTypeGuid ()) 252{ 253return this; 254} 255return nullptr ; 256} 257 258public : 259virtual SLANG_NO_THROW void SLANG_MCALL endEncoding () override ; 260virtual SLANG_NO_THROW void SLANG_MCALL buildAccelerationStructure( 261const IAccelerationStructure ::BuildDesc & desc, 262GfxCount propertyQueryCount, 263AccelerationStructureQueryDesc * queryDescs) override; 264virtual SLANG_NO_THROW void SLANG_MCALL copyAccelerationStructure ( 265IAccelerationStructure * dest, 266IAccelerationStructure * src, 267AccelerationStructureCopyMode mode) override; 268virtual SLANG_NO_THROW void SLANG_MCALL queryAccelerationStructureProperties ( 269GfxCount accelerationStructureCount, 270IAccelerationStructure * const * accelerationStructures, 271GfxCount queryCount, 272AccelerationStructureQueryDesc * queryDescs) override; 273virtual SLANG_NO_THROW void SLANG_MCALL 274serializeAccelerationStructure ( DeviceAddress dest, IAccelerationStructure * source) override; 275virtual SLANG_NO_THROW void SLANG_MCALL 276deserializeAccelerationStructure ( IAccelerationStructure * dest, DeviceAddress source) override; 277virtual SLANG_NO_THROW Result SLANG_MCALL 278bindPipeline ( IPipelineState * state, IShaderObject ** outRootObject) override; 279virtual SLANG_NO_THROW Result SLANG_MCALL 280bindPipelineWithRootObject ( IPipelineState * state, IShaderObject * rootObject) override; 281virtual SLANG_NO_THROW Result SLANG_MCALL dispatchRays ( 282GfxIndex rayGenShaderIndex, 283IShaderTable * shaderTable, 284GfxCount width, 285GfxCount height, 286GfxCount depth) override; 287 288public: 289DebugCommandBuffer * commandBuffer; 290bool isOpen = false; 291}; 292 293} // namespace debug 294} // namespace gfx