mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 04:58:05 +02:00
anv: Be more careful about hashing pipeline layouts
Previously, we just hashed the entire descriptor set layout verbatim.
This meant that a bunch of extra stuff such as pointers and reference
counts made its way into the cache. It also meant that we weren't
properly hashing in the Y'CbCr conversion information information from
bound immutable samplers.
Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
(cherry picked from commit d1c778b362)
This commit is contained in:
parent
fde83d5f2b
commit
fed76b3269
1 changed files with 38 additions and 3 deletions
|
|
@ -257,13 +257,48 @@ void anv_DestroyDescriptorSetLayout(
|
|||
anv_descriptor_set_layout_unref(device, set_layout);
|
||||
}
|
||||
|
||||
#define SHA1_UPDATE_VALUE(ctx, x) _mesa_sha1_update(ctx, &(x), sizeof(x));
|
||||
|
||||
static void
|
||||
sha1_update_immutable_sampler(struct mesa_sha1 *ctx,
|
||||
const struct anv_sampler *sampler)
|
||||
{
|
||||
if (!sampler->conversion)
|
||||
return;
|
||||
|
||||
/* The only thing that affects the shader is ycbcr conversion */
|
||||
_mesa_sha1_update(ctx, sampler->conversion,
|
||||
sizeof(*sampler->conversion));
|
||||
}
|
||||
|
||||
static void
|
||||
sha1_update_descriptor_set_binding_layout(struct mesa_sha1 *ctx,
|
||||
const struct anv_descriptor_set_binding_layout *layout)
|
||||
{
|
||||
SHA1_UPDATE_VALUE(ctx, layout->array_size);
|
||||
SHA1_UPDATE_VALUE(ctx, layout->descriptor_index);
|
||||
SHA1_UPDATE_VALUE(ctx, layout->dynamic_offset_index);
|
||||
SHA1_UPDATE_VALUE(ctx, layout->buffer_index);
|
||||
_mesa_sha1_update(ctx, layout->stage, sizeof(layout->stage));
|
||||
|
||||
if (layout->immutable_samplers) {
|
||||
for (uint16_t i = 0; i < layout->array_size; i++)
|
||||
sha1_update_immutable_sampler(ctx, layout->immutable_samplers[i]);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
SHA1_UPDATE_VALUE(ctx, layout->binding_count);
|
||||
SHA1_UPDATE_VALUE(ctx, layout->size);
|
||||
SHA1_UPDATE_VALUE(ctx, layout->shader_stages);
|
||||
SHA1_UPDATE_VALUE(ctx, layout->buffer_count);
|
||||
SHA1_UPDATE_VALUE(ctx, layout->dynamic_offset_count);
|
||||
|
||||
for (uint16_t i = 0; i < layout->binding_count; i++)
|
||||
sha1_update_descriptor_set_binding_layout(ctx, &layout->binding[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue