yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Ellie Hermaszewskaformatf65d756bf

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