mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
radv: make sure gs copy shader is retrieved from the cache with the variant
Apps can limit the size of the cache via VkAllocationCallbacks so we can't be sure that both are always in the cache. Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
2845a108a9
commit
72ab7bb765
1 changed files with 9 additions and 4 deletions
|
|
@ -539,7 +539,9 @@ radv_pipeline_compile(struct radv_pipeline *pipeline,
|
|||
cache,
|
||||
gs_copy_sha1);
|
||||
}
|
||||
if (variant)
|
||||
|
||||
if (variant &&
|
||||
(stage != MESA_SHADER_GEOMETRY || pipeline->gs_copy_shader))
|
||||
return variant;
|
||||
|
||||
nir = radv_shader_compile_to_nir(pipeline->device,
|
||||
|
|
@ -548,10 +550,13 @@ radv_pipeline_compile(struct radv_pipeline *pipeline,
|
|||
if (nir == NULL)
|
||||
return NULL;
|
||||
|
||||
variant = radv_shader_variant_create(pipeline->device, nir, layout, key,
|
||||
&code, &code_size, dump);
|
||||
if (!variant) {
|
||||
variant = radv_shader_variant_create(pipeline->device, nir,
|
||||
layout, key, &code,
|
||||
&code_size, dump);
|
||||
}
|
||||
|
||||
if (stage == MESA_SHADER_GEOMETRY) {
|
||||
if (stage == MESA_SHADER_GEOMETRY && !pipeline->gs_copy_shader) {
|
||||
void *gs_copy_code = NULL;
|
||||
unsigned gs_copy_code_size = 0;
|
||||
pipeline->gs_copy_shader = radv_pipeline_create_gs_copy_shader(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue