#include #include #include VK_NAMESPACE_BEGIN RenderPass *Device::CreateRenderPass(List &subpass,List color_format,VkFormat depth_format,VkImageLayout color_final_layout,VkImageLayout depth_final_layout) { int depth=-1; uint atta_count=color_format.GetCount(); if(attr->physical_device->CheckDepthFormat(depth_format)) { depth=atta_count++; } SharedArray attachments=new VkAttachmentDescription[atta_count]; SharedArray color_references=new VkAttachmentReference[color_format.GetCount()]; for(uint i=0;i dependency; if(subpass_count==1) { dependency_count=1; dependency=new VkSubpassDependency[dependency_count]; dependency[0].srcSubpass = VK_SUBPASS_EXTERNAL; dependency[0].dstSubpass = 0; dependency[0].srcStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; dependency[0].dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; dependency[0].srcAccessMask = VK_ACCESS_MEMORY_READ_BIT; dependency[0].dstAccessMask = VK_ACCESS_MEMORY_READ_BIT; dependency[0].dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT; } else { dependency_count=subpass_count+1; dependency=new VkSubpassDependency[dependency_count]; for(uint32_t i=0;idevice,&rp_info,nullptr,&render_pass)!=VK_SUCCESS) return(nullptr); return(new RenderPass(attr->device,render_pass,color_format,depth_format)); } RenderPass *Device::CreateRenderPass(VkFormat color_format,VkFormat depth_format,VkImageLayout color_final_layout,VkImageLayout depth_final_layout) { VkAttachmentReference color_atta_ref={0,VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL}; VkAttachmentReference depth_atta_ref={1,VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL}; List subpass_desc_list; VkSubpassDescription subpass; subpass.flags = 0; subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; subpass.inputAttachmentCount = 0; subpass.pInputAttachments = nullptr; subpass.colorAttachmentCount = 1; subpass.pColorAttachments = &color_atta_ref; subpass.pResolveAttachments = nullptr; subpass.pDepthStencilAttachment = &depth_atta_ref; subpass.preserveAttachmentCount = 0; subpass.pPreserveAttachments = nullptr; subpass_desc_list.Add(subpass); List color_format_list; color_format_list.Add(color_format); return CreateRenderPass(subpass_desc_list,color_format_list,depth_format,color_final_layout,depth_final_layout); } VK_NAMESPACE_END