diff options
author | Kenneth Graunke <[email protected]> | 2016-01-05 04:01:11 -0800 |
---|---|---|
committer | Matt Turner <[email protected]> | 2016-01-13 10:35:12 -0800 |
commit | b4e198f47f8423dfb101395cd6cb5a11fa12954e (patch) | |
tree | ee4c895c214731aaeb6f637dfd493ba8bfa689f8 /src/glsl/lower_instructions.cpp | |
parent | b85a229e1f542426b1c8000569d89cd4768b9339 (diff) |
glsl, nir: Make ir_quadop_bitfield_insert a vectorized operation.
We would like to be able to combine
result.x = bitfieldInsert(src0.x, src1.x, src2.x, src3.x);
result.y = bitfieldInsert(src0.y, src1.y, src2.y, src3.y);
result.z = bitfieldInsert(src0.z, src1.z, src2.z, src3.z);
result.w = bitfieldInsert(src0.w, src1.w, src2.w, src3.w);
into a single ivec4 bitfieldInsert operation. This should be possible
with most drivers.
This patch changes the offset and bits parameters from scalar ints
to ivecN or uvecN. The type of all four operands will be the same,
for simplicity.
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
Reviewed-by: Ilia Mirkin <[email protected]>
Diffstat (limited to 'src/glsl/lower_instructions.cpp')
-rw-r--r-- | src/glsl/lower_instructions.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/glsl/lower_instructions.cpp b/src/glsl/lower_instructions.cpp index f70db873fd7..d140be346cf 100644 --- a/src/glsl/lower_instructions.cpp +++ b/src/glsl/lower_instructions.cpp @@ -381,8 +381,8 @@ lower_instructions_visitor::ldexp_to_arith(ir_expression *ir) ir_constant *sign_mask = new(ir) ir_constant(0x80000000u, vec_elem); - ir_constant *exp_shift = new(ir) ir_constant(23); - ir_constant *exp_width = new(ir) ir_constant(8); + ir_constant *exp_shift = new(ir) ir_constant(23, vec_elem); + ir_constant *exp_width = new(ir) ir_constant(8, vec_elem); /* Temporary variables */ ir_variable *x = new(ir) ir_variable(ir->type, "x", ir_var_temporary); @@ -470,8 +470,8 @@ lower_instructions_visitor::dldexp_to_arith(ir_expression *ir) ir_constant *sign_mask = new(ir) ir_constant(0x80000000u); - ir_constant *exp_shift = new(ir) ir_constant(20); - ir_constant *exp_width = new(ir) ir_constant(11); + ir_constant *exp_shift = new(ir) ir_constant(20, vec_elem); + ir_constant *exp_width = new(ir) ir_constant(11, vec_elem); ir_constant *exp_bias = new(ir) ir_constant(1022, vec_elem); /* Temporary variables */ |