zink: update null descriptor hashes to reflect current descriptor states
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Thu, 5 Nov 2020 15:39:19 +0000 (10:39 -0500)
committerMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Tue, 16 Mar 2021 14:45:32 +0000 (10:45 -0400)
also add a bufferview hash since we use these now

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9543>

src/gallium/drivers/zink/zink_context.c
src/gallium/drivers/zink/zink_screen.c
src/gallium/drivers/zink/zink_screen.h

index a410268..3db1321 100644 (file)
@@ -117,7 +117,7 @@ calc_descriptor_state_hash_sampler(struct zink_context *ctx, struct zink_shader
    for (unsigned k = 0; k < zs->bindings[ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW][i].size; k++) {
       struct zink_sampler_view *sampler_view = zink_sampler_view(ctx->sampler_views[shader][idx + k]);
       if (!sampler_view) {
-         hash = XXH32(&screen->null_descriptor_hashes.sampler_view, sizeof(uint32_t), hash);
+         hash = XXH32(&screen->null_descriptor_hashes.image_view, sizeof(uint32_t), hash);
          continue;
       }
       uint32_t sv_hash = get_sampler_view_hash(sampler_view);
index 8e5561c..e4fc26e 100644 (file)
@@ -1284,8 +1284,10 @@ zink_create_logical_device(struct zink_screen *screen)
 static void
 pre_hash_descriptor_states(struct zink_screen *screen)
 {
-   VkDescriptorImageInfo null_info = {};
-   screen->null_descriptor_hashes.sampler_view = _mesa_hash_data(&null_info, sizeof(VkDescriptorImageInfo));
+   VkImageViewCreateInfo null_info = {.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO};
+   VkBufferViewCreateInfo null_binfo = {.sType = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO};
+   screen->null_descriptor_hashes.image_view = _mesa_hash_data(&null_info, sizeof(VkImageViewCreateInfo));
+   screen->null_descriptor_hashes.buffer_view = _mesa_hash_data(&null_binfo, sizeof(VkBufferViewCreateInfo));
 }
 
 static struct zink_screen *
index c68be1f..d791c35 100644 (file)
@@ -136,7 +136,8 @@ struct zink_screen {
 
    VkFormatProperties format_props[PIPE_FORMAT_COUNT];
    struct {
-      uint32_t sampler_view;
+      uint32_t image_view;
+      uint32_t buffer_view;
    } null_descriptor_hashes;
 };