[Mesa-dev] [PATCH] Move all of the var decls to the front of the IR list in reverse order.

Chad Versace chad.versace at linux.intel.com
Tue Jun 11 15:46:03 PDT 2013


On 06/11/2013 01:57 PM, Chad Versace wrote:
> On 06/11/2013 01:39 PM, Ian Romanick wrote:
>> On 06/11/2013 01:27 PM, Chad Versace wrote:
>>> On 06/08/2013 01:05 PM, Ian Romanick wrote:
>>>> From: Ian Romanick <ian.d.romanick at intel.com>
>>>>
>>>> This has the (intended!) side effect that vertex shader inputs and
>>>> fragment shader outputs will appear in the IR in the same order that
>>>> they appeared in the shader code.  This results in the locations being
>>>> assigned in the declared order.  Many (arguably buggy) applications
>>>> depend on this behavior, and it matches what nearly all other drivers
>>>> do.
>>>>
>>>> Fixes the (new) piglit test attrib-assignments.
>>>>
>>>> NOTE: This is a candidate for stable release branches.
>>>>
>>>> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
>>>> Cc: Chad Versace <chad.versace at linux.intel.com>
>>>> ---
>>>>   src/glsl/ast_to_hir.cpp | 18 ++++++++++++++++++
>>>>   1 file changed, 18 insertions(+)
>>>>
>>>> diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
>>>> index e918ade..886cec5 100644
>>>> --- a/src/glsl/ast_to_hir.cpp
>>>> +++ b/src/glsl/ast_to_hir.cpp
>>>> @@ -94,6 +94,24 @@ _mesa_ast_to_hir(exec_list *instructions, struct
>>>> _mesa_glsl_parse_state *state)
>>>>      detect_conflicting_assignments(state, instructions);
>>>>
>>>>      state->toplevel_ir = NULL;
>>>> +
>>>> +   /* Move all of the variable declarations to the front of the IR
>>>> list, and
>>>> +    * reverse the order.  This has the (intended!) side effect that
>>>> vertex
>>>> +    * shader inputs and fragment shader outputs will appear in the IR
>>>> in the
>>>> +    * same order that they appeared in the shader code.  This results
>>>> in the
>>>> +    * locations being assigned in the declared order.  Many (arguably
>>>> buggy)
>>>> +    * applications depend on this behavior, and it matches what
>>>> nearly all
>>>> +    * other drivers do.
>>>> +    */
>>>> +   foreach_list_safe(node, instructions) {
>>>> +      ir_variable *const var = ((ir_instruction *) node)->as_variable();
>>>> +
>>>> +      if (var == NULL)
>>>> +     continue;
>>>> +
>>>> +      var->remove();
>>>> +      instructions->push_head(var);
>>>> +   }
>>>>   }
>>>
>>> Didn't you mention that this breaks some gles2conform test?
>>
>> Yes.  GL2FixedTests/stencil_plane_operation/stencil_plane_operation.test breaks.  However, I think this is a
>> pre-existing bug.  If I edit its shader to list the attributes in the opposite order, the test breaks /without/ this
>> patch.  I've debugged it a little bit, but I don't have any clues yet.
>>
>>> I verified that this fixes Pool Master Pro and gives no
>>> regressions on Android's gles2conform at 64x64 and all EGLConfigs.
>>
>> So... stencil_plane_operation passes on Android with and without this patch?  confusion++;
>>
>>> Tested-by: Chad Versace <chad.versace at linux.intel.com>
>
> I have never seen stencil_plane_operation fail on Android. For the record,
> I'm using Harris Beach (Haswell Mobile ULT GT3u).

By the way, please add the "glsl: " prefix to the commit subject.



More information about the mesa-dev mailing list