[Mesa-dev] [RFC 1/3] glsl: add an assignment_recipient parameter on ast_expression
Timothy Arceri
timothy.arceri at collabora.com
Wed Feb 24 22:43:44 UTC 2016
On Wed, 2016-02-24 at 20:04 +0100, Alejandro Piñeiro wrote:
> The idea is pass through the ast-to-hir conversion if the current
> expression is the recipient of the assignment or not. Default
> value is false (so default value is being rhs).
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94129
> ---
> src/compiler/glsl/ast.h | 11 ++++++++++-
> src/compiler/glsl/ast_function.cpp | 8 ++++++++
> src/compiler/glsl/ast_to_hir.cpp | 15 ++++++++++++---
> 3 files changed, 30 insertions(+), 4 deletions(-)
>
> diff --git a/src/compiler/glsl/ast.h b/src/compiler/glsl/ast.h
> index 9aa5bb9..f0f4c65 100644
> --- a/src/compiler/glsl/ast.h
> +++ b/src/compiler/glsl/ast.h
> @@ -221,6 +221,10 @@ public:
> virtual ir_rvalue *hir(exec_list *instructions,
> struct _mesa_glsl_parse_state *state);
>
> + virtual ir_rvalue *hir(exec_list *instructions,
> + struct _mesa_glsl_parse_state *state,
It's probably a result of copy and paste but please make sure
new/modified code doesn't use tabs.
> + bool assignment_recipient);
> +
> virtual void hir_no_rvalue(exec_list *instructions,
> struct _mesa_glsl_parse_state *state);
>
> @@ -228,7 +232,8 @@ public:
>
> ir_rvalue *do_hir(exec_list *instructions,
> struct _mesa_glsl_parse_state *state,
> - bool needs_rvalue);
> + bool needs_rvalue,
> + bool assignment_recipient);
>
> virtual void print(void) const;
>
> @@ -301,6 +306,10 @@ public:
> virtual ir_rvalue *hir(exec_list *instructions,
> struct _mesa_glsl_parse_state *state);
>
> + virtual ir_rvalue *hir(exec_list *instructions,
> + struct _mesa_glsl_parse_state *state,
> + bool assignment_recipient);
> +
> virtual void hir_no_rvalue(exec_list *instructions,
> struct _mesa_glsl_parse_state *state);
>
> diff --git a/src/compiler/glsl/ast_function.cpp
> b/src/compiler/glsl/ast_function.cpp
> index 1a44020..0edc9b7 100644
> --- a/src/compiler/glsl/ast_function.cpp
> +++ b/src/compiler/glsl/ast_function.cpp
> @@ -1781,6 +1781,14 @@ ir_rvalue *
> ast_function_expression::hir(exec_list *instructions,
> struct _mesa_glsl_parse_state *state)
> {
> + return hir(instructions, state, true);
> +}
> +
> +ir_rvalue *
> +ast_function_expression::hir(exec_list *instructions,
> + struct _mesa_glsl_parse_state *state,
> + bool right)
> +{
> void *ctx = state;
> /* There are three sorts of function calls.
> *
> diff --git a/src/compiler/glsl/ast_to_hir.cpp
> b/src/compiler/glsl/ast_to_hir.cpp
> index 75abef6..6b70e1f 100644
> --- a/src/compiler/glsl/ast_to_hir.cpp
> +++ b/src/compiler/glsl/ast_to_hir.cpp
> @@ -1237,22 +1237,31 @@ constant_one_for_inc_dec(void *ctx, const
> glsl_type *type)
>
> ir_rvalue *
> ast_expression::hir(exec_list *instructions,
> + struct _mesa_glsl_parse_state *state,
> + bool assignment_recipient)
> +{
> + return do_hir(instructions, state, true, assignment_recipient);
> +}
> +
> +ir_rvalue *
> +ast_expression::hir(exec_list *instructions,
> struct _mesa_glsl_parse_state *state)
> {
> - return do_hir(instructions, state, true);
> + return hir(instructions, state, false);
> }
>
> void
> ast_expression::hir_no_rvalue(exec_list *instructions,
> struct _mesa_glsl_parse_state *state)
> {
> - do_hir(instructions, state, false);
> + do_hir(instructions, state, false, false);
> }
>
> ir_rvalue *
> ast_expression::do_hir(exec_list *instructions,
> struct _mesa_glsl_parse_state *state,
> - bool needs_rvalue)
> + bool needs_rvalue,
> + bool assignment_recipient)
> {
> void *ctx = state;
> static const int operations[AST_NUM_OPERATORS] = {
More information about the mesa-dev
mailing list