mesa: use _mesa_base_format_has_channel() in fbobject.c queries

Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Brian Paul 2011-11-23 15:33:45 -07:00
parent 858d1f0b1c
commit f0b6e9a729
3 changed files with 28 additions and 45 deletions

View File

@ -46,6 +46,7 @@
#include "state.h"
#include "teximage.h"
#include "texobj.h"
#include "texparam.h"
/** Set this to 1 to help debug FBO incompleteness problems */
@ -1477,48 +1478,10 @@ _mesa_EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
static GLint
get_component_bits(GLenum pname, GLenum baseFormat, gl_format format)
{
switch (pname) {
case GL_RENDERBUFFER_RED_SIZE_EXT:
case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
if (baseFormat == GL_RGB || baseFormat == GL_RGBA ||
baseFormat == GL_RG || baseFormat == GL_RED)
return _mesa_get_format_bits(format, pname);
else
return 0;
case GL_RENDERBUFFER_GREEN_SIZE_EXT:
case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
if (baseFormat == GL_RGB || baseFormat == GL_RGBA || baseFormat == GL_RG)
return _mesa_get_format_bits(format, pname);
else
return 0;
case GL_RENDERBUFFER_BLUE_SIZE_EXT:
case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
if (baseFormat == GL_RGB || baseFormat == GL_RGBA)
return _mesa_get_format_bits(format, pname);
else
return 0;
case GL_RENDERBUFFER_ALPHA_SIZE_EXT:
case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
if (baseFormat == GL_RGBA || baseFormat == GL_ALPHA ||
baseFormat == GL_LUMINANCE_ALPHA)
return _mesa_get_format_bits(format, pname);
else
return 0;
case GL_RENDERBUFFER_DEPTH_SIZE_EXT:
case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
if (baseFormat == GL_DEPTH_COMPONENT || baseFormat == GL_DEPTH_STENCIL)
return _mesa_get_format_bits(format, pname);
else
return 0;
case GL_RENDERBUFFER_STENCIL_SIZE_EXT:
case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
if (baseFormat == GL_STENCIL_INDEX || baseFormat == GL_DEPTH_STENCIL)
return _mesa_get_format_bits(format, pname);
else
return 0;
default:
if (_mesa_base_format_has_channel(baseFormat, pname))
return _mesa_get_format_bits(format, pname);
else
return 0;
}
}

View File

@ -884,12 +884,14 @@ _mesa_TexParameterIuiv(GLenum target, GLenum pname, const GLuint *params)
}
static GLboolean
base_format_has_channel(GLenum base_format, GLenum pname)
GLboolean
_mesa_base_format_has_channel(GLenum base_format, GLenum pname)
{
switch (pname) {
case GL_TEXTURE_RED_SIZE:
case GL_TEXTURE_RED_TYPE:
case GL_RENDERBUFFER_RED_SIZE_EXT:
case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
if (base_format == GL_RED ||
base_format == GL_RG ||
base_format == GL_RGB ||
@ -899,6 +901,8 @@ base_format_has_channel(GLenum base_format, GLenum pname)
return GL_FALSE;
case GL_TEXTURE_GREEN_SIZE:
case GL_TEXTURE_GREEN_TYPE:
case GL_RENDERBUFFER_GREEN_SIZE_EXT:
case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
if (base_format == GL_RG ||
base_format == GL_RGB ||
base_format == GL_RGBA) {
@ -907,6 +911,8 @@ base_format_has_channel(GLenum base_format, GLenum pname)
return GL_FALSE;
case GL_TEXTURE_BLUE_SIZE:
case GL_TEXTURE_BLUE_TYPE:
case GL_RENDERBUFFER_BLUE_SIZE_EXT:
case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
if (base_format == GL_RGB ||
base_format == GL_RGBA) {
return GL_TRUE;
@ -914,6 +920,8 @@ base_format_has_channel(GLenum base_format, GLenum pname)
return GL_FALSE;
case GL_TEXTURE_ALPHA_SIZE:
case GL_TEXTURE_ALPHA_TYPE:
case GL_RENDERBUFFER_ALPHA_SIZE_EXT:
case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
if (base_format == GL_RGBA ||
base_format == GL_ALPHA ||
base_format == GL_LUMINANCE_ALPHA) {
@ -935,11 +943,20 @@ base_format_has_channel(GLenum base_format, GLenum pname)
return GL_FALSE;
case GL_TEXTURE_DEPTH_SIZE:
case GL_TEXTURE_DEPTH_TYPE:
case GL_RENDERBUFFER_DEPTH_SIZE_EXT:
case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
if (base_format == GL_DEPTH_STENCIL ||
base_format == GL_DEPTH_COMPONENT) {
return GL_TRUE;
}
return GL_FALSE;
case GL_RENDERBUFFER_STENCIL_SIZE_EXT:
case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
if (base_format == GL_DEPTH_STENCIL ||
base_format == GL_STENCIL_INDEX) {
return GL_TRUE;
}
return GL_FALSE;
default:
_mesa_warning(NULL, "%s: Unexpected channel token 0x%x\n",
__FUNCTION__, pname);
@ -1048,7 +1065,7 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
case GL_TEXTURE_GREEN_SIZE:
case GL_TEXTURE_BLUE_SIZE:
case GL_TEXTURE_ALPHA_SIZE:
if (base_format_has_channel(img->_BaseFormat, pname))
if (_mesa_base_format_has_channel(img->_BaseFormat, pname))
*params = _mesa_get_format_bits(texFormat, pname);
else
*params = 0;
@ -1122,7 +1139,7 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
case GL_TEXTURE_DEPTH_TYPE_ARB:
if (!ctx->Extensions.ARB_texture_float)
goto invalid_pname;
if (base_format_has_channel(img->_BaseFormat, pname))
if (_mesa_base_format_has_channel(img->_BaseFormat, pname))
*params = _mesa_get_format_datatype(texFormat);
else
*params = GL_NONE;

View File

@ -30,6 +30,9 @@
#include "main/glheader.h"
extern GLboolean
_mesa_base_format_has_channel(GLenum base_format, GLenum pname);
extern void GLAPIENTRY
_mesa_GetTexLevelParameterfv( GLenum target, GLint level,
GLenum pname, GLfloat *params );