summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>2019-05-20 13:39:07 +0200
committerMarek Olšák <marek.olsak@amd.com>2019-06-03 15:12:50 -0400
commit2ed536693bdcae150d86b999835100a134f7a706 (patch)
treef97ed9b9299f25fea486c6a5e56b0d5ca6606127
parent6f7912e6434869920586a0439496635ac594fa20 (diff)
ext_direct_state_access: verify possible failures when using GL_COMPILE
-rw-r--r--tests/spec/ext_direct_state_access/compressedmultiteximage.c13
-rw-r--r--tests/spec/ext_direct_state_access/compressedtextureimage.c12
-rw-r--r--tests/spec/ext_direct_state_access/multi-texture.c99
-rw-r--r--tests/spec/ext_direct_state_access/textures.c41
4 files changed, 138 insertions, 27 deletions
diff --git a/tests/spec/ext_direct_state_access/compressedmultiteximage.c b/tests/spec/ext_direct_state_access/compressedmultiteximage.c
index 3467f60dc..4f6e432c5 100644
--- a/tests/spec/ext_direct_state_access/compressedmultiteximage.c
+++ b/tests/spec/ext_direct_state_access/compressedmultiteximage.c
@@ -305,15 +305,18 @@ test_MultiCompressedTexImageNDEXT(void* data)
if (use_display_list != GL_NONE)
glEndList(list);
+ if (use_display_list == GL_COMPILE) {
+ int width;
+ glGetTextureLevelParameterivEXT(tex, target, 0,
+ GL_TEXTURE_WIDTH, &width);
+ pass = width == 0 && pass;
+ glCallList(list);
+ }
+
/* Test GetCompressedMultiTexImageEXT */
compressed = (float*) malloc(compressed_size);
glGetCompressedMultiTexImageEXT(texunits[0], target, 0, compressed);
- if (use_display_list == GL_COMPILE) {
- piglit_check_gl_error(GL_INVALID_OPERATION);
- glCallList(list);
- glGetCompressedMultiTexImageEXT(texunits[0], target, 0, compressed);
- }
pass = memcmp(compressed, expected_compressed, compressed_size) == 0 && pass;
free(compressed);
diff --git a/tests/spec/ext_direct_state_access/compressedtextureimage.c b/tests/spec/ext_direct_state_access/compressedtextureimage.c
index 9af98dcb4..13d616c2d 100644
--- a/tests/spec/ext_direct_state_access/compressedtextureimage.c
+++ b/tests/spec/ext_direct_state_access/compressedtextureimage.c
@@ -266,15 +266,17 @@ test_CompressedTextureImageNDEXT(void* data)
if (use_display_list != GL_NONE)
glEndList(list);
+ if (use_display_list == GL_COMPILE) {
+ int width;
+ glGetTextureLevelParameterivEXT(tex, target, 0,
+ GL_TEXTURE_WIDTH, &width);
+ pass = width == 0 && pass;
+ glCallList(list);
+ }
/* Test glGetCompressedTextureImageEXT */
compressed = (float*) malloc(compressed_size);
glGetCompressedTextureImageEXT(tex, target, 0, compressed);
- if (use_display_list == GL_COMPILE) {
- piglit_check_gl_error(GL_INVALID_OPERATION);
- glCallList(list);
- glGetCompressedTextureImageEXT(tex, target, 0, compressed);
- }
pass = memcmp(compressed, expected_compressed, compressed_size) == 0 && pass;
free(compressed);
diff --git a/tests/spec/ext_direct_state_access/multi-texture.c b/tests/spec/ext_direct_state_access/multi-texture.c
index 6d5a1fc0b..d689a0bec 100644
--- a/tests/spec/ext_direct_state_access/multi-texture.c
+++ b/tests/spec/ext_direct_state_access/multi-texture.c
@@ -199,6 +199,7 @@ test_MultiTexEnviEXT(void* data)
texture_filter_control_test,
point_sprite_test
};
+ bool pass = true;
/* This test applies different values to the same pname to 4 texunit:
* - texunit#0 will use glTexEnvi(...)
@@ -220,12 +221,17 @@ test_MultiTexEnviEXT(void* data)
const int value_count = tested[i][j].value_count;
/* Iterate on possible values */
for (k = 0; k < tested[i][j].value_count; k++) {
+ int original_values[4];
const int values[] = {
tested[i][j].values[k],
tested[i][j].values[(k + 1) % value_count],
tested[i][j].values[(k + 2) % value_count],
tested[i][j].values[(k + 3) % value_count]
};
+ for (l = 0; l < 4; l++) {
+ glGetMultiTexEnvivEXT(texunits[l], target,
+ pname, &original_values[l]);
+ }
if (use_display_list != GL_NONE)
glNewList(list, use_display_list);
@@ -253,8 +259,15 @@ test_MultiTexEnviEXT(void* data)
if (use_display_list != GL_NONE)
glEndList(list);
- if (use_display_list == GL_COMPILE)
+ if (use_display_list == GL_COMPILE) {
+ for (l = 0; l < 4; l++) {
+ int v;
+ glGetMultiTexEnvivEXT(texunits[l], target,
+ pname, &v);
+ pass = v == original_values[l] && pass;
+ }
glCallList(list);
+ }
if (!piglit_check_gl_error(GL_NO_ERROR)) {
return PIGLIT_FAIL;
@@ -280,18 +293,24 @@ test_MultiTexEnviEXT(void* data)
}
}
- return piglit_check_gl_error(GL_NO_ERROR) ? PIGLIT_PASS : PIGLIT_FAIL;
+ return piglit_check_gl_error(GL_NO_ERROR) && pass ? PIGLIT_PASS : PIGLIT_FAIL;
}
static enum piglit_result
test_MultiTexEnvfvEXT(void* data)
{
static const float color[] = { 0.3, 0.7, 0.1, 0.0 };
+ float original_color[4];
float got[4];
const GLenum* texunits = n_texunits(2);
glActiveTexture(texunits[0]);
+ glGetMultiTexEnvfvEXT(texunits[1],
+ GL_TEXTURE_ENV,
+ GL_TEXTURE_ENV_COLOR,
+ original_color);
+
if (use_display_list != GL_NONE)
glNewList(list, use_display_list);
@@ -303,14 +322,22 @@ test_MultiTexEnvfvEXT(void* data)
if (use_display_list != GL_NONE)
glEndList(list);
- if (use_display_list == GL_COMPILE)
- glCallList(list);
-
glGetMultiTexEnvfvEXT(texunits[1],
GL_TEXTURE_ENV,
GL_TEXTURE_ENV_COLOR,
got);
+ if (use_display_list == GL_COMPILE) {
+ if (memcmp(original_color, got, sizeof(got)) != 0) {
+ return PIGLIT_FAIL;
+ }
+ glCallList(list);
+ glGetMultiTexEnvfvEXT(texunits[1],
+ GL_TEXTURE_ENV,
+ GL_TEXTURE_ENV_COLOR,
+ got);
+ }
+
if (!piglit_check_gl_error(GL_NO_ERROR) || memcmp(color, got, sizeof(got)) != 0) {
return PIGLIT_FAIL;
}
@@ -558,7 +585,7 @@ test_CopyMultiTexImageNDEXT(void* data)
glGetMultiTexImageEXT(texunit, target, 0, GL_RGBA, GL_FLOAT, got_pixels);
}
- pass = piglit_probe_rect_rgba(0, 0, piglit_width, height, got_pixels);
+ pass = piglit_probe_rect_rgba(0, 0, piglit_width, height, got_pixels) && pass;
free(got_pixels);
free(original_pixels);
@@ -614,7 +641,7 @@ test_CopyMultiTexSubImageNDEXT(void* data)
glGetMultiTexImageEXT(texunit, target, 0, GL_RGBA, GL_FLOAT, got_pixels);
}
- pass = piglit_probe_rect_rgba(0, 0, piglit_width, height, got_pixels);
+ pass = piglit_probe_rect_rgba(0, 0, piglit_width, height, got_pixels) && pass;
free(got_pixels);
@@ -762,7 +789,9 @@ test_MultiTexCoordPointerEXT(void* data)
texunit = GL_TEXTURE0 + rand() % max_texture_coords;
glMultiTexCoordPointerEXT(texunit, 2, GL_INT, 4, array);
- piglit_check_gl_error(GL_NO_ERROR);
+
+ pass = piglit_check_gl_error(GL_NO_ERROR);
+
glClientActiveTexture(texunit);
glGetIntegerv(GL_TEXTURE_COORD_ARRAY_SIZE, &value);
@@ -775,7 +804,7 @@ test_MultiTexCoordPointerEXT(void* data)
pass = value == 4 && pass;
glGetPointerv(GL_TEXTURE_COORD_ARRAY_POINTER, &ptr);
- pass = ptr == array;
+ pass = ptr == array && pass;
return piglit_check_gl_error(GL_NO_ERROR) && pass ? PIGLIT_PASS : PIGLIT_FAIL;
}
@@ -788,6 +817,7 @@ test_MultiTexParameteriEXT(void* data)
GL_TEXTURE_CUBE_MAP,
};
int i, j, k, l, value;
+ bool pass = true;
const struct pname_value {
GLenum pname;
@@ -880,6 +910,16 @@ test_MultiTexParameteriEXT(void* data)
const GLenum* texunits = n_texunits(3);
glActiveTexture(texunits[0]);
for (k = 0; k < tested[j].value_count; k++) {
+ int original_values[2];
+
+ if (use_display_list != GL_NONE)
+ glNewList(list, use_display_list);
+
+ for (l = 0; l < 2; l++) {
+ glGetMultiTexParameterivEXT(texunits[1 + l], target,
+ tested[j].pname, &original_values[l]);
+ }
+
glMultiTexParameteriEXT(
texunits[1], target,
tested[j].pname,
@@ -890,6 +930,19 @@ test_MultiTexParameteriEXT(void* data)
tested[j].pname,
&tested[j].values[k]);
+ if (use_display_list != GL_NONE)
+ glEndList(list);
+
+ if (use_display_list == GL_COMPILE) {
+ for (l = 0; l < 2; l++) {
+ int v;
+ glGetMultiTexParameterivEXT(texunits[1 + l], target,
+ tested[j].pname, &v);
+ pass = v == original_values[l] && pass;
+ }
+ glCallList(list);
+ }
+
for (l = 0; l < 2; l++) {
glGetMultiTexParameterivEXT(texunits[1 + l], target, tested[j].pname, &value);
@@ -915,7 +968,7 @@ test_MultiTexParameteriEXT(void* data)
}
}
}
- return PIGLIT_PASS;
+ return pass ? PIGLIT_PASS : PIGLIT_FAIL;
}
static enum piglit_result
@@ -927,6 +980,7 @@ test_MultiTexParameterfEXT(void* data)
GL_TEXTURE_CUBE_MAP,
};
int i, j, k, l;
+ bool pass = true;
float value;
const struct pname_value {
@@ -959,6 +1013,16 @@ test_MultiTexParameterfEXT(void* data)
const GLenum* texunits = n_texunits(3);
glActiveTexture(texunits[0]);
for (k = 0; k < tested[j].value_count; k++) {
+ float original_values[2];
+
+ if (use_display_list != GL_NONE)
+ glNewList(list, use_display_list);
+
+ for (l = 0; l < 2; l++) {
+ glGetMultiTexParameterfvEXT(texunits[1 + l], target,
+ tested[j].pname, &original_values[l]);
+ }
+
glMultiTexParameterfEXT(
texunits[1], target,
tested[j].pname,
@@ -969,6 +1033,19 @@ test_MultiTexParameterfEXT(void* data)
tested[j].pname,
&tested[j].values[k]);
+ if (use_display_list != GL_NONE)
+ glEndList(list);
+
+ if (use_display_list == GL_COMPILE) {
+ for (l = 0; l < 2; l++) {
+ float v;
+ glGetMultiTexParameterfvEXT(texunits[1 + l], target,
+ tested[j].pname, &v);
+ pass = v == original_values[l] && pass;
+ }
+ glCallList(list);
+ }
+
for (l = 0; l < 2; l++) {
glGetMultiTexParameterfvEXT(texunits[1 + l], target, tested[j].pname, &value);
@@ -994,7 +1071,7 @@ test_MultiTexParameterfEXT(void* data)
}
}
}
- return PIGLIT_PASS;
+ return pass ? PIGLIT_PASS : PIGLIT_FAIL;
}
enum piglit_result
diff --git a/tests/spec/ext_direct_state_access/textures.c b/tests/spec/ext_direct_state_access/textures.c
index d8d4305bd..9a4aa9c63 100644
--- a/tests/spec/ext_direct_state_access/textures.c
+++ b/tests/spec/ext_direct_state_access/textures.c
@@ -278,7 +278,7 @@ test_CopyTextureImageNDEXT(void* data)
glGetTextureImageEXT(tex, target, 0, GL_RGBA, GL_FLOAT, got_pixels);
}
- pass = piglit_probe_rect_rgba(0, 0, piglit_width, height, got_pixels);
+ pass = piglit_probe_rect_rgba(0, 0, piglit_width, height, got_pixels) && pass;
free(got_pixels);
free(original_pixels);
@@ -333,7 +333,7 @@ test_CopyTextureSubImageNDEXT(void* data)
glGetTextureImageEXT(tex, target, 0, GL_RGBA, GL_FLOAT, got_pixels);
}
- pass = piglit_probe_rect_rgba(0, 0, piglit_width, height, got_pixels);
+ pass = piglit_probe_rect_rgba(0, 0, piglit_width, height, got_pixels) && pass;
free(got_pixels);
free(original_pixels);
@@ -352,6 +352,7 @@ test_TextureParameteriEXT(void* data)
GL_TEXTURE_CUBE_MAP,
};
int i, j, k, l, value;
+ bool pass = true;
const struct pname_value {
GLenum pname;
@@ -445,9 +446,15 @@ test_TextureParameteriEXT(void* data)
for (j = 0; j < ARRAY_SIZE(tested); j++) {
for (k = 0; k < tested[j].value_count; k++) {
+ int original_values[2];
if (use_display_list != GL_NONE)
glNewList(list, use_display_list);
+ for (l = 0; l < 2; l++) {
+ glGetTextureParameterivEXT(tex[l], target,
+ tested[j].pname, &original_values[l]);
+ }
+
glTextureParameteriEXT(
tex[0], target,
tested[j].pname,
@@ -461,8 +468,15 @@ test_TextureParameteriEXT(void* data)
if (use_display_list != GL_NONE)
glEndList(list);
- if (use_display_list == GL_COMPILE)
+ if (use_display_list == GL_COMPILE) {
+ for (l = 0; l < 2; l++) {
+ int v;
+ glGetTextureParameterivEXT(tex[l], target,
+ tested[j].pname, &v);
+ pass = v == original_values[l] && pass;
+ }
glCallList(list);
+ }
for (l = 0; l < 2; l++) {
glGetTextureParameterivEXT(tex[l], target, tested[j].pname, &value);
@@ -488,7 +502,7 @@ test_TextureParameteriEXT(void* data)
}
glDeleteTextures(ARRAY_SIZE(tex), tex);
}
- return PIGLIT_PASS;
+ return pass ? PIGLIT_PASS : PIGLIT_FAIL;
}
static enum piglit_result
@@ -501,6 +515,7 @@ test_TextureParameterfEXT(void* data)
GL_TEXTURE_CUBE_MAP,
};
int i, j, k, l;
+ bool pass = true;
float value;
const struct pname_value {
@@ -533,9 +548,16 @@ test_TextureParameterfEXT(void* data)
for (j = 0; j < ARRAY_SIZE(tested); j++) {
for (k = 0; k < tested[j].value_count; k++) {
+ float original_values[2];
+
if (use_display_list != GL_NONE)
glNewList(list, use_display_list);
+ for (l = 0; l < 2; l++) {
+ glGetTextureParameterfvEXT(tex[l], target,
+ tested[j].pname, &original_values[l]);
+ }
+
glTextureParameterfEXT(
tex[0], target,
tested[j].pname,
@@ -549,8 +571,15 @@ test_TextureParameterfEXT(void* data)
if (use_display_list != GL_NONE)
glEndList(list);
- if (use_display_list == GL_COMPILE)
+ if (use_display_list == GL_COMPILE) {
+ for (l = 0; l < 2; l++) {
+ float v;
+ glGetTextureParameterfvEXT(tex[l], target,
+ tested[j].pname, &v);
+ pass = v == original_values[l] && pass;
+ }
glCallList(list);
+ }
for (l = 0; l < 2; l++) {
glGetTextureParameterfvEXT(tex[l], target, tested[j].pname, &value);
@@ -576,7 +605,7 @@ test_TextureParameterfEXT(void* data)
}
glDeleteTextures(ARRAY_SIZE(tex), tex);
}
- return PIGLIT_PASS;
+ return pass ? PIGLIT_PASS : PIGLIT_FAIL;
}
enum piglit_result