[Mesa-dev] [PATCH 1/2] mesa: implement AMD_seamless_cubemap_per_texture
Brian Paul
brianp at vmware.com
Tue May 3 12:24:18 PDT 2011
On 05/03/2011 07:55 AM, Marek Olšák wrote:
> ---
> src/mesa/main/extensions.c | 1 +
> src/mesa/main/mtypes.h | 2 ++
> src/mesa/main/texobj.c | 2 ++
> src/mesa/main/texparam.c | 32 ++++++++++++++++++++++++++++++++
> 4 files changed, 37 insertions(+), 0 deletions(-)
>
> diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
> index 1062cde..a9ef8fa 100644
> --- a/src/mesa/main/extensions.c
> +++ b/src/mesa/main/extensions.c
> @@ -260,6 +260,7 @@ static const struct extension extension_table[] = {
> { "GL_3DFX_texture_compression_FXT1", o(TDFX_texture_compression_FXT1), GL, 1999 },
> { "GL_AMD_conservative_depth", o(AMD_conservative_depth), GL, 2009 },
> { "GL_AMD_draw_buffers_blend", o(ARB_draw_buffers_blend), GL, 2009 },
> + { "GL_AMD_seamless_cubemap_per_texture", o(AMD_seamless_cubemap_per_texture), GL, 2009 },
> { "GL_AMD_shader_stencil_export", o(ARB_shader_stencil_export), GL, 2009 },
> { "GL_APPLE_client_storage", o(APPLE_client_storage), GL, 2002 },
> { "GL_APPLE_object_purgeable", o(APPLE_object_purgeable), GL, 2006 },
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index fba65e8..ad65b55 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -1370,6 +1370,7 @@ struct gl_texture_object
> GLint CropRect[4]; /**< GL_OES_draw_texture */
> GLenum Swizzle[4]; /**< GL_EXT_texture_swizzle */
> GLuint _Swizzle; /**< same as Swizzle, but SWIZZLE_* format */
> + GLboolean CubeMapSeamless; /**< GL_AMD_seamless_cubemap_per_texture */
I'm wondering if this field should be per-texture object or
per-sampler object. I've sent an email to someone at AMD to find out.
I'll let you know.
> GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */
> GLboolean _Complete; /**< Is texture object complete? */
> GLboolean _RenderToTexture; /**< Any rendering to this texture? */
> @@ -2885,6 +2886,7 @@ struct gl_extensions
> GLboolean OES_standard_derivatives;
> /* vendor extensions */
> GLboolean AMD_conservative_depth;
> + GLboolean AMD_seamless_cubemap_per_texture;
> GLboolean APPLE_client_storage;
> GLboolean APPLE_packed_pixels;
> GLboolean APPLE_vertex_array_object;
> diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
> index 43d6e52..2272110 100644
> --- a/src/mesa/main/texobj.c
> +++ b/src/mesa/main/texobj.c
> @@ -146,6 +146,7 @@ _mesa_initialize_texture_object( struct gl_texture_object *obj,
> obj->Swizzle[2] = GL_BLUE;
> obj->Swizzle[3] = GL_ALPHA;
> obj->_Swizzle = SWIZZLE_NOOP;
> + obj->CubeMapSeamless = GL_FALSE;
> obj->Sampler.sRGBDecode = GL_DECODE_EXT;
> }
>
> @@ -259,6 +260,7 @@ _mesa_copy_texture_object( struct gl_texture_object *dest,
> dest->_Complete = src->_Complete;
> COPY_4V(dest->Swizzle, src->Swizzle);
> dest->_Swizzle = src->_Swizzle;
> + dest->CubeMapSeamless = src->CubeMapSeamless;
> }
>
>
> diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
> index f86a8cf..05f77b3 100644
> --- a/src/mesa/main/texparam.c
> +++ b/src/mesa/main/texparam.c
> @@ -439,6 +439,20 @@ set_tex_parameteri(struct gl_context *ctx,
> }
> goto invalid_pname;
>
> + case GL_TEXTURE_CUBE_MAP_SEAMLESS:
> + if (ctx->Extensions.AMD_seamless_cubemap_per_texture) {
> + GLenum param = params[0];
> + if (param != GL_TRUE&& param != GL_FALSE) {
> + goto invalid_param;
> + }
> + if (param != texObj->CubeMapSeamless) {
> + flush(ctx);
> + texObj->CubeMapSeamless = param;
> + }
> + return GL_TRUE;
> + }
> + goto invalid_pname;
> +
> default:
> goto invalid_pname;
> }
> @@ -580,6 +594,7 @@ _mesa_TexParameterf(GLenum target, GLenum pname, GLfloat param)
> case GL_TEXTURE_COMPARE_FUNC_ARB:
> case GL_DEPTH_TEXTURE_MODE_ARB:
> case GL_TEXTURE_SRGB_DECODE_EXT:
> + case GL_TEXTURE_CUBE_MAP_SEAMLESS:
> {
> /* convert float param to int */
> GLint p[4];
> @@ -629,6 +644,7 @@ _mesa_TexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
> case GL_TEXTURE_COMPARE_FUNC_ARB:
> case GL_DEPTH_TEXTURE_MODE_ARB:
> case GL_TEXTURE_SRGB_DECODE_EXT:
> + case GL_TEXTURE_CUBE_MAP_SEAMLESS:
> {
> /* convert float param to int */
> GLint p[4];
> @@ -1235,6 +1251,14 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
> }
> break;
>
> + case GL_TEXTURE_CUBE_MAP_SEAMLESS:
> + if (ctx->Extensions.AMD_seamless_cubemap_per_texture) {
> + *params = (GLfloat) obj->CubeMapSeamless;
> + }
> + else {
> + error = GL_TRUE;
> + }
> +
> default:
> error = GL_TRUE;
> break;
> @@ -1396,6 +1420,14 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
> }
> break;
>
> + case GL_TEXTURE_CUBE_MAP_SEAMLESS:
> + if (ctx->Extensions.AMD_seamless_cubemap_per_texture) {
> + *params = (GLint) obj->CubeMapSeamless;
> + }
> + else {
> + error = GL_TRUE;
> + }
> +
> default:
> ; /* silence warnings */
> }
Other than the above issue, Reviewed-by: Brian Paul <brianp at vmware.com>
More information about the mesa-dev
mailing list