glsl: Add lowering pass for GLSL ES 3.00 pack/unpack operations (v4)
Lower them to arithmetic and bit manipulation expressions.
v2: Rewrite using ir_builder [for idr].
v3: Comment typos. [for mattst88]
v4: Fix arithmetic error in comments.
Factor out a shift instruction.
Don't heap allocate factory.instructions.
[for paul]
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> (v2)
Reviewed-by: Matt Tuner <mattst88@gmail.com> (v3)
Reviewed-by: Paul Berry <stereotype441@gmail.com> (v4)
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
This commit is contained in:
@@ -60,6 +60,7 @@ LIBGLSL_FILES = \
|
||||
$(GLSL_SRCDIR)/lower_mat_op_to_vec.cpp \
|
||||
$(GLSL_SRCDIR)/lower_noise.cpp \
|
||||
$(GLSL_SRCDIR)/lower_packed_varyings.cpp \
|
||||
$(GLSL_SRCDIR)/lower_packing_builtins.cpp \
|
||||
$(GLSL_SRCDIR)/lower_texture_projection.cpp \
|
||||
$(GLSL_SRCDIR)/lower_variable_index_to_cond_assign.cpp \
|
||||
$(GLSL_SRCDIR)/lower_vec_index_to_cond_assign.cpp \
|
||||
|
||||
@@ -37,6 +37,25 @@
|
||||
#define MOD_TO_FRACT 0x20
|
||||
#define INT_DIV_TO_MUL_RCP 0x40
|
||||
|
||||
/**
|
||||
* \see class lower_packing_builtins_visitor
|
||||
*/
|
||||
enum lower_packing_builtins_op {
|
||||
LOWER_PACK_UNPACK_NONE = 0x0000,
|
||||
|
||||
LOWER_PACK_SNORM_2x16 = 0x0001,
|
||||
LOWER_UNPACK_SNORM_2x16 = 0x0002,
|
||||
|
||||
LOWER_PACK_UNORM_2x16 = 0x0004,
|
||||
LOWER_UNPACK_UNORM_2x16 = 0x0008,
|
||||
|
||||
LOWER_PACK_HALF_2x16 = 0x0010,
|
||||
LOWER_UNPACK_HALF_2x16 = 0x0020,
|
||||
|
||||
LOWER_PACK_HALF_2x16_TO_SPLIT = 0x0040,
|
||||
LOWER_UNPACK_HALF_2x16_TO_SPLIT = 0x0080,
|
||||
};
|
||||
|
||||
bool do_common_optimization(exec_list *ir, bool linked,
|
||||
bool uniform_locations_assigned,
|
||||
unsigned max_unroll_iterations);
|
||||
@@ -74,6 +93,7 @@ bool lower_variable_index_to_cond_assign(exec_list *instructions,
|
||||
bool lower_quadop_vector(exec_list *instructions, bool dont_lower_swz);
|
||||
bool lower_clip_distance(gl_shader *shader);
|
||||
void lower_output_reads(exec_list *instructions);
|
||||
bool lower_packing_builtins(exec_list *instructions, int op_mask);
|
||||
void lower_ubo_reference(struct gl_shader *shader, exec_list *instructions);
|
||||
void lower_packed_varyings(void *mem_ctx, unsigned location_base,
|
||||
unsigned locations_used, ir_variable_mode mode,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user