Mesa (master): radv: Add hashing for the ycbcr samplers.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Apr 25 20:08:16 UTC 2019
Module: Mesa
Branch: master
Commit: b769a549ee6325e3759a60af19de034e5666ffdb
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b769a549ee6325e3759a60af19de034e5666ffdb
Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date: Sun Apr 7 17:16:50 2019 +0200
radv: Add hashing for the ycbcr samplers.
Otherwise caching gets very confused.
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
src/amd/vulkan/radv_descriptor_set.c | 11 ++++-------
src/amd/vulkan/radv_descriptor_set.h | 3 +++
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c
index e1b5992d635..4e9c73c94d0 100644
--- a/src/amd/vulkan/radv_descriptor_set.c
+++ b/src/amd/vulkan/radv_descriptor_set.c
@@ -109,12 +109,13 @@ VkResult radv_CreateDescriptorSetLayout(
size += ycbcr_sampler_count * sizeof(struct radv_sampler_ycbcr_conversion) + (max_binding + 1) * sizeof(uint32_t);
}
- set_layout = vk_alloc2(&device->alloc, pAllocator, size, 8,
- VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+ set_layout = vk_zalloc2(&device->alloc, pAllocator, size, 8,
+ VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
if (!set_layout)
return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
set_layout->flags = pCreateInfo->flags;
+ set_layout->layout_size = size;
/* We just allocate all the samplers at the end of the struct */
uint32_t *samplers = (uint32_t*)&set_layout->binding[max_binding + 1];
@@ -429,12 +430,8 @@ VkResult radv_CreatePipelineLayout(
for (uint32_t b = 0; b < set_layout->binding_count; b++) {
dynamic_offset_count += set_layout->binding[b].array_size * set_layout->binding[b].dynamic_offset_count;
dynamic_shader_stages |= set_layout->dynamic_shader_stages;
- if (set_layout->binding[b].immutable_samplers_offset)
- _mesa_sha1_update(&ctx, radv_immutable_samplers(set_layout, set_layout->binding + b),
- set_layout->binding[b].array_size * 4 * sizeof(uint32_t));
}
- _mesa_sha1_update(&ctx, set_layout->binding,
- sizeof(set_layout->binding[0]) * set_layout->binding_count);
+ _mesa_sha1_update(&ctx, set_layout, set_layout->layout_size);
}
layout->dynamic_offset_count = dynamic_offset_count;
diff --git a/src/amd/vulkan/radv_descriptor_set.h b/src/amd/vulkan/radv_descriptor_set.h
index 55cc1c9c462..5fd19d94482 100644
--- a/src/amd/vulkan/radv_descriptor_set.h
+++ b/src/amd/vulkan/radv_descriptor_set.h
@@ -58,6 +58,9 @@ struct radv_descriptor_set_layout {
/* Total size of the descriptor set with room for all array entries */
uint32_t size;
+ /* CPU size of this struct + all associated data, for hashing. */
+ uint32_t layout_size;
+
/* Shader stages affected by this descriptor set */
uint16_t shader_stages;
uint16_t dynamic_shader_stages;
More information about the mesa-commit
mailing list