glsl, nir: Make ir_quadop_bitfield_insert a vectorized operation.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 5 Jan 2016 12:01:11 +0000 (04:01 -0800)
committerMatt Turner <mattst88@gmail.com>
Wed, 13 Jan 2016 18:35:12 +0000 (10:35 -0800)
commitb4e198f47f8423dfb101395cd6cb5a11fa12954e
treeee4c895c214731aaeb6f637dfd493ba8bfa689f8
parentb85a229e1f542426b1c8000569d89cd4768b9339
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 <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/glsl/builtin_functions.cpp
src/glsl/ir.h
src/glsl/ir_constant_expression.cpp
src/glsl/ir_validate.cpp
src/glsl/lower_instructions.cpp
src/glsl/lower_packing_builtins.cpp
src/glsl/nir/nir_opcodes.py