[Piglit] [PATCH 4/4] glsl-1.10: Test the step built-in function

Ian Romanick idr at freedesktop.org
Wed Mar 18 15:06:27 PDT 2015


On 03/18/2015 01:18 AM, Tapani Pälli wrote:
> Hi;
> 
> Test looks good and passes fine on HSW;
> 
> Reviewed-by: Tapani Pälli <tapani.palli at intel.com>
> 
> 
> With INTEL_DEVID_OVERRIDE (0x0046 or 0x2A42) though it does not seem to
> hit the mentioned optimization, since the comparison operation is
> ir_binop_gequal, this is on HSW desktop machine.

Hm... that is odd.  I ran this test as:

INTEL_DEVID_OVERRIDE=0x0046 INTEL_DEBUG=fs bin/shader_runner tests/spec/glsl-1.10/execution/fs-step.shader_test -auto

At the commit in my local tree before the optimization is added, I get:

Native code for unnamed fragment shader 3
SIMD8 shader: 14 instructions. 0 loops. Compacted 224 to 208 bytes (7%)
   START B0
mul(8)          g6<1>F          g2<0,1,0>F      g2.1<0,1,0>F    { align1 compacted };
cmp.ge.f0(8)    g4<1>F          g6<8,8,1>F      0F              { align1 };
and(8)          g4<1>D          g4<8,8,1>D      1D              { align1 };
and(8)          g4<1>D          -g4<8,8,1>D     0x3f800000UD    { align1 };
mul(8)          g5<1>F          g4<8,8,1>F      g2.2<0,1,0>F    { align1 };
add(8)          m3<1>F          g5<8,8,1>F      g2.6<0,1,0>F    { align1 };
mul(8)          g5<1>F          g4<8,8,1>F      g2.3<0,1,0>F    { align1 compacted };
add(8)          m4<1>F          g5<8,8,1>F      g2.7<0,1,0>F    { align1 };
mul(8)          g5<1>F          g4<8,8,1>F      g2.4<0,1,0>F    { align1 compacted };
add(8)          m5<1>F          g5<8,8,1>F      g3<0,1,0>F      { align1 };
mul(8)          g4<1>F          g4<8,8,1>F      g2.5<0,1,0>F    { align1 };
add(8)          m6<1>F          g4<8,8,1>F      g3.1<0,1,0>F    { align1 };
mov(8)          m2<1>F          g1<8,8,1>F                      { align1 nomask };
nop                                                             ;
send(8) 1       null            g0<8,8,1>UW
                            write RT write SIMD8 LastRT Surface = 0 mlen 6 rlen 0 { align1 EOT };
   END B0

At the next commit I get:

Native code for unnamed fragment shader 3
SIMD8 shader: 13 instructions. 0 loops. Compacted 208 to 192 bytes (8%)
   START B0
mul.ge.f0(8)    null            g2<0,1,0>F      g2.1<0,1,0>F    { align1 compacted };
mov(8)          g4<1>F          1F                              { align1 };
(+f0) sel(8)    g4<1>F          g4<8,8,1>F      0F              { align1 };
mul(8)          g5<1>F          g4<8,8,1>F      g2.2<0,1,0>F    { align1 };
add(8)          m3<1>F          g5<8,8,1>F      g2.6<0,1,0>F    { align1 };
mul(8)          g5<1>F          g4<8,8,1>F      g2.3<0,1,0>F    { align1 compacted };
add(8)          m4<1>F          g5<8,8,1>F      g2.7<0,1,0>F    { align1 };
mul(8)          g5<1>F          g4<8,8,1>F      g2.4<0,1,0>F    { align1 compacted };
add(8)          m5<1>F          g5<8,8,1>F      g3<0,1,0>F      { align1 };
mul(8)          g4<1>F          g4<8,8,1>F      g2.5<0,1,0>F    { align1 };
add(8)          m6<1>F          g4<8,8,1>F      g3.1<0,1,0>F    { align1 };
mov(8)          m2<1>F          g1<8,8,1>F                      { align1 nomask };
nop                                                             ;
send(8) 1       null            g0<8,8,1>UW
                            write RT write SIMD8 LastRT Surface = 0 mlen 6 rlen 0 { align1 EOT };
   END B0

How does that compare with what you get?

> On 03/17/2015 11:51 PM, Ian Romanick wrote:
>> From: Ian Romanick <ian.d.romanick at intel.com>
>>
>> This is a general step() test, but it is designed to tickle an
>> optimization path in the GEN4 and GEN5 code generation in the i965
>> driver.  This optimization tries to generate different code for
>> expressions like 'float(expr cmp 0)'.
>>
>> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
>> Cc: Tapani Palli <tapani.palli at intel.com>
>> ---
>>   tests/spec/glsl-1.10/execution/fs-step.shader_test | 35
>> ++++++++++++++++++++++
>>   1 file changed, 35 insertions(+)
>>   create mode 100644 tests/spec/glsl-1.10/execution/fs-step.shader_test
>>
>> diff --git a/tests/spec/glsl-1.10/execution/fs-step.shader_test
>> b/tests/spec/glsl-1.10/execution/fs-step.shader_test
>> new file mode 100644
>> index 0000000..2ea0725
>> --- /dev/null
>> +++ b/tests/spec/glsl-1.10/execution/fs-step.shader_test
>> @@ -0,0 +1,35 @@
>> +[require]
>> +GLSL >= 1.10
>> +
>> +[vertex shader passthrough]
>> +
>> +[fragment shader]
>> +uniform float a;
>> +uniform float b;
>> +uniform vec4 color0;
>> +uniform vec4 color1;
>> +
>> +void main()
>> +{
>> +    /* This is a general step() test, but it is designed to tickle an
>> +     * optimization path in the GEN4 and GEN5 code generation in the
>> i965
>> +     * driver.  This optimization tries to generate different code for
>> +     * expressions like 'float(expr cmp 0)'.
>> +     */
>> +    gl_FragColor = step(0.0, a * b) * color0 + color1;
>> +}
>> +
>> +[test]
>> +uniform float a -1
>> +uniform float b 1
>> +uniform vec4 color0 1.0 -1.0 0.0 0.0
>> +uniform vec4 color1 0.0 1.0 0.0 1.0
>> +draw rect -1 -1 1 2
>> +relative probe rgba (0.25, 0.5) (0.0, 1.0, 0.0, 1.0)
>> +
>> +uniform float a 1
>> +uniform float b 1
>> +uniform vec4 color0 -1.0 1.0 0.0 0.0
>> +uniform vec4 color1 1.0 0.0 0.0 1.0
>> +draw rect 0 -1 1 2
>> +relative probe rgba (0.75, 0.5) (0.0, 1.0, 0.0, 1.0)



More information about the Piglit mailing list