From 77836d71215a583971bee7ecb603989476a922c7 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Mon, 28 Mar 2022 17:41:25 +0800 Subject: [PATCH] improved BindInputAttachment at DescriptorSets, added BindInputAttachment at MaterialParameters --- inc/hgl/graph/VKDescriptorSets.h | 2 +- inc/hgl/graph/VKImageView.h | 4 ++-- inc/hgl/graph/VKMaterialDescriptorSets.h | 3 ++- inc/hgl/graph/VKMaterialParameters.h | 1 + inc/hgl/graph/VKTexture.h | 2 +- src/SceneGraph/Vulkan/VKDescriptorSets.cpp | 13 ++++++++++--- src/SceneGraph/Vulkan/VKDeviceFramebuffer.cpp | 4 ++-- src/SceneGraph/Vulkan/VKMaterialParameters.cpp | 16 ++++++++++++++++ 8 files changed, 35 insertions(+), 10 deletions(-) diff --git a/inc/hgl/graph/VKDescriptorSets.h b/inc/hgl/graph/VKDescriptorSets.h index d3a39780..00b8fb4f 100644 --- a/inc/hgl/graph/VKDescriptorSets.h +++ b/inc/hgl/graph/VKDescriptorSets.h @@ -55,7 +55,7 @@ public: bool BindSSBO (const int binding,const GPUBuffer *buf,const VkDeviceSize offset,const VkDeviceSize range,bool dynamic=false); bool BindSampler(const int binding,Texture *,Sampler *); - bool BindInputAttachment(const int binding,Texture *); + bool BindInputAttachment(const int binding,ImageView *); void Update(); };//class DescriptorSets VK_NAMESPACE_END diff --git a/inc/hgl/graph/VKImageView.h b/inc/hgl/graph/VKImageView.h index 55c11fdc..d9281423 100644 --- a/inc/hgl/graph/VKImageView.h +++ b/inc/hgl/graph/VKImageView.h @@ -29,10 +29,10 @@ public: virtual ~ImageView(); - operator VkImageView(){return image_view;} - public: + + VkImageView GetImageView () {return image_view;} const VkImageViewType GetViewType ()const{return ivci->viewType;} const VkFormat GetFormat ()const{return ivci->format;} const VkExtent3D & GetExtent ()const{return extent;} diff --git a/inc/hgl/graph/VKMaterialDescriptorSets.h b/inc/hgl/graph/VKMaterialDescriptorSets.h index 67e3506d..b4e25bc6 100644 --- a/inc/hgl/graph/VKMaterialDescriptorSets.h +++ b/inc/hgl/graph/VKMaterialDescriptorSets.h @@ -47,7 +47,8 @@ public: const int GetUBO (const AnsiString &name,bool dynamic)const{return GetBinding(dynamic?VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,name);} const int GetSSBO (const AnsiString &name,bool dynamic)const{return GetBinding(dynamic?VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,name);} - const int GetSampler (const AnsiString &name )const{return GetBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, name);} + const int GetSampler (const AnsiString &name )const{return GetBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,name);} + const int GetAttachment (const AnsiString &name )const{return GetBinding(VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,name);} const DescriptorSetLayoutCreateInfo *GetBinding(const DescriptorSetsType &type)const{return sds+size_t(type);} };//class MaterialDescriptorSets diff --git a/inc/hgl/graph/VKMaterialParameters.h b/inc/hgl/graph/VKMaterialParameters.h index 4893e5e2..38ae0753 100644 --- a/inc/hgl/graph/VKMaterialParameters.h +++ b/inc/hgl/graph/VKMaterialParameters.h @@ -45,6 +45,7 @@ public: bool BindUBO(const AnsiString &name,GPUBuffer *ubo,bool dynamic=false); bool BindSSBO(const AnsiString &name,GPUBuffer *ubo,bool dynamic=false); bool BindSampler(const AnsiString &name,Texture *tex,Sampler *sampler); + bool BindInputAttachment(const AnsiString &name,ImageView *); void Update(); };//class MaterialParameters diff --git a/inc/hgl/graph/VKTexture.h b/inc/hgl/graph/VKTexture.h index af0f95e7..af03b657 100644 --- a/inc/hgl/graph/VKTexture.h +++ b/inc/hgl/graph/VKTexture.h @@ -25,7 +25,7 @@ public: 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;} + VkImageView GetVulkanImageView () {return data?data->image_view->GetImageView():VK_NULL_HANDLE;} GPUMemory * GetMemory () {return data?data->memory:nullptr;} ImageView * GetImageView () {return data?data->image_view:nullptr;} diff --git a/src/SceneGraph/Vulkan/VKDescriptorSets.cpp b/src/SceneGraph/Vulkan/VKDescriptorSets.cpp index cee53b8d..7956dccd 100644 --- a/src/SceneGraph/Vulkan/VKDescriptorSets.cpp +++ b/src/SceneGraph/Vulkan/VKDescriptorSets.cpp @@ -57,6 +57,13 @@ namespace imageView=tex->GetVulkanImageView(); imageLayout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; } + + DescriptorImageInfo(VkImageView iv) + { + sampler=VK_NULL_HANDLE; + imageView=iv; + imageLayout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + } };//struct DescriptorImageInfo:public VkDescriptorImageInfo }//namespace @@ -159,14 +166,14 @@ bool DescriptorSets::BindSampler(const int binding,Texture *tex,Sampler *sampler return(true); } -bool DescriptorSets::BindInputAttachment(const int binding,Texture *tex) +bool DescriptorSets::BindInputAttachment(const int binding,ImageView *iv) { - if(binding<0||!tex) + if(binding<0||!iv) return(false); if(binded_sets.IsMember(binding))return(false); - DescriptorImageInfo *image_info=new DescriptorImageInfo(tex,nullptr); + DescriptorImageInfo *image_info=new DescriptorImageInfo(iv->GetImageView()); image_list.Add(image_info); diff --git a/src/SceneGraph/Vulkan/VKDeviceFramebuffer.cpp b/src/SceneGraph/Vulkan/VKDeviceFramebuffer.cpp index 57a4b472..2dd1613e 100644 --- a/src/SceneGraph/Vulkan/VKDeviceFramebuffer.cpp +++ b/src/SceneGraph/Vulkan/VKDeviceFramebuffer.cpp @@ -41,7 +41,7 @@ Framebuffer *GPUDevice::CreateFramebuffer(RenderPass *rp,ImageView **color_list, if(*cf!=(*iv)->GetFormat()) return(nullptr); - *ap=**iv; + *ap=(*iv)->GetImageView(); ++ap; ++cf; @@ -59,7 +59,7 @@ Framebuffer *GPUDevice::CreateFramebuffer(RenderPass *rp,ImageView **color_list, return(nullptr); } - attachments[color_count]=*depth; + attachments[color_count]=depth->GetImageView(); extent.width=depth->GetExtent().width; extent.height=depth->GetExtent().height; diff --git a/src/SceneGraph/Vulkan/VKMaterialParameters.cpp b/src/SceneGraph/Vulkan/VKMaterialParameters.cpp index c33a4bb1..29e72ec6 100644 --- a/src/SceneGraph/Vulkan/VKMaterialParameters.cpp +++ b/src/SceneGraph/Vulkan/VKMaterialParameters.cpp @@ -64,6 +64,22 @@ bool MaterialParameters::BindSampler(const AnsiString &name,Texture *tex,Sampler return(true); } +bool MaterialParameters::BindInputAttachment(const AnsiString &name,ImageView *iv) +{ + if(name.IsEmpty()||!iv) + return(false); + + const int index=mds->GetSampler(name); + + if(index<0) + return(false); + + if(!descriptor_sets->BindInputAttachment(index,iv)) + return(false); + + return(true); +} + void MaterialParameters::Update() { descriptor_sets->Update();