Commit: b83d03677e7967b12e874c601b88c098d1509104
Author: Jeroen Bakker
Date:   Thu Feb 2 13:48:23 2023 +0100
Branches: temp-vulkan-descriptor-sets
https://developer.blender.org/rBb83d03677e7967b12e874c601b88c098d1509104

Use a single descriptor set.

===================================================================

M       source/blender/gpu/vulkan/vk_shader.cc
M       source/blender/gpu/vulkan/vk_shader.hh

===================================================================

diff --git a/source/blender/gpu/vulkan/vk_shader.cc 
b/source/blender/gpu/vulkan/vk_shader.cc
index f9daf75dee4..5704b7309a8 100644
--- a/source/blender/gpu/vulkan/vk_shader.cc
+++ b/source/blender/gpu/vulkan/vk_shader.cc
@@ -643,10 +643,10 @@ bool VKShader::finalize(const shader::ShaderCreateInfo 
*info)
   }
 
   VkDevice vk_device = context_->device_get();
-  if (!finalize_descriptor_set_layouts(vk_device, info)) {
+  if (!finalize_descriptor_set_layouts(vk_device, *info)) {
     return false;
   }
-  if (!finalize_pipeline_layout(vk_device, info)) {
+  if (!finalize_pipeline_layout(vk_device, *info)) {
     return false;
   }
 
@@ -729,7 +729,7 @@ bool VKShader::bake_compute_pipeline(VkDevice vk_device)
 }
 
 bool VKShader::finalize_pipeline_layout(VkDevice vk_device,
-                                        const shader::ShaderCreateInfo * 
/*info*/)
+                                        const shader::ShaderCreateInfo & 
/*info*/)
 {
   VkPipelineLayoutCreateInfo pipeline_info = {};
   pipeline_info.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
@@ -799,29 +799,28 @@ static VkDescriptorSetLayoutCreateInfo 
create_descriptor_set_layout(
 }
 
 bool VKShader::finalize_descriptor_set_layouts(VkDevice vk_device,
-                                               const shader::ShaderCreateInfo 
*info)
+                                               const shader::ShaderCreateInfo 
&info)
 {
-
-  if (!info->pass_resources_.is_empty()) {
-    Vector<VkDescriptorSetLayoutBinding> bindings;
-    VkDescriptorSetLayoutCreateInfo layout_info = create_descriptor_set_layout(
-        info->pass_resources_, bindings);
-    VkDescriptorSetLayout layout = VK_NULL_HANDLE;
-    if (vkCreateDescriptorSetLayout(vk_device, &layout_info, nullptr, &layout) 
!= VK_SUCCESS) {
-      return false;
-    };
-    layouts_.append(layout);
-  }
-  if (!info->batch_resources_.is_empty()) {
-    Vector<VkDescriptorSetLayoutBinding> bindings;
-    VkDescriptorSetLayoutCreateInfo layout_info = create_descriptor_set_layout(
-        info->batch_resources_, bindings);
-    VkDescriptorSetLayout layout = VK_NULL_HANDLE;
-    if (vkCreateDescriptorSetLayout(vk_device, &layout_info, nullptr, &layout) 
!= VK_SUCCESS) {
-      return false;
-    }
-    layouts_.append(layout);
-  }
+  if (info.pass_resources_.is_empty() && info.batch_resources_.is_empty()) {
+    return true;
+  }
+
+  /* Currently we create a single descriptor set. The goal would be to create 
one descriptor set
+   * for Frequency::PASS/BATCH. This isn't possible as areas expect that the 
binding location is
+   * static and predictable (eevee-next) or the binding location can be mapped 
to a single number
+   * (python). */
+  Vector<ShaderCreateInfo::Resource> all_resources;
+  all_resources.extend(info.pass_resources_);
+  all_resources.extend(info.batch_resources_);
+
+  Vector<VkDescriptorSetLayoutBinding> bindings;
+  VkDescriptorSetLayoutCreateInfo layout_info = 
create_descriptor_set_layout(all_resources,
+                                                                             
bindings);
+  VkDescriptorSetLayout layout = VK_NULL_HANDLE;
+  if (vkCreateDescriptorSetLayout(vk_device, &layout_info, nullptr, &layout) 
!= VK_SUCCESS) {
+    return false;
+  };
+  layouts_.append(layout);
 
   return true;
 }
diff --git a/source/blender/gpu/vulkan/vk_shader.hh 
b/source/blender/gpu/vulkan/vk_shader.hh
index 49832bc546e..9ec8a60d5ba 100644
--- a/source/blender/gpu/vulkan/vk_shader.hh
+++ b/source/blender/gpu/vulkan/vk_shader.hh
@@ -65,8 +65,8 @@ class VKShader : public Shader {
   void build_shader_module(MutableSpan<const char *> sources,
                            shaderc_shader_kind stage,
                            VkShaderModule *r_shader_module);
-  bool finalize_descriptor_set_layouts(VkDevice vk_device, const 
shader::ShaderCreateInfo *info);
-  bool finalize_pipeline_layout(VkDevice vk_device, const 
shader::ShaderCreateInfo *info);
+  bool finalize_descriptor_set_layouts(VkDevice vk_device, const 
shader::ShaderCreateInfo &info);
+  bool finalize_pipeline_layout(VkDevice vk_device, const 
shader::ShaderCreateInfo &info);
   bool finalize_graphics_pipeline(VkDevice vk_device);
   bool bake_compute_pipeline(VkDevice vk_device);
 };

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to