summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>2017-01-18 12:00:49 +0000
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>2017-01-21 19:22:27 +0000
commit494b63f52541936e7b0357534ee0fd2444319501 (patch)
tree91e7949c31a15ae160555b5973e3b6e929d8c562
parentbb96b034616d9d099752efb005b5c05e8644059c (diff)
anv: descriptors: don't update immutables samplers with anything but their immutable value
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
-rw-r--r--src/intel/vulkan/anv_descriptor_set.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c
index 4367c0ebe00..a5e65afc489 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;