[Piglit] [PATCH] Add test case to verify Cube Shadow support in fixed function pipeline
Anuj Phogat
anuj.phogat at gmail.com
Wed Dec 14 11:19:09 PST 2011
On Tue 13 Dec 2011 11:23:07 AM PST, Eric Anholt wrote:
> On Tue, 6 Dec 2011 16:54:25 -0800, Anuj Phogat <anuj.phogat at gmail.com> wrote:
>> Adding a test case to verify Cube Shadow support in fixed function pipeline.
>
>> diff --git a/tests/all.tests b/tests/all.tests
>> index 68a379c..13e97a7 100644
>> --- a/tests/all.tests
>> +++ b/tests/all.tests
>> @@ -654,6 +654,7 @@ add_plain_test(texturing, 'rgtc-teximage-01')
>> add_plain_test(texturing, 'rgtc-teximage-02')
>> add_plain_test(texturing, 's3tc-teximage')
>> add_plain_test(texturing, 's3tc-texsubimage')
>> +add_plain_test(texturing, 'sampler-cube-shadow-ff')
>
> It looks like this could be a concurrent test.
>
>> +/* These texture coordinates should have 1 or -1 in the major axis ('r' coordinate) selecting
>> + * the face, a nearly-1-or-negative-1 value in the other two coordinates (s,t) and a reference
>> + * value ('q' coordinate) used for shadow comparisons.
>> + */
>> +static GLfloat cube_shadow_texcoords[6][4][4] = {
>> + { /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
>> + {1.0, 0.99, 0.99, 0.00},
>> + {1.0, 0.99, -0.99, -0.50},
>> + {1.0, -0.99, -0.99, 0.00},
>> + {1.0, -0.99, 0.99, 0.50},
>> + },
>
> Please use tabs to indent, instead of 3 spaces. (3 spaces is just Mesa)
>
>> +static void
>> +loadTex(void)
>> +{
>
>> + /*Set the cubemap depth values for each face*/
>
> /* Spaces between comment markers and comment text */
>
>> + /*Set a different depth value to each face of cubemap*/
>> + glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, texDepthDataPosX);
>> + glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, texDepthDataNegX);
>> + glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, texDepthDataPosY);
>> + glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, texDepthDataNegY);
>> + glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, texDepthDataPosZ);
>> + glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, texDepthDataNegZ);
>
> Wrap at 80 columns.
>
>> +piglit_init(int argc, char **argv)
>> +{
>> + /*GL version must be 3.0*/
>> + piglit_require_gl_version(30);
>> + glEnable(GL_TEXTURE_CUBE_MAP);
>> + loadTex();
>> + glMatrixMode(GL_PROJECTION);
>> + glPushMatrix();
>> + glLoadIdentity();
>> + glOrtho(0, piglit_width, 0, piglit_height, -1, 1);
>> + glMatrixMode(GL_MODELVIEW);
>> + glPushMatrix();
>> + glLoadIdentity();
>> + glClearColor(0.1, 0.1, 0.1, 1.0);
>> + glVertexPointer(3, GL_FLOAT, 0, vertices);
>> + glEnableClientState(GL_VERTEX_ARRAY);
>> + glEnableClientState(GL_TEXTURE_COORD_ARRAY);
>> +}
>> +
>> +enum piglit_result
>> +piglit_display(void)
>> +{
>> + GLboolean pass = GL_TRUE;
>> + GLfloat white[3] = {1.0, 0.0, 0.0};
>> + GLfloat black[3] = {0.0, 0.0, 0.0};
>> +
>> + glClear(GL_COLOR_BUFFER_BIT);
>> + glMatrixMode(GL_MODELVIEW);
>> +
>> + /*Apply each face of cubemap as texture to a polygon*/
>> + glTexCoordPointer(4, GL_FLOAT, 0, cube_shadow_texcoords[0]);
>> + glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_INT, indices);
>> +
>> + glPushMatrix();
>> + glTranslatef(75.0, 0.0, 0.0);
>> + glTexCoordPointer(4, GL_FLOAT, 0, cube_shadow_texcoords[1]);
>> + glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_INT, indices);
>> +
>> + glTranslatef(75.0, 0.0, 0.0);
>> + glTexCoordPointer(4, GL_FLOAT, 0, cube_shadow_texcoords[2]);
>> + glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_INT, indices);
>> + glPopMatrix();
>> +
>> + glPushMatrix();
>> + glTranslatef(0.0, 75.0, 0.0);
>> + glTexCoordPointer(4, GL_FLOAT, 0, cube_shadow_texcoords[3]);
>> + glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_INT, indices);
>> +
>> + glTranslatef(75.0, 0.0, 0.0);
>> + glTexCoordPointer(4, GL_FLOAT, 0, cube_shadow_texcoords[4]);
>> + glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_INT, indices);
>> +
>> + glTranslatef(75.0, 0.0, 0.0);
>> + glTexCoordPointer(4, GL_FLOAT, 0, cube_shadow_texcoords[5]);
>> + glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_INT, indices);
>> + glPopMatrix();
>
> I'd prefer to replace the matrix manipulations with explicit coordinates
> and piglit_draw_rect() (since piglit_draw_rect() doesn't tweak the
> texture coordinate pointer, I think that would work).
>
>> + /*Test the pixel color of polygons against the expected output*/
>> + pass = piglit_probe_pixel_rgb(110, 135, white);
>> + pass = pass && piglit_probe_pixel_rgb(140, 165, black)
>> + ;
>> + pass = pass && piglit_probe_pixel_rgb(185, 135, black);
>> + pass = pass && piglit_probe_pixel_rgb(215, 165, white);
>> +
>> + pass = pass && piglit_probe_pixel_rgb(260, 165, white);
>> + pass = pass && piglit_probe_pixel_rgb(290, 135, black);
>> +
>> + pass = pass && piglit_probe_pixel_rgb(110, 240, black);
>> + pass = pass && piglit_probe_pixel_rgb(140, 210, white);
>> +
>> + pass = pass && piglit_probe_pixel_rgb(185, 210, black);
>> + pass = pass && piglit_probe_pixel_rgb(215, 240, black);
>> +
>> + pass = pass && piglit_probe_pixel_rgb(260, 210, white);
>> + pass = pass && piglit_probe_pixel_rgb(290, 240, white);
>
> I think some of these are solid colors -- could they be converted to
> piglit_probe_rect_rgb()?
Thanks for the review comments. The gl-3.0 spec doesn't specify any
behaviour for fixed
function cube shadows. Out put of this testcase on nvidia and AMD
differs a lot. AMD
draws just black polygons. So the output will stay undefined. nothing
more need to be
done on this.
Above review comments will be incorporated in sample-cube-shadow.c
- Anuj
More information about the Piglit
mailing list