Miklós Máté <mtm...@gmail.com> writes:

> These mainly check the state machine. Compiler checks will come later.
>
> Signed-off-by: Miklós Máté <mtm...@gmail.com>
> ---
>  tests/spec/ati_fragment_shader/render-constants.c  |  98 +++++++++++++++
>  tests/spec/ati_fragment_shader/render-default.c    |  81 +++++++++++++
>  tests/spec/ati_fragment_shader/render-fog.c        |  95 +++++++++++++++
>  tests/spec/ati_fragment_shader/render-notexture.c  |  71 +++++++++++
>  tests/spec/ati_fragment_shader/render-precedence.c | 118 ++++++++++++++++++
>  tests/spec/ati_fragment_shader/render-sources.c    | 132 
> +++++++++++++++++++++
>  tests/spec/ati_fragment_shader/render-textargets.c |  89 ++++++++++++++
>  7 files changed, 684 insertions(+)
>  create mode 100644 tests/spec/ati_fragment_shader/render-constants.c
>  create mode 100644 tests/spec/ati_fragment_shader/render-default.c
>  create mode 100644 tests/spec/ati_fragment_shader/render-fog.c
>  create mode 100644 tests/spec/ati_fragment_shader/render-notexture.c
>  create mode 100644 tests/spec/ati_fragment_shader/render-precedence.c
>  create mode 100644 tests/spec/ati_fragment_shader/render-sources.c
>  create mode 100644 tests/spec/ati_fragment_shader/render-textargets.c
>
> diff --git a/tests/spec/ati_fragment_shader/render-constants.c 
> b/tests/spec/ati_fragment_shader/render-constants.c
> new file mode 100644
> index 000000000..6e1e4fd8c
> --- /dev/null
> +++ b/tests/spec/ati_fragment_shader/render-constants.c
> @@ -0,0 +1,98 @@
> +/* TODO license header */
> +
> +/**
> + * Tests rendering with GL_ATI_fragment_shader:
> + * - using local and global constants
> + * - updating global constants
> + */
> +
> +#include "piglit-util-gl.h"
> +
> +PIGLIT_GL_TEST_CONFIG_BEGIN
> +
> +     config.supports_gl_compat_version = 10;
> +     config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
> +
> +PIGLIT_GL_TEST_CONFIG_END
> +
> +static const float color1[] = {0.4, 0.2, 0.6};
> +static const float color2[] = {0.7, 0.2, 0.3};
> +static const float color3[] = {0.1, 0.7, 0.2};
> +static const float color4[] = {0.8, 0.1, 0.7};
> +
> +static float result1p3[] = {0.0, 0.0, 0.0};
> +static float result2p3[] = {0.0, 0.0, 0.0};
> +static float result4p3[] = {0.0, 0.0, 0.0};
> +
> +#define check_gl_error(err) if (!piglit_check_gl_error(err)) 
> piglit_report_result(PIGLIT_FAIL)
> +
> +enum piglit_result
> +piglit_display(void)
> +{
> +     bool pass = true;
> +
> +     piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
> +
> +     glClearColor(1.0, 0.0, 0.0, 1.0);
> +     glClear(GL_COLOR_BUFFER_BIT);
> +
> +     glEnable(GL_FRAGMENT_SHADER_ATI);
> +     glSetFragmentShaderConstantATI(GL_CON_7_ATI, color2);
> +     glSetFragmentShaderConstantATI(GL_CON_4_ATI, color3);
> +     glBindFragmentShaderATI(13);

Could we get some top-level variables with names instead of "13" and
"42"?

> +     piglit_draw_rect(0, 0, piglit_width/4, piglit_height); /* 2+3 */

In general, we ask for spaces around binary operators in the code, so

        piglit_draw_rect(0, 0, piglit_width / 4, piglit_height); /* 2+3 */

here and elsewhere in your tests.

> +     glBindFragmentShaderATI(42);
> +     piglit_draw_rect(piglit_width/4, 0, piglit_width/4, piglit_height); /* 
> 1+3 */
> +     glBindFragmentShaderATI(13);
> +     glSetFragmentShaderConstantATI(GL_CON_7_ATI, color4);
> +     piglit_draw_rect(2*piglit_width/4, 0, piglit_width/4, piglit_height); 
> /* 4+3 */
> +     glBindFragmentShaderATI(42);
> +     piglit_draw_rect(3*piglit_width/4, 0, piglit_width/4, piglit_height); 
> /*1+3 */
> +     glDisable(GL_FRAGMENT_SHADER_ATI);
> +
> +     pass = pass && piglit_probe_rect_rgb(0, 0, piglit_width/4, 
> piglit_height, result2p3);
> +     pass = pass && piglit_probe_rect_rgb(piglit_width/4, 0, piglit_width/4, 
> piglit_height, result1p3);
> +     pass = pass && piglit_probe_rect_rgb(2*piglit_width/4, 0, 
> piglit_width/4, piglit_height, result4p3);
> +     pass = pass && piglit_probe_rect_rgb(3*piglit_width/4, 0, 
> piglit_width/4, piglit_height, result1p3);
> +
> +     piglit_present_results();
> +
> +     check_gl_error(GL_NO_ERROR);
> +
> +     return pass ? PIGLIT_PASS : PIGLIT_FAIL;
> +}
> +
> +void
> +piglit_init(int argc, char **argv)
> +{
> +     unsigned u;
> +
> +     piglit_require_extension("GL_ATI_fragment_shader");
> +
> +     /* create identical shaders, but one of them has a local constant */
> +
> +     glBindFragmentShaderATI(13);
> +     glBeginFragmentShaderATI();
> +     glColorFragmentOp2ATI(GL_ADD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE,
> +                     GL_CON_7_ATI, GL_NONE, GL_NONE,
> +                     GL_CON_4_ATI, GL_NONE, GL_NONE);
> +     glEndFragmentShaderATI();
> +
> +     glBindFragmentShaderATI(42);
> +     glBeginFragmentShaderATI();
> +     glColorFragmentOp2ATI(GL_ADD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE,
> +                     GL_CON_7_ATI, GL_NONE, GL_NONE,
> +                     GL_CON_4_ATI, GL_NONE, GL_NONE);
> +     glSetFragmentShaderConstantATI(GL_CON_7_ATI, color1);
> +     glEndFragmentShaderATI();
> +
> +     /* compute the expected results */
> +
> +     for (u=0; u<3; u++) {
> +             result1p3[u] = color1[u]+color3[u];
> +             result2p3[u] = color2[u]+color3[u];
> +             result4p3[u] = color4[u]+color3[u];
> +     }
> +
> +     check_gl_error(GL_NO_ERROR);
> +}
> diff --git a/tests/spec/ati_fragment_shader/render-default.c 
> b/tests/spec/ati_fragment_shader/render-default.c
> new file mode 100644
> index 000000000..314a21810
> --- /dev/null
> +++ b/tests/spec/ati_fragment_shader/render-default.c
> @@ -0,0 +1,81 @@
> +/* TODO license header */
> +
> +/**
> + * Tests rendering with GL_ATI_fragment_shader: enable, disable, default 
> fragment shader.
> + */
> +
> +#include "piglit-util-gl.h"
> +
> +PIGLIT_GL_TEST_CONFIG_BEGIN
> +
> +     config.supports_gl_compat_version = 10;
> +     config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
> +
> +PIGLIT_GL_TEST_CONFIG_END
> +
> +static const float color[] = {0.2, 0.3, 0.8};
> +static const float texcoord[] = {0.2, 0.7, 0.4};
> +
> +#define check_gl_error(err) if (!piglit_check_gl_error(err)) 
> piglit_report_result(PIGLIT_FAIL)
> +
> +enum piglit_result
> +piglit_display(void)
> +{
> +     bool pass = true;
> +     GLuint tex;
> +
> +     piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
> +
> +     glClearColor(1.0, 0.0, 0.0, 1.0);
> +     glClear(GL_COLOR_BUFFER_BIT);
> +
> +     glColor3fv(color);
> +     glTexCoord3fv(texcoord);
> +
> +     //TODO swrast: passtexcoord only works when there is a bound texture 
> AND texturing is enabled

Could we use /* */ for consistency?

> +     /*glEnable(GL_TEXTURE_2D);
> +     glGenTextures(1, &tex);
> +     glBindTexture(GL_TEXTURE_2D, tex);
> +     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, GL_RGB, GL_FLOAT, 
> (void*)color);
> +     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
> +     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
> +     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
> +     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
> +     check_gl_error(GL_NO_ERROR);*/
> +
> +
> +     glDisable(GL_FRAGMENT_SHADER_ATI);
> +     piglit_draw_rect(0, 0, piglit_width/4, piglit_height);
> +     glEnable(GL_FRAGMENT_SHADER_ATI);
> +     piglit_draw_rect(piglit_width/4, 0, piglit_width/4, piglit_height);
> +     glDisable(GL_FRAGMENT_SHADER_ATI);
> +     piglit_draw_rect(2*piglit_width/4, 0, piglit_width/4, piglit_height);
> +     glEnable(GL_FRAGMENT_SHADER_ATI);
> +     piglit_draw_rect(3*piglit_width/4, 0, piglit_width/4, piglit_height);
> +
> +     pass = pass && piglit_probe_rect_rgb(0, 0, piglit_width/4, 
> piglit_height, color);
> +     pass = pass && piglit_probe_rect_rgb(piglit_width/4, 0, piglit_width/4, 
> piglit_height, texcoord);
> +     pass = pass && piglit_probe_rect_rgb(2*piglit_width/4, 0, 
> piglit_width/4, piglit_height, color);
> +     pass = pass && piglit_probe_rect_rgb(3*piglit_width/4, 0, 
> piglit_width/4, piglit_height, texcoord);
> +
> +     piglit_present_results();
> +
> +     check_gl_error(GL_NO_ERROR);
> +
> +     return pass ? PIGLIT_PASS : PIGLIT_FAIL;
> +}
> +
> +void
> +piglit_init(int argc, char **argv)
> +{
> +     piglit_require_extension("GL_ATI_fragment_shader");
> +
> +     /* create a default shader that does something different than 
> fixed-function */
> +     glBeginFragmentShaderATI();
> +     glPassTexCoordATI(GL_REG_1_ATI, GL_TEXTURE0_ARB, GL_SWIZZLE_STR_ATI);
> +     glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE,
> +                     GL_REG_1_ATI, GL_NONE, GL_NONE);
> +     glEndFragmentShaderATI();
> +
> +     check_gl_error(GL_NO_ERROR);
> +}
> diff --git a/tests/spec/ati_fragment_shader/render-fog.c 
> b/tests/spec/ati_fragment_shader/render-fog.c
> new file mode 100644
> index 000000000..a7b72c502
> --- /dev/null
> +++ b/tests/spec/ati_fragment_shader/render-fog.c
> @@ -0,0 +1,95 @@
> +/* TODO license header */
> +
> +/**
> + * Tests rendering with GL_ATI_fragment_shader: using fog.
> + */
> +
> +#include "piglit-util-gl.h"
> +
> +PIGLIT_GL_TEST_CONFIG_BEGIN
> +
> +     config.supports_gl_compat_version = 10;
> +     config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
> +
> +PIGLIT_GL_TEST_CONFIG_END
> +
> +static const float color1[] = {0.2, 0.3, 0.8};
> +static const float color2[] = {0.9, 0.8, 0.3};
> +
> +static float resultLin[] = {0.0, 0.0, 0.0};
> +static float resultExp[] = {0.0, 0.0, 0.0};
> +static float resultEx2[] = {0.0, 0.0, 0.0};
> +
> +static const float z = 0.8;
> +static const float dens = 0.4;
> +
> +#define check_gl_error(err) if (!piglit_check_gl_error(err)) 
> piglit_report_result(PIGLIT_FAIL)
> +
> +enum piglit_result
> +piglit_display(void)
> +{
> +     bool pass = true;
> +
> +     piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
> +
> +     glClearColor(1.0, 0.0, 0.0, 1.0);
> +     glClear(GL_COLOR_BUFFER_BIT);
> +
> +     glColor3fv(color2);
> +
> +     glFogfv(GL_FOG_COLOR, color1);
> +     glFogf(GL_FOG_DENSITY, dens);
> +     glFogf(GL_FOG_START, 0.0);
> +     glFogf(GL_FOG_END, 1.0);
> +     glHint(GL_FOG_HINT, GL_NICEST);
> +
> +     glEnable(GL_FRAGMENT_SHADER_ATI);
> +     glEnable(GL_FOG);
> +     glFogi(GL_FOG_MODE, GL_LINEAR);
> +     piglit_draw_rect_z(z, 0, 0, piglit_width/4, piglit_height);
> +     glFogi(GL_FOG_MODE, GL_EXP);
> +     piglit_draw_rect_z(z, piglit_width/4, 0, piglit_width/4, piglit_height);
> +     glFogi(GL_FOG_MODE, GL_EXP2);
> +     piglit_draw_rect_z(z, 2*piglit_width/4, 0, piglit_width/4, 
> piglit_height);
> +     glDisable(GL_FOG);
> +     piglit_draw_rect_z(z, 3*piglit_width/4, 0, piglit_width/4, 
> piglit_height);
> +     glDisable(GL_FRAGMENT_SHADER_ATI);
> +
> +     pass = pass && piglit_probe_rect_rgb(0, 0, piglit_width/4, 
> piglit_height, resultLin);
> +     pass = pass && piglit_probe_rect_rgb(piglit_width/4, 0, piglit_width/4, 
> piglit_height, resultExp);
> +     pass = pass && piglit_probe_rect_rgb(2*piglit_width/4, 0, 
> piglit_width/4, piglit_height, resultEx2);
> +     pass = pass && piglit_probe_rect_rgb(3*piglit_width/4, 0, 
> piglit_width/4, piglit_height, color2);
> +
> +     piglit_present_results();
> +
> +     check_gl_error(GL_NO_ERROR);
> +
> +     return pass ? PIGLIT_PASS : PIGLIT_FAIL;
> +}
> +
> +void
> +piglit_init(int argc, char **argv)
> +{
> +     unsigned u;
> +     float f;
> +
> +     piglit_require_extension("GL_ATI_fragment_shader");
> +
> +     glBeginFragmentShaderATI();
> +     glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE,
> +                     GL_PRIMARY_COLOR_ARB, GL_NONE, GL_NONE);
> +     glEndFragmentShaderATI();
> +
> +     /* compute the expected results */
> +
> +     for (u=0; u<3; u++) {
> +             f = (1.0-z)/(1.0-0.0);
> +             resultLin[u] = f*color2[u] + (1.0-f)*color1[u];
> +             f = exp(-dens*z);
> +             resultExp[u] = f*color2[u] + (1.0-f)*color1[u];
> +             f = exp(-pow(dens*z,2.0));
> +             resultEx2[u] = f*color2[u] + (1.0-f)*color1[u];
> +     }
> +
> +     check_gl_error(GL_NO_ERROR);
> +}
> diff --git a/tests/spec/ati_fragment_shader/render-notexture.c 
> b/tests/spec/ati_fragment_shader/render-notexture.c
> new file mode 100644
> index 000000000..2d9aefe09
> --- /dev/null
> +++ b/tests/spec/ati_fragment_shader/render-notexture.c
> @@ -0,0 +1,71 @@
> +/* TODO license header */
> +
> +/**
> + * Tests rendering with GL_ATI_fragment_shader: when no texture is bound
> + * - glPassTexCoordATI() should work as normal
> + * - glSampleMapATI() should return all zeros (technically this is undefined)

I don't think that would be undefined -- you'd have the default texture
object used, which would sample as zeroes.

Attachment: signature.asc
Description: PGP signature

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to