2019-11-25 22:05:05 +08:00
|
|
|
#include<hgl/graph/vulkan/VKDevice.h>
|
2020-09-27 20:58:25 +08:00
|
|
|
#include<hgl/graph/vulkan/VKImageCreateInfo.h>
|
2019-11-25 22:05:05 +08:00
|
|
|
|
|
|
|
VK_NAMESPACE_BEGIN
|
2020-09-27 21:18:46 +08:00
|
|
|
VkImage Device::CreateImage(VkImageCreateInfo *ici)
|
2020-06-24 19:13:29 +08:00
|
|
|
{
|
2020-09-27 21:18:46 +08:00
|
|
|
if(!ici)return(VK_NULL_HANDLE);
|
|
|
|
if(!CheckVulkanFormat(ici->format))return(VK_NULL_HANDLE);
|
|
|
|
if(ici->extent.width*ici->extent.height*ici->extent.depth*ici->arrayLayers<=0)return(VK_NULL_HANDLE);
|
2020-06-24 19:13:29 +08:00
|
|
|
|
|
|
|
VkImage image;
|
|
|
|
|
2020-09-27 21:18:46 +08:00
|
|
|
if(vkCreateImage(attr->device,ici, nullptr, &image)!=VK_SUCCESS)
|
2020-06-24 19:13:29 +08:00
|
|
|
return(nullptr);
|
|
|
|
|
|
|
|
return image;
|
|
|
|
}
|
|
|
|
|
2019-11-25 22:05:05 +08:00
|
|
|
void Device::DestoryImage(VkImage img)
|
|
|
|
{
|
|
|
|
if(img==VK_NULL_HANDLE)return;
|
|
|
|
|
|
|
|
vkDestroyImage(attr->device,img,nullptr);
|
|
|
|
}
|
|
|
|
|
|
|
|
Memory *Device::CreateMemory(VkImage image,const uint32_t flag)
|
|
|
|
{
|
|
|
|
VkMemoryRequirements memReqs;
|
|
|
|
|
|
|
|
vkGetImageMemoryRequirements(attr->device,image,&memReqs);
|
|
|
|
|
2020-10-15 17:33:05 +08:00
|
|
|
Memory *mem=CreateMemory(memReqs,flag);
|
|
|
|
|
|
|
|
if(!mem)return(nullptr);
|
|
|
|
|
|
|
|
if(!mem->BindImage(image))
|
|
|
|
{
|
|
|
|
delete mem;
|
|
|
|
return(nullptr);
|
|
|
|
}
|
|
|
|
|
|
|
|
return(mem);
|
2019-11-25 22:05:05 +08:00
|
|
|
}
|
|
|
|
VK_NAMESPACE_END
|