yum-mirror/slang

Making it easier to work with shaders

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

Ellie Hermaszewskaformatf65d756bf

master
1.8 KiB78 linesraw
1// vk-buffer.h
2#pragma once
3
4#include "vk-base.h"
5#include "vk-device.h"
6
7namespace gfx
8{
9
10using namespace Slang;
11
12namespace vk
13{
14
15class VKBufferHandleRAII
16{
17public:
18    /// Initialize a buffer with specified size, and memory props
19    Result init(
20        const VulkanApi& api,
21        Size bufferSize,
22        VkBufferUsageFlags usage,
23        VkMemoryPropertyFlags reqMemoryProperties,
24        bool isShared = false,
25        VkExternalMemoryHandleTypeFlagsKHR extMemHandleType = 0);
26
27    /// Returns true if has been initialized
28    bool isInitialized() const { return m_api != nullptr; }
29
30    VKBufferHandleRAII()
31        : m_api(nullptr)
32    {
33    }
34
35    ~VKBufferHandleRAII()
36    {
37        if (m_api)
38        {
39            m_api->vkDestroyBuffer(m_api->m_device, m_buffer, nullptr);
40            m_api->vkFreeMemory(m_api->m_device, m_memory, nullptr);
41        }
42    }
43
44    VkBuffer m_buffer;
45    VkDeviceMemory m_memory;
46    const VulkanApi* m_api;
47};
48
49class BufferResourceImpl : public BufferResource
50{
51public:
52    typedef BufferResource Parent;
53
54    BufferResourceImpl(const IBufferResource::Desc& desc, DeviceImpl* renderer);
55
56    ~BufferResourceImpl();
57
58    RefPtr<DeviceImpl> m_renderer;
59    VKBufferHandleRAII m_buffer;
60    VKBufferHandleRAII m_uploadBuffer;
61
62    virtual SLANG_NO_THROW DeviceAddress SLANG_MCALL getDeviceAddress() override;
63
64    virtual SLANG_NO_THROW Result SLANG_MCALL
65    getNativeResourceHandle(InteropHandle* outHandle) override;
66
67    virtual SLANG_NO_THROW Result SLANG_MCALL getSharedHandle(InteropHandle* outHandle) override;
68
69    virtual SLANG_NO_THROW Result SLANG_MCALL
70    map(MemoryRange* rangeToRead, void** outPointer) override;
71
72    virtual SLANG_NO_THROW Result SLANG_MCALL unmap(MemoryRange* writtenRange) override;
73
74    virtual SLANG_NO_THROW Result SLANG_MCALL setDebugName(const char* name) override;
75};
76
77} // namespace vk
78} // namespace gfx