From 51e24cd5b055be46b96ac7ea07d2a514b9a71862 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 17 Aug 2022 13:09:50 +1000 Subject: [PATCH] nvk: lower io to temps to avoid output reads in vertex shaders fixes a bunch of these nv50_ir_lowering_nvc0.cpp:2878: void nv50_ir::NVC0LoweringPass::handleLDST(nv50_ir::Instruction*): Assertion `prog->getType() == Program::TYPE_TESSELLATION_CONTROL' failed. Part-of: --- src/nouveau/vulkan/nvk_shader.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/nouveau/vulkan/nvk_shader.c b/src/nouveau/vulkan/nvk_shader.c index e5843db..46c53fd 100644 --- a/src/nouveau/vulkan/nvk_shader.c +++ b/src/nouveau/vulkan/nvk_shader.c @@ -156,11 +156,20 @@ void nvk_lower_nir(struct nvk_device *device, nir_shader *nir, const struct nvk_pipeline_layout *layout) { - NIR_PASS(_, nir, nir_lower_global_vars_to_local); - NIR_PASS(_, nir, nir_split_struct_vars, nir_var_function_temp); NIR_PASS(_, nir, nir_lower_vars_to_ssa); + if (nir->info.stage == MESA_SHADER_VERTEX || nir->info.stage == MESA_SHADER_GEOMETRY || + nir->info.stage == MESA_SHADER_FRAGMENT) { + NIR_PASS_V(nir, nir_lower_io_to_temporaries, nir_shader_get_entrypoint(nir), true, true); + } + + NIR_PASS(_, nir, nir_split_var_copies); + NIR_PASS(_, nir, nir_lower_var_copies); + NIR_PASS(_, nir, nir_lower_vars_to_ssa); + + NIR_PASS(_, nir, nir_lower_global_vars_to_local); + NIR_PASS(_, nir, nir_remove_dead_variables, nir_var_function_temp, NULL); NIR_PASS(_, nir, nir_lower_system_values); if (nir->info.stage == MESA_SHADER_FRAGMENT) { -- 2.7.4