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 <[email protected]> > > On Fri, Sep 4, 2015 at 1:48 PM, Alejandro Piñeiro <[email protected]> > 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 >> [email protected] >> http://lists.freedesktop.org/mailman/listinfo/piglit -- Alejandro Piñeiro ([email protected]) _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
