-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Chris Wilson wrote:
> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
> index 52c4995..08633a9 100644
> --- a/src/mesa/main/bufferobj.c
> +++ b/src/mesa/main/bufferobj.c
> @@ -37,6 +37,8 @@
> #include "image.h"
> #include "context.h"
> #include "bufferobj.h"
> +#include "fbobject.h"
> +#include "texobj.h"
>
>
> /* Debug flags */
> @@ -1655,3 +1657,351 @@ _mesa_FlushMappedBufferRange(GLenum target, GLintptr
> offset, GLsizeiptr length)
> if (ctx->Driver.FlushMappedBufferRange)
> ctx->Driver.FlushMappedBufferRange(ctx, target, offset, length,
> bufObj);
> }
> +
> +#if FEATURE_APPLE_object_purgeable
> +static GLenum
> +_mesa_RenderObjectPurgeable(GLcontext *ctx, GLuint name, GLenum option)
> +{
> + struct gl_renderbuffer *bufObj;
> + GLenum retval;
> +
> + bufObj = _mesa_lookup_renderbuffer(ctx, name);
> + if (!bufObj) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glObjectUnpurgeable(name = 0x%x)", name);
> + return 0;
> + }
> +
> + if (bufObj->Purgeable) {
> + _mesa_error(ctx, GL_INVALID_OPERATION,
> + "glObjectPurgeable(name = 0x%x) is already purgeable",
> name);
> + return GL_VOLATILE_APPLE;
> + }
> +
> + bufObj->Purgeable = GL_TRUE;
> +
> + retval = GL_VOLATILE_APPLE;
> + if (ctx->Driver.ObjectPurgeable_RenderObject)
> + retval = ctx->Driver.ObjectPurgeable_RenderObject(ctx, bufObj, option);
> +
> + return retval;
> +}
> +
> +static GLenum
> +_mesa_TextureObjectPurgeable(GLcontext *ctx, GLuint name, GLenum option)
Usually, only functions that are connected directly to the dispatch
table get camel case. Functions that are only used internally are
usually named _mesa_texture_object_purgeable.
I don't know if it's worth changing these. Brian may have an opinion
about this.
> +{
> + struct gl_texture_object *bufObj;
> + GLenum retval;
> +
> + bufObj = _mesa_lookup_texture(ctx, name);
> + if (!bufObj) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glObjectPurgeable(name = 0x%x)", name);
> + return 0;
> + }
> +
> + if (bufObj->Purgeable) {
> + _mesa_error(ctx, GL_INVALID_OPERATION,
> + "glObjectPurgeable(name = 0x%x) is already purgeable",
> name);
> + return GL_VOLATILE_APPLE;
> + }
> +
> + bufObj->Purgeable = GL_TRUE;
> +
> + retval = GL_VOLATILE_APPLE;
> + if (ctx->Driver.ObjectPurgeable_TextureObject)
> + retval = ctx->Driver.ObjectPurgeable_TextureObject(ctx, bufObj,
> option);
> +
> + return retval;
> +}
> +
> +static GLenum
> +_mesa_BufferObjectPurgeable(GLcontext *ctx, GLuint name, GLenum option)
> +{
> + struct gl_buffer_object *bufObj;
> + GLenum retval;
> +
> + bufObj = get_buffer(ctx, name);
> + if (!bufObj) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glObjectPurgeable(name = 0x%x)", name);
> + return 0;
> + }
> +
> + if (bufObj->Purgeable) {
> + _mesa_error(ctx, GL_INVALID_OPERATION,
> + "glObjectPurgeable(name = 0x%x) is already purgeable",
> name);
> + return GL_VOLATILE_APPLE;
> + }
> +
> + bufObj->Purgeable = GL_TRUE;
> +
> + retval = GL_VOLATILE_APPLE;
> + if (ctx->Driver.ObjectPurgeable_BufferObject)
> + retval = ctx->Driver.ObjectPurgeable_BufferObject(ctx, bufObj, option);
> +
> + return retval;
> +}
> +
> +GLenum GLAPIENTRY
> +_mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + if (name == 0) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glObjectPurgeable(name = 0x%x)", name);
> + return 0;
> + }
> +
> + switch (option) {
> + case GL_VOLATILE_APPLE:
> + case GL_RELEASED_APPLE:
> + break;
> +
> + default:
> + _mesa_error(ctx, GL_INVALID_ENUM,
> + "glObjectPurgeable(name = 0x%x) invalid option: %d", name,
> option);
> + return 0;
> + }
> +
> + switch (objectType) {
> + case GL_TEXTURE:
> + return _mesa_TextureObjectPurgeable (ctx, name, option);
> + case GL_RENDERBUFFER_EXT:
> + return _mesa_RenderObjectPurgeable (ctx, name, option);
> + case GL_BUFFER_OBJECT_APPLE:
> + return _mesa_BufferObjectPurgeable (ctx, name, option);
> +
> + default:
> + _mesa_error(ctx, GL_INVALID_ENUM,
> + "glObjectPurgeable(name = 0x%x) invalid type: %d", name,
> objectType);
> + return 0;
> + }
> +}
> +
> +static GLenum
> +_mesa_RenderObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
> +{
> + struct gl_renderbuffer *bufObj;
> + GLenum retval;
> +
> + bufObj = _mesa_lookup_renderbuffer(ctx, name);
> + if (!bufObj) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glObjectUnpurgeable(name = 0x%x)", name);
> + return 0;
> + }
> +
> + if (! bufObj->Purgeable) {
> + _mesa_error(ctx, GL_INVALID_OPERATION,
> + "glObjectUnpurgeable(name = 0x%x) object is already
> \"unpurged\"", name);
> + return 0;
> + }
> +
> + bufObj->Purgeable = GL_FALSE;
> +
> + retval = GL_RETAINED_APPLE;
> + if (ctx->Driver.ObjectUnpurgeable_RenderObject)
> + retval = ctx->Driver.ObjectUnpurgeable_RenderObject(ctx, bufObj,
> option);
> +
> + return retval;
> +}
> +
> +static GLenum
> +_mesa_TextureObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
> +{
> + struct gl_texture_object *bufObj;
> + GLenum retval;
> +
> + bufObj = _mesa_lookup_texture(ctx, name);
> + if (!bufObj) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glObjectUnpurgeable(name = 0x%x)", name);
> + return 0;
> + }
> +
> + if (! bufObj->Purgeable) {
> + _mesa_error(ctx, GL_INVALID_OPERATION,
> + "glObjectUnpurgeable(name = 0x%x) object is already
> \"unpurged\"", name);
> + return 0;
> + }
> +
> + bufObj->Purgeable = GL_FALSE;
> +
> + retval = GL_RETAINED_APPLE;
> + if (ctx->Driver.ObjectUnpurgeable_TextureObject)
> + retval = ctx->Driver.ObjectUnpurgeable_TextureObject(ctx, bufObj,
> option);
> +
> + return retval;
> +}
> +
> +static GLenum
> +_mesa_BufferObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option)
> +{
> + struct gl_buffer_object *bufObj;
> + GLenum retval;
> +
> + bufObj = get_buffer(ctx, name);
> + if (!bufObj) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glObjectUnpurgeable(name = 0x%x)", name);
> + return 0;
> + }
> +
> + if (! bufObj->Purgeable) {
> + _mesa_error(ctx, GL_INVALID_OPERATION,
> + "glObjectUnpurgeable(name = 0x%x) object is already
> \"unpurged\"", name);
> + return 0;
> + }
> +
> + bufObj->Purgeable = GL_FALSE;
> +
> + retval = GL_RETAINED_APPLE;
> + if (ctx->Driver.ObjectUnpurgeable_BufferObject)
> + retval = ctx->Driver.ObjectUnpurgeable_BufferObject(ctx, bufObj,
> option);
> +
> + return retval;
> +}
> +
> +GLenum GLAPIENTRY
> +_mesa_ObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + if (name == 0) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glObjectUnpurgeable(name = 0x%x)", name);
> + return 0;
> + }
> +
> + switch (option) {
> + case GL_RETAINED_APPLE:
> + case GL_UNDEFINED_APPLE:
> + break;
> +
> + default:
> + _mesa_error(ctx, GL_INVALID_ENUM,
> + "glObjectUnpurgeable(name = 0x%x) invalid option: %d",
> name, option);
> + return 0;
> + }
> +
> + switch (objectType) {
> + case GL_BUFFER_OBJECT_APPLE:
> + return _mesa_BufferObjectUnpurgeable(ctx, name, option);
> +
> + case GL_TEXTURE:
> + return _mesa_TextureObjectUnpurgeable(ctx, name, option);
> +
> + case GL_RENDERBUFFER_EXT:
> + return _mesa_RenderObjectUnpurgeable(ctx, name, option);
> +
> + default:
> + _mesa_error(ctx, GL_INVALID_ENUM,
> + "glObjectUnpurgeable(name = 0x%x) invalid type: %d", name,
> objectType);
> + return 0;
> + }
> +}
> +
> +static void
> +_mesa_GetBufferObjectParameterivAPPLE(GLcontext *ctx, GLuint name, GLenum
> pname, GLint* params)
> +{
> + struct gl_buffer_object *bufObj;
> +
> + bufObj = get_buffer(ctx, name);
> + if (!bufObj) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glGetObjectParameteriv(name = 0x%x) invalid object",
> name);
> + return;
> + }
> +
> + switch (pname) {
> + case GL_PURGEABLE_APPLE:
> + *params = bufObj->Purgeable;
> + break;
> +
> + default:
> + _mesa_error(ctx, GL_INVALID_ENUM,
> + "glGetObjectParameteriv(name = 0x%x) invalid enum: %d",
> name, pname);
> + break;
> + }
> +}
> +
> +static void
> +_mesa_GetRenderObjectParameterivAPPLE(GLcontext *ctx, GLuint name, GLenum
> pname, GLint* params)
> +{
> + struct gl_renderbuffer *bufObj;
> +
> + bufObj = _mesa_lookup_renderbuffer(ctx, name);
> + if (!bufObj) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glObjectUnpurgeable(name = 0x%x)", name);
> + return;
> + }
> +
> + switch (pname) {
> + case GL_PURGEABLE_APPLE:
> + *params = bufObj->Purgeable;
> + break;
> +
> + default:
> + _mesa_error(ctx, GL_INVALID_ENUM,
> + "glGetObjectParameteriv(name = 0x%x) invalid enum: %d",
> name, pname);
> + break;
> + }
> +}
> +
> +static void
> +_mesa_GetTextureObjectParameterivAPPLE(GLcontext *ctx, GLuint name, GLenum
> pname, GLint* params)
> +{
> + struct gl_texture_object *bufObj;
> +
> + bufObj = _mesa_lookup_texture(ctx, name);
> + if (!bufObj) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glObjectUnpurgeable(name = 0x%x)", name);
> + return;
> + }
> +
> + switch (pname) {
> + case GL_PURGEABLE_APPLE:
> + *params = bufObj->Purgeable;
> + break;
> +
> + default:
> + _mesa_error(ctx, GL_INVALID_ENUM,
> + "glGetObjectParameteriv(name = 0x%x) invalid enum: %d",
> name, pname);
> + break;
> + }
> +}
> +
> +void GLAPIENTRY
> +_mesa_GetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum
> pname, GLint* params)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + if (name == 0) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glGetObjectParameteriv(name = 0x%x)", name);
> + return;
> + }
> +
> + switch (objectType) {
> + case GL_TEXTURE:
> + _mesa_GetTextureObjectParameterivAPPLE (ctx, name, pname, params);
> + break;
> +
> + case GL_BUFFER_OBJECT_APPLE:
> + _mesa_GetBufferObjectParameterivAPPLE (ctx, name, pname, params);
> + break;
> +
> + case GL_RENDERBUFFER_EXT:
> + _mesa_GetRenderObjectParameterivAPPLE (ctx, name, pname, params);
> + break;
> +
> + default:
> + _mesa_error(ctx, GL_INVALID_ENUM,
> + "glGetObjectParameteriv(name = 0x%x) invalid type: %d",
> name, objectType);
> + }
> +}
> +#endif
> diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
> index 2138bfe..d1f3370 100644
> --- a/src/mesa/main/extensions.c
> +++ b/src/mesa/main/extensions.c
> @@ -148,6 +148,7 @@ static const struct {
> { OFF, "GL_APPLE_client_storage", F(APPLE_client_storage) },
> { ON, "GL_APPLE_packed_pixels", F(APPLE_packed_pixels) },
> { OFF, "GL_APPLE_vertex_array_object", F(APPLE_vertex_array_object)
> },
> + { OFF, "GL_APPLE_object_purgeable", F(APPLE_object_purgeable) },
'o' comes before 'p' or 'v'. :)
> { OFF, "GL_ATI_blend_equation_separate",
> F(EXT_blend_equation_separate) },
> { OFF, "GL_ATI_envmap_bumpmap", F(ATI_envmap_bumpmap) },
> { OFF, "GL_ATI_texture_env_combine3", F(ATI_texture_env_combine3)},
> @@ -254,6 +255,9 @@ _mesa_enable_sw_extensions(GLcontext *ctx)
> ctx->Extensions.ARB_sync = GL_TRUE;
> #endif
> ctx->Extensions.APPLE_vertex_array_object = GL_TRUE;
> +#if FEATURE_APPLE_object_purgeable
> + ctx->Extensions.APPLE_object_purgeable = GL_TRUE;
> +#endif
> ctx->Extensions.ATI_envmap_bumpmap = GL_TRUE;
> #if FEATURE_ATI_fragment_shader
> ctx->Extensions.ATI_fragment_shader = GL_TRUE;
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index 881d233..6e4af60 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -1241,6 +1241,7 @@ struct gl_texture_object
> GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */
> GLboolean _Complete; /**< Is texture object complete? */
> GLboolean _RenderToTexture; /**< Any rendering to this texture? */
> + GLboolean Purgeable; /**< Is the buffer purgeable under memory
> pressure? */
>
> /** Actual texture images, indexed by [cube face] and [mipmap level] */
> struct gl_texture_image *Image[MAX_FACES][MAX_TEXTURE_LEVELS];
> @@ -1435,6 +1436,7 @@ struct gl_buffer_object
> GLsizeiptr Length; /**< Mapped length */
> /*...@}*/
> GLboolean Written; /**< Ever written to? (for debugging) */
> + GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure?
> */
> };
>
>
> @@ -2094,6 +2096,7 @@ struct gl_renderbuffer
> GLuint Name;
> GLint RefCount;
> GLuint Width, Height;
> + GLboolean Purgeable; /**< Is the buffer purgeable under memory
> pressure? */
>
> GLenum InternalFormat; /**< The user-specified format */
> GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or
> @@ -2479,6 +2482,7 @@ struct gl_extensions
> GLboolean APPLE_client_storage;
> GLboolean APPLE_packed_pixels;
> GLboolean APPLE_vertex_array_object;
> + GLboolean APPLE_object_purgeable;
Same sorting as above.
> GLboolean ATI_envmap_bumpmap;
> GLboolean ATI_texture_mirror_once;
> GLboolean ATI_texture_env_combine3;
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAksEWNEACgkQX1gOwKyEAw/6IQCdFcsDIweOzskCWqJTKcTe3lTQ
gMsAnj/Dg6EINx6+da1jUCz4YYSMV7JH
=h3sK
-----END PGP SIGNATURE-----
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
--
_______________________________________________
Dri-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel