增加RenderSurface::CreateBuffer与VKBuffer封装
This commit is contained in:
parent
fef0addac7
commit
30edac78bd
@ -5,12 +5,26 @@ ELSEIF(WIN32)
|
||||
SET(RENDER_WINDOW_SOURCE WinWindow.cpp)
|
||||
ENDIF()
|
||||
|
||||
add_executable(VulkanTest main.cpp
|
||||
${RENDER_WINDOW_SOURCE}
|
||||
VKInstance.cpp
|
||||
VKCommandBuffer.cpp
|
||||
RenderSurfaceAttribute.cpp
|
||||
RenderSurfaceCreater.cpp
|
||||
RenderSurface.cpp)
|
||||
SET(VULKAN_TEST_SOURCE_FILES main.cpp
|
||||
${RENDER_WINDOW_SOURCE}
|
||||
VKInstance.cpp
|
||||
VKCommandBuffer.cpp
|
||||
RenderSurfaceAttribute.cpp
|
||||
RenderSurfaceCreater.cpp
|
||||
RenderSurface.cpp
|
||||
VKBuffer.cpp)
|
||||
|
||||
SET(VULKAN_TEST_HEADER_FILES VK.h
|
||||
VKInstance.h
|
||||
VKSurfaceExtensionName.h
|
||||
RenderSurfaceAttribute.h
|
||||
RenderSurface.h
|
||||
VKBuffer.h
|
||||
Window.h)
|
||||
|
||||
SOURCE_GROUP("Header Files" FILES ${VULKAN_TEST_HEADER_FILES})
|
||||
SOURCE_GROUP("Source Files" FILES ${VULKAN_TEST_SOURCE_FILES})
|
||||
|
||||
add_executable(VulkanTest ${VULKAN_TEST_HEADER_FILES} ${VULKAN_TEST_SOURCE_FILES})
|
||||
|
||||
target_link_libraries(VulkanTest PRIVATE ${ULRE} ${VULKAN_LIB} ${RENDER_WINDOW_LIBRARY})
|
||||
|
@ -2,6 +2,57 @@
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
|
||||
Buffer *RenderSurface::CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,VkSharingMode sharing_mode)
|
||||
{
|
||||
VkBufferCreateInfo buf_info={};
|
||||
buf_info.sType=VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
|
||||
buf_info.pNext=nullptr;
|
||||
buf_info.usage=buf_usage;
|
||||
buf_info.size=size;
|
||||
buf_info.queueFamilyIndexCount=0;
|
||||
buf_info.pQueueFamilyIndices=nullptr;
|
||||
buf_info.sharingMode=sharing_mode;
|
||||
buf_info.flags=0;
|
||||
|
||||
VkBuffer buf;
|
||||
|
||||
if(vkCreateBuffer(rsa->device,&buf_info,nullptr,&buf)!=VK_SUCCESS)
|
||||
return(nullptr);
|
||||
|
||||
VkMemoryRequirements mem_reqs;
|
||||
vkGetBufferMemoryRequirements(rsa->device,buf,&mem_reqs);
|
||||
|
||||
VkMemoryAllocateInfo alloc_info={};
|
||||
alloc_info.sType=VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
|
||||
alloc_info.pNext=NULL;
|
||||
alloc_info.memoryTypeIndex=0;
|
||||
alloc_info.allocationSize=mem_reqs.size;
|
||||
|
||||
if(rsa->CheckMemoryType(mem_reqs.memoryTypeBits,VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT|VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,&alloc_info.memoryTypeIndex))
|
||||
{
|
||||
VkDeviceMemory mem;
|
||||
|
||||
if(vkAllocateMemory(rsa->device,&alloc_info,nullptr,&mem)==VK_SUCCESS)
|
||||
{
|
||||
if(vkBindBufferMemory(rsa->device,buf,mem,0)==VK_SUCCESS)
|
||||
{
|
||||
VkDescriptorBufferInfo buf_info;
|
||||
|
||||
buf_info.buffer=buf;
|
||||
buf_info.offset=0;
|
||||
buf_info.range=size;
|
||||
|
||||
return(new Buffer(rsa->device,buf,mem,buf_info));
|
||||
}
|
||||
|
||||
vkFreeMemory(rsa->device,mem,nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
vkDestroyBuffer(rsa->device,buf,nullptr);
|
||||
return(nullptr);
|
||||
}
|
||||
|
||||
CommandBuffer *RenderSurface::CreateCommandBuffer()
|
||||
{
|
||||
if(!rsa->cmd_pool)
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include"VK.h"
|
||||
#include"Window.h"
|
||||
#include"RenderSurfaceAttribute.h"
|
||||
#include"VKBuffer.h"
|
||||
#include"VKCommandBuffer.h"
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
@ -33,6 +34,13 @@ public:
|
||||
|
||||
public:
|
||||
|
||||
Buffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
||||
|
||||
Buffer * CreateUBO(VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE)
|
||||
{
|
||||
return CreateBuffer(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,size,sharing_mode);
|
||||
}
|
||||
|
||||
CommandBuffer * CreateCommandBuffer ();
|
||||
};//class RenderSurface
|
||||
VK_NAMESPACE_END
|
||||
|
23
example/Vulkan/VKBuffer.cpp
Normal file
23
example/Vulkan/VKBuffer.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
#include"VKBuffer.h"
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
Buffer::~Buffer()
|
||||
{
|
||||
vkDestroyBuffer(device,buf,nullptr);
|
||||
vkFreeMemory(device,mem,nullptr);
|
||||
}
|
||||
|
||||
uint8_t *Buffer::Map()
|
||||
{
|
||||
uint8_t *p;
|
||||
|
||||
if(vkMapMemory(device,mem,0,buffer_info.range,0,(void **)&p)==VK_SUCCESS)
|
||||
return p;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
void Buffer::Unmap()
|
||||
{
|
||||
vkUnmapMemory(device,mem);
|
||||
}
|
||||
VK_NAMESPACE_END
|
33
example/Vulkan/VKBuffer.h
Normal file
33
example/Vulkan/VKBuffer.h
Normal file
@ -0,0 +1,33 @@
|
||||
#ifndef HGL_GRAPH_VULKAN_BUFFER_INCLUDE
|
||||
#define HGL_GRAPH_VULKAN_BUFFER_INCLUDE
|
||||
|
||||
#include"VK.h"
|
||||
VK_NAMESPACE_BEGIN
|
||||
class Buffer
|
||||
{
|
||||
VkDevice device;
|
||||
VkBuffer buf;
|
||||
VkDeviceMemory mem;
|
||||
VkDescriptorBufferInfo buffer_info;
|
||||
|
||||
private:
|
||||
|
||||
friend class RenderSurface;
|
||||
|
||||
Buffer(VkDevice d,VkBuffer b,VkDeviceMemory dm,VkDescriptorBufferInfo dbi)
|
||||
{
|
||||
device=d;
|
||||
buf=b;
|
||||
mem=dm;
|
||||
buffer_info=dbi;
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
virtual ~Buffer();
|
||||
|
||||
uint8_t *Map();
|
||||
void Unmap();
|
||||
};//class Buffer
|
||||
VK_NAMESPACE_END
|
||||
#endif//HGL_GRAPH_VULKAN_BUFFER_INCLUDE
|
@ -22,6 +22,17 @@ int main(int,char **)
|
||||
vulkan::RenderSurface *render=inst->CreateSurface(win);
|
||||
vulkan::CommandBuffer *cmd_buf=render->CreateCommandBuffer();
|
||||
|
||||
vulkan::Buffer *ubo=render->CreateUBO(1024);
|
||||
|
||||
uint8_t *p=ubo->Map();
|
||||
|
||||
if(p)
|
||||
{
|
||||
memset(p,0,1024);
|
||||
ubo->Unmap();
|
||||
}
|
||||
|
||||
delete ubo;
|
||||
|
||||
delete cmd_buf;
|
||||
delete render;
|
||||
|
Loading…
x
Reference in New Issue
Block a user