[Mesa-dev] [RFC 1/3] glsl: add an assignment_recipient parameter on ast_expression
Alejandro Piñeiro
apinheiro at igalia.com
Thu Feb 25 08:10:12 UTC 2016
On 24/02/16 23:43, Timothy Arceri wrote:
> 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.
Yes it was due copy/paste. Sorry for not realizing.
>
>> + 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