[Piglit] [PATCH 08/14] arb_direct_state_access: Port copytexturesubimage to core profile
Ian Romanick
idr at freedesktop.org
Wed Sep 9 13:21:01 PDT 2015
From: Ian Romanick <ian.d.romanick at intel.com>
The "supports_gl_compat_version = 10" was rubbish anyway because DSA
requires OpenGL 2.0 and GL_CLAMP_TO_EDGE requires OpenGL 1.2.
Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
---
.../spec/arb_direct_state_access/CMakeLists.gl.txt | 2 +-
.../arb_direct_state_access/copytexturesubimage.c | 119 +++++++++++++++------
2 files changed, 86 insertions(+), 35 deletions(-)
diff --git a/tests/spec/arb_direct_state_access/CMakeLists.gl.txt b/tests/spec/arb_direct_state_access/CMakeLists.gl.txt
index df77fa1..8ed5417 100644
--- a/tests/spec/arb_direct_state_access/CMakeLists.gl.txt
+++ b/tests/spec/arb_direct_state_access/CMakeLists.gl.txt
@@ -22,7 +22,7 @@ piglit_add_executable (arb_direct_state_access-create-textures create-textures.c
piglit_add_executable (arb_direct_state_access-texture-storage texture-storage.c dsa-utils.c)
piglit_add_executable (arb_direct_state_access-texunits texunits.c)
piglit_add_executable (arb_direct_state_access-texture-params texture-params.c)
-piglit_add_executable (arb_direct_state_access-copytexturesubimage copytexturesubimage.c)
+piglit_add_executable (arb_direct_state_access-copytexturesubimage copytexturesubimage.c dsa-utils.c)
piglit_add_executable (arb_direct_state_access-texture-errors texture-errors.c)
piglit_add_executable (arb_direct_state_access-get-textures get-textures.c)
piglit_add_executable (arb_direct_state_access-gettextureimage-formats gettextureimage-formats.c)
diff --git a/tests/spec/arb_direct_state_access/copytexturesubimage.c b/tests/spec/arb_direct_state_access/copytexturesubimage.c
index d8a8b0d..096c266 100644
--- a/tests/spec/arb_direct_state_access/copytexturesubimage.c
+++ b/tests/spec/arb_direct_state_access/copytexturesubimage.c
@@ -22,10 +22,12 @@
*/
#include "piglit-util-gl.h"
+#include "dsa-utils.h"
PIGLIT_GL_TEST_CONFIG_BEGIN
- config.supports_gl_compat_version = 10;
+ config.supports_gl_core_version = 31;
+ config.supports_gl_compat_version = 20;
config.window_width = 200;
config.window_height = 200;
@@ -33,11 +35,39 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
PIGLIT_GL_TEST_CONFIG_END
-/** Should GL_TEXTURE_RECTANGLE_ARB be tested? */
-int have_rect = 0;
-
-/** Should non-power-of-two textures be tested? */
-int have_NPOT = 0;
+static const char vs_template[] =
+ "#version %s\n"
+ "#if __VERSION__ < 130\n"
+ "attribute vec4 piglit_vertex;\n"
+ "#else\n"
+ "in vec4 piglit_vertex;\n"
+ "#endif\n"
+ "uniform mat3 xform;\n"
+ "\n"
+ "void main()\n"
+ "{\n"
+ " gl_Position = vec4((xform * piglit_vertex.xyw).xy, 0, 1);\n"
+ "}\n"
+ ;
+
+static const char fs_template[] =
+ "#version %s\n"
+ "#if __VERSION__ < 130\n"
+ "#define piglit_color gl_FragColor\n"
+ "#else\n"
+ "out vec4 piglit_color;\n"
+ "#endif\n"
+ "uniform vec3 color;\n"
+ "\n"
+ "void main()\n"
+ "{\n"
+ " piglit_color = vec4(color, 1);\n"
+ "}\n"
+ ;
+
+static GLuint builder_prog = 0;
+static GLuint texture2D_prog = 0;
+static GLuint texture_rect_prog = 0;
static bool inrect(int x, int y, int x1, int y1, int x2, int y2)
{
@@ -106,6 +136,8 @@ do_row(int srcy, int srcw, int srch, GLenum target)
int remain_height;
GLuint texname;
bool pass = true;
+ GLint color_loc;
+ GLuint prog;
/* Rectangle textures use coordinates on the range [0..w]x[0..h],
* where as all other textures use coordinates on the range
@@ -118,11 +150,15 @@ do_row(int srcy, int srcw, int srch, GLenum target)
/* Draw the object we're going to copy */
- glColor3f(1.0, 0.0, 0.0);
+ glUseProgram(builder_prog);
+ color_loc = glGetUniformLocation(builder_prog, "color");
+ dsa_set_xform(builder_prog, piglit_width, piglit_height);
+
+ glUniform3f(color_loc, 1.0, 0.0, 0.0);
piglit_draw_rect(srcx, srcy, srcw, srch);
- glColor3f(0.0, 1.0, 0.0);
+ glUniform3f(color_loc, 0.0, 1.0, 0.0);
piglit_draw_rect(srcx + 5, srcy + 5, srcw - 10, srch/2 - 5);
- glColor3f(0.0, 0.0, 1.0);
+ glUniform3f(color_loc, 0.0, 0.0, 1.0);
piglit_draw_rect(srcx + 5, srcy + srch/2, srcw - 10, srch - 5 - srch/2);
/* Create a texture image and copy it in */
@@ -137,9 +173,6 @@ do_row(int srcy, int srcw, int srch, GLenum target)
glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
- glEnable(target);
-
glTexImage2D(target, 0, GL_RGBA8, srcw, srch, 0,
GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glCopyTextureSubImage2D(texname, 0,
@@ -148,6 +181,21 @@ do_row(int srcy, int srcw, int srch, GLenum target)
srcw, srch);
/* Draw the texture image out */
+ switch (target) {
+ case GL_TEXTURE_2D:
+ prog = texture2D_prog;
+ break;
+ case GL_TEXTURE_RECTANGLE_ARB:
+ prog = texture_rect_prog;
+ break;
+ default:
+ fprintf(stderr, "Invalid texture target.\n");
+ return false;
+ }
+
+ glUseProgram(prog);
+ dsa_set_xform(prog, piglit_width, piglit_height);
+
piglit_draw_rect_tex(dstx, dsty, srcw, srch,
0.0, 0.0, tex_s_max, tex_t_max);
@@ -177,7 +225,6 @@ do_row(int srcy, int srcw, int srch, GLenum target)
piglit_draw_rect_tex(dstx2, dsty2, srcw, srch,
0.0, 0.0, tex_s_max, tex_t_max);
- glDisable(target);
glDeleteTextures(1, &texname);
printf("Checking %s, rect 1:\n", piglit_get_gl_enum_name(target));
@@ -207,17 +254,15 @@ piglit_display(void)
/* Test non-power-of-two 2D textures.
*/
- if (have_NPOT) {
- pass = do_row(srcy, 31, 13, GL_TEXTURE_2D) && pass;
- srcy += 15;
- pass = do_row(srcy, 11, 34, GL_TEXTURE_2D) && pass;
- srcy += 35 + 5;
- }
+ pass = do_row(srcy, 31, 13, GL_TEXTURE_2D) && pass;
+ srcy += 15;
+ pass = do_row(srcy, 11, 34, GL_TEXTURE_2D) && pass;
+ srcy += 35 + 5;
/* Test non-power-of-two 2D textures.
*/
- if (have_rect) {
+ if (texture_rect_prog != 0) {
pass = do_row(srcy, 31, 13, GL_TEXTURE_RECTANGLE_ARB) && pass;
srcy += 14;
pass = do_row(srcy, 11, 34, GL_TEXTURE_RECTANGLE_ARB) && pass;
@@ -232,25 +277,31 @@ piglit_display(void)
void
piglit_init(int argc, char **argv)
{
+ char *vs_source;
+ char *fs_source;
+ bool es;
+ int major;
+ int minor;
+ const char * ver;
+
+
piglit_require_extension("GL_ARB_direct_state_access");
- glDisable(GL_DITHER);
+ glClearColor(0.5, 0.5, 0.5, 1.0);
- glMatrixMode( GL_PROJECTION );
- glPushMatrix();
- glLoadIdentity();
- glOrtho( 0, piglit_width, 0, piglit_height, -1, 1 );
+ piglit_get_glsl_version(&es, &major, &minor);
+ ver = ((major * 100 + minor) >= 140) ? "140" : "110";
- glMatrixMode( GL_MODELVIEW );
- glPushMatrix();
- glLoadIdentity();
+ asprintf(&vs_source, vs_template, ver);
+ asprintf(&fs_source, fs_template, ver);
- glClearColor(0.5, 0.5, 0.5, 1.0);
+ builder_prog = piglit_build_simple_program(vs_source, fs_source);
+
+ free(vs_source);
+ free(fs_source);
- have_NPOT = (piglit_get_gl_version() >= 20
- || (piglit_is_extension_supported("GL_ARB_texture_non_power_of_two")));
+ texture2D_prog = dsa_create_program(GL_TEXTURE_2D);
- have_rect = ((piglit_is_extension_supported("GL_ARB_texture_rectangle"))
- || (piglit_is_extension_supported("GL_EXT_texture_rectangle"))
- || (piglit_is_extension_supported("GL_NV_texture_rectangle")));
+ if (piglit_is_extension_supported("GL_ARB_texture_rectangle"))
+ texture_rect_prog = dsa_create_program(GL_TEXTURE_RECTANGLE_ARB);
}
--
2.1.0
More information about the Piglit
mailing list