summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRhys Perry <pendingchaos02@gmail.com>2022-02-18 17:49:57 +0200
committerMarge Bot <emma+marge@anholt.net>2022-02-23 13:11:12 +0000
commitded9cb904f02cfe4206f88f8a41f49258f09f2b0 (patch)
tree9a43ea9f84108b0edfbcc562edb7b1bbe4548ca6
parentabb7f04674fa947a212053e235c5f347a037e2c6 (diff)
anv: Enable nir_opt_access
This commit will enable pass for searching readonly / writeonly access when it's missing. We don't support shaderStorageImageReadWithoutFormat and the optimization pass causes those shaders to take the write-only path which does support formatless. Following games are affected with positive result: - Wolfenstein: Youngblood - Wolfenstein II: The New Colossus https://gitlab.freedesktop.org/mesa/mesa/-/issues/3138 - Rage 2 https://gitlab.freedesktop.org/mesa/mesa/-/issues/5791 - The Surge 2 https://gitlab.freedesktop.org/mesa/mesa/-/issues/5805 - Metro Exodus https://gitlab.freedesktop.org/mesa/mesa/-/issues/4703 - DOOM Eternal https://gitlab.freedesktop.org/mesa/mesa/-/issues/4273 Cc: mesa-stable Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3138,https://gitlab.freedesktop.org/mesa/mesa/-/issues/5791,https://gitlab.freedesktop.org/mesa/mesa/-/issues/4273 Signed-off-by: Mykhailo Skorokhodov <mykhailo.skorokhodov@globallogic.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jason Ekstrand <jason.ekstrand@collabora.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15082>
-rw-r--r--src/intel/vulkan/anv_pipeline.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index 243ecde2fbe..7ebf483aaea 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -235,6 +235,12 @@ anv_shader_compile_to_nir(struct anv_device *device,
*/
NIR_PASS_V(nir, nir_lower_variable_initializers, ~0);
+ const nir_opt_access_options opt_access_options = {
+ .is_vulkan = true,
+ .infer_non_readable = true,
+ };
+ NIR_PASS_V(nir, nir_opt_access, &opt_access_options);
+
/* Split member structs. We do this before lower_io_to_temporaries so that
* it doesn't lower system values to temporaries by accident.
*/