yum-mirror/slang

Making it easier to work with shaders

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

Ellie Hermaszewskaformatf65d756bf

master
5.3 KiB157 linesraw
1// cuda-device.h
2#pragma once
3#include "cuda-base.h"
4#include "cuda-command-buffer.h"
5#include "cuda-context.h"
6#include "cuda-helper-functions.h"
7
8namespace gfx
9{
10#ifdef GFX_ENABLE_CUDA
11using namespace Slang;
12
13namespace cuda
14{
15
16class DeviceImpl : public RendererBase
17{
18private:
19    static const CUDAReportStyle reportType = CUDAReportStyle::Normal;
20    static int _calcSMCountPerMultiProcessor(int major, int minor);
21
22    static SlangResult _findMaxFlopsDeviceIndex(int* outDeviceIndex);
23
24    static SlangResult _initCuda(CUDAReportStyle reportType = CUDAReportStyle::Normal);
25
26private:
27    int m_deviceIndex = -1;
28    CUdevice m_device = 0;
29    RefPtr<CUDAContext> m_context;
30    DeviceInfo m_info;
31    String m_adapterName;
32
33public:
34    virtual SLANG_NO_THROW Result SLANG_MCALL
35    getNativeDeviceHandles(InteropHandles* outHandles) override;
36
37    virtual SLANG_NO_THROW SlangResult SLANG_MCALL initialize(const Desc& desc) override;
38
39    Result getCUDAFormat(Format format, CUarray_format* outFormat);
40
41    virtual SLANG_NO_THROW Result SLANG_MCALL createTextureResource(
42        const ITextureResource::Desc& desc,
43        const ITextureResource::SubresourceData* initData,
44        ITextureResource** outResource) override;
45
46    virtual SLANG_NO_THROW Result SLANG_MCALL createBufferResource(
47        const IBufferResource::Desc& descIn,
48        const void* initData,
49        IBufferResource** outResource) override;
50
51    virtual SLANG_NO_THROW Result SLANG_MCALL createBufferFromSharedHandle(
52        InteropHandle handle,
53        const IBufferResource::Desc& desc,
54        IBufferResource** outResource) override;
55
56    virtual SLANG_NO_THROW Result SLANG_MCALL createTextureFromSharedHandle(
57        InteropHandle handle,
58        const ITextureResource::Desc& desc,
59        const size_t size,
60        ITextureResource** outResource) override;
61
62    virtual SLANG_NO_THROW Result SLANG_MCALL createTextureView(
63        ITextureResource* texture,
64        IResourceView::Desc const& desc,
65        IResourceView** outView) override;
66
67    virtual SLANG_NO_THROW Result SLANG_MCALL createBufferView(
68        IBufferResource* buffer,
69        IBufferResource* counterBuffer,
70        IResourceView::Desc const& desc,
71        IResourceView** outView) override;
72
73    virtual SLANG_NO_THROW Result SLANG_MCALL
74    createQueryPool(const IQueryPool::Desc& desc, IQueryPool** outPool) override;
75
76    virtual Result createShaderObjectLayout(
77        slang::ISession* session,
78        slang::TypeLayoutReflection* typeLayout,
79        ShaderObjectLayoutBase** outLayout) override;
80
81    virtual Result createShaderObject(ShaderObjectLayoutBase* layout, IShaderObject** outObject)
82        override;
83
84    virtual Result createMutableShaderObject(
85        ShaderObjectLayoutBase* layout,
86        IShaderObject** outObject) override;
87
88    Result createRootShaderObject(IShaderProgram* program, ShaderObjectBase** outObject);
89
90    virtual SLANG_NO_THROW Result SLANG_MCALL createProgram(
91        const IShaderProgram::Desc& desc,
92        IShaderProgram** outProgram,
93        ISlangBlob** outDiagnosticBlob) override;
94
95    virtual SLANG_NO_THROW Result SLANG_MCALL createComputePipelineState(
96        const ComputePipelineStateDesc& desc,
97        IPipelineState** outState) override;
98
99    void* map(IBufferResource* buffer);
100
101    void unmap(IBufferResource* buffer);
102
103    virtual SLANG_NO_THROW const DeviceInfo& SLANG_MCALL getDeviceInfo() const override;
104
105public:
106    using TransientResourceHeapImpl = SimpleTransientResourceHeap<DeviceImpl, CommandBufferImpl>;
107
108    virtual SLANG_NO_THROW Result SLANG_MCALL createTransientResourceHeap(
109        const ITransientResourceHeap::Desc& desc,
110        ITransientResourceHeap** outHeap) override;
111
112    virtual SLANG_NO_THROW Result SLANG_MCALL
113    createCommandQueue(const ICommandQueue::Desc& desc, ICommandQueue** outQueue) override;
114
115    virtual SLANG_NO_THROW Result SLANG_MCALL createSwapchain(
116        const ISwapchain::Desc& desc,
117        WindowHandle window,
118        ISwapchain** outSwapchain) override;
119
120    virtual SLANG_NO_THROW Result SLANG_MCALL createFramebufferLayout(
121        const IFramebufferLayout::Desc& desc,
122        IFramebufferLayout** outLayout) override;
123
124    virtual SLANG_NO_THROW Result SLANG_MCALL
125    createFramebuffer(const IFramebuffer::Desc& desc, IFramebuffer** outFramebuffer) override;
126
127    virtual SLANG_NO_THROW Result SLANG_MCALL createRenderPassLayout(
128        const IRenderPassLayout::Desc& desc,
129        IRenderPassLayout** outRenderPassLayout) override;
130
131    virtual SLANG_NO_THROW Result SLANG_MCALL
132    createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) override;
133
134    virtual SLANG_NO_THROW Result SLANG_MCALL
135    createInputLayout(IInputLayout::Desc const& desc, IInputLayout** outLayout) override;
136
137    virtual SLANG_NO_THROW Result SLANG_MCALL createGraphicsPipelineState(
138        const GraphicsPipelineStateDesc& desc,
139        IPipelineState** outState) override;
140
141    virtual SLANG_NO_THROW SlangResult SLANG_MCALL readTextureResource(
142        ITextureResource* texture,
143        ResourceState state,
144        ISlangBlob** outBlob,
145        size_t* outRowPitch,
146        size_t* outPixelSize) override;
147
148    virtual SLANG_NO_THROW Result SLANG_MCALL readBufferResource(
149        IBufferResource* buffer,
150        size_t offset,
151        size_t size,
152        ISlangBlob** outBlob) override;
153};
154
155} // namespace cuda
156#endif
157} // namespace gfx