[Mesa-dev] [PATCH] Move all of the var decls to the front of the IR list in reverse order.
Ian Romanick
idr at freedesktop.org
Tue Jun 11 13:39:25 PDT 2013
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>
More information about the mesa-dev
mailing list