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