static bool test_getter_pname(void) { GLuint name; GLfloat f; GLuint u; GLint i; bool pass = true; /* Setup dsa. */ glCreateTextures(GL_TEXTURE_2D, 1, &name); glBindTextureUnit(0, name); /* Since next command isn't bindless. */ glGetTextureParameterfv(name, GL_TEXTURE_1D, &f); pass = piglit_check_gl_error(GL_INVALID_ENUM) && pass; glGetTextureParameteriv(name, GL_TEXTURE_1D, &i); pass = piglit_check_gl_error(GL_INVALID_ENUM) && pass; glGetTextureParameterIiv(name, GL_TEXTURE_1D, &i); pass = piglit_check_gl_error(GL_INVALID_ENUM) && pass; glGetTextureParameterIuiv(name, GL_TEXTURE_1D, &u); pass = piglit_check_gl_error(GL_INVALID_ENUM) && pass; piglit_report_subtest_result(pass ? PIGLIT_PASS : PIGLIT_FAIL, "glGetTextureParameter: GL_INVALID_ENUM " "on bad pname"); return pass; }
/* same as test_target_name, but for the getter functions */ static bool test_getter_target_name(void) { static const GLuint badname = 250; GLfloat f; GLuint u; GLint i; bool pass = true; glGetTextureParameterfv(badname, GL_TEXTURE_MAX_LEVEL, &f); pass = piglit_check_gl_error(GL_INVALID_OPERATION) && pass; glGetTextureParameteriv(badname, GL_TEXTURE_MAX_LEVEL, &i); pass = piglit_check_gl_error(GL_INVALID_OPERATION) && pass; glGetTextureParameterIiv(badname, GL_TEXTURE_MAX_LEVEL, &i); pass = piglit_check_gl_error(GL_INVALID_OPERATION) && pass; glGetTextureParameterIuiv(badname, GL_TEXTURE_MAX_LEVEL, &u); pass = piglit_check_gl_error(GL_INVALID_OPERATION) && pass; piglit_report_subtest_result(pass ? PIGLIT_PASS : PIGLIT_FAIL, "glGetTextureParameter: " "GL_INVALID_OPERATION on bad texture"); return pass; }
static bool test_immutablity(GLenum target) { GLuint tex; GLint level; GLint immutable_format; bool pass = true; glCreateTextures(target, 1, &tex); glBindTextureUnit(0, tex); glTextureStorage2D(tex, 3, GL_RGBA8, 256, 256); glTextureParameteri(tex, GL_TEXTURE_MAX_LEVEL, 4); glGetTextureParameteriv(tex, GL_TEXTURE_MAX_LEVEL, &level); glGetTextureParameteriv(tex, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable_format); if (immutable_format != GL_TRUE) { printf("%s: GL_TEXTURE_IMMUTABLE_FORMAT was not set to " "GL_TRUE after glTextureStorage2D\n", TestName); pass = false; } if (level != 2) { /* The ARB_texture_storage spec says: * * "However, if TEXTURE_IMMUTABLE_FORMAT is TRUE, then * level_base is clamped to the range [0, <levels> - 1] * and level_max is then clamped to the range [level_base, * <levels> - 1], where <levels> is the parameter passed * the call to TexStorage* for the texture object" */ printf("%s: GL_TEXTURE_MAX_LEVEL changed to %d, which is " "outside the clamp range for immutables\n", TestName, level); pass = false; } /* Other immutable tests happen per-format above */ glDeleteTextures(1, &tex); return pass; }
/** * Do error-check tests for a mipmapped texture. */ static bool test_mipmap_errors(GLenum target) { GLint width = 128, height = 64, depth = 4, levels = 8; const char *targetString = piglit_get_gl_enum_name(target); GLuint tex; GLint v, l; assert(target == GL_TEXTURE_1D || target == GL_TEXTURE_2D || target == GL_TEXTURE_3D); glCreateTextures(target, 1, &tex); glBindTextureUnit(0, tex); if (target == GL_TEXTURE_1D) { glTextureStorage1D(tex, levels, GL_RGBA8, width); } else if (target == GL_TEXTURE_2D) { glTextureStorage2D(tex, levels, GL_RGBA8, width, height); } else if (target == GL_TEXTURE_3D) { glTextureStorage3D(tex, levels, GL_RGBA8, width, height, depth); } piglit_check_gl_error(GL_NO_ERROR); glGetTextureParameteriv(tex, GL_TEXTURE_IMMUTABLE_FORMAT, &v); if (!v) { printf("%s: %s GL_TEXTURE_IMMUTABLE_FORMAT query returned " "false\n", TestName, targetString); return false; } for (l = 0; l < levels; l++) { glGetTextureLevelParameteriv(tex, l, GL_TEXTURE_WIDTH, &v); if (v != width) { printf("%s: %s level %d: bad width: %d, should be %d\n", TestName, targetString, l, v, width); return false; } if (target != GL_TEXTURE_1D) { glGetTextureLevelParameteriv(tex, l, GL_TEXTURE_HEIGHT, &v); if (v != height) { printf("%s: %s level %d: bad height: %d, " "should be %d\n", TestName, targetString, l, v, height); return false; } } if (target == GL_TEXTURE_3D) { glGetTextureLevelParameteriv(tex, l, GL_TEXTURE_DEPTH, &v); if (v != depth) { printf("%s: %s level %d: bad depth: %d, " "should be %d\n", TestName, targetString, l, v, depth); return false; } } if (width > 1) width /= 2; if (height > 1) height /= 2; if (depth > 1) depth /= 2; } glDeleteTextures(1, &tex); return true; }