Mesa (master): radv: Detect if all immutable samplers for a binding are equal.

Bas Nieuwenhuizen bnieuwenhuizen at kemper.freedesktop.org
Tue Feb 28 19:49:33 UTC 2017


Module: Mesa
Branch: master
Commit: 500e6e40f683fbad09f38360bb79f8a12442c408
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=500e6e40f683fbad09f38360bb79f8a12442c408

Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date:   Mon Feb 27 09:44:48 2017 +0100

radv: Detect if all immutable samplers for a binding are equal.

We can then use constants for indexed loads.

Signed-off-by: Bas Nieuwenhuizen <basni at google.com>
Reviewed-by: Dave Airlie <airlied at redhat.com>

---

 src/amd/vulkan/radv_descriptor_set.c | 5 +++++
 src/amd/vulkan/radv_descriptor_set.h | 1 +
 2 files changed, 6 insertions(+)

diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c
index b24ff91..d839957 100644
--- a/src/amd/vulkan/radv_descriptor_set.c
+++ b/src/amd/vulkan/radv_descriptor_set.c
@@ -132,10 +132,15 @@ VkResult radv_CreateDescriptorSetLayout(
 
 		if (binding->pImmutableSamplers) {
 			set_layout->binding[b].immutable_samplers = samplers;
+			set_layout->binding[b].immutable_samplers_equal = true;
 			samplers += 4 * binding->descriptorCount;
 
 			for (uint32_t i = 0; i < binding->descriptorCount; i++)
 				memcpy(set_layout->binding[b].immutable_samplers + 4 * i, &radv_sampler_from_handle(binding->pImmutableSamplers[i])->state, 16);
+			for (uint32_t i = 1; i < binding->descriptorCount; i++)
+				if (memcmp(set_layout->binding[b].immutable_samplers + 4 * i,
+				           set_layout->binding[b].immutable_samplers, 16) != 0)
+					set_layout->binding[b].immutable_samplers_equal = false;
 		} else {
 			set_layout->binding[b].immutable_samplers = NULL;
 		}
diff --git a/src/amd/vulkan/radv_descriptor_set.h b/src/amd/vulkan/radv_descriptor_set.h
index 8849d05..c373489 100644
--- a/src/amd/vulkan/radv_descriptor_set.h
+++ b/src/amd/vulkan/radv_descriptor_set.h
@@ -45,6 +45,7 @@ struct radv_descriptor_set_binding_layout {
 
    /* Immutable samplers (or NULL if no immutable samplers) */
    uint32_t *immutable_samplers;
+   bool immutable_samplers_equal;
 };
 
 struct radv_descriptor_set_layout {




More information about the mesa-commit mailing list