mesa: make error handling in glGetTexParameter() a bit more concise
This commit is contained in:
+98
-172
@@ -994,28 +994,21 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
|
||||
*params = 0;
|
||||
break;
|
||||
case GL_TEXTURE_DEPTH_SIZE_ARB:
|
||||
if (ctx->Extensions.ARB_depth_texture)
|
||||
*params = _mesa_get_format_bits(texFormat, pname);
|
||||
else
|
||||
if (!ctx->Extensions.ARB_depth_texture)
|
||||
goto invalid_pname;
|
||||
*params = _mesa_get_format_bits(texFormat, pname);
|
||||
break;
|
||||
case GL_TEXTURE_STENCIL_SIZE_EXT:
|
||||
if (ctx->Extensions.EXT_packed_depth_stencil ||
|
||||
ctx->Extensions.ARB_framebuffer_object) {
|
||||
*params = _mesa_get_format_bits(texFormat, pname);
|
||||
}
|
||||
else {
|
||||
if (!ctx->Extensions.EXT_packed_depth_stencil &&
|
||||
!ctx->Extensions.ARB_framebuffer_object)
|
||||
goto invalid_pname;
|
||||
}
|
||||
*params = _mesa_get_format_bits(texFormat, pname);
|
||||
break;
|
||||
case GL_TEXTURE_SHARED_SIZE:
|
||||
if (ctx->VersionMajor >= 3 ||
|
||||
ctx->Extensions.EXT_texture_shared_exponent) {
|
||||
*params = texFormat == MESA_FORMAT_RGB9_E5_FLOAT ? 5 : 0;
|
||||
}
|
||||
else {
|
||||
if (ctx->VersionMajor < 3 &&
|
||||
!ctx->Extensions.EXT_texture_shared_exponent)
|
||||
goto invalid_pname;
|
||||
}
|
||||
*params = texFormat == MESA_FORMAT_RGB9_E5_FLOAT ? 5 : 0;
|
||||
break;
|
||||
|
||||
/* GL_ARB_texture_compression */
|
||||
@@ -1036,67 +1029,46 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
|
||||
|
||||
/* GL_ARB_texture_float */
|
||||
case GL_TEXTURE_RED_TYPE_ARB:
|
||||
if (ctx->Extensions.ARB_texture_float) {
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_RED_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
}
|
||||
else {
|
||||
if (!ctx->Extensions.ARB_texture_float)
|
||||
goto invalid_pname;
|
||||
}
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_RED_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
break;
|
||||
case GL_TEXTURE_GREEN_TYPE_ARB:
|
||||
if (ctx->Extensions.ARB_texture_float) {
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_GREEN_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
}
|
||||
else {
|
||||
if (!ctx->Extensions.ARB_texture_float)
|
||||
goto invalid_pname;
|
||||
}
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_GREEN_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
break;
|
||||
case GL_TEXTURE_BLUE_TYPE_ARB:
|
||||
if (ctx->Extensions.ARB_texture_float) {
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_BLUE_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
}
|
||||
else {
|
||||
if (!ctx->Extensions.ARB_texture_float)
|
||||
goto invalid_pname;
|
||||
}
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_BLUE_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
break;
|
||||
case GL_TEXTURE_ALPHA_TYPE_ARB:
|
||||
if (ctx->Extensions.ARB_texture_float) {
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_ALPHA_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
}
|
||||
else {
|
||||
if (!ctx->Extensions.ARB_texture_float)
|
||||
goto invalid_pname;
|
||||
}
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_ALPHA_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
break;
|
||||
case GL_TEXTURE_LUMINANCE_TYPE_ARB:
|
||||
if (ctx->Extensions.ARB_texture_float) {
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_LUMINANCE_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
}
|
||||
else {
|
||||
if (!ctx->Extensions.ARB_texture_float)
|
||||
goto invalid_pname;
|
||||
}
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_LUMINANCE_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
break;
|
||||
case GL_TEXTURE_INTENSITY_TYPE_ARB:
|
||||
if (ctx->Extensions.ARB_texture_float) {
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_INTENSITY_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
}
|
||||
else {
|
||||
if (!ctx->Extensions.ARB_texture_float)
|
||||
goto invalid_pname;
|
||||
}
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_INTENSITY_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
break;
|
||||
case GL_TEXTURE_DEPTH_TYPE_ARB:
|
||||
if (ctx->Extensions.ARB_texture_float) {
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_DEPTH_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
}
|
||||
else {
|
||||
if (!ctx->Extensions.ARB_texture_float)
|
||||
goto invalid_pname;
|
||||
}
|
||||
*params = _mesa_get_format_bits(texFormat, GL_TEXTURE_DEPTH_SIZE) ?
|
||||
_mesa_get_format_datatype(texFormat) : GL_NONE;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -1118,7 +1090,6 @@ void GLAPIENTRY
|
||||
_mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
|
||||
{
|
||||
struct gl_texture_object *obj;
|
||||
GLboolean error = GL_FALSE;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||
|
||||
@@ -1187,49 +1158,37 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
|
||||
*params = (GLfloat) obj->MaxLevel;
|
||||
break;
|
||||
case GL_TEXTURE_MAX_ANISOTROPY_EXT:
|
||||
if (ctx->Extensions.EXT_texture_filter_anisotropic) {
|
||||
*params = obj->Sampler.MaxAnisotropy;
|
||||
}
|
||||
else
|
||||
error = GL_TRUE;
|
||||
if (!ctx->Extensions.EXT_texture_filter_anisotropic)
|
||||
goto invalid_pname;
|
||||
*params = obj->Sampler.MaxAnisotropy;
|
||||
break;
|
||||
case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB:
|
||||
if (ctx->Extensions.ARB_shadow_ambient) {
|
||||
*params = obj->Sampler.CompareFailValue;
|
||||
}
|
||||
else
|
||||
error = GL_TRUE;
|
||||
if (!ctx->Extensions.ARB_shadow_ambient)
|
||||
goto invalid_pname;
|
||||
*params = obj->Sampler.CompareFailValue;
|
||||
break;
|
||||
case GL_GENERATE_MIPMAP_SGIS:
|
||||
*params = (GLfloat) obj->GenerateMipmap;
|
||||
break;
|
||||
case GL_TEXTURE_COMPARE_MODE_ARB:
|
||||
if (ctx->Extensions.ARB_shadow) {
|
||||
*params = (GLfloat) obj->Sampler.CompareMode;
|
||||
}
|
||||
else
|
||||
error = GL_TRUE;
|
||||
if (!ctx->Extensions.ARB_shadow)
|
||||
goto invalid_pname;
|
||||
*params = (GLfloat) obj->Sampler.CompareMode;
|
||||
break;
|
||||
case GL_TEXTURE_COMPARE_FUNC_ARB:
|
||||
if (ctx->Extensions.ARB_shadow) {
|
||||
*params = (GLfloat) obj->Sampler.CompareFunc;
|
||||
}
|
||||
else
|
||||
error = GL_TRUE;
|
||||
if (!ctx->Extensions.ARB_shadow)
|
||||
goto invalid_pname;
|
||||
*params = (GLfloat) obj->Sampler.CompareFunc;
|
||||
break;
|
||||
case GL_DEPTH_TEXTURE_MODE_ARB:
|
||||
if (ctx->Extensions.ARB_depth_texture) {
|
||||
*params = (GLfloat) obj->Sampler.DepthMode;
|
||||
}
|
||||
else
|
||||
error = GL_TRUE;
|
||||
if (!ctx->Extensions.ARB_depth_texture)
|
||||
goto invalid_pname;
|
||||
*params = (GLfloat) obj->Sampler.DepthMode;
|
||||
break;
|
||||
case GL_TEXTURE_LOD_BIAS:
|
||||
if (ctx->Extensions.EXT_texture_lod_bias) {
|
||||
*params = obj->Sampler.LodBias;
|
||||
}
|
||||
else
|
||||
error = GL_TRUE;
|
||||
if (!ctx->Extensions.EXT_texture_lod_bias)
|
||||
goto invalid_pname;
|
||||
*params = obj->Sampler.LodBias;
|
||||
break;
|
||||
#if FEATURE_OES_draw_texture
|
||||
case GL_TEXTURE_CROP_RECT_OES:
|
||||
@@ -1244,46 +1203,40 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
|
||||
case GL_TEXTURE_SWIZZLE_G_EXT:
|
||||
case GL_TEXTURE_SWIZZLE_B_EXT:
|
||||
case GL_TEXTURE_SWIZZLE_A_EXT:
|
||||
if (ctx->Extensions.EXT_texture_swizzle) {
|
||||
GLuint comp = pname - GL_TEXTURE_SWIZZLE_R_EXT;
|
||||
*params = (GLfloat) obj->Swizzle[comp];
|
||||
}
|
||||
else {
|
||||
error = GL_TRUE;
|
||||
}
|
||||
if (!ctx->Extensions.EXT_texture_swizzle)
|
||||
goto invalid_pname;
|
||||
*params = (GLfloat) obj->Swizzle[pname - GL_TEXTURE_SWIZZLE_R_EXT];
|
||||
break;
|
||||
|
||||
case GL_TEXTURE_SWIZZLE_RGBA_EXT:
|
||||
if (ctx->Extensions.EXT_texture_swizzle) {
|
||||
if (!ctx->Extensions.EXT_texture_swizzle) {
|
||||
goto invalid_pname;
|
||||
}
|
||||
else {
|
||||
GLuint comp;
|
||||
for (comp = 0; comp < 4; comp++) {
|
||||
params[comp] = (GLfloat) obj->Swizzle[comp];
|
||||
}
|
||||
}
|
||||
else {
|
||||
error = GL_TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case GL_TEXTURE_CUBE_MAP_SEAMLESS:
|
||||
if (ctx->Extensions.AMD_seamless_cubemap_per_texture) {
|
||||
*params = (GLfloat) obj->Sampler.CubeMapSeamless;
|
||||
}
|
||||
else {
|
||||
error = GL_TRUE;
|
||||
}
|
||||
if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
|
||||
goto invalid_pname;
|
||||
*params = (GLfloat) obj->Sampler.CubeMapSeamless;
|
||||
break;
|
||||
|
||||
default:
|
||||
error = GL_TRUE;
|
||||
break;
|
||||
goto invalid_pname;
|
||||
}
|
||||
|
||||
if (error)
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameterfv(pname=0x%x)",
|
||||
pname);
|
||||
|
||||
/* no error if we get here */
|
||||
_mesa_unlock_texture(ctx, obj);
|
||||
return;
|
||||
|
||||
invalid_pname:
|
||||
_mesa_unlock_texture(ctx, obj);
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameterfv(pname=0x%x)", pname);
|
||||
}
|
||||
|
||||
|
||||
@@ -1291,7 +1244,6 @@ void GLAPIENTRY
|
||||
_mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
|
||||
{
|
||||
struct gl_texture_object *obj;
|
||||
GLboolean error = GL_FALSE;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||
|
||||
@@ -1355,55 +1307,37 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
|
||||
*params = obj->MaxLevel;
|
||||
break;;
|
||||
case GL_TEXTURE_MAX_ANISOTROPY_EXT:
|
||||
if (ctx->Extensions.EXT_texture_filter_anisotropic) {
|
||||
*params = (GLint) obj->Sampler.MaxAnisotropy;
|
||||
}
|
||||
else {
|
||||
error = GL_TRUE;
|
||||
}
|
||||
if (!ctx->Extensions.EXT_texture_filter_anisotropic)
|
||||
goto invalid_pname;
|
||||
*params = (GLint) obj->Sampler.MaxAnisotropy;
|
||||
break;
|
||||
case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB:
|
||||
if (ctx->Extensions.ARB_shadow_ambient) {
|
||||
*params = (GLint) FLOAT_TO_INT(obj->Sampler.CompareFailValue);
|
||||
}
|
||||
else {
|
||||
error = GL_TRUE;
|
||||
}
|
||||
if (!ctx->Extensions.ARB_shadow_ambient)
|
||||
goto invalid_pname;
|
||||
*params = (GLint) FLOAT_TO_INT(obj->Sampler.CompareFailValue);
|
||||
break;
|
||||
case GL_GENERATE_MIPMAP_SGIS:
|
||||
*params = (GLint) obj->GenerateMipmap;
|
||||
break;
|
||||
case GL_TEXTURE_COMPARE_MODE_ARB:
|
||||
if (ctx->Extensions.ARB_shadow) {
|
||||
*params = (GLint) obj->Sampler.CompareMode;
|
||||
}
|
||||
else {
|
||||
error = GL_TRUE;
|
||||
}
|
||||
if (!ctx->Extensions.ARB_shadow)
|
||||
goto invalid_pname;
|
||||
*params = (GLint) obj->Sampler.CompareMode;
|
||||
break;
|
||||
case GL_TEXTURE_COMPARE_FUNC_ARB:
|
||||
if (ctx->Extensions.ARB_shadow) {
|
||||
*params = (GLint) obj->Sampler.CompareFunc;
|
||||
}
|
||||
else {
|
||||
error = GL_TRUE;
|
||||
}
|
||||
if (!ctx->Extensions.ARB_shadow)
|
||||
goto invalid_pname;
|
||||
*params = (GLint) obj->Sampler.CompareFunc;
|
||||
break;
|
||||
case GL_DEPTH_TEXTURE_MODE_ARB:
|
||||
if (ctx->Extensions.ARB_depth_texture) {
|
||||
*params = (GLint) obj->Sampler.DepthMode;
|
||||
}
|
||||
else {
|
||||
error = GL_TRUE;
|
||||
}
|
||||
if (!ctx->Extensions.ARB_depth_texture)
|
||||
goto invalid_pname;
|
||||
*params = (GLint) obj->Sampler.DepthMode;
|
||||
break;
|
||||
case GL_TEXTURE_LOD_BIAS:
|
||||
if (ctx->Extensions.EXT_texture_lod_bias) {
|
||||
*params = (GLint) obj->Sampler.LodBias;
|
||||
}
|
||||
else {
|
||||
error = GL_TRUE;
|
||||
}
|
||||
if (!ctx->Extensions.EXT_texture_lod_bias)
|
||||
goto invalid_pname;
|
||||
*params = (GLint) obj->Sampler.LodBias;
|
||||
break;
|
||||
#if FEATURE_OES_draw_texture
|
||||
case GL_TEXTURE_CROP_RECT_OES:
|
||||
@@ -1417,42 +1351,34 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
|
||||
case GL_TEXTURE_SWIZZLE_G_EXT:
|
||||
case GL_TEXTURE_SWIZZLE_B_EXT:
|
||||
case GL_TEXTURE_SWIZZLE_A_EXT:
|
||||
if (ctx->Extensions.EXT_texture_swizzle) {
|
||||
GLuint comp = pname - GL_TEXTURE_SWIZZLE_R_EXT;
|
||||
*params = obj->Swizzle[comp];
|
||||
}
|
||||
else {
|
||||
error = GL_TRUE;
|
||||
}
|
||||
if (!ctx->Extensions.EXT_texture_swizzle)
|
||||
goto invalid_pname;
|
||||
*params = obj->Swizzle[pname - GL_TEXTURE_SWIZZLE_R_EXT];
|
||||
break;
|
||||
|
||||
case GL_TEXTURE_SWIZZLE_RGBA_EXT:
|
||||
if (ctx->Extensions.EXT_texture_swizzle) {
|
||||
COPY_4V(params, obj->Swizzle);
|
||||
}
|
||||
else {
|
||||
error = GL_TRUE;
|
||||
}
|
||||
if (!ctx->Extensions.EXT_texture_swizzle)
|
||||
goto invalid_pname;
|
||||
COPY_4V(params, obj->Swizzle);
|
||||
break;
|
||||
|
||||
case GL_TEXTURE_CUBE_MAP_SEAMLESS:
|
||||
if (ctx->Extensions.AMD_seamless_cubemap_per_texture) {
|
||||
*params = (GLint) obj->Sampler.CubeMapSeamless;
|
||||
}
|
||||
else {
|
||||
error = GL_TRUE;
|
||||
}
|
||||
if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
|
||||
goto invalid_pname;
|
||||
*params = (GLint) obj->Sampler.CubeMapSeamless;
|
||||
break;
|
||||
|
||||
default:
|
||||
; /* silence warnings */
|
||||
goto invalid_pname;
|
||||
}
|
||||
|
||||
if (error)
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameteriv(pname=0x%x)",
|
||||
pname);
|
||||
|
||||
/* no error if we get here */
|
||||
_mesa_unlock_texture(ctx, obj);
|
||||
return;
|
||||
|
||||
invalid_pname:
|
||||
_mesa_unlock_texture(ctx, obj);
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameteriv(pname=0x%x)", pname);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user