[Piglit] [PATCH] arb_gpu_shader5: adding an const-nonconst struct-sampler indexing

Alejandro Piñeiro apinheiro at igalia.com
Fri Sep 4 11:04:49 PDT 2015


Wow, this review was quick, thank you very much.

FWIW, I don't have git push access. Would you mind to push the commit?

Thanks again.

On 04/09/15 19:58, Ilia Mirkin wrote:
> Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
>
> On Fri, Sep 4, 2015 at 1:48 PM, Alejandro Piñeiro <apinheiro at igalia.com> wrote:
>> Right now there are tests for the following indexing combination:
>>   a) No struct - non const sampler indexing
>>   b) Non const struct indexing - single sampler
>>   c) Non const struct indexing - const sampler indexing
>>   d) Non const struct indexing - non const sampler indexing
>>
>> This commit adds the following combination:
>>   e) Const struct indexing - non const sampler indexing
>> ---
>>
>> To provide some context, right now:
>>
>> a) and b) pass on i965,
>> c) fails on i965
>> d) fails on i965 with the IR path, but crashes with the NIR path.
>>
>> I have been taking a look to why there is a different behaviour
>> IR vs NIR on d), at least to check if there was a easy solution
>> to avoid the crash. On that use case the nir tree resulting
>> includes two sampler offset on the same texture operation, so it
>> raises and assertion on nir_validate. I concluded that it would
>> not be trivial to get the NIR path not crashing, as it is likely
>> it is needed to someone jumps in to solve c) and d), that seems
>> to be a corner case that was not contemplated on current
>> implementation of arb_gpu_shader5.
>>
>> In any case, while investigating this, I tried out the outcome
>> of a const struct indexing and a non const sampler indexing (so
>> e)) and it works fine on i965. So just for the sake of
>> completeness Im submitting this combination.
>>
>>  .../fs-struct-const-sampler-nonconst.shader_test   | 72 +++++++++++++++++
>>  .../gs-struct-const-sampler-nonconst.shader_test   | 91 ++++++++++++++++++++++
>>  .../vs-struct-const-sampler-nonconst.shader_test   | 84 ++++++++++++++++++++
>>  3 files changed, 247 insertions(+)
>>  create mode 100644 tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/fs-struct-const-sampler-nonconst.shader_test
>>  create mode 100644 tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/gs-struct-const-sampler-nonconst.shader_test
>>  create mode 100644 tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/vs-struct-const-sampler-nonconst.shader_test
>>
>> diff --git a/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/fs-struct-const-sampler-nonconst.shader_test b/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/fs-struct-const-sampler-nonconst.shader_test
>> new file mode 100644
>> index 0000000..80069ea
>> --- /dev/null
>> +++ b/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/fs-struct-const-sampler-nonconst.shader_test
>> @@ -0,0 +1,72 @@
>> +# This test verifies that dynamically uniform indexing of sampler arrays
>> +# in the fragment shader behaves correctly.
>> +
>> +[require]
>> +GLSL >= 1.50
>> +GL_ARB_gpu_shader5
>> +
>> +[vertex shader passthrough]
>> +
>> +[fragment shader]
>> +#version 150
>> +#extension GL_ARB_gpu_shader5: require
>> +
>> +struct S {
>> +   sampler2D tex[4];
>> +};
>> +
>> +uniform S s[2];
>> +
>> +uniform int n;
>> +
>> +out vec4 color;
>> +
>> +void main()
>> +{
>> +       color = texture(s[1].tex[n], vec2(0.75, 0.25));
>> +}
>> +
>> +[test]
>> +clear color 0.2 0.2 0.2 0.2
>> +clear
>> +
>> +uniform int s[1].tex[0] 0
>> +uniform int s[1].tex[1] 1
>> +uniform int s[1].tex[2] 2
>> +uniform int s[1].tex[3] 3
>> +
>> +texture checkerboard 0 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (1.0, 0.0, 0.0, 0.0)
>> +texparameter 2D min nearest
>> +texparameter 2D mag nearest
>> +
>> +texture checkerboard 1 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 1.0, 0.0, 0.0)
>> +texparameter 2D min nearest
>> +texparameter 2D mag nearest
>> +
>> +texture checkerboard 2 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 0.0, 1.0, 0.0)
>> +texparameter 2D min nearest
>> +texparameter 2D mag nearest
>> +
>> +texture checkerboard 3 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (1.0, 1.0, 1.0, 1.0)
>> +texparameter 2D min nearest
>> +texparameter 2D mag nearest
>> +
>> +uniform int n 0
>> +draw rect -1 -1 1 1
>> +
>> +relative probe rect rgb (0.0, 0.0, 0.5, 0.5) (1.0, 0.0, 0.0)
>> +
>> +uniform int n 1
>> +draw rect 0 -1 1 1
>> +
>> +relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (0.0, 1.0, 0.0)
>> +
>> +uniform int n 2
>> +draw rect -1 0 1 1
>> +
>> +relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0.0, 0.0, 1.0)
>> +
>> +uniform int n 3
>> +draw rect 0 0 1 1
>> +
>> +relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (1.0, 1.0, 1.0)
>> diff --git a/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/gs-struct-const-sampler-nonconst.shader_test b/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/gs-struct-const-sampler-nonconst.shader_test
>> new file mode 100644
>> index 0000000..cf6795c
>> --- /dev/null
>> +++ b/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/gs-struct-const-sampler-nonconst.shader_test
>> @@ -0,0 +1,91 @@
>> +# This test verifies that dynamically uniform indexing of sampler arrays
>> +# in the geometry shader behaves correctly.
>> +
>> +[require]
>> +GLSL >= 1.50
>> +GL_ARB_gpu_shader5
>> +
>> +[vertex shader passthrough]
>> +
>> +[geometry shader]
>> +#version 150
>> +#extension GL_ARB_gpu_shader5: require
>> +
>> +struct S {
>> +   sampler2D tex[4];
>> +};
>> +
>> +uniform S s[2];
>> +
>> +uniform int n;
>> +
>> +layout(triangles) in;
>> +layout(triangle_strip, max_vertices=3) out;
>> +out vec4 color;
>> +
>> +void main()
>> +{
>> +       for (int i = 0; i < 3; i++) {
>> +               gl_Position = gl_in[i].gl_Position;
>> +               color = texture(s[1].tex[n], vec2(0.75, 0.25));
>> +               EmitVertex();
>> +       }
>> +       EndPrimitive();
>> +}
>> +
>> +[fragment shader]
>> +#version 150
>> +#extension GL_ARB_gpu_shader5: require
>> +
>> +in vec4 color;
>> +out vec4 out_color;
>> +
>> +void main()
>> +{
>> +       out_color = color;
>> +}
>> +
>> +[test]
>> +clear color 0.2 0.2 0.2 0.2
>> +clear
>> +
>> +uniform int s[1].tex[0] 0
>> +uniform int s[1].tex[1] 1
>> +uniform int s[1].tex[2] 2
>> +uniform int s[1].tex[3] 3
>> +
>> +texture checkerboard 0 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (1.0, 0.0, 0.0, 0.0)
>> +texparameter 2D min nearest
>> +texparameter 2D mag nearest
>> +
>> +texture checkerboard 1 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 1.0, 0.0, 0.0)
>> +texparameter 2D min nearest
>> +texparameter 2D mag nearest
>> +
>> +texture checkerboard 2 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 0.0, 1.0, 0.0)
>> +texparameter 2D min nearest
>> +texparameter 2D mag nearest
>> +
>> +texture checkerboard 3 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (1.0, 1.0, 1.0, 1.0)
>> +texparameter 2D min nearest
>> +texparameter 2D mag nearest
>> +
>> +uniform int n 0
>> +draw rect -1 -1 1 1
>> +
>> +relative probe rect rgb (0.0, 0.0, 0.5, 0.5) (1.0, 0.0, 0.0)
>> +
>> +uniform int n 1
>> +draw rect 0 -1 1 1
>> +
>> +relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (0.0, 1.0, 0.0)
>> +
>> +uniform int n 2
>> +draw rect -1 0 1 1
>> +
>> +relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0.0, 0.0, 1.0)
>> +
>> +uniform int n 3
>> +draw rect 0 0 1 1
>> +
>> +relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (1.0, 1.0, 1.0)
>> diff --git a/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/vs-struct-const-sampler-nonconst.shader_test b/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/vs-struct-const-sampler-nonconst.shader_test
>> new file mode 100644
>> index 0000000..9388675
>> --- /dev/null
>> +++ b/tests/spec/arb_gpu_shader5/execution/sampler_array_indexing/vs-struct-const-sampler-nonconst.shader_test
>> @@ -0,0 +1,84 @@
>> +# This test verifies that dynamically uniform indexing of sampler arrays
>> +# in the vertex shader behaves correctly.
>> +
>> +[require]
>> +GLSL >= 1.50
>> +GL_ARB_gpu_shader5
>> +
>> +[vertex shader]
>> +#version 150
>> +#extension GL_ARB_gpu_shader5: require
>> +
>> +struct S {
>> +   sampler2D tex[4];
>> +};
>> +
>> +uniform S s[2];
>> +
>> +uniform int n;
>> +
>> +in vec4 piglit_vertex;
>> +out vec4 color;
>> +
>> +void main()
>> +{
>> +       gl_Position = piglit_vertex;
>> +       color = texture(s[1].tex[n], vec2(0.75, 0.25));
>> +}
>> +
>> +[fragment shader]
>> +#version 150
>> +#extension GL_ARB_gpu_shader5: require
>> +
>> +in vec4 color;
>> +out vec4 out_color;
>> +
>> +void main()
>> +{
>> +       out_color = color;
>> +}
>> +
>> +[test]
>> +clear color 0.2 0.2 0.2 0.2
>> +clear
>> +
>> +uniform int s[1].tex[0] 0
>> +uniform int s[1].tex[1] 1
>> +uniform int s[1].tex[2] 2
>> +uniform int s[1].tex[3] 3
>> +
>> +texture checkerboard 0 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (1.0, 0.0, 0.0, 0.0)
>> +texparameter 2D min nearest
>> +texparameter 2D mag nearest
>> +
>> +texture checkerboard 1 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 1.0, 0.0, 0.0)
>> +texparameter 2D min nearest
>> +texparameter 2D mag nearest
>> +
>> +texture checkerboard 2 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 0.0, 1.0, 0.0)
>> +texparameter 2D min nearest
>> +texparameter 2D mag nearest
>> +
>> +texture checkerboard 3 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (1.0, 1.0, 1.0, 1.0)
>> +texparameter 2D min nearest
>> +texparameter 2D mag nearest
>> +
>> +uniform int n 0
>> +draw rect -1 -1 1 1
>> +
>> +relative probe rect rgb (0.0, 0.0, 0.5, 0.5) (1.0, 0.0, 0.0)
>> +
>> +uniform int n 1
>> +draw rect 0 -1 1 1
>> +
>> +relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (0.0, 1.0, 0.0)
>> +
>> +uniform int n 2
>> +draw rect -1 0 1 1
>> +
>> +relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0.0, 0.0, 1.0)
>> +
>> +uniform int n 3
>> +draw rect 0 0 1 1
>> +
>> +relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (1.0, 1.0, 1.0)
>> --
>> 2.1.4
>>
>> _______________________________________________
>> Piglit mailing list
>> Piglit at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/piglit

-- 
Alejandro Piñeiro (apinheiro at igalia.com)



More information about the Piglit mailing list