[Mesa-dev] [PATCH] anv: descriptors: don't update immutables samplers with anything but their immutable value

Lionel Landwerlin lionel.g.landwerlin at intel.com
Sat Jan 21 12:28:35 UTC 2017


Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
---
 src/intel/vulkan/anv_descriptor_set.c | 31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c
index 4367c0ebe0..a5e65afc48 100644
--- a/src/intel/vulkan/anv_descriptor_set.c
+++ b/src/intel/vulkan/anv_descriptor_set.c
@@ -587,8 +587,13 @@ void anv_UpdateDescriptorSets(
       switch (write->descriptorType) {
       case VK_DESCRIPTOR_TYPE_SAMPLER:
          for (uint32_t j = 0; j < write->descriptorCount; j++) {
-            ANV_FROM_HANDLE(anv_sampler, sampler,
-                            write->pImageInfo[j].sampler);
+            /* If this descriptor has an immutable sampler, we don't want to
+             * stomp on it.
+             */
+            struct anv_sampler *sampler =
+               bind_layout->immutable_samplers ?
+               bind_layout->immutable_samplers[j] :
+               anv_sampler_from_handle(write->pImageInfo[j].sampler);
 
             desc[j] = (struct anv_descriptor) {
                .type = VK_DESCRIPTOR_TYPE_SAMPLER,
@@ -601,17 +606,19 @@ void anv_UpdateDescriptorSets(
          for (uint32_t j = 0; j < write->descriptorCount; j++) {
             ANV_FROM_HANDLE(anv_image_view, iview,
                             write->pImageInfo[j].imageView);
-            ANV_FROM_HANDLE(anv_sampler, sampler,
-                            write->pImageInfo[j].sampler);
-
-            desc[j].type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
-            desc[j].image_view = iview;
-
-            /* If this descriptor has an immutable sampler, we don't want
-             * to stomp on it.
+            /* If this descriptor has an immutable sampler, we don't want to
+             * stomp on it.
              */
-            if (sampler)
-               desc[j].sampler = sampler;
+            struct anv_sampler *sampler =
+               bind_layout->immutable_samplers ?
+               bind_layout->immutable_samplers[j] :
+               anv_sampler_from_handle(write->pImageInfo[j].sampler);
+
+            desc[j] = (struct anv_descriptor) {
+               .type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+               .image_view = iview,
+               .sampler = sampler,
+            };
          }
          break;
 
-- 
2.11.0



More information about the mesa-dev mailing list