diff options
author | Jason Ekstrand <jason.ekstrand@intel.com> | 2016-08-24 17:14:11 -0700 |
---|---|---|
committer | Jason Ekstrand <jason.ekstrand@intel.com> | 2016-08-24 20:42:05 -0700 |
commit | 2301705dee6324634520559b27ac6728ebb02191 (patch) | |
tree | 30832142f487a117e15b3c9f789ff119b5428bf3 /src/intel/vulkan/anv_descriptor_set.c | |
parent | 05f36435ef117e48f457b44877d04dd6249b3bb7 (diff) | |
download | external_mesa3d-2301705dee6324634520559b27ac6728ebb02191.zip external_mesa3d-2301705dee6324634520559b27ac6728ebb02191.tar.gz external_mesa3d-2301705dee6324634520559b27ac6728ebb02191.tar.bz2 |
anv: Include the pipeline layout in the shader hash
The pipeline layout affects shader compilation because it is what
determines binding table locations as well as whether or not a particular
buffer has dynamic offsets. Since this affects the generated shader, it
needs to be in the hash. This fixes a bunch of CTS tests now that the CTS
is using a pipeline cache.
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Diffstat (limited to 'src/intel/vulkan/anv_descriptor_set.c')
-rw-r--r-- | src/intel/vulkan/anv_descriptor_set.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c index bd3ebed..cf1fe15 100644 --- a/src/intel/vulkan/anv_descriptor_set.c +++ b/src/intel/vulkan/anv_descriptor_set.c @@ -27,6 +27,8 @@ #include <unistd.h> #include <fcntl.h> +#include "util/mesa-sha1.h" + #include "anv_private.h" /* @@ -202,6 +204,15 @@ void anv_DestroyDescriptorSetLayout( anv_free2(&device->alloc, pAllocator, set_layout); } +static void +sha1_update_descriptor_set_layout(struct mesa_sha1 *ctx, + const struct anv_descriptor_set_layout *layout) +{ + size_t size = sizeof(*layout) + + sizeof(layout->binding[0]) * layout->binding_count; + _mesa_sha1_update(ctx, layout, size); +} + /* * Pipeline layouts. These have nothing to do with the pipeline. They are * just muttiple descriptor set layouts pasted together @@ -246,6 +257,19 @@ VkResult anv_CreatePipelineLayout( } } + struct mesa_sha1 *ctx = _mesa_sha1_init(); + for (unsigned s = 0; s < layout->num_sets; s++) { + sha1_update_descriptor_set_layout(ctx, layout->set[s].layout); + _mesa_sha1_update(ctx, &layout->set[s].dynamic_offset_start, + sizeof(layout->set[s].dynamic_offset_start)); + } + _mesa_sha1_update(ctx, &layout->num_sets, sizeof(layout->num_sets)); + for (unsigned s = 0; s < MESA_SHADER_STAGES; s++) { + _mesa_sha1_update(ctx, &layout->stage[s].has_dynamic_offsets, + sizeof(layout->stage[s].has_dynamic_offsets)); + } + _mesa_sha1_final(ctx, layout->sha1); + *pPipelineLayout = anv_pipeline_layout_to_handle(layout); return VK_SUCCESS; |