Re: [Piglit] [PATCH] vulkan: test cases for large local arrays

2018-11-08 Thread Neil Roberts
Looks good to me 

Reviewed-by: Neil Roberts 

- Neil

Alejandro Piñeiro  writes:

> Equivalent to the GLSL tests added with the series "Test cases for
> large GLSL local arrays". Quoting from the cover-letter of that
> series:
>
>"Drivers typically need special handling for local array storage
> when arrays exceed a certain size, this adds a few test cases for
> exercising some corner cases that were useful when implementing
> support for this in the r600g driver."
>
> Right now only two of the tests included on this series is passing
> (local-array and multiple). But all of them were working until the the
> following commit:
>* b3c6146925595ec3a7eece3afb9ccaad32906d4c ("nir: Copy propagation between 
> blocks")
>
> So it is fact, a regression. More info on
>   https://bugs.freedesktop.org/show_bug.cgi?id=108624
>
> Original GLSL series:
>   https://lists.freedesktop.org/archives/piglit/2017-March/021867.html
> ---
>  .../fs-large-local-array-vec2.vk_shader_test   | 38 +
>  .../fs-large-local-array-vec3.vk_shader_test   | 38 +
>  .../fs-large-local-array-vec4.vk_shader_test   | 38 +
>  .../shaders/fs-large-local-array.vk_shader_test| 47 
> ++
>  .../fs-multiple-large-local-array.vk_shader_test   | 40 ++
>  5 files changed, 201 insertions(+)
>  create mode 100644 
> tests/vulkan/shaders/fs-large-local-array-vec2.vk_shader_test
>  create mode 100644 
> tests/vulkan/shaders/fs-large-local-array-vec3.vk_shader_test
>  create mode 100644 
> tests/vulkan/shaders/fs-large-local-array-vec4.vk_shader_test
>  create mode 100644 tests/vulkan/shaders/fs-large-local-array.vk_shader_test
>  create mode 100644 
> tests/vulkan/shaders/fs-multiple-large-local-array.vk_shader_test
>
> diff --git a/tests/vulkan/shaders/fs-large-local-array-vec2.vk_shader_test 
> b/tests/vulkan/shaders/fs-large-local-array-vec2.vk_shader_test
> new file mode 100644
> index 0..6fbf71d50
> --- /dev/null
> +++ b/tests/vulkan/shaders/fs-large-local-array-vec2.vk_shader_test
> @@ -0,0 +1,38 @@
> +# Tests a large vec2 local array.
> +# Vulkan equivalent to 
> tests/spec/glsl-1.30/execution/fs-large-local-array-vec2.shader_test
> +
> +[require]
> +
> +[vertex shader passthrough]
> +
> +[fragment shader]
> +#version 450
> +
> +layout (binding = 5) uniform block {
> +   uint i;
> +};
> +
> +layout (location = 0) out vec4 out_color;
> +
> +void main()
> +{
> + vec2 A[130];
> + A[20].g = 0;
> + A[i].g = 37;
> + A[i].r = 1;
> +out_color.rba = vec3(0.0, 0.0, 1.0);
> + out_color.g = float(A[20].g == 37);
> +}
> +
> +[test]
> +clear color 1.0 0.0 0.0 1.0
> +clear
> +
> +uniform ubo 5 uint 0 19
> +draw rect -1 -1 2 2
> +probe all rgba 0.0 0.0 0.0 1.0
> +
> +clear
> +uniform ubo 5 uint 0 20
> +draw rect -1 -1 2 2
> +probe all rgba 0.0 1.0 0.0 1.0
> diff --git a/tests/vulkan/shaders/fs-large-local-array-vec3.vk_shader_test 
> b/tests/vulkan/shaders/fs-large-local-array-vec3.vk_shader_test
> new file mode 100644
> index 0..8c00bc720
> --- /dev/null
> +++ b/tests/vulkan/shaders/fs-large-local-array-vec3.vk_shader_test
> @@ -0,0 +1,38 @@
> +# Tests a large vec3 local array.
> +# Vulkan equivalent to 
> tests/spec/glsl-1.30/execution/fs-large-local-array-vec3.shader_test
> +
> +[require]
> +
> +[vertex shader passthrough]
> +
> +[fragment shader]
> +#version 450
> +
> +layout (binding = 5) uniform block {
> +   uint i;
> +};
> +
> +layout (location = 0) out vec4 out_color;
> +
> +void main()
> +{
> + vec3 A[130];
> + A[20].g = 0;
> + A[i].g = 37;
> + A[i].r = 1;
> +out_color.rba = vec3(0.0, 0.0, 1.0);
> + out_color.g = float(A[20].g == 37);
> +}
> +
> +[test]
> +clear color 1.0 0.0 0.0 1.0
> +clear
> +
> +uniform ubo 5 uint 0 19
> +draw rect -1 -1 2 2
> +probe all rgba 0.0 0.0 0.0 1.0
> +
> +clear
> +uniform ubo 5 uint 0 20
> +draw rect -1 -1 2 2
> +probe all rgba 0.0 1.0 0.0 1.0
> diff --git a/tests/vulkan/shaders/fs-large-local-array-vec4.vk_shader_test 
> b/tests/vulkan/shaders/fs-large-local-array-vec4.vk_shader_test
> new file mode 100644
> index 0..6239bfee6
> --- /dev/null
> +++ b/tests/vulkan/shaders/fs-large-local-array-vec4.vk_shader_test
> @@ -0,0 +1,38 @@
> +# Tests a large vec4 local array.
> +# Vulkan equivalent to 
> tests/spec/glsl-1.30/execution/fs-large-local-array-vec4.shader_test
> +
> +[require]
> +
> +[vertex shader passthrough]
> +
> +[fragment shader]
> +#version 450
> +
> +layout (binding = 5) uniform block {
> +   uint i;
> +};
> +
> +layout (location = 0) out vec4 out_color;
> +
> +void main()
> +{
> + vec4 A[130];
> + A[20].g = 0;
> + A[i].g = 37;
> + A[i].r = 1;
> +out_color.rba = vec3(0.0, 0.0, 1.0);
> + out_color.g = float(A[20].g == 37);
> +}
> +
> +[test]
> +clear color 1.0 0.0 0.0 1.0
> +clear
> +
> +uniform ubo 5 uint 0 19
> +draw rect -1 -1 2 2
> +probe all rgba 0.0 0.0 0.0 1.0
> +
> +clear

[Piglit] [PATCH] vulkan: test cases for large local arrays

2018-11-08 Thread Alejandro Piñeiro
Equivalent to the GLSL tests added with the series "Test cases for
large GLSL local arrays". Quoting from the cover-letter of that
series:

   "Drivers typically need special handling for local array storage
when arrays exceed a certain size, this adds a few test cases for
exercising some corner cases that were useful when implementing
support for this in the r600g driver."

Right now only two of the tests included on this series is passing
(local-array and multiple). But all of them were working until the the
following commit:
   * b3c6146925595ec3a7eece3afb9ccaad32906d4c ("nir: Copy propagation between 
blocks")

So it is fact, a regression. More info on
  https://bugs.freedesktop.org/show_bug.cgi?id=108624

Original GLSL series:
  https://lists.freedesktop.org/archives/piglit/2017-March/021867.html
---
 .../fs-large-local-array-vec2.vk_shader_test   | 38 +
 .../fs-large-local-array-vec3.vk_shader_test   | 38 +
 .../fs-large-local-array-vec4.vk_shader_test   | 38 +
 .../shaders/fs-large-local-array.vk_shader_test| 47 ++
 .../fs-multiple-large-local-array.vk_shader_test   | 40 ++
 5 files changed, 201 insertions(+)
 create mode 100644 
tests/vulkan/shaders/fs-large-local-array-vec2.vk_shader_test
 create mode 100644 
tests/vulkan/shaders/fs-large-local-array-vec3.vk_shader_test
 create mode 100644 
tests/vulkan/shaders/fs-large-local-array-vec4.vk_shader_test
 create mode 100644 tests/vulkan/shaders/fs-large-local-array.vk_shader_test
 create mode 100644 
tests/vulkan/shaders/fs-multiple-large-local-array.vk_shader_test

diff --git a/tests/vulkan/shaders/fs-large-local-array-vec2.vk_shader_test 
b/tests/vulkan/shaders/fs-large-local-array-vec2.vk_shader_test
new file mode 100644
index 0..6fbf71d50
--- /dev/null
+++ b/tests/vulkan/shaders/fs-large-local-array-vec2.vk_shader_test
@@ -0,0 +1,38 @@
+# Tests a large vec2 local array.
+# Vulkan equivalent to 
tests/spec/glsl-1.30/execution/fs-large-local-array-vec2.shader_test
+
+[require]
+
+[vertex shader passthrough]
+
+[fragment shader]
+#version 450
+
+layout (binding = 5) uniform block {
+   uint i;
+};
+
+layout (location = 0) out vec4 out_color;
+
+void main()
+{
+   vec2 A[130];
+   A[20].g = 0;
+   A[i].g = 37;
+   A[i].r = 1;
+out_color.rba = vec3(0.0, 0.0, 1.0);
+   out_color.g = float(A[20].g == 37);
+}
+
+[test]
+clear color 1.0 0.0 0.0 1.0
+clear
+
+uniform ubo 5 uint 0 19
+draw rect -1 -1 2 2
+probe all rgba 0.0 0.0 0.0 1.0
+
+clear
+uniform ubo 5 uint 0 20
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/vulkan/shaders/fs-large-local-array-vec3.vk_shader_test 
b/tests/vulkan/shaders/fs-large-local-array-vec3.vk_shader_test
new file mode 100644
index 0..8c00bc720
--- /dev/null
+++ b/tests/vulkan/shaders/fs-large-local-array-vec3.vk_shader_test
@@ -0,0 +1,38 @@
+# Tests a large vec3 local array.
+# Vulkan equivalent to 
tests/spec/glsl-1.30/execution/fs-large-local-array-vec3.shader_test
+
+[require]
+
+[vertex shader passthrough]
+
+[fragment shader]
+#version 450
+
+layout (binding = 5) uniform block {
+   uint i;
+};
+
+layout (location = 0) out vec4 out_color;
+
+void main()
+{
+   vec3 A[130];
+   A[20].g = 0;
+   A[i].g = 37;
+   A[i].r = 1;
+out_color.rba = vec3(0.0, 0.0, 1.0);
+   out_color.g = float(A[20].g == 37);
+}
+
+[test]
+clear color 1.0 0.0 0.0 1.0
+clear
+
+uniform ubo 5 uint 0 19
+draw rect -1 -1 2 2
+probe all rgba 0.0 0.0 0.0 1.0
+
+clear
+uniform ubo 5 uint 0 20
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/vulkan/shaders/fs-large-local-array-vec4.vk_shader_test 
b/tests/vulkan/shaders/fs-large-local-array-vec4.vk_shader_test
new file mode 100644
index 0..6239bfee6
--- /dev/null
+++ b/tests/vulkan/shaders/fs-large-local-array-vec4.vk_shader_test
@@ -0,0 +1,38 @@
+# Tests a large vec4 local array.
+# Vulkan equivalent to 
tests/spec/glsl-1.30/execution/fs-large-local-array-vec4.shader_test
+
+[require]
+
+[vertex shader passthrough]
+
+[fragment shader]
+#version 450
+
+layout (binding = 5) uniform block {
+   uint i;
+};
+
+layout (location = 0) out vec4 out_color;
+
+void main()
+{
+   vec4 A[130];
+   A[20].g = 0;
+   A[i].g = 37;
+   A[i].r = 1;
+out_color.rba = vec3(0.0, 0.0, 1.0);
+   out_color.g = float(A[20].g == 37);
+}
+
+[test]
+clear color 1.0 0.0 0.0 1.0
+clear
+
+uniform ubo 5 uint 0 19
+draw rect -1 -1 2 2
+probe all rgba 0.0 0.0 0.0 1.0
+
+clear
+uniform ubo 5 uint 0 20
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/vulkan/shaders/fs-large-local-array.vk_shader_test 
b/tests/vulkan/shaders/fs-large-local-array.vk_shader_test
new file mode 100644
index 0..c62109ee1
--- /dev/null
+++ b/tests/vulkan/shaders/fs-large-local-array.vk_shader_test
@@ -0,0 +1,47 @@
+# Tests a large uint local array.
+# Vulkan