yum-mirror/slang

Making it easier to work with shaders

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

Ellie Hermaszewskaformatf65d756bf

master
1.9 KiB74 linesraw
1// d3d12-resource-views.h
2#pragma once
3
4#include "../d3d/d3d-util.h"
5#include "d3d12-base.h"
6#include "d3d12-buffer.h"
7
8namespace gfx
9{
10namespace d3d12
11{
12
13using namespace Slang;
14
15class ResourceViewImpl;
16
17class ResourceViewInternalImpl
18{
19public:
20    // The default descriptor for the view.
21    D3D12Descriptor m_descriptor;
22
23    // StructuredBuffer descriptors for different strides.
24    Dictionary<uint32_t, D3D12Descriptor> m_mapBufferStrideToDescriptor;
25
26    RefPtr<D3D12GeneralExpandingDescriptorHeap> m_allocator;
27
28    ~ResourceViewInternalImpl();
29
30    // Get a d3d12 descriptor from the buffer view with the given buffer element stride.
31    SlangResult getBufferDescriptorForBinding(
32        DeviceImpl* device,
33        ResourceViewImpl* view,
34        uint32_t bufferStride,
35        D3D12Descriptor& outDescriptor);
36};
37
38SlangResult createD3D12BufferDescriptor(
39    BufferResourceImpl* buffer,
40    BufferResourceImpl* counterBuffer,
41    IResourceView::Desc const& desc,
42    uint32_t bufferStride,
43    DeviceImpl* device,
44    D3D12GeneralExpandingDescriptorHeap* descriptorHeap,
45    D3D12Descriptor* outDescriptor);
46
47class ResourceViewImpl : public ResourceViewBase, public ResourceViewInternalImpl
48{
49public:
50    Slang::RefPtr<Resource> m_resource;
51    // null, unless this is a structuredbuffer with a separate counter buffer
52    Slang::RefPtr<Resource> m_counterResource;
53    virtual SLANG_NO_THROW Result SLANG_MCALL getNativeHandle(InteropHandle* outHandle) override;
54};
55
56#if SLANG_GFX_HAS_DXR_SUPPORT
57
58class AccelerationStructureImpl : public AccelerationStructureBase, public ResourceViewInternalImpl
59{
60public:
61    RefPtr<BufferResourceImpl> m_buffer;
62    uint64_t m_offset;
63    uint64_t m_size;
64    ComPtr<ID3D12Device5> m_device5;
65
66public:
67    virtual SLANG_NO_THROW DeviceAddress SLANG_MCALL getDeviceAddress() override;
68    virtual SLANG_NO_THROW Result SLANG_MCALL getNativeHandle(InteropHandle* outHandle) override;
69};
70
71#endif
72
73} // namespace d3d12
74} // namespace gfx