On 10.12.2013 17:23, Brian Paul wrote: > On 12/10/2013 06:13 AM, Pi Tabred wrote: >> - change storage class from static to extern >> - rename validate_texbuffer_format to _mesa_validate_texbuffer_format >> --- >> src/mesa/main/teximage.c | 398 >> ++++++++++++++++++++++++----------------------- >> src/mesa/main/teximage.h | 4 + >> 2 files changed, 206 insertions(+), 196 deletions(-) >> >> diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c >> index 7ec3e20..6e04ba5 100644 >> --- a/src/mesa/main/teximage.c >> +++ b/src/mesa/main/teximage.c >> @@ -1519,6 +1519,207 @@ _mesa_legal_texture_dimensions(struct >> gl_context *ctx, GLenum target, >> } >> >> >> +static gl_format >> +get_texbuffer_format(const struct gl_context *ctx, GLenum >> internalFormat) >> +{ >> + switch (internalFormat) { >> + case GL_ALPHA8: >> + return MESA_FORMAT_A8; >> + case GL_ALPHA16: >> + return MESA_FORMAT_A16; >> + case GL_ALPHA16F_ARB: >> + return MESA_FORMAT_ALPHA_FLOAT16; >> + case GL_ALPHA32F_ARB: >> + return MESA_FORMAT_ALPHA_FLOAT32; >> + case GL_ALPHA8I_EXT: >> + return MESA_FORMAT_ALPHA_INT8; >> + case GL_ALPHA16I_EXT: >> + return MESA_FORMAT_ALPHA_INT16; >> + case GL_ALPHA32I_EXT: >> + return MESA_FORMAT_ALPHA_INT32; >> + case GL_ALPHA8UI_EXT: >> + return MESA_FORMAT_ALPHA_UINT8; >> + case GL_ALPHA16UI_EXT: >> + return MESA_FORMAT_ALPHA_UINT16; >> + case GL_ALPHA32UI_EXT: >> + return MESA_FORMAT_ALPHA_UINT32; >> + case GL_LUMINANCE8: >> + return MESA_FORMAT_L8; >> + case GL_LUMINANCE16: >> + return MESA_FORMAT_L16; >> + case GL_LUMINANCE16F_ARB: >> + return MESA_FORMAT_LUMINANCE_FLOAT16; >> + case GL_LUMINANCE32F_ARB: >> + return MESA_FORMAT_LUMINANCE_FLOAT32; >> + case GL_LUMINANCE8I_EXT: >> + return MESA_FORMAT_LUMINANCE_INT8; >> + case GL_LUMINANCE16I_EXT: >> + return MESA_FORMAT_LUMINANCE_INT16; >> + case GL_LUMINANCE32I_EXT: >> + return MESA_FORMAT_LUMINANCE_INT32; >> + case GL_LUMINANCE8UI_EXT: >> + return MESA_FORMAT_LUMINANCE_UINT8; >> + case GL_LUMINANCE16UI_EXT: >> + return MESA_FORMAT_LUMINANCE_UINT16; >> + case GL_LUMINANCE32UI_EXT: >> + return MESA_FORMAT_LUMINANCE_UINT32; >> + case GL_LUMINANCE8_ALPHA8: >> + return MESA_FORMAT_AL88; >> + case GL_LUMINANCE16_ALPHA16: >> + return MESA_FORMAT_AL1616; >> + case GL_LUMINANCE_ALPHA16F_ARB: >> + return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16; >> + case GL_LUMINANCE_ALPHA32F_ARB: >> + return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32; >> + case GL_LUMINANCE_ALPHA8I_EXT: >> + return MESA_FORMAT_LUMINANCE_ALPHA_INT8; >> + case GL_LUMINANCE_ALPHA16I_EXT: >> + return MESA_FORMAT_LUMINANCE_ALPHA_INT8; >> + case GL_LUMINANCE_ALPHA32I_EXT: >> + return MESA_FORMAT_LUMINANCE_ALPHA_INT16; >> + case GL_LUMINANCE_ALPHA8UI_EXT: >> + return MESA_FORMAT_LUMINANCE_ALPHA_UINT8; >> + case GL_LUMINANCE_ALPHA16UI_EXT: >> + return MESA_FORMAT_LUMINANCE_ALPHA_UINT16; >> + case GL_LUMINANCE_ALPHA32UI_EXT: >> + return MESA_FORMAT_LUMINANCE_ALPHA_UINT32; >> + case GL_INTENSITY8: >> + return MESA_FORMAT_I8; >> + case GL_INTENSITY16: >> + return MESA_FORMAT_I16; >> + case GL_INTENSITY16F_ARB: >> + return MESA_FORMAT_INTENSITY_FLOAT16; >> + case GL_INTENSITY32F_ARB: >> + return MESA_FORMAT_INTENSITY_FLOAT32; >> + case GL_INTENSITY8I_EXT: >> + return MESA_FORMAT_INTENSITY_INT8; >> + case GL_INTENSITY16I_EXT: >> + return MESA_FORMAT_INTENSITY_INT16; >> + case GL_INTENSITY32I_EXT: >> + return MESA_FORMAT_INTENSITY_INT32; >> + case GL_INTENSITY8UI_EXT: >> + return MESA_FORMAT_INTENSITY_UINT8; >> + case GL_INTENSITY16UI_EXT: >> + return MESA_FORMAT_INTENSITY_UINT16; >> + case GL_INTENSITY32UI_EXT: >> + return MESA_FORMAT_INTENSITY_UINT32; >> + case GL_RGBA8: >> + return MESA_FORMAT_RGBA8888_REV; >> + case GL_RGBA16: >> + return MESA_FORMAT_RGBA_16; >> + case GL_RGBA16F_ARB: >> + return MESA_FORMAT_RGBA_FLOAT16; >> + case GL_RGBA32F_ARB: >> + return MESA_FORMAT_RGBA_FLOAT32; >> + case GL_RGBA8I_EXT: >> + return MESA_FORMAT_RGBA_INT8; >> + case GL_RGBA16I_EXT: >> + return MESA_FORMAT_RGBA_INT16; >> + case GL_RGBA32I_EXT: >> + return MESA_FORMAT_RGBA_INT32; >> + case GL_RGBA8UI_EXT: >> + return MESA_FORMAT_RGBA_UINT8; >> + case GL_RGBA16UI_EXT: >> + return MESA_FORMAT_RGBA_UINT16; >> + case GL_RGBA32UI_EXT: >> + return MESA_FORMAT_RGBA_UINT32; >> + >> + case GL_RG8: >> + return MESA_FORMAT_GR88; >> + case GL_RG16: >> + return MESA_FORMAT_GR1616; >> + case GL_RG16F: >> + return MESA_FORMAT_RG_FLOAT16; >> + case GL_RG32F: >> + return MESA_FORMAT_RG_FLOAT32; >> + case GL_RG8I: >> + return MESA_FORMAT_RG_INT8; >> + case GL_RG16I: >> + return MESA_FORMAT_RG_INT16; >> + case GL_RG32I: >> + return MESA_FORMAT_RG_INT32; >> + case GL_RG8UI: >> + return MESA_FORMAT_RG_UINT8; >> + case GL_RG16UI: >> + return MESA_FORMAT_RG_UINT16; >> + case GL_RG32UI: >> + return MESA_FORMAT_RG_UINT32; >> + >> + case GL_R8: >> + return MESA_FORMAT_R8; >> + case GL_R16: >> + return MESA_FORMAT_R16; >> + case GL_R16F: >> + return MESA_FORMAT_R_FLOAT16; >> + case GL_R32F: >> + return MESA_FORMAT_R_FLOAT32; >> + case GL_R8I: >> + return MESA_FORMAT_R_INT8; >> + case GL_R16I: >> + return MESA_FORMAT_R_INT16; >> + case GL_R32I: >> + return MESA_FORMAT_R_INT32; >> + case GL_R8UI: >> + return MESA_FORMAT_R_UINT8; >> + case GL_R16UI: >> + return MESA_FORMAT_R_UINT16; >> + case GL_R32UI: >> + return MESA_FORMAT_R_UINT32; >> + >> + case GL_RGB32F: >> + return MESA_FORMAT_RGB_FLOAT32; >> + case GL_RGB32UI: >> + return MESA_FORMAT_RGB_UINT32; >> + case GL_RGB32I: >> + return MESA_FORMAT_RGB_INT32; >> + >> + default: >> + return MESA_FORMAT_NONE; >> + } >> +} >> + >> + >> +/** >> + * Check if the chosen internalformat is supported. >> + * The target and level parameters will have already been validated. >> + * \return the corresponding gl_format if yes, MESA_FORMAT_NONE >> otherwise. >> + */ >> +gl_format >> +_mesa_validate_texbuffer_format(const struct gl_context *ctx, GLenum >> internalFormat) >> +{ >> + gl_format format = get_texbuffer_format(ctx, internalFormat); >> + GLenum datatype; >> + >> + if (format == MESA_FORMAT_NONE) >> + return MESA_FORMAT_NONE; >> + >> + datatype = _mesa_get_format_datatype(format); >> + if (datatype == GL_FLOAT && !ctx->Extensions.ARB_texture_float) >> + return MESA_FORMAT_NONE; >> + >> + if (datatype == GL_HALF_FLOAT && >> !ctx->Extensions.ARB_half_float_pixel) >> + return MESA_FORMAT_NONE; >> + >> + /* The GL_ARB_texture_rg and GL_ARB_texture_buffer_object specs >> don't make >> + * any mention of R/RG formats, but they appear in the GL 3.1 core >> + * specification. >> + */ >> + if (ctx->Version <= 30) { >> + GLenum base_format = _mesa_get_format_base_format(format); >> + >> + if (base_format == GL_R || base_format == GL_RG) >> + return MESA_FORMAT_NONE; >> + } >> + >> + if (!ctx->Extensions.ARB_texture_buffer_object_rgb32) { >> + GLenum base_format = _mesa_get_format_base_format(format); >> + if (base_format == GL_RGB) >> + return MESA_FORMAT_NONE; >> + } >> + return format; >> +} >> + >> + >> /** >> * Do error checking of xoffset, yoffset, zoffset, width, height and >> depth >> * for glTexSubImage, glCopyTexSubImage and glCompressedTexSubImage. >> @@ -3876,201 +4077,6 @@ _mesa_CompressedTexSubImage3D(GLenum target, >> GLint level, GLint xoffset, >> width, height, depth, format, imageSize, >> data); >> } >> >> -static gl_format >> -get_texbuffer_format(const struct gl_context *ctx, GLenum >> internalFormat) >> -{ >> - switch (internalFormat) { >> - case GL_ALPHA8: >> - return MESA_FORMAT_A8; >> - case GL_ALPHA16: >> - return MESA_FORMAT_A16; >> - case GL_ALPHA16F_ARB: >> - return MESA_FORMAT_ALPHA_FLOAT16; >> - case GL_ALPHA32F_ARB: >> - return MESA_FORMAT_ALPHA_FLOAT32; >> - case GL_ALPHA8I_EXT: >> - return MESA_FORMAT_ALPHA_INT8; >> - case GL_ALPHA16I_EXT: >> - return MESA_FORMAT_ALPHA_INT16; >> - case GL_ALPHA32I_EXT: >> - return MESA_FORMAT_ALPHA_INT32; >> - case GL_ALPHA8UI_EXT: >> - return MESA_FORMAT_ALPHA_UINT8; >> - case GL_ALPHA16UI_EXT: >> - return MESA_FORMAT_ALPHA_UINT16; >> - case GL_ALPHA32UI_EXT: >> - return MESA_FORMAT_ALPHA_UINT32; >> - case GL_LUMINANCE8: >> - return MESA_FORMAT_L8; >> - case GL_LUMINANCE16: >> - return MESA_FORMAT_L16; >> - case GL_LUMINANCE16F_ARB: >> - return MESA_FORMAT_LUMINANCE_FLOAT16; >> - case GL_LUMINANCE32F_ARB: >> - return MESA_FORMAT_LUMINANCE_FLOAT32; >> - case GL_LUMINANCE8I_EXT: >> - return MESA_FORMAT_LUMINANCE_INT8; >> - case GL_LUMINANCE16I_EXT: >> - return MESA_FORMAT_LUMINANCE_INT16; >> - case GL_LUMINANCE32I_EXT: >> - return MESA_FORMAT_LUMINANCE_INT32; >> - case GL_LUMINANCE8UI_EXT: >> - return MESA_FORMAT_LUMINANCE_UINT8; >> - case GL_LUMINANCE16UI_EXT: >> - return MESA_FORMAT_LUMINANCE_UINT16; >> - case GL_LUMINANCE32UI_EXT: >> - return MESA_FORMAT_LUMINANCE_UINT32; >> - case GL_LUMINANCE8_ALPHA8: >> - return MESA_FORMAT_AL88; >> - case GL_LUMINANCE16_ALPHA16: >> - return MESA_FORMAT_AL1616; >> - case GL_LUMINANCE_ALPHA16F_ARB: >> - return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16; >> - case GL_LUMINANCE_ALPHA32F_ARB: >> - return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32; >> - case GL_LUMINANCE_ALPHA8I_EXT: >> - return MESA_FORMAT_LUMINANCE_ALPHA_INT8; >> - case GL_LUMINANCE_ALPHA16I_EXT: >> - return MESA_FORMAT_LUMINANCE_ALPHA_INT8; >> - case GL_LUMINANCE_ALPHA32I_EXT: >> - return MESA_FORMAT_LUMINANCE_ALPHA_INT16; >> - case GL_LUMINANCE_ALPHA8UI_EXT: >> - return MESA_FORMAT_LUMINANCE_ALPHA_UINT8; >> - case GL_LUMINANCE_ALPHA16UI_EXT: >> - return MESA_FORMAT_LUMINANCE_ALPHA_UINT16; >> - case GL_LUMINANCE_ALPHA32UI_EXT: >> - return MESA_FORMAT_LUMINANCE_ALPHA_UINT32; >> - case GL_INTENSITY8: >> - return MESA_FORMAT_I8; >> - case GL_INTENSITY16: >> - return MESA_FORMAT_I16; >> - case GL_INTENSITY16F_ARB: >> - return MESA_FORMAT_INTENSITY_FLOAT16; >> - case GL_INTENSITY32F_ARB: >> - return MESA_FORMAT_INTENSITY_FLOAT32; >> - case GL_INTENSITY8I_EXT: >> - return MESA_FORMAT_INTENSITY_INT8; >> - case GL_INTENSITY16I_EXT: >> - return MESA_FORMAT_INTENSITY_INT16; >> - case GL_INTENSITY32I_EXT: >> - return MESA_FORMAT_INTENSITY_INT32; >> - case GL_INTENSITY8UI_EXT: >> - return MESA_FORMAT_INTENSITY_UINT8; >> - case GL_INTENSITY16UI_EXT: >> - return MESA_FORMAT_INTENSITY_UINT16; >> - case GL_INTENSITY32UI_EXT: >> - return MESA_FORMAT_INTENSITY_UINT32; >> - case GL_RGBA8: >> - return MESA_FORMAT_RGBA8888_REV; >> - case GL_RGBA16: >> - return MESA_FORMAT_RGBA_16; >> - case GL_RGBA16F_ARB: >> - return MESA_FORMAT_RGBA_FLOAT16; >> - case GL_RGBA32F_ARB: >> - return MESA_FORMAT_RGBA_FLOAT32; >> - case GL_RGBA8I_EXT: >> - return MESA_FORMAT_RGBA_INT8; >> - case GL_RGBA16I_EXT: >> - return MESA_FORMAT_RGBA_INT16; >> - case GL_RGBA32I_EXT: >> - return MESA_FORMAT_RGBA_INT32; >> - case GL_RGBA8UI_EXT: >> - return MESA_FORMAT_RGBA_UINT8; >> - case GL_RGBA16UI_EXT: >> - return MESA_FORMAT_RGBA_UINT16; >> - case GL_RGBA32UI_EXT: >> - return MESA_FORMAT_RGBA_UINT32; >> - >> - case GL_RG8: >> - return MESA_FORMAT_GR88; >> - case GL_RG16: >> - return MESA_FORMAT_GR1616; >> - case GL_RG16F: >> - return MESA_FORMAT_RG_FLOAT16; >> - case GL_RG32F: >> - return MESA_FORMAT_RG_FLOAT32; >> - case GL_RG8I: >> - return MESA_FORMAT_RG_INT8; >> - case GL_RG16I: >> - return MESA_FORMAT_RG_INT16; >> - case GL_RG32I: >> - return MESA_FORMAT_RG_INT32; >> - case GL_RG8UI: >> - return MESA_FORMAT_RG_UINT8; >> - case GL_RG16UI: >> - return MESA_FORMAT_RG_UINT16; >> - case GL_RG32UI: >> - return MESA_FORMAT_RG_UINT32; >> - >> - case GL_R8: >> - return MESA_FORMAT_R8; >> - case GL_R16: >> - return MESA_FORMAT_R16; >> - case GL_R16F: >> - return MESA_FORMAT_R_FLOAT16; >> - case GL_R32F: >> - return MESA_FORMAT_R_FLOAT32; >> - case GL_R8I: >> - return MESA_FORMAT_R_INT8; >> - case GL_R16I: >> - return MESA_FORMAT_R_INT16; >> - case GL_R32I: >> - return MESA_FORMAT_R_INT32; >> - case GL_R8UI: >> - return MESA_FORMAT_R_UINT8; >> - case GL_R16UI: >> - return MESA_FORMAT_R_UINT16; >> - case GL_R32UI: >> - return MESA_FORMAT_R_UINT32; >> - >> - case GL_RGB32F: >> - return MESA_FORMAT_RGB_FLOAT32; >> - case GL_RGB32UI: >> - return MESA_FORMAT_RGB_UINT32; >> - case GL_RGB32I: >> - return MESA_FORMAT_RGB_INT32; >> - >> - default: >> - return MESA_FORMAT_NONE; >> - } >> -} >> - >> - >> -static gl_format >> -validate_texbuffer_format(const struct gl_context *ctx, GLenum >> internalFormat) >> -{ >> - gl_format format = get_texbuffer_format(ctx, internalFormat); >> - GLenum datatype; >> - >> - if (format == MESA_FORMAT_NONE) >> - return MESA_FORMAT_NONE; >> - >> - datatype = _mesa_get_format_datatype(format); >> - if (datatype == GL_FLOAT && !ctx->Extensions.ARB_texture_float) >> - return MESA_FORMAT_NONE; >> - >> - if (datatype == GL_HALF_FLOAT && >> !ctx->Extensions.ARB_half_float_pixel) >> - return MESA_FORMAT_NONE; >> - >> - /* The GL_ARB_texture_rg and GL_ARB_texture_buffer_object specs >> don't make >> - * any mention of R/RG formats, but they appear in the GL 3.1 core >> - * specification. >> - */ >> - if (ctx->Version <= 30) { >> - GLenum base_format = _mesa_get_format_base_format(format); >> - >> - if (base_format == GL_R || base_format == GL_RG) >> - return MESA_FORMAT_NONE; >> - } >> - >> - if (!ctx->Extensions.ARB_texture_buffer_object_rgb32) { >> - GLenum base_format = _mesa_get_format_base_format(format); >> - if (base_format == GL_RGB) >> - return MESA_FORMAT_NONE; >> - } >> - return format; >> -} >> - >> >> static void >> texbufferrange(struct gl_context *ctx, GLenum target, GLenum >> internalFormat, >> @@ -4087,7 +4093,7 @@ texbufferrange(struct gl_context *ctx, GLenum >> target, GLenum internalFormat, >> return; >> } >> >> - format = validate_texbuffer_format(ctx, internalFormat); >> + format = _mesa_validate_texbuffer_format(ctx, internalFormat); >> if (format == MESA_FORMAT_NONE) { >> _mesa_error(ctx, GL_INVALID_ENUM, "glTexBuffer(internalFormat >> 0x%x)", >> internalFormat); >> diff --git a/src/mesa/main/teximage.h b/src/mesa/main/teximage.h >> index 792383d..0fa8649 100644 >> --- a/src/mesa/main/teximage.h >> +++ b/src/mesa/main/teximage.h >> @@ -147,6 +147,10 @@ _mesa_legal_texture_dimensions(struct gl_context >> *ctx, GLenum target, >> GLint level, GLint width, GLint height, >> GLint depth, GLint border); >> >> +extern gl_format >> +_mesa_validate_texbuffer_format(const struct gl_context *ctx, >> + GLenum internalFormat); >> + >> /** >> * Lock a texture for updating. See also >> _mesa_lock_context_textures(). >> */ >> > > AFAICT, this is just renaming validate_texbuffer_format() to > _mesa_validate_texbuffer_format(), plus a lot of code movement. Why the > code movement? > > -Brian >
you're right, it's just renaming the function. I moved the function because I had the impression that there is some kind of order of static and extern functions. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev