[PATCH] added point-sprite test.

View: New views
5 Messages — Rating Filter:   Alert me  

[PATCH] added point-sprite test.

by Ben Holmes :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

---
 tests/all.tests           |    1 +
 tests/bugs/CMakeLists.txt |    2 +
 tests/bugs/point-sprite.c |  193 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 196 insertions(+), 0 deletions(-)
 create mode 100644 tests/bugs/point-sprite.c

diff --git a/tests/all.tests b/tests/all.tests
index fcb9172..58e41f8 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -105,6 +105,7 @@ bugs['fdo14575'] = PlainExecTest([testBinDir + 'fdo14575', '-auto'])
 bugs['fdo20701'] = PlainExecTest([testBinDir + 'fdo20701', '-auto'])
 bugs['r300-readcache'] = PlainExecTest([testBinDir + 'r300-readcache'])
 bugs['tex1d-2dborder'] = PlainExecTest([testBinDir + 'tex1d-2dborder', '-auto'])
+bugs['point-sprite'] = PlainExecText([testBinDir + 'point-sprite', '-auto'])
 
 texturing = Group()
 texturing['copytexsubimage'] = PlainExecTest([testBinDir + 'copytexsubimage', '-auto'])
diff --git a/tests/bugs/CMakeLists.txt b/tests/bugs/CMakeLists.txt
index b64ff47..99f67a6 100644
--- a/tests/bugs/CMakeLists.txt
+++ b/tests/bugs/CMakeLists.txt
@@ -29,3 +29,5 @@ add_executable (fdo14575 fdo14575.c)
 add_executable (r300-readcache r300-readcache.c)
 add_executable (tex1d-2dborder tex1d-2dborder.c)
 add_executable (fdo20701 fdo20701.c)
+add_executable (point-sprite point-sprite.c)
+
diff --git a/tests/bugs/point-sprite.c b/tests/bugs/point-sprite.c
new file mode 100644
index 0000000..cf96ca3
--- /dev/null
+++ b/tests/bugs/point-sprite.c
@@ -0,0 +1,193 @@
+/*
+ * Copyright © 2009 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+// author: Ben Holmes
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <GL/glew.h>
+#if defined(__APPLE__)
+#include <GLUT/glut.h>
+#else
+#include <GL/glut.h>
+#endif
+
+#include "piglit-util.h"
+
+static GLboolean Automatic = GL_FALSE;
+static float maxSize = 0.0f;
+static GLuint tex;
+
+
+extern void *glutGetProcAddress(const GLubyte *);
+
+
+static void
+Init()
+{
+
+ glewInit();
+ glMatrixMode(GL_PROJECTION);
+        glPushMatrix();
+        glLoadIdentity();
+        glOrtho(0, 400, 0, 300, -1, 1);
+
+        glMatrixMode(GL_MODELVIEW);
+        glPushMatrix();
+        glLoadIdentity();
+
+        glEnable(GL_TEXTURE_2D);
+ glEnable(GL_POINT_SPRITE_ARB);
+
+        glGetFloatv(GL_POINT_SIZE_MAX, &maxSize);
+        if (maxSize>100)
+                maxSize = 100;
+        glPointSize(maxSize);
+
+ glClearColor(0.2,0.2,0.2,1);
+ glColor3f(1,1,1);
+
+}
+
+static void
+display()
+{
+
+ glClear(GL_COLOR_BUFFER_BIT);
+ glBindTexture(GL_TEXTURE_2D, tex);
+
+ //opengl version must be at least 2.0 to support
+        //modifying GL_POINT_SPRITE_COORD_ORIGIN
+ if (GLEW_VERSION_2_0)
+ glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, GL_UPPER_LEFT);
+
+ glBegin(GL_POINTS);
+ glVertex2f(175.0f,125.0f);
+ glEnd();
+
+ GLfloat black[3] = {0.0, 0.0, 0.0};
+ GLboolean pass = piglit_probe_pixel_rgb(200, 120, black);
+
+ glFinish();
+ glutSwapBuffers();
+
+
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ //opengl version must be at least 2.0 to support
+ //modifying GL_POINT_SPRITE_COORD_ORIGIN
+ if (GLEW_VERSION_2_0) {
+ glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, GL_LOWER_LEFT);
+
+ glBegin(GL_POINTS);
+ glVertex2f(175.0f,125.0f);
+ glEnd();
+
+ GLfloat white[3] = {1.0, 1.0, 1.0};
+        pass = pass && piglit_probe_pixel_rgb(200, 120, white);
+
+ glFinish();
+ glutSwapBuffers();
+ }
+
+ if(Automatic)
+ piglit_report_result(pass ? PIGLIT_SUCCESS : PIGLIT_FAILURE);
+
+}
+
+
+static void
+loadTex()
+{
+
+ int height = 2;
+ int width = 2;
+ int i, j;
+
+ GLfloat texData[width][height][4];
+ for (i = 0; i < width; i++) {
+ for (j = 0; j < height; j++) {
+ if ((i + j) & 1) {
+ /* white */
+ texData[i][j][0] = 1;
+ texData[i][j][1] = 1;
+ texData[i][j][2] = 1;
+ texData[i][j][3] = 1;
+ }
+ else {
+ /* black */
+ texData[i][j][0] = 0;
+ texData[i][j][1] = 0;
+ texData[i][j][2] = 0;
+ texData[i][j][3] = 0;
+ }
+ }
+ }
+
+
+ glGenTextures(1, &tex);
+ glBindTexture(GL_TEXTURE_2D, tex);
+ 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);
+        glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,
+ GL_FLOAT, texData);
+
+}
+
+static void Key(unsigned char key, int x, int y)
+{
+        (void) x;
+        (void) y;
+        switch (key) {
+        case 27:
+                exit(0);
+                break;
+        }
+        glutPostRedisplay();
+}
+
+
+int main(int argc, char **argv)
+{
+ glutInit(&argc, argv);
+ if(argc==2 && !strncmp(argv[1],"-auto",5))
+ Automatic = GL_TRUE;
+ glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
+ glutInitWindowSize(400, 300);
+ glutCreateWindow("point_sprite");
+ glutDisplayFunc(display);
+ glutKeyboardFunc(Key);
+
+ Init();
+
+ loadTex();
+
+ glutMainLoop();
+
+ return 0;
+}
--
1.6.3.1



------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@...
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Re: [PATCH] added point-sprite test.

by Ian Romanick-4 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Ben Holmes wrote:

> ---
>  tests/all.tests           |    1 +
>  tests/bugs/CMakeLists.txt |    2 +
>  tests/bugs/point-sprite.c |  193 +++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 196 insertions(+), 0 deletions(-)
>  create mode 100644 tests/bugs/point-sprite.c
>
> diff --git a/tests/all.tests b/tests/all.tests
> index fcb9172..58e41f8 100644
> --- a/tests/all.tests
> +++ b/tests/all.tests
> @@ -105,6 +105,7 @@ bugs['fdo14575'] = PlainExecTest([testBinDir + 'fdo14575', '-auto'])
>  bugs['fdo20701'] = PlainExecTest([testBinDir + 'fdo20701', '-auto'])
>  bugs['r300-readcache'] = PlainExecTest([testBinDir + 'r300-readcache'])
>  bugs['tex1d-2dborder'] = PlainExecTest([testBinDir + 'tex1d-2dborder', '-auto'])
> +bugs['point-sprite'] = PlainExecText([testBinDir + 'point-sprite', '-auto'])
>  
>  texturing = Group()
>  texturing['copytexsubimage'] = PlainExecTest([testBinDir + 'copytexsubimage', '-auto'])
> diff --git a/tests/bugs/CMakeLists.txt b/tests/bugs/CMakeLists.txt
> index b64ff47..99f67a6 100644
> --- a/tests/bugs/CMakeLists.txt
> +++ b/tests/bugs/CMakeLists.txt
> @@ -29,3 +29,5 @@ add_executable (fdo14575 fdo14575.c)
>  add_executable (r300-readcache r300-readcache.c)
>  add_executable (tex1d-2dborder tex1d-2dborder.c)
>  add_executable (fdo20701 fdo20701.c)
> +add_executable (point-sprite point-sprite.c)
> +
> diff --git a/tests/bugs/point-sprite.c b/tests/bugs/point-sprite.c
> new file mode 100644
> index 0000000..cf96ca3
> --- /dev/null
> +++ b/tests/bugs/point-sprite.c
> @@ -0,0 +1,193 @@
> +/*
> + * Copyright © 2009 Intel Corporation
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> + * DEALINGS IN THE SOFTWARE.
> + */
> +
> +// author: Ben Holmes

Usually there should be some description of what the test is testing and
how it is doing it.  tests/bugs/fdo20701.c is a good example.  If
nothing else, this is the place to mention the bug that the test reproduces.

> +
> +
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <string.h>
> +#include <GL/glew.h>
> +#if defined(__APPLE__)
> +#include <GLUT/glut.h>
> +#else
> +#include <GL/glut.h>
> +#endif
> +
> +#include "piglit-util.h"
> +
> +static GLboolean Automatic = GL_FALSE;
> +static float maxSize = 0.0f;
> +static GLuint tex;
> +
> +
> +extern void *glutGetProcAddress(const GLubyte *);

Since you use GLEW and there are no uses of glutGetProcAddress, this
prototype should go away.

> +
> +
> +static void
> +Init()
> +{
> +
> + glewInit();

This is the place to test for required extensions.  It looks like this
test needs GL_ARB_point_sprite or OpenGL version 1.4.

> + glMatrixMode(GL_PROJECTION);
> +        glPushMatrix();
> +        glLoadIdentity();
> +        glOrtho(0, 400, 0, 300, -1, 1);
> +
> +        glMatrixMode(GL_MODELVIEW);
> +        glPushMatrix();
> +        glLoadIdentity();
> +
> +        glEnable(GL_TEXTURE_2D);
> + glEnable(GL_POINT_SPRITE_ARB);
> +
> +        glGetFloatv(GL_POINT_SIZE_MAX, &maxSize);
> +        if (maxSize>100)
> +                maxSize = 100;
> +        glPointSize(maxSize);
> +
> + glClearColor(0.2,0.2,0.2,1);
> + glColor3f(1,1,1);
> +
> +}
> +
> +static void
> +display()
> +{
> +
> + glClear(GL_COLOR_BUFFER_BIT);
> + glBindTexture(GL_TEXTURE_2D, tex);
> +
> + //opengl version must be at least 2.0 to support
> +        //modifying GL_POINT_SPRITE_COORD_ORIGIN

Should probably just use C-style /* */ comments.

> + if (GLEW_VERSION_2_0)
> + glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, GL_UPPER_LEFT);
> +
> + glBegin(GL_POINTS);
> + glVertex2f(175.0f,125.0f);
> + glEnd();
> +
> + GLfloat black[3] = {0.0, 0.0, 0.0};
> + GLboolean pass = piglit_probe_pixel_rgb(200, 120, black);

I'll let someone else comment here to be sure.  I believe that we're not
counting on C99 (or C++) in piglit, so variable declarations cannot be
mixed with code.  Do we care?

> +
> + glFinish();
> + glutSwapBuffers();
> +
> +

Rather than swap and clear between subtests, it is better to just
display both at once.  Otherwise a person won't be able to tell that the
first test failed in the non '-auto' case.

> + glClear(GL_COLOR_BUFFER_BIT);
> +
> + //opengl version must be at least 2.0 to support
> + //modifying GL_POINT_SPRITE_COORD_ORIGIN
> + if (GLEW_VERSION_2_0) {
> + glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, GL_LOWER_LEFT);
> +
> + glBegin(GL_POINTS);
> + glVertex2f(175.0f,125.0f);
> + glEnd();
> +
> + GLfloat white[3] = {1.0, 1.0, 1.0};
> +        pass = pass && piglit_probe_pixel_rgb(200, 120, white);
> +
> + glFinish();
> + glutSwapBuffers();
> + }
> +
> + if(Automatic)
> + piglit_report_result(pass ? PIGLIT_SUCCESS : PIGLIT_FAILURE);
> +
> +}
> +
> +
> +static void
> +loadTex()
> +{
> +
> + int height = 2;
> + int width = 2;
> + int i, j;
> +
> + GLfloat texData[width][height][4];
> + for (i = 0; i < width; i++) {
> + for (j = 0; j < height; j++) {
> + if ((i + j) & 1) {
> + /* white */
> + texData[i][j][0] = 1;
> + texData[i][j][1] = 1;
> + texData[i][j][2] = 1;
> + texData[i][j][3] = 1;
> + }
> + else {
> + /* black */
> + texData[i][j][0] = 0;
> + texData[i][j][1] = 0;
> + texData[i][j][2] = 0;
> + texData[i][j][3] = 0;
> + }
> + }
> + }
> +
> +
> + glGenTextures(1, &tex);
> + glBindTexture(GL_TEXTURE_2D, tex);
> + 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);
> +        glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);
> + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,
> + GL_FLOAT, texData);
> +
> +}
> +
> +static void Key(unsigned char key, int x, int y)
> +{
> +        (void) x;
> +        (void) y;
> +        switch (key) {
> +        case 27:
> +                exit(0);
> +                break;
> +        }
> +        glutPostRedisplay();
> +}
> +
> +
> +int main(int argc, char **argv)
> +{
> + glutInit(&argc, argv);
> + if(argc==2 && !strncmp(argv[1],"-auto",5))
> + Automatic = GL_TRUE;
> + glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
> + glutInitWindowSize(400, 300);
> + glutCreateWindow("point_sprite");
> + glutDisplayFunc(display);
> + glutKeyboardFunc(Key);
> +
> + Init();
> +
> + loadTex();
> +
> + glutMainLoop();
> +
> + return 0;
> +}

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkpWfNYACgkQX1gOwKyEAw8nmQCglpuaC/x0TJnlcn2qA2KpJZlV
OxYAoJ6JRbDxALClPAiMKueCGcHTvJj/
=IE+5
-----END PGP SIGNATURE-----

------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@...
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Re: [PATCH] added point-sprite test.

by Nicolai Hähnle :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Am Friday 10 July 2009 01:27:22 schrieb Ian Romanick:

> Ben Holmes wrote:
> > + if (GLEW_VERSION_2_0)
> > + glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, GL_UPPER_LEFT);
> > +
> > + glBegin(GL_POINTS);
> > + glVertex2f(175.0f,125.0f);
> > + glEnd();
> > +
> > + GLfloat black[3] = {0.0, 0.0, 0.0};
> > + GLboolean pass = piglit_probe_pixel_rgb(200, 120, black);
>
> I'll let someone else comment here to be sure.  I believe that we're not
> counting on C99 (or C++) in piglit, so variable declarations cannot be
> mixed with code.  Do we care?

Actually, glean is written in C++, so piglit has always depended on C++. The
fact that I wrote all the initial additional tests in plain C is just a
historical accident caused by the fact that most of them were converted Mesa
progs, and those are all written in plain C. I certainly wasn't trying to
avoid C++.

I don't think there's ever been a discussion on C99. My personal opinion is to
go ahead and just use its features. It's been 10 years after all and should be
well supported on all interesting platforms by now.

cu,
Nicolai

------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@...
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Re: [PATCH] added point-sprite test.

by tom fogal-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

 writes:
> Am Friday 10 July 2009 01:27:22 schrieb Ian Romanick:
> > Ben Holmes wrote:
> > I'll let someone else comment here to be sure.  I believe that we're not
> > counting on C99 (or C++) in piglit, so variable declarations cannot be
> > mixed with code.  Do we care?
[snip]
> I don't think there's ever been a discussion on C99. My personal
> opinion is to go ahead and just use its features. It's been 10 years
> after all and should b e well supported on all interesting platforms
> by now.

MS' compiler still lacks some basic c99 support.  I just tested with cl
15.00.30729.01 (i.e. VS 2008) && couldn't mix declarations w/ code.

Maybe MS support isn't a big deal for test code, but just FYI.

-tom

------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@...
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Re: [PATCH] added point-sprite test.

by Nicolai Hähnle :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Am Sunday 12 July 2009 19:26:23 schrieb tom fogal:

>  writes:
> > Am Friday 10 July 2009 01:27:22 schrieb Ian Romanick:
> > > Ben Holmes wrote:
> > > I'll let someone else comment here to be sure.  I believe that we're
> > > not counting on C99 (or C++) in piglit, so variable declarations cannot
> > > be mixed with code.  Do we care?
>
> [snip]
>
> > I don't think there's ever been a discussion on C99. My personal
> > opinion is to go ahead and just use its features. It's been 10 years
> > after all and should b e well supported on all interesting platforms
> > by now.
>
> MS' compiler still lacks some basic c99 support.  I just tested with cl
> 15.00.30729.01 (i.e. VS 2008) && couldn't mix declarations w/ code.

In that case, we should avoid these features. C++ is okay, though.

cu,
Nicolai

------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@...
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev