From 8ec01ba2ff95449674c779c05afcd32bbf7dbdc8 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Wed, 2 May 2012 23:11:40 +0200 Subject: glsl: Add methods to copy parts of one ir_constant into another. - copy_masked_offset copies part of a constant into another, assign-like. - copy_offset copies a constant into (a subset of) another, funcall-return like. These methods are to be used to trace through assignments and function calls when computing a constant expression. Signed-off-by: Olivier Galibert Reviewed-by: Kenneth Graunke Reviewed-by: Eric Anholt [v1] --- src/glsl/ir.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/glsl/ir.h') diff --git a/src/glsl/ir.h b/src/glsl/ir.h index dc96e1fe9ed..fe950861620 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -1682,6 +1682,31 @@ public: ir_constant *get_record_field(const char *name); + /** + * Copy the values on another constant at a given offset. + * + * The offset is ignored for array or struct copies, it's only for + * scalars or vectors into vectors or matrices. + * + * With identical types on both sides and zero offset it's clone() + * without creating a new object. + */ + + void copy_offset(ir_constant *src, int offset); + + /** + * Copy the values on another constant at a given offset and + * following an assign-like mask. + * + * The mask is ignored for scalars. + * + * Note that this function only handles what assign can handle, + * i.e. at most a vector as source and a column of a matrix as + * destination. + */ + + void copy_masked_offset(ir_constant *src, int offset, unsigned int mask); + /** * Determine whether a constant has the same value as another constant * -- cgit v1.2.3