yum-mirror/slang

Making it easier to work with shaders

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

Ellie Hermaszewskaformatf65d756bf

master
3.4 KiB104 linesraw
1// cpu-device.h
2#pragma once
3#include "cpu-base.h"
4#include "cpu-pipeline-state.h"
5#include "cpu-shader-object.h"
6
7namespace gfx
8{
9using namespace Slang;
10
11namespace cpu
12{
13
14class DeviceImpl : public ImmediateComputeDeviceBase
15{
16public:
17    ~DeviceImpl();
18
19    virtual SLANG_NO_THROW SlangResult SLANG_MCALL initialize(const Desc& desc) override;
20
21    virtual SLANG_NO_THROW Result SLANG_MCALL createTextureResource(
22        const ITextureResource::Desc& desc,
23        const ITextureResource::SubresourceData* initData,
24        ITextureResource** outResource) override;
25
26    virtual SLANG_NO_THROW Result SLANG_MCALL createBufferResource(
27        const IBufferResource::Desc& descIn,
28        const void* initData,
29        IBufferResource** outResource) override;
30
31    virtual SLANG_NO_THROW Result SLANG_MCALL createTextureView(
32        ITextureResource* inTexture,
33        IResourceView::Desc const& desc,
34        IResourceView** outView) override;
35
36    virtual SLANG_NO_THROW Result SLANG_MCALL createBufferView(
37        IBufferResource* inBuffer,
38        IBufferResource* counterBuffer,
39        IResourceView::Desc const& desc,
40        IResourceView** outView) override;
41
42    virtual Result createShaderObjectLayout(
43        slang::ISession* session,
44        slang::TypeLayoutReflection* typeLayout,
45        ShaderObjectLayoutBase** outLayout) override;
46
47    virtual Result createShaderObject(ShaderObjectLayoutBase* layout, IShaderObject** outObject)
48        override;
49
50    virtual Result createMutableShaderObject(
51        ShaderObjectLayoutBase* layout,
52        IShaderObject** outObject) override;
53
54    virtual Result createRootShaderObject(IShaderProgram* program, ShaderObjectBase** outObject)
55        override;
56
57    virtual SLANG_NO_THROW Result SLANG_MCALL createProgram(
58        const IShaderProgram::Desc& desc,
59        IShaderProgram** outProgram,
60        ISlangBlob** outDiagnosticBlob) override;
61
62    virtual SLANG_NO_THROW Result SLANG_MCALL createComputePipelineState(
63        const ComputePipelineStateDesc& desc,
64        IPipelineState** outState) override;
65
66    virtual SLANG_NO_THROW Result SLANG_MCALL
67    createQueryPool(const IQueryPool::Desc& desc, IQueryPool** outPool) override;
68
69    virtual void writeTimestamp(IQueryPool* pool, GfxIndex index) override;
70
71    virtual SLANG_NO_THROW const DeviceInfo& SLANG_MCALL getDeviceInfo() const override;
72
73    virtual SLANG_NO_THROW Result SLANG_MCALL
74    createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) override;
75
76    virtual void submitGpuWork() override {}
77    virtual void waitForGpu() override {}
78    virtual void* map(IBufferResource* buffer, MapFlavor flavor) override;
79    virtual void unmap(IBufferResource* buffer, size_t offsetWritten, size_t sizeWritten) override;
80
81private:
82    RefPtr<PipelineStateImpl> m_currentPipeline = nullptr;
83    RefPtr<RootShaderObjectImpl> m_currentRootObject = nullptr;
84    DeviceInfo m_info;
85
86    virtual void setPipelineState(IPipelineState* state) override;
87
88    virtual void bindRootShaderObject(IShaderObject* object) override;
89
90    virtual void dispatchCompute(int x, int y, int z) override;
91
92    virtual void copyBuffer(
93        IBufferResource* dst,
94        size_t dstOffset,
95        IBufferResource* src,
96        size_t srcOffset,
97        size_t size) override;
98};
99
100} // namespace cpu
101
102Result SLANG_MCALL createCPUDevice(const IDevice::Desc* desc, IDevice** outDevice);
103
104} // namespace gfx