[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