修改以支持win32模式

This commit is contained in:
hyzboy 2019-07-06 16:46:19 +08:00
parent 5ef05ffbcb
commit 4586038c6f
28 changed files with 65 additions and 72 deletions

View File

@ -70,7 +70,7 @@ private:
if(!ubo_atomsphere)
return(false);
return desc_set->BindUBO(bindpoint,*ubo_atomsphere);
return desc_set->BindUBO(bindpoint,ubo_atomsphere);
}
bool InitUBO()

View File

@ -20,13 +20,6 @@ constexpr uint32_t GBUFFER_HEIGHT=1024;
constexpr uint32_t SCREEN_WIDTH=128;
constexpr uint32_t SCREEN_HEIGHT=128;
struct AtomsphereData
{
alignas(16) Vector3f position;
float intensity;
float scattering_direction;
};//
using Texture2DPointer=vulkan::Texture2D *;
constexpr VkFormat position_candidate_format[]={FMT_RGBA32F,FMT_RGBA16F};

View File

@ -105,7 +105,7 @@ private:
if(!ubo_mvp)
return(false);
if(!descriptor_sets->BindUBO(material->GetUBO("world"),*ubo_mvp))
if(!descriptor_sets->BindUBO(material->GetUBO("world"),ubo_mvp))
return(false);
descriptor_sets->Update();

View File

@ -76,7 +76,7 @@ public:
if(!ubo_world_matrix)
return(false);
return desc_set->BindUBO(world_matrix_bindpoint,*ubo_world_matrix);
return desc_set->BindUBO(world_matrix_bindpoint,ubo_world_matrix);
}
void Resize(int w,int h)override

View File

@ -292,7 +292,7 @@ public:
if(!ubo_world_matrix)
return(false);
return desc_set->BindUBO(world_matrix_bindpoint,*ubo_world_matrix);
return desc_set->BindUBO(world_matrix_bindpoint,ubo_world_matrix);
}
virtual void BuildCommandBuffer(uint32_t index)=0;

View File

@ -85,7 +85,7 @@ private:
if(!ubo_mvp)
return(false);
if(!descriptor_sets->BindUBO(material->GetUBO("world"),*ubo_mvp))
if(!descriptor_sets->BindUBO(material->GetUBO("world"),ubo_mvp))
return(false);
descriptor_sets->Update();

View File

@ -86,7 +86,7 @@ private:
if(!ubo_mvp)
return(false);
if(!descriptor_sets->BindUBO(material->GetUBO("world"),*ubo_mvp))
if(!descriptor_sets->BindUBO(material->GetUBO("world"),ubo_mvp))
return(false);
descriptor_sets->Update();

View File

@ -118,7 +118,7 @@ private:
sampler=device->CreateSampler(&sampler_create_info);
descriptor_sets->BindSampler(material->GetSampler("texture_lena"),texture,sampler);
descriptor_sets->BindUBO(material->GetUBO("world"),*ubo_mvp);
descriptor_sets->BindUBO(material->GetUBO("world"),ubo_mvp);
descriptor_sets->Update();
return(true);

View File

@ -87,7 +87,7 @@ namespace hgl
CubeCreateInfo()
{
center.Set(0,0,0);
center.Set(1,1,1);
size.Set(1,1,1);
tile.Set(1,1);
}
};//struct CubeCreateInfo

View File

@ -35,9 +35,9 @@ public:
virtual ~Buffer();
operator VkBuffer (){return buf.buffer;}
operator Memory * (){return buf.memory;}
operator VkDescriptorBufferInfo * (){return &buf.info;}
VkBuffer GetBuffer (){return buf.buffer;}
Memory * GetMemory (){return buf.memory;}
const VkDescriptorBufferInfo * GetBufferInfo()const{return &buf.info;}
void * Map() {return buf.memory->Map();}
virtual void * Map(VkDeviceSize start,VkDeviceSize size) {return buf.memory->Map(start,size);}

View File

@ -5,6 +5,7 @@
#include<hgl/type/Map.h>
VK_NAMESPACE_BEGIN
class Device;
class Buffer;
class DescriptorSets
{
@ -39,8 +40,8 @@ public:
const VkPipelineLayout GetPipelineLayout ()const{return pipeline_layout;}
void Clear();
bool BindUBO(const uint32_t binding,const VkDescriptorBufferInfo *);
bool BindUBODynamic(const uint32_t binding,const VkDescriptorBufferInfo *);
bool BindUBO(const uint32_t binding,const Buffer *);
bool BindUBODynamic(const uint32_t binding,const Buffer *);
bool BindSampler(const uint32_t binding,Texture *,Sampler *);
void Update();
};//class DescriptorSets

View File

@ -8,18 +8,18 @@ constexpr uint32_t ERROR_FAMILY_INDEX=UINT32_MAX;
struct DeviceAttribute
{
VkInstance instance =nullptr;
VkInstance instance =VK_NULL_HANDLE;
const PhysicalDevice * physical_device =nullptr;
VkSurfaceKHR surface =nullptr;
VkSurfaceKHR surface =VK_NULL_HANDLE;
VkSurfaceCapabilitiesKHR surface_caps;
VkExtent2D swapchain_extent;
uint32_t graphics_family =ERROR_FAMILY_INDEX;
uint32_t present_family =ERROR_FAMILY_INDEX;
VkQueue graphics_queue =nullptr;
VkQueue present_queue =nullptr;
VkQueue graphics_queue =VK_NULL_HANDLE;
VkQueue present_queue =VK_NULL_HANDLE;
List<VkQueueFamilyProperties> family_properties;
List<VkBool32> supports_present;
@ -31,16 +31,16 @@ struct DeviceAttribute
VkSurfaceTransformFlagBitsKHR preTransform;
VkCompositeAlphaFlagBitsKHR compositeAlpha =VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
VkDevice device =nullptr;
VkCommandPool cmd_pool =nullptr;
VkSwapchainKHR swap_chain =nullptr;
VkDevice device =VK_NULL_HANDLE;
VkCommandPool cmd_pool =VK_NULL_HANDLE;
VkSwapchainKHR swap_chain =VK_NULL_HANDLE;
ObjectList<Texture2D> sc_texture;
Texture2D * sc_depth =nullptr;
VkDescriptorPool desc_pool =nullptr;
VkDescriptorPool desc_pool =VK_NULL_HANDLE;
VkPipelineCache pipeline_cache =nullptr;
VkPipelineCache pipeline_cache =VK_NULL_HANDLE;
public:

View File

@ -42,7 +42,7 @@ public:
ImageView *CreateImageView(VkDevice device,VkImageViewType type,VkFormat format,VkImageAspectFlags aspectMask,VkImage img);
#define CREATE_IMAGE_VIEW(short_name,larget_name) inline ImageView *CreateImageView##short_name(VkDevice device,VkFormat format,VkImageAspectFlags aspectMask,VkImage img=nullptr){return CreateImageView(device,VK_IMAGE_VIEW_TYPE_##larget_name,format,aspectMask,img);}
#define CREATE_IMAGE_VIEW(short_name,larget_name) inline ImageView *CreateImageView##short_name(VkDevice device,VkFormat format,VkImageAspectFlags aspectMask,VkImage img=VK_NULL_HANDLE){return CreateImageView(device,VK_IMAGE_VIEW_TYPE_##larget_name,format,aspectMask,img);}
CREATE_IMAGE_VIEW(1D,1D);
CREATE_IMAGE_VIEW(2D,2D);
CREATE_IMAGE_VIEW(3D,3D);

View File

@ -45,8 +45,8 @@ public:
bool Write(const void *ptr,VkDeviceSize start,VkDeviceSize size);
bool Write(const void *ptr){return Write(ptr,0,req.size);}
bool Bind(VkBuffer buffer);
bool Bind(VkImage image);
bool BindBuffer(VkBuffer buffer);
bool BindImage(VkImage image);
};//class Memory
Memory *CreateMemory(VkDevice device,const PhysicalDevice *pd,const VkMemoryRequirements &req,uint32_t properties);

View File

@ -8,7 +8,7 @@ VK_NAMESPACE_BEGIN
struct TextureData
{
Memory * memory =nullptr;
VkImage image =nullptr;
VkImage image =VK_NULL_HANDLE;
VkImageLayout image_layout=VK_IMAGE_LAYOUT_UNDEFINED;
ImageView * image_view =nullptr;
uint32 mip_levels =0;
@ -27,17 +27,15 @@ protected:
public:
operator TextureData * (){return data;}
TextureData * GetData (){return data;}
operator VkDeviceMemory (){return data?data->memory->operator VkDeviceMemory():nullptr;}
operator VkImage (){return data?data->image:nullptr;}
operator VkImageLayout (){return data?data->image_layout:VK_IMAGE_LAYOUT_UNDEFINED;}
operator VkImageView (){return data?data->image_view->operator VkImageView():nullptr;}
VkDeviceMemory GetDeviceMemory (){return data?data->memory->operator VkDeviceMemory():VK_NULL_HANDLE;}
VkImage GetImage (){return data?data->image:VK_NULL_HANDLE;}
VkImageLayout GetImageLayout (){return data?data->image_layout:VK_IMAGE_LAYOUT_UNDEFINED;}
VkImageView GetVulkanImageView (){return data?data->image_view->operator VkImageView():VK_NULL_HANDLE;}
operator Memory * (){return data?data->memory:nullptr;}
operator ImageView * (){return data?data->image_view:nullptr;}
ImageView * GetImageView(){return data?data->image_view:nullptr;}
Memory * GetMemory (){return data?data->memory:nullptr;}
ImageView * GetImageView (){return data?data->image_view:nullptr;}
const uint32 GetMipLevels()const{return data?data->mip_levels:0;}
const bool IsLinear ()const{return data?data->linear:false;}

View File

@ -16,7 +16,7 @@ namespace hgl
VkResult res=vkCreateWin32SurfaceKHR(vk_inst,&createInfo,nullptr,&surface);
if(res!=VK_SUCCESS)
return(nullptr);
return(VK_NULL_HANDLE);
return(surface);
}

View File

@ -25,7 +25,7 @@ CommandBuffer::CommandBuffer(VkDevice dev,const VkExtent2D &extent,VkCommandPool
render_area.offset.y=0;
render_area.extent=extent;
pipeline_layout=nullptr;
pipeline_layout=VK_NULL_HANDLE;
}
CommandBuffer::~CommandBuffer()
@ -72,7 +72,7 @@ bool CommandBuffer::BeginRenderPass(RenderPass *rp,Framebuffer *fb)
vkCmdSetViewport(cmd_buf,0,1,&viewport);
vkCmdSetScissor(cmd_buf,0,1,&render_area);
pipeline_layout=nullptr;
pipeline_layout=VK_NULL_HANDLE;
return(true);
}
@ -92,7 +92,7 @@ bool CommandBuffer::Bind(Renderable *render_obj)
IndexBuffer *indices_buffer=render_obj->GetIndexBuffer();
if(indices_buffer)
vkCmdBindIndexBuffer(cmd_buf,*indices_buffer,render_obj->GetIndexOffset(),indices_buffer->GetType());
vkCmdBindIndexBuffer(cmd_buf,indices_buffer->GetBuffer(),render_obj->GetIndexOffset(),indices_buffer->GetType());
return(true);
}

View File

@ -13,10 +13,10 @@ class DescriptorSetLayoutCreater
Device *device;
List<VkDescriptorSetLayoutBinding> layout_binding_list;
VkDescriptorSetLayout dsl=nullptr;
VkDescriptorSetLayout dsl=VK_NULL_HANDLE;
Map<uint32_t,int> index_by_binding;
VkPipelineLayout pipeline_layout=nullptr;
VkPipelineLayout pipeline_layout=VK_NULL_HANDLE;
public:

View File

@ -1,5 +1,6 @@
#include<hgl/graph/vulkan/VKDescriptorSets.h>
#include<hgl/graph/vulkan/VKDevice.h>
#include<hgl/graph/vulkan/VKBuffer.h>
#include<hgl/graph/vulkan/VKTexture.h>
#include<hgl/graph/vulkan/VKSampler.h>
@ -10,7 +11,7 @@ void DescriptorSets::Clear()
desc_image_info.ClearData();
}
bool DescriptorSets::BindUBO(const uint32_t binding,const VkDescriptorBufferInfo *buf_info)
bool DescriptorSets::BindUBO(const uint32_t binding,const Buffer *buf)
{
VkWriteDescriptorSet writeDescriptorSet;
@ -22,14 +23,14 @@ bool DescriptorSets::BindUBO(const uint32_t binding,const VkDescriptorBufferInfo
writeDescriptorSet.descriptorCount = 1;
writeDescriptorSet.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
writeDescriptorSet.pImageInfo = nullptr;
writeDescriptorSet.pBufferInfo = buf_info;
writeDescriptorSet.pBufferInfo = buf->GetBufferInfo();
writeDescriptorSet.pTexelBufferView = nullptr;
write_desc_sets.Add(writeDescriptorSet);
return(true);
}
bool DescriptorSets::BindUBODynamic(const uint32_t binding,const VkDescriptorBufferInfo *buf_info)
bool DescriptorSets::BindUBODynamic(const uint32_t binding,const Buffer *buf)
{
VkWriteDescriptorSet writeDescriptorSet;
@ -41,7 +42,7 @@ bool DescriptorSets::BindUBODynamic(const uint32_t binding,const VkDescriptorBuf
writeDescriptorSet.descriptorCount = 1;
writeDescriptorSet.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC;
writeDescriptorSet.pImageInfo = nullptr;
writeDescriptorSet.pBufferInfo = buf_info;
writeDescriptorSet.pBufferInfo = buf->GetBufferInfo();;
writeDescriptorSet.pTexelBufferView = nullptr;
write_desc_sets.Add(writeDescriptorSet);
@ -54,8 +55,8 @@ bool DescriptorSets::BindSampler(const uint32_t binding,Texture *tex,Sampler *sa
return(false);
VkDescriptorImageInfo *image_info=desc_image_info.Add();
image_info->imageView =*tex;
image_info->imageLayout =*tex;
image_info->imageView =tex->GetVulkanImageView();
image_info->imageLayout =tex->GetImageLayout();
image_info->sampler =*sampler;
VkWriteDescriptorSet writeDescriptorSet;

View File

@ -81,7 +81,7 @@ void Device::RecreateDevice()
for(uint i=0;i<swap_chain_count;i++)
{
render_frame.Add(vulkan::CreateFramebuffer(this,main_rp,*attr->sc_texture[i],*attr->sc_depth));
render_frame.Add(vulkan::CreateFramebuffer(this,main_rp,attr->sc_texture[i]->GetImageView(),attr->sc_depth->GetImageView()));
fence_list.Add(this->CreateFence(true));
}

View File

@ -48,7 +48,7 @@ void DeviceAttribute::ClearSwapchain()
if(swap_chain)
{
vkDestroySwapchainKHR(device,swap_chain,nullptr);
swap_chain=nullptr;
swap_chain=VK_NULL_HANDLE;
}
}

View File

@ -24,7 +24,7 @@ namespace
Memory *dm=CreateMemory(rsa->device,rsa->physical_device,mem_reqs,VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT|VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
if(dm&&dm->Bind(vb.buffer))
if(dm&&dm->BindBuffer(vb.buffer))
{
vb.info.buffer =vb.buffer;
vb.info.offset =0;

View File

@ -93,7 +93,7 @@ namespace
if(vkCreateCommandPool(device,&cmd_pool_info,nullptr,&cmd_pool)==VK_SUCCESS)
return cmd_pool;
return(nullptr);
return(VK_NULL_HANDLE);
}
VkSwapchainKHR CreateSwapChain(DeviceAttribute *rsa)
@ -136,15 +136,15 @@ namespace
if(vkCreateSwapchainKHR(rsa->device,&swapchain_ci,nullptr,&swap_chain)==VK_SUCCESS)
return(swap_chain);
return(nullptr);
return(VK_NULL_HANDLE);
}
ImageView *Create2DImageView(VkDevice device,VkFormat format,VkImage img=nullptr)
ImageView *Create2DImageView(VkDevice device,VkFormat format,VkImage img=VK_NULL_HANDLE)
{
return CreateImageView(device,VK_IMAGE_VIEW_TYPE_2D,format,VK_IMAGE_ASPECT_COLOR_BIT,img);
}
ImageView *CreateDepthImageView(VkDevice device,VkFormat format,VkImage img=nullptr)
ImageView *CreateDepthImageView(VkDevice device,VkFormat format,VkImage img=VK_NULL_HANDLE)
{
return CreateImageView(device,VK_IMAGE_VIEW_TYPE_2D,format,VK_IMAGE_ASPECT_DEPTH_BIT,img);
}
@ -224,7 +224,7 @@ namespace
VkDescriptorPool desc_pool;
if(vkCreateDescriptorPool(device,&dp_create_info,nullptr,&desc_pool)!=VK_SUCCESS)
return(nullptr);
return(VK_NULL_HANDLE);
return desc_pool;
}
@ -241,7 +241,7 @@ namespace
VkPipelineCache cache;
if(vkCreatePipelineCache(device, &pipelineCache, nullptr, &cache)!=VK_SUCCESS)
return(nullptr);
return(VK_NULL_HANDLE);
return cache;
}

View File

@ -95,7 +95,7 @@ bool Device::ChangeTexture2D(Texture2D *tex,Buffer *buf,uint32_t left,uint32_t t
imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
imageMemoryBarrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
imageMemoryBarrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
imageMemoryBarrier.image = *tex;
imageMemoryBarrier.image = tex->GetImage();
imageMemoryBarrier.subresourceRange = subresourceRange;
texture_cmd_buf->Begin();
@ -108,8 +108,8 @@ bool Device::ChangeTexture2D(Texture2D *tex,Buffer *buf,uint32_t left,uint32_t t
1, &imageMemoryBarrier);
texture_cmd_buf->CopyBufferToImage(
*buf,
*tex,
buf->GetBuffer(),
tex->GetImage(),
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
1,
&buffer_image_copy);

View File

@ -205,7 +205,7 @@ Instance::Instance(VkInstance i,CharPointerList &el)
debug_out(extension_properties);
}
debug_report_callback=nullptr;
debug_report_callback=VK_NULL_HANDLE;
{
VkDebugReportCallbackCreateInfoEXT create_info={};
@ -218,7 +218,7 @@ Instance::Instance(VkInstance i,CharPointerList &el)
CreateDebugReportCallbackEXT(inst,&create_info,nullptr,&debug_report_callback);
}
debug_messenger=nullptr;
debug_messenger=VK_NULL_HANDLE;
{
VkDebugUtilsMessengerCreateInfoEXT createInfo={};
createInfo.sType=VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;

View File

@ -70,14 +70,14 @@ bool Memory::Write(const void *ptr,VkDeviceSize start,VkDeviceSize size)
return(true);
}
bool Memory::Bind(VkBuffer buffer)
bool Memory::BindBuffer(VkBuffer buffer)
{
if(!buffer)return(false);
return(vkBindBufferMemory(device,buffer,memory,0)==VK_SUCCESS);
}
bool Memory::Bind(VkImage image)
bool Memory::BindImage(VkImage image)
{
if(!image)return(false);

View File

@ -32,7 +32,7 @@ bool Renderable::Set(const int stage_input_binding,VertexBuffer *vbo,VkDeviceSiz
//format信息来自于shader实际中可以不一样。但那样需要为每一个格式产生一个同样shader的material instance不同的格式又需要不同的pipeline我们不支持这种行为
buf_list[stage_input_binding]=*vbo;
buf_list[stage_input_binding]=vbo->GetBuffer();
buf_offset[stage_input_binding]=offset;
return(true);

View File

@ -75,7 +75,7 @@ Texture2D *CreateTexture2D(VkDevice device,const PhysicalDevice *pd,const VkForm
Memory *dm=CreateMemory(device,pd,memReqs,VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
if(dm&&dm->Bind(image))
if(dm&&dm->BindImage(image))
{
ImageView *image_view=CreateImageView2D(device,format,aspectMask,image);