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