From: Nicolai Hähnle <[email protected]>

---
 tests/shaders/shader_runner.c | 17 +++++++++++++++++
 tests/util/piglit-util-gl.c   | 35 +++++++++++++++++++++++++++++++++++
 tests/util/piglit-util-gl.h   |  1 +
 3 files changed, 53 insertions(+)

diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
index 8d2a9bd..206258c 100644
--- a/tests/shaders/shader_runner.c
+++ b/tests/shaders/shader_runner.c
@@ -3102,6 +3102,23 @@ piglit_display(void)
                                            GL_UNSIGNED_NORMALIZED);
                        if (!piglit_is_core_profile)
                                glEnable(GL_TEXTURE_2D);
+               } else if (sscanf(line, "texture integer %d ( %d", &tex, &w) == 
2) {
+                       GLenum int_fmt;
+                       int b, a;
+                       int num_scanned =
+                               sscanf(line,
+                                      "texture integer %d ( %d , %d ) ( %d, %d 
) %31s",
+                                      &tex, &w, &h, &b, &a, s);
+                       if (num_scanned < 6) {
+                               fprintf(stderr,
+                                       "invalid texture integer command!\n");
+                               piglit_report_result(PIGLIT_FAIL);
+                       }
+
+                       int_fmt = piglit_get_gl_enum_from_name(s);
+
+                       glActiveTexture(GL_TEXTURE0 + tex);
+                       piglit_integer_texture(int_fmt, w, h, b, a);
                } else if (sscanf(line, "texture miptree %d", &tex) == 1) {
                        glActiveTexture(GL_TEXTURE0 + tex);
                        piglit_miptree_texture();
diff --git a/tests/util/piglit-util-gl.c b/tests/util/piglit-util-gl.c
index dbdfb13..e8a47c5 100644
--- a/tests/util/piglit-util-gl.c
+++ b/tests/util/piglit-util-gl.c
@@ -2494,6 +2494,41 @@ piglit_rgbw_texture(GLenum internalFormat, int w, int h, 
GLboolean mip,
 }
 
 /**
+ * Generates a texture with the given integer internal format.
+ * Pixel data will be filled as R = x, G = y, B = b, A = a.
+ */
+GLuint piglit_integer_texture(GLenum internalFormat, int w, int h, int b, int 
a)
+{
+       int *img = malloc(w * h * 4 * sizeof(unsigned));
+       int *p;
+       int x, y;
+       GLuint tex;
+
+       for (y = 0, p = img; y < h; ++y) {
+               for (x = 0; x < w; ++x, p += 4) {
+                       p[0] = x;
+                       p[1] = y;
+                       p[2] = b;
+                       p[3] = a;
+               }
+       }
+
+       glGenTextures(1, &tex);
+       glBindTexture(GL_TEXTURE_2D, tex);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
+                       GL_NEAREST);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
+                       GL_NEAREST);
+
+       glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, w, h, 0,
+                    GL_RGBA_INTEGER, GL_INT, img);
+
+       free(img);
+}
+
+/**
  * Create a depth texture.  The depth texture will be a gradient which varies
  * from 0.0 at the left side to 1.0 at the right side.  For a 2D array texture,
  * all the texture layers will have the same gradient.
diff --git a/tests/util/piglit-util-gl.h b/tests/util/piglit-util-gl.h
index 00c106b..956804b 100644
--- a/tests/util/piglit-util-gl.h
+++ b/tests/util/piglit-util-gl.h
@@ -262,6 +262,7 @@ GLfloat *piglit_rgbw_image(GLenum internalFormat, int w, 
int h,
 GLubyte *piglit_rgbw_image_ubyte(int w, int h, GLboolean alpha);
 GLuint piglit_rgbw_texture(GLenum internalFormat, int w, int h, GLboolean mip,
                    GLboolean alpha, GLenum basetype);
+GLuint piglit_integer_texture(GLenum internalFormat, int w, int h, int b, int 
a);
 GLuint piglit_depth_texture(GLenum target, GLenum format, int w, int h, int d, 
GLboolean mip);
 GLuint piglit_array_texture(GLenum target, GLenum format, int w, int h, int d, 
GLboolean mip);
 GLuint piglit_multisample_texture(GLenum target, GLenum tex,
-- 
2.5.0

_______________________________________________
Piglit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to