Module: Mesa Branch: master Commit: 3d51c27de5576b9a62761726f33b0cc7a66da1d2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3d51c27de5576b9a62761726f33b0cc7a66da1d2
Author: Juan A. Suarez Romero <[email protected]> Date: Wed Oct 21 11:45:08 2020 +0200 st/mesa: initialize lower alpha func to ALWAYS The lower_alpha_func is initialized as COMPARE_FUNC_NEVER, and the nir_lower_alpha_test() only executed if the alpha_func has changed. This means when user runs an alpha test with GL_NEVER function the lowering is never executed, and no fragment is discarded. Rather, we would like to initialize the function as COMPARE_FUNC_ALWAYS, and run the lowering when the alpha_func is different. If user runs the alpha test with GL_ALWAYS, indeed the lowering is never executed; but using GL_ALWAYS makes no fragment is discarded, so it is like not executing the testing. Signed-off-by: Juan A. Suarez Romero <[email protected]> Reviewed-by: Erik Faye-Lund <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7251> --- src/mesa/state_tracker/st_atom_shader.c | 2 +- src/mesa/state_tracker/st_cb_bitmap.c | 1 + src/mesa/state_tracker/st_cb_drawpixels.c | 2 ++ src/mesa/state_tracker/st_program.c | 3 ++- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c index d92a542922e..18acc3017a8 100644 --- a/src/mesa/state_tracker/st_atom_shader.c +++ b/src/mesa/state_tracker/st_atom_shader.c @@ -125,7 +125,7 @@ st_update_fp( struct st_context *st ) st->ctx->Light.ShadeModel == GL_FLAT; /* _NEW_COLOR */ - key.lower_alpha_func = COMPARE_FUNC_NEVER; + key.lower_alpha_func = COMPARE_FUNC_ALWAYS; if (st->lower_alpha_test && _mesa_is_alpha_test_enabled(st->ctx)) key.lower_alpha_func = st->ctx->Color.AlphaFunc; diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index fcdf26e4a27..11976da65b7 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -179,6 +179,7 @@ setup_render_state(struct gl_context *ctx, key.bitmap = GL_TRUE; key.clamp_color = st->clamp_frag_color_in_shader && ctx->Color._ClampFragmentColor; + key.lower_alpha_func = COMPARE_FUNC_ALWAYS; fpv = st_get_fp_variant(st, st->fp, &key); diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c index 0fad2fb3013..4b8242c770e 100644 --- a/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/src/mesa/state_tracker/st_cb_drawpixels.c @@ -1148,6 +1148,7 @@ get_color_fp_variant(struct st_context *st) key.pixelMaps = ctx->Pixel.MapColorFlag; key.clamp_color = st->clamp_frag_color_in_shader && ctx->Color._ClampFragmentColor; + key.lower_alpha_func = COMPARE_FUNC_ALWAYS; fpv = st_get_fp_variant(st, st->fp, &key); @@ -1177,6 +1178,7 @@ get_color_index_fp_variant(struct st_context *st) key.pixelMaps = 0; key.clamp_color = st->clamp_frag_color_in_shader && ctx->Color._ClampFragmentColor; + key.lower_alpha_func = COMPARE_FUNC_ALWAYS; fpv = st_get_fp_variant(st, st->fp, &key); diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 2f9bba8b406..c6a96c88445 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -1247,7 +1247,7 @@ st_create_fp_variant(struct st_context *st, finalize = true; } - if (key->lower_alpha_func != COMPARE_FUNC_NEVER) { + if (key->lower_alpha_func != COMPARE_FUNC_ALWAYS) { _mesa_add_state_reference(params, alpha_ref_state); NIR_PASS_V(state.ir.nir, nir_lower_alpha_test, key->lower_alpha_func, false, alpha_ref_state); @@ -1943,6 +1943,7 @@ st_precompile_shader_variant(struct st_context *st, memset(&key, 0, sizeof(key)); key.st = st->has_shareable_shaders ? NULL : st; + key.lower_alpha_func = COMPARE_FUNC_ALWAYS; st_get_fp_variant(st, p, &key); break; } _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
