[Mesa-stable] [PATCH v2 03/11] mesa: Strip arrayness from interface block names in some IO validation

Ian Romanick idr at freedesktop.org
Fri Jun 24 02:06:56 UTC 2016


On 06/23/2016 03:30 PM, Ilia Mirkin wrote:
> On Thu, Jun 23, 2016 at 6:07 PM, Ian Romanick <idr at freedesktop.org> wrote:
>> On 06/16/2016 12:12 PM, Ilia Mirkin wrote:
>>> On Thu, Jun 16, 2016 at 3:06 PM, Ian Romanick <idr at freedesktop.org> wrote:
>>>> From: Ian Romanick <ian.d.romanick at intel.com>
>>>>
>>>> Outputs from the vertex shader need to be able to match
>>>> per-vertex-arrayed inputs of later stages.  Acomplish this by stripping
>>>> one level of arrayness from the names and types of outputs going to a
>>>> per-vertex-arrayed stage.
>>>>
>>>> v2: Add missing checks for TESS_EVAL->GEOMETRY.  Noticed by Timothy
>>>> Arceri.
>>>>
>>>> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
>>>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96358
>>>> Cc: "12.0" <mesa-stable at lists.freedesktop.org>
>>>> Cc: Gregory Hainaut <gregory.hainaut at gmail.com>
>>>> Cc: Ilia Mirkin <imirkin at alum.mit.edu>
>>>> ---
>>>>  src/mesa/main/shader_query.cpp | 100 +++++++++++++++++++++++++++++++++++++----
>>>>  1 file changed, 92 insertions(+), 8 deletions(-)
>>>>
>>>> diff --git a/src/mesa/main/shader_query.cpp b/src/mesa/main/shader_query.cpp
>>>> index 5956ce4..a6a0a2f 100644
>>>> --- a/src/mesa/main/shader_query.cpp
>>>> +++ b/src/mesa/main/shader_query.cpp
>>>> @@ -1385,13 +1385,26 @@ _mesa_get_program_resourceiv(struct gl_shader_program *shProg,
>>>>
>>>>  static bool
>>>>  validate_io(struct gl_shader_program *producer,
>>>> -            struct gl_shader_program *consumer)
>>>> +            struct gl_shader_program *consumer,
>>>> +            gl_shader_stage producer_stage,
>>>> +            gl_shader_stage consumer_stage)
>>>>  {
>>>>     if (producer == consumer)
>>>>        return true;
>>>>
>>>> +   const bool nonarray_stage_to_array_stage =
>>>> +      (producer_stage == MESA_SHADER_VERTEX &&
>>>> +       (consumer_stage == MESA_SHADER_GEOMETRY ||
>>>> +        consumer_stage == MESA_SHADER_TESS_CTRL ||
>>>> +        consumer_stage == MESA_SHADER_TESS_EVAL)) ||
>>>> +      (producer_stage == MESA_SHADER_TESS_EVAL &&
>>>> +       consumer_stage == MESA_SHADER_GEOMETRY);
>>>
>>> Since TCS -> GEOM is not possible, isn't the only way that array ->
>>> array can happen is TCS -> TES? IOW, couldn't this just be
>>>
>>> producer != TCS && (consumer == TCS || consumer == TES || consumer == GS)
>>>
>>> Your call whether you want to rewrite it. [No comment on the rest of
>>> the patch...]
>>
>> I had though of another (slightly less) clever way to do this, but I
>> decided against it because it was less clear.
>>
>> Anyway, I tried your suggestion.  Here's the assembly 'diff
>> --side-by-side'.  Mine is on the left, yours is on the right.
>>
>>     mov    0x4(%rax),%eax                mov    0x4(%rax),%eax
>>     cmp    %rbp,%rbx                     cmp    %rbp,%rbx
>>     je     374c                     |    je     3744
>>     test   %eax,%eax                |    movb   $0x0,0x1f(%rsp)
>>     jne    357b                     |    cmp    $0x1,%eax
>>     lea    -0x1(%rdx),%ecx          |    je     357f
>>     movb   $0x1,0x1f(%rsp)          |    sub    $0x1,%edx
>>     cmp    $0x2,%ecx                |    cmp    $0x2,%edx
>>     jbe    358d                     |    setbe  0x1f(%rsp)
>>     cmp    $0x2,%eax                <
>>     sete   %cl                      <
>>     cmp    $0x3,%edx                <
>>     sete   %al                      <
>>     and    %eax,%ecx                <
>>     mov    %cl,0x1f(%rsp)           <
>>
>> I don't know that we'd be able to measure a performance difference.
>> Maybe having one less branch that may not predict well is good?  *shrug*
> 
> A little intense that you looked at the asm... my argument was mostly
> for the sake of simplicity and readability. If you don't think my
> version is easier to understand, then keep yours.

Heh... I just thought it was due diligence. :)

>   -ilia
> _______________________________________________
> mesa-stable mailing list
> mesa-stable at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-stable
> 



More information about the mesa-stable mailing list