yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1// d3d11-device.h 2#pragma once 3#include "d3d11-framebuffer.h" 4#include "d3d11-pipeline-state.h" 5 6namespace gfx 7{ 8 9using namespace Slang ; 10 11namespace d3d11 12{ 13 14class DeviceImpl :public ImmediateRendererBase 15{ 16public : 17 ~DeviceImpl () {} 18 19// Renderer implementation 20virtual SLANG_NO_THROW Result SLANG_MCALL initialize (const Desc & desc )override ; 21virtual void clearFrame (uint32_t colorBufferMask ,bool clearDepth ,bool clearStencil )override ; 22virtual SLANG_NO_THROW Result SLANG_MCALL createSwapchain ( 23const ISwapchain ::Desc & desc , 24WindowHandle window , 25ISwapchain ** outSwapchain )override ; 26virtual SLANG_NO_THROW Result SLANG_MCALL createFramebufferLayout ( 27const IFramebufferLayout ::Desc & desc , 28IFramebufferLayout ** outLayout )override ; 29virtual SLANG_NO_THROW Result SLANG_MCALL 30createFramebuffer (const IFramebuffer ::Desc & desc ,IFramebuffer ** outFramebuffer )override ; 31virtual void setFramebuffer (IFramebuffer * frameBuffer )override ; 32virtual void setStencilReference (uint32_t referenceValue )override ; 33 34virtual SLANG_NO_THROW Result SLANG_MCALL createTextureResource ( 35const ITextureResource ::Desc & desc , 36const ITextureResource ::SubresourceData * initData , 37ITextureResource ** outResource )override ; 38virtual SLANG_NO_THROW Result SLANG_MCALL createBufferResource ( 39const IBufferResource ::Desc & desc , 40const void * initData , 41IBufferResource ** outResource )override ; 42virtual SLANG_NO_THROW Result SLANG_MCALL 43createSamplerState (ISamplerState ::Desc const & desc ,ISamplerState ** outSampler )override ; 44 45virtual SLANG_NO_THROW Result SLANG_MCALL createTextureView ( 46ITextureResource * texture , 47IResourceView ::Desc const & desc , 48IResourceView ** outView )override ; 49 50virtual SLANG_NO_THROW Result SLANG_MCALL createBufferView ( 51IBufferResource * buffer , 52IBufferResource * counterBuffer , 53IResourceView ::Desc const & desc , 54IResourceView ** outView )override ; 55 56virtual SLANG_NO_THROW Result SLANG_MCALL 57createInputLayout (IInputLayout ::Desc const & desc ,IInputLayout ** outLayout )override ; 58 59virtual SLANG_NO_THROW Result SLANG_MCALL 60createQueryPool (const IQueryPool ::Desc & desc ,IQueryPool ** outPool )override ; 61 62virtual Result createShaderObjectLayout ( 63slang ::ISession * session , 64slang ::TypeLayoutReflection * typeLayout , 65ShaderObjectLayoutBase ** outLayout )override ; 66virtual Result createShaderObject (ShaderObjectLayoutBase * layout ,IShaderObject ** outObject ) 67override ; 68virtual Result createMutableShaderObject ( 69ShaderObjectLayoutBase * layout , 70IShaderObject ** outObject )override ; 71virtual Result createRootShaderObject (IShaderProgram * program ,ShaderObjectBase ** outObject ) 72override ; 73virtual void bindRootShaderObject (IShaderObject * shaderObject )override ; 74 75virtual SLANG_NO_THROW Result SLANG_MCALL createProgram ( 76const IShaderProgram ::Desc & desc , 77IShaderProgram ** outProgram , 78ISlangBlob ** outDiagnosticBlob )override ; 79virtual SLANG_NO_THROW Result SLANG_MCALL createGraphicsPipelineState ( 80const GraphicsPipelineStateDesc & desc , 81IPipelineState ** outState )override ; 82virtual SLANG_NO_THROW Result SLANG_MCALL createComputePipelineState ( 83const ComputePipelineStateDesc & desc , 84IPipelineState ** outState )override ; 85 86virtual void * map (IBufferResource * buffer ,MapFlavor flavor )override ; 87virtual void unmap (IBufferResource * buffer ,size_t offsetWritten ,size_t sizeWritten )override ; 88virtual void copyBuffer ( 89IBufferResource * dst , 90size_t dstOffset , 91IBufferResource * src , 92size_t srcOffset , 93size_t size )override ; 94virtual SLANG_NO_THROW SlangResult SLANG_MCALL readTextureResource ( 95ITextureResource * texture , 96ResourceState state , 97ISlangBlob ** outBlob , 98size_t * outRowPitch , 99size_t * outPixelSize )override ; 100 101virtual void setPrimitiveTopology (PrimitiveTopology topology )override ; 102 103virtual void setVertexBuffers ( 104GfxIndex startSlot , 105GfxCount slotCount , 106IBufferResource * const * buffers , 107const Offset * offsets )override ; 108virtual void setIndexBuffer (IBufferResource * buffer ,Format indexFormat ,Offset offset ) 109override ; 110virtual void setViewports (GfxCount count ,Viewport const * viewports )override ; 111virtual void setScissorRects (GfxCount count ,ScissorRect const * rects )override ; 112virtual void setPipelineState (IPipelineState * state )override ; 113virtual void draw (GfxCount vertexCount ,GfxIndex startVertex )override ; 114virtual void drawIndexed (GfxCount indexCount ,GfxIndex startIndex ,GfxIndex baseVertex ) 115override ; 116virtual void drawInstanced ( 117GfxCount vertexCount , 118GfxCount instanceCount , 119GfxIndex startVertex , 120GfxIndex startInstanceLocation )override ; 121virtual void drawIndexedInstanced ( 122GfxCount indexCount , 123GfxCount instanceCount , 124GfxIndex startIndexLocation , 125GfxIndex baseVertexLocation , 126GfxIndex startInstanceLocation )override ; 127virtual void dispatchCompute (int x ,int y ,int z )override ; 128virtual void submitGpuWork ()override {} 129virtual void waitForGpu ()override {} 130virtual SLANG_NO_THROW const DeviceInfo & SLANG_MCALL getDeviceInfo ()const override 131 { 132return m_info ; 133 } 134virtual void beginCommandBuffer (const CommandBufferInfo & info )override ; 135virtual void endCommandBuffer (const CommandBufferInfo & info )override ; 136virtual void writeTimestamp (IQueryPool * pool ,GfxIndex index )override ; 137 138public : 139void _flushGraphicsState (); 140 141// D3D11Device members. 142 143DeviceInfo m_info ; 144String m_adapterName ; 145 146ComPtr < IDXGISwapChain > m_swapChain ; 147ComPtr < ID3D11Device > m_device ; 148ComPtr < ID3D11DeviceContext > m_immediateContext ; 149ComPtr < ID3D11Texture2D > m_backBufferTexture ; 150ComPtr < IDXGIFactory > m_dxgiFactory ; 151RefPtr < FramebufferImpl > m_currentFramebuffer ; 152 153RefPtr < PipelineStateImpl > m_currentPipelineState ; 154 155ComPtr < ID3D11Query > m_disjointQuery ; 156 157uint32_t m_stencilRef = 0 ; 158bool m_depthStencilStateDirty = true; 159 160Desc m_desc ; 161 162float m_clearColor [4 ]= {0 ,0 ,0 ,0 }; 163 164bool m_nvapi = false; 165}; 166 167}// namespace d3d11 168}// namespace gfx