<div dir="ltr">On 6 November 2013 14:06, Ian Romanick <span dir="ltr"><<a href="mailto:idr@freedesktop.org" target="_blank">idr@freedesktop.org</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 10/15/2013 03:53 PM, Paul Berry wrote:<br>
<br>
This test is<br>
<br>
Reviewed-by: Ian Romanick <<a href="mailto:ian.d.romanick@intel.com">ian.d.romanick@intel.com</a>><br>
<br>
Do we already have tests that redeclare these blocks but try to use<br>
fields that were not in the redeclaration?<br></blockquote><div><br></div><div>Yes:<br></div><div>- gs-redeclares-pervertex-in-before-other-usage.geom<br>- gs-redeclares-pervertex-out-before-other-usage.geom<br>- vs-redeclares-pervertex-out-before-other-usage.vert<br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div class=""><div class="h5"><br>
> ---<br>
>  .../gs-redeclares-pervertex-in-only.shader_test    | 55 ++++++++++++++++++++++<br>
>  .../gs-redeclares-pervertex-out-only.shader_test   | 53 +++++++++++++++++++++<br>
>  2 files changed, 108 insertions(+)<br>
>  create mode 100644 tests/spec/glsl-1.50/execution/gs-redeclares-pervertex-in-only.shader_test<br>
>  create mode 100644 tests/spec/glsl-1.50/execution/gs-redeclares-pervertex-out-only.shader_test<br>
><br>
> diff --git a/tests/spec/glsl-1.50/execution/gs-redeclares-pervertex-in-only.shader_test b/tests/spec/glsl-1.50/execution/gs-redeclares-pervertex-in-only.shader_test<br>
> new file mode 100644<br>
> index 0000000..f28bd7f<br>
> --- /dev/null<br>
> +++ b/tests/spec/glsl-1.50/execution/gs-redeclares-pervertex-in-only.shader_test<br>
> @@ -0,0 +1,55 @@<br>
> +# This test verifies that a geometry shader can redeclare just the<br>
> +# gl_PerVertex input block, but still use members of the gl_PerVertex<br>
> +# output block (whether or not those members were included in the<br>
> +# redeclaration of the input block).<br>
> +<br>
> +[require]<br>
> +GLSL >= 1.50<br>
> +<br>
> +[vertex shader]<br>
> +in vec4 piglit_vertex;<br>
> +out gl_PerVertex {<br>
> +  vec4 gl_Position;<br>
> +};<br>
> +<br>
> +void main()<br>
> +{<br>
> +  gl_Position = piglit_vertex;<br>
> +}<br>
> +<br>
> +[geometry shader]<br>
> +layout(triangles) in;<br>
> +layout(triangle_strip, max_vertices = 3) out;<br>
> +<br>
> +in gl_PerVertex {<br>
> +  vec4 gl_Position;<br>
> +} gl_in[];<br>
> +<br>
> +void main()<br>
> +{<br>
> +  for (int i = 0; i < 3; i++) {<br>
> +    gl_Position = gl_in[i].gl_Position;<br>
> +    gl_ClipDistance[0] = 1.0;<br>
> +    EmitVertex();<br>
> +  }<br>
> +}<br>
> +<br>
> +[fragment shader]<br>
> +void main()<br>
> +{<br>
> +  if (gl_ClipDistance[0] == 1.0)<br>
> +    gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);<br>
> +  else<br>
> +    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);<br>
> +}<br>
> +<br>
> +[test]<br>
> +# Since the fragment shader's gl_ClipDistance array is only defined<br>
> +# for elements that have clipping enabled, we need to enable clip<br>
> +# plane 0.  Fortunately the values we use for gl_ClipDistance are<br>
> +# always positive, so no pixels are actually clipped.<br>
> +enable GL_CLIP_PLANE0<br>
> +clear color 0.0 0.0 0.0 0.0<br>
> +clear<br>
> +draw rect -1 -1 2 2<br>
> +probe all rgba 0.0 1.0 0.0 1.0<br>
> diff --git a/tests/spec/glsl-1.50/execution/gs-redeclares-pervertex-out-only.shader_test b/tests/spec/glsl-1.50/execution/gs-redeclares-pervertex-out-only.shader_test<br>
> new file mode 100644<br>
> index 0000000..e3f3dbd<br>
> --- /dev/null<br>
> +++ b/tests/spec/glsl-1.50/execution/gs-redeclares-pervertex-out-only.shader_test<br>
> @@ -0,0 +1,53 @@<br>
> +# This test verifies that a geometry shader can redeclare just the<br>
> +# gl_PerVertex output block, but still use members of the gl_PerVertex<br>
> +# input block (whether or not those members were included in the<br>
> +# redeclaration of the output block).<br>
> +<br>
> +[require]<br>
> +GLSL >= 1.50<br>
> +<br>
> +[vertex shader]<br>
> +in vec4 piglit_vertex;<br>
> +<br>
> +void main()<br>
> +{<br>
> +  gl_Position = piglit_vertex;<br>
> +  gl_PointSize = dot(piglit_vertex, vec4(1.0));<br>
> +}<br>
> +<br>
> +[geometry shader]<br>
> +layout(triangles) in;<br>
> +layout(triangle_strip, max_vertices = 3) out;<br>
> +<br>
> +out gl_PerVertex {<br>
> +  vec4 gl_Position;<br>
> +};<br>
> +out vec4 color;<br>
> +<br>
> +void main()<br>
> +{<br>
> +  bool ok = true;<br>
> +  for (int i = 0; i < 3; i++) {<br>
> +    if (gl_in[i].gl_PointSize != dot(gl_in[i].gl_Position, vec4(1.0)))<br>
> +      ok = false;<br>
> +  }<br>
> +  for (int i = 0; i < 3; i++) {<br>
> +    gl_Position = gl_in[i].gl_Position;<br>
> +    color = ok ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);<br>
> +    EmitVertex();<br>
> +  }<br>
> +}<br>
> +<br>
> +[fragment shader]<br>
> +in vec4 color;<br>
> +<br>
> +void main()<br>
> +{<br>
> +  gl_FragColor = color;<br>
> +}<br>
> +<br>
> +[test]<br>
> +clear color 0.0 0.0 0.0 0.0<br>
> +clear<br>
> +draw rect -1 -1 2 2<br>
> +probe all rgba 0.0 1.0 0.0 1.0<br>
><br>
<br>
</div></div></blockquote></div><br></div></div>