yum-mirror/slang

Making it easier to work with shaders

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

Ellie Hermaszewskaformatf65d756bf

master
1.6 KiB49 linesraw
1// simple-render-pass-layout.h
2#pragma once
3
4// Provide a simple no-op implementation for `ITransientResourceHeap` for targets that
5// already support version management.
6
7#include "renderer-shared.h"
8#include "slang-gfx.h"
9
10namespace gfx
11{
12template<typename TDevice, typename TCommandBuffer>
13class SimpleTransientResourceHeap : public TransientResourceHeapBase
14{
15public:
16    Slang::RefPtr<TDevice> m_device;
17    Slang::ComPtr<IBufferResource> m_constantBuffer;
18
19public:
20    Result init(TDevice* device, const ITransientResourceHeap::Desc& desc)
21    {
22        m_device = device;
23        IBufferResource::Desc bufferDesc = {};
24        bufferDesc.type = IResource::Type::Buffer;
25        bufferDesc.allowedStates =
26            ResourceStateSet(ResourceState::ConstantBuffer, ResourceState::CopyDestination);
27        bufferDesc.defaultState = ResourceState::ConstantBuffer;
28        bufferDesc.sizeInBytes = desc.constantBufferSize;
29        bufferDesc.memoryType = MemoryType::Upload;
30        SLANG_RETURN_ON_FAIL(
31            device->createBufferResource(bufferDesc, nullptr, m_constantBuffer.writeRef()));
32        return SLANG_OK;
33    }
34    virtual SLANG_NO_THROW Result SLANG_MCALL
35    createCommandBuffer(ICommandBuffer** outCommandBuffer) override
36    {
37        Slang::RefPtr<TCommandBuffer> newCmdBuffer = new TCommandBuffer();
38        newCmdBuffer->init(m_device, this);
39        returnComPtr(outCommandBuffer, newCmdBuffer);
40        return SLANG_OK;
41    }
42
43    virtual SLANG_NO_THROW Result SLANG_MCALL synchronizeAndReset() override
44    {
45        ++getVersionCounter();
46        return SLANG_OK;
47    }
48};
49} // namespace gfx