zink: run sparse lowering after all optimization passes
some passes (e.g., opt_shrink_vector) operate on the assumption that sparse tex ops have a certain number of components and then remove components and unset the sparse flag if they can optimize out the sparse usage zink's sparse ops do not have the standard number of components, which causes such passes to make incorrect assumptions and tag them as not being sparse, which breaks everything fix #10540 Fixes:0d652c0c8d
("zink: shrink vectors during optimization") Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27414> (cherry picked from commit2085d60438
)
This commit is contained in:

committed by
Eric Engestrom

parent
66b0263cea
commit
100e57cba9
@@ -24,7 +24,7 @@
|
||||
"description": "zink: run sparse lowering after all optimization passes",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "0d652c0c8db33ff80d16f30b2d2e8f4413946338",
|
||||
"notes": null
|
||||
|
@@ -4021,6 +4021,7 @@ zink_shader_compile(struct zink_screen *screen, bool can_shobj, struct zink_shad
|
||||
zs->can_inline = false;
|
||||
} else if (need_optimize)
|
||||
optimize_nir(nir, zs, true);
|
||||
NIR_PASS_V(nir, lower_sparse);
|
||||
|
||||
struct zink_shader_object obj = compile_module(screen, zs, nir, can_shobj, pg);
|
||||
ralloc_free(nir);
|
||||
@@ -5399,7 +5400,6 @@ zink_shader_create(struct zink_screen *screen, struct nir_shader *nir)
|
||||
|
||||
NIR_PASS_V(nir, lower_basevertex);
|
||||
NIR_PASS_V(nir, lower_baseinstance);
|
||||
NIR_PASS_V(nir, lower_sparse);
|
||||
NIR_PASS_V(nir, split_bitfields);
|
||||
NIR_PASS_V(nir, nir_lower_frexp); /* TODO: Use the spirv instructions for this. */
|
||||
|
||||
|
Reference in New Issue
Block a user