summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>2024-03-20 10:52:01 +0200
committerMarge Bot <emma+marge@anholt.net>2024-03-20 19:29:05 +0000
commit7730fa5683c41c3a2de042f5bc046c92029a4d8a (patch)
tree044d215ff9731041364f217a7412f2f342948c58
parentdc1069b16745c3b0dadf1d9c741ffdb1cb36ef69 (diff)
anv: track embedded sampler counts in layouts
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: José Roberto de Souza <jose.souza@intel.com> Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28290>
-rw-r--r--src/intel/vulkan/anv_descriptor_set.c19
-rw-r--r--src/intel/vulkan/anv_private.h6
2 files changed, 25 insertions, 0 deletions
diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c
index dd09bd229b1..21fa7f534ca 100644
--- a/src/intel/vulkan/anv_descriptor_set.c
+++ b/src/intel/vulkan/anv_descriptor_set.c
@@ -699,6 +699,7 @@ VkResult anv_CreateDescriptorSetLayout(
uint32_t dynamic_offset_count = 0;
uint32_t descriptor_buffer_surface_size = 0;
uint32_t descriptor_buffer_sampler_size = 0;
+ uint32_t sampler_count = 0;
for (uint32_t j = 0; j < pCreateInfo->bindingCount; j++) {
const VkDescriptorSetLayoutBinding *binding = &pCreateInfo->pBindings[j];
@@ -846,6 +847,11 @@ VkResult anv_CreateDescriptorSetLayout(
MAX2(set_layout->binding[b].max_plane_count, 1) *
set_layout->binding[b].descriptor_data_sampler_size;
+ if (binding->descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER) {
+ sampler_count += binding->descriptorCount *
+ set_layout->binding[b].max_plane_count;
+ }
+
unsigned surface_align, sampler_align;
anv_descriptor_data_alignment(set_layout->binding[b].data,
set_layout->type,
@@ -885,6 +891,7 @@ VkResult anv_CreateDescriptorSetLayout(
VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT) {
assert(set_layout->descriptor_buffer_surface_size == 0);
assert(set_layout->descriptor_buffer_sampler_size == 0);
+ set_layout->embedded_sampler_count = sampler_count;
}
*pSetLayout = anv_descriptor_set_layout_to_handle(set_layout);
@@ -1148,6 +1155,18 @@ anv_pipeline_sets_layout_add(struct anv_pipeline_sets_layout *layout,
}
}
+uint32_t
+anv_pipeline_sets_layout_embedded_sampler_count(const struct anv_pipeline_sets_layout *layout)
+{
+ uint32_t count = 0;
+ for (unsigned s = 0; s < layout->num_sets; s++) {
+ if (!layout->set[s].layout)
+ continue;
+ count += layout->set[s].layout->embedded_sampler_count;
+ }
+ return count;
+}
+
void
anv_pipeline_sets_layout_hash(struct anv_pipeline_sets_layout *layout)
{
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index f1c273b8a65..a879cf2bea7 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -2562,6 +2562,9 @@ struct anv_descriptor_set_layout {
*/
uint32_t descriptor_buffer_sampler_size;
+ /* Number of embedded sampler count */
+ uint32_t embedded_sampler_count;
+
/* Bindings in this descriptor set */
struct anv_descriptor_set_binding_layout binding[0];
};
@@ -2960,6 +2963,9 @@ void anv_pipeline_sets_layout_add(struct anv_pipeline_sets_layout *layout,
uint32_t set_idx,
struct anv_descriptor_set_layout *set_layout);
+uint32_t
+anv_pipeline_sets_layout_embedded_sampler_count(const struct anv_pipeline_sets_layout *layout);
+
void anv_pipeline_sets_layout_hash(struct anv_pipeline_sets_layout *layout);
void anv_pipeline_sets_layout_print(const struct anv_pipeline_sets_layout *layout);