diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir.c b/src/gallium/auxiliary/gallivm/lp_bld_nir.c index 858002f5d159c47017cfd12087c079aedd0f644c..47bb933509cb84bafa7d7680419afd31040d7b9b 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_nir.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_nir.c @@ -1174,6 +1174,7 @@ do_alu_action(struct lp_build_nir_context *bld_base, return LLVMBuildSelect(builder, src[0], src[1], src[2], ""); } default: + fprintf(stderr, "unsupported NIR opcode %s\n", nir_op_infos[instr->op].name); assert(0); break; } @@ -2681,6 +2682,8 @@ bool lp_build_nir_llvm(struct lp_build_nir_context *bld_base, { struct nir_function *func; + lp_build_opt_nir(nir); + nir_convert_from_ssa(nir, true); nir_lower_locals_to_regs(nir); nir_remove_dead_derefs(nir); @@ -2754,6 +2757,8 @@ lp_build_opt_nir(struct nir_shader *nir) NIR_PASS_V(nir, nir_lower_fp16_casts); do { progress = false; + + NIR_PASS_V(nir, nir_lower_alu_to_scalar, NULL, NULL); NIR_PASS(progress, nir, nir_opt_constant_folding); NIR_PASS(progress, nir, nir_opt_algebraic); NIR_PASS(progress, nir, nir_lower_pack); diff --git a/src/gallium/drivers/crocus/ci/traces-crocus.yml b/src/gallium/drivers/crocus/ci/traces-crocus.yml index cbc2ca46e06b8fd48866f589f45979077abd8992..25d5002fda45d745d7febd8bc3d6a23b7b275d1a 100644 --- a/src/gallium/drivers/crocus/ci/traces-crocus.yml +++ b/src/gallium/drivers/crocus/ci/traces-crocus.yml @@ -99,7 +99,7 @@ traces: - path: humus/RaytracedShadows.trace expectations: - device: crocus-g41 - checksum: dbef340424f4f85eb8dc053ad3a56ae1 + checksum: f60916254e7afc26c131c3ece991e183 - device: crocus-hsw checksum: bac350df35b9262efca6722faf5c4eaa - path: humus/VolumetricFogging2.trace @@ -112,7 +112,7 @@ traces: - path: neverball/neverball.trace expectations: - device: crocus-g41 - checksum: 0f14a88f511cd886c920238c80017e5d + checksum: 0037eaceb35899dcf9cef77a438e5517 - device: crocus-hsw checksum: ec6b2615ab12db73126e06e6b20663ec - path: paraview/pv-manyspheres.trace @@ -159,7 +159,7 @@ traces: expectations: # very aliased palm fronds compared to freedreno? - device: crocus-g41 - checksum: 90c01e73b3544cb477ac6109bc61bef1 + checksum: 1c0471e88ddbb7a1beede330ee616f78 - device: crocus-hsw checksum: 0e1e52aaccd94a261cf9d8675039c41c - path: valve/counterstrike-source-v2.trace diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index b9c69e52409840c1530cd9a4bd26cc00d887c8c7..878f53ef4f0bdd77327171e08b0f8d06dea62c87 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -69,8 +69,6 @@ #include "compiler/glsl/glsl_parser_extras.h" #include "nir/nir_to_tgsi.h" -DEBUG_GET_ONCE_BOOL_OPTION(mesa_mvp_dp4, "MESA_MVP_DP4", FALSE) - static uint64_t st_get_active_states(struct gl_context *ctx) { @@ -857,12 +855,6 @@ st_create_context(gl_api api, struct pipe_context *pipe, if (pipe->screen->get_disk_shader_cache) ctx->Cache = pipe->screen->get_disk_shader_cache(pipe->screen); - /* XXX: need a capability bit in gallium to query if the pipe - * driver prefers DP4 or MUL/MAD for vertex transformation. - */ - if (debug_get_option_mesa_mvp_dp4()) - ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].OptimizeForAOS = GL_TRUE; - if (pipe->screen->get_param(pipe->screen, PIPE_CAP_INVALIDATE_BUFFER)) ctx->has_invalidate_buffer = true; diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 4280866d7620ce6df8fc12e6e37d2f5532587fbc..0ddcca5391819b9eec63a778a550069abd069c75 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -183,6 +183,8 @@ void st_init_limits(struct pipe_screen *screen, nir_to_tgsi_get_compiler_options(screen, PIPE_SHADER_IR_NIR, sh); } + options->OptimizeForAOS = !options->NirOptions->lower_to_scalar; + if (sh == PIPE_SHADER_COMPUTE) { if (!screen->get_param(screen, PIPE_CAP_COMPUTE)) continue;