mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 09:28:07 +02:00
anv: Remove FS executables when applying the null FS optimization
If the executables are still hanging out, anv_GetPipelineExecutableStatisticsKHR will try to dereference NULL pointers in pipeline->shaders[MESA_SHADER_FRAGMENT]. At least in terms of fossil-db output, this matches the behavior from before73b3efcd59. Fixes:73b3efcd59("anv: Handle the null FS optimization after compiling shaders") Closes: #6590 Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Jason Ekstrand <jason.ekstrand@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16898>
This commit is contained in:
parent
17818800d0
commit
65d6708bc3
1 changed files with 19 additions and 0 deletions
|
|
@ -1865,6 +1865,25 @@ done:
|
|||
anv_shader_bin_unref(pipeline->base.device, fs);
|
||||
pipeline->shaders[MESA_SHADER_FRAGMENT] = NULL;
|
||||
pipeline->active_stages &= ~VK_SHADER_STAGE_FRAGMENT_BIT;
|
||||
|
||||
/* The per-SIMD size fragment shaders should be last in the
|
||||
* executables array. Remove all of them.
|
||||
*/
|
||||
ASSERTED unsigned removed = 0;
|
||||
|
||||
util_dynarray_foreach_reverse(&pipeline->base.executables,
|
||||
struct anv_pipeline_executable,
|
||||
tail) {
|
||||
/* There must be at least one fragment shader. */
|
||||
assert(removed > 0 || tail->stage == MESA_SHADER_FRAGMENT);
|
||||
|
||||
if (tail->stage != MESA_SHADER_FRAGMENT)
|
||||
break;
|
||||
|
||||
(void) util_dynarray_pop(&pipeline->base.executables,
|
||||
struct anv_pipeline_executable);
|
||||
removed++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue