summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/vc4/vc4_nir_lower_blend.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2016-07-26 17:31:44 -0700
committerEric Anholt <eric@anholt.net>2016-08-22 11:52:26 -0700
commite8378fee0c20ecd26451c079c725420077606cb9 (patch)
tree3603185648555d9e8a7a70efa52a79f2f97fd629 /src/gallium/drivers/vc4/vc4_nir_lower_blend.c
parent475ce61d1aa0fb06202511b4ea8ad9bd1fab64d0 (diff)
downloadexternal_mesa3d-e8378fee0c20ecd26451c079c725420077606cb9.zip
external_mesa3d-e8378fee0c20ecd26451c079c725420077606cb9.tar.gz
external_mesa3d-e8378fee0c20ecd26451c079c725420077606cb9.tar.bz2
nir: Define system values for vc4's blending-lowering arguments.
In the GLSL-to-NIR conversion of VC4, I had a bit of trouble with what I was calling the "state uniforms" that I was putting into the NIR fighting with its other lowering passes. Instead of using magic uniform base numbers in the backend, follow the lead of load_user_clip_plane and just define system values for them. v2: Fix unintended change to channel_num, drop unspecified const_index value on blend_const_color_r_float. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Diffstat (limited to 'src/gallium/drivers/vc4/vc4_nir_lower_blend.c')
-rw-r--r--src/gallium/drivers/vc4/vc4_nir_lower_blend.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/gallium/drivers/vc4/vc4_nir_lower_blend.c b/src/gallium/drivers/vc4/vc4_nir_lower_blend.c
index 93a3572..f708218 100644
--- a/src/gallium/drivers/vc4/vc4_nir_lower_blend.c
+++ b/src/gallium/drivers/vc4/vc4_nir_lower_blend.c
@@ -127,9 +127,12 @@ vc4_blend_channel_f(nir_builder *b,
return nir_imm_float(b, 1.0);
}
case PIPE_BLENDFACTOR_CONST_COLOR:
- return vc4_nir_get_state_uniform(b, QUNIFORM_BLEND_CONST_COLOR_X + channel);
+ return nir_load_system_value(b,
+ nir_intrinsic_load_blend_const_color_r_float +
+ channel,
+ 0);
case PIPE_BLENDFACTOR_CONST_ALPHA:
- return vc4_nir_get_state_uniform(b, QUNIFORM_BLEND_CONST_COLOR_W);
+ return nir_load_blend_const_color_a_float(b);
case PIPE_BLENDFACTOR_ZERO:
return nir_imm_float(b, 0.0);
case PIPE_BLENDFACTOR_INV_SRC_COLOR:
@@ -142,10 +145,13 @@ vc4_blend_channel_f(nir_builder *b,
return nir_fsub(b, nir_imm_float(b, 1.0), dst[channel]);
case PIPE_BLENDFACTOR_INV_CONST_COLOR:
return nir_fsub(b, nir_imm_float(b, 1.0),
- vc4_nir_get_state_uniform(b, QUNIFORM_BLEND_CONST_COLOR_X + channel));
+ nir_load_system_value(b,
+ nir_intrinsic_load_blend_const_color_r_float +
+ channel,
+ 0));
case PIPE_BLENDFACTOR_INV_CONST_ALPHA:
return nir_fsub(b, nir_imm_float(b, 1.0),
- vc4_nir_get_state_uniform(b, QUNIFORM_BLEND_CONST_COLOR_W));
+ nir_load_blend_const_color_a_float(b));
default:
case PIPE_BLENDFACTOR_SRC1_COLOR:
@@ -196,9 +202,9 @@ vc4_blend_channel_i(nir_builder *b,
nir_imm_int(b, ~0),
a_chan);
case PIPE_BLENDFACTOR_CONST_COLOR:
- return vc4_nir_get_state_uniform(b, QUNIFORM_BLEND_CONST_COLOR_RGBA);
+ return nir_load_blend_const_color_rgba8888_unorm(b);
case PIPE_BLENDFACTOR_CONST_ALPHA:
- return vc4_nir_get_state_uniform(b, QUNIFORM_BLEND_CONST_COLOR_AAAA);
+ return nir_load_blend_const_color_aaaa8888_unorm(b);
case PIPE_BLENDFACTOR_ZERO:
return nir_imm_int(b, 0);
case PIPE_BLENDFACTOR_INV_SRC_COLOR:
@@ -210,9 +216,11 @@ vc4_blend_channel_i(nir_builder *b,
case PIPE_BLENDFACTOR_INV_DST_COLOR:
return nir_inot(b, dst);
case PIPE_BLENDFACTOR_INV_CONST_COLOR:
- return nir_inot(b, vc4_nir_get_state_uniform(b, QUNIFORM_BLEND_CONST_COLOR_RGBA));
+ return nir_inot(b,
+ nir_load_blend_const_color_rgba8888_unorm(b));
case PIPE_BLENDFACTOR_INV_CONST_ALPHA:
- return nir_inot(b, vc4_nir_get_state_uniform(b, QUNIFORM_BLEND_CONST_COLOR_AAAA));
+ return nir_inot(b,
+ nir_load_blend_const_color_aaaa8888_unorm(b));
default:
case PIPE_BLENDFACTOR_SRC1_COLOR:
@@ -475,11 +483,10 @@ vc4_nir_emit_alpha_test_discard(struct vc4_compile *c, nir_builder *b,
if (!c->fs_key->alpha_test)
return;
- nir_ssa_def *alpha_ref =
- vc4_nir_get_state_uniform(b, QUNIFORM_ALPHA_REF);
nir_ssa_def *condition =
vc4_nir_pipe_compare_func(b, c->fs_key->alpha_test_func,
- alpha, alpha_ref);
+ alpha,
+ nir_load_alpha_ref_float(b));
nir_intrinsic_instr *discard =
nir_intrinsic_instr_create(b->shader,