yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
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 19Result init ( 20const VulkanApi & api , 21Size bufferSize , 22VkBufferUsageFlags usage , 23VkMemoryPropertyFlags reqMemoryProperties , 24bool isShared = false, 25VkExternalMemoryHandleTypeFlagsKHR extMemHandleType = 0 ); 26 27/// Returns true if has been initialized 28bool isInitialized ()const {return m_api != nullptr ; } 29 30VKBufferHandleRAII () 31 :m_api (nullptr ) 32 { 33 } 34 35 ~VKBufferHandleRAII () 36 { 37if (m_api ) 38 { 39m_api -> vkDestroyBuffer (m_api -> m_device ,m_buffer ,nullptr ); 40m_api -> vkFreeMemory (m_api -> m_device ,m_memory ,nullptr ); 41 } 42 } 43 44VkBuffer m_buffer ; 45VkDeviceMemory m_memory ; 46const VulkanApi * m_api ; 47}; 48 49class BufferResourceImpl :public BufferResource 50{ 51public : 52typedef BufferResource Parent ; 53 54BufferResourceImpl (const IBufferResource ::Desc & desc ,DeviceImpl * renderer ); 55 56 ~BufferResourceImpl (); 57 58RefPtr < DeviceImpl > m_renderer ; 59VKBufferHandleRAII m_buffer ; 60VKBufferHandleRAII m_uploadBuffer ; 61 62virtual SLANG_NO_THROW DeviceAddress SLANG_MCALL getDeviceAddress ()override ; 63 64virtual SLANG_NO_THROW Result SLANG_MCALL 65getNativeResourceHandle ( InteropHandle * outHandle) override; 66 67virtual SLANG_NO_THROW Result SLANG_MCALL getSharedHandle ( InteropHandle * outHandle) override; 68 69virtual SLANG_NO_THROW Result SLANG_MCALL 70map ( MemoryRange * rangeToRead, void ** outPointer) override; 71 72virtual SLANG_NO_THROW Result SLANG_MCALL unmap ( MemoryRange * writtenRange) override; 73 74virtual SLANG_NO_THROW Result SLANG_MCALL setDebugName ( const char * name) override; 75}; 76 77} // namespace vk 78} // namespace gfx