[Bf-blender-cvs] [b83d03677e7] temp-vulkan-descriptor-sets: Use a single descriptor set.

Jeroen Bakker noreply at git.blender.org
Fri Feb 3 15:23:46 CET 2023


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);
 };



More information about the Bf-blender-cvs mailing list