Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> --- src/mesa/drivers/dri/intel/intel_buffer_objects.c | 43 +++++++++++++++++++++ src/mesa/drivers/dri/intel/intel_context.c | 1 + 2 files changed, 44 insertions(+), 0 deletions(-)
diff --git a/src/mesa/drivers/dri/intel/intel_buffer_objects.c b/src/mesa/drivers/dri/intel/intel_buffer_objects.c index ea9d5a6..856d71a 100644 --- a/src/mesa/drivers/dri/intel/intel_buffer_objects.c +++ b/src/mesa/drivers/dri/intel/intel_buffer_objects.c @@ -573,6 +573,44 @@ intel_bufferobj_copy_subdata(GLcontext *ctx, intel_batchbuffer_emit_mi_flush(intel->batch); } +#if FEATURE_APPLE_object_purgeable +static GLenum +intel_bufferobj_purgeable(GLcontext * ctx, + struct gl_buffer_object *obj, + GLenum option) +{ + struct intel_buffer_object *intel_obj = intel_buffer_object(obj); + int retained; + + if (intel_obj->buffer != NULL) { + retained = drm_intel_bo_madvise (intel_obj->buffer, I915_MADV_DONTNEED); + } else { + if (intel_obj->sys_buffer != NULL) { + _mesa_free(intel_obj->sys_buffer); + intel_obj->sys_buffer = NULL; + } + retained = 0; + } + + return retained ? GL_VOLATILE_APPLE : GL_RELEASED_APPLE; +} + +static GLenum +intel_bufferobj_unpurgeable(GLcontext * ctx, + struct gl_buffer_object *obj, + GLenum option) +{ + struct intel_buffer_object *intel_obj = intel_buffer_object(obj); + int retained; + + retained = 1; + if (intel_obj->buffer != NULL) + retained = drm_intel_bo_madvise (intel_obj->buffer, I915_MADV_WILLNEED); + + return retained ? GL_RETAINED_APPLE : GL_UNDEFINED_APPLE; +} +#endif + void intelInitBufferObjectFuncs(struct dd_function_table *functions) { @@ -586,4 +624,9 @@ intelInitBufferObjectFuncs(struct dd_function_table *functions) functions->FlushMappedBufferRange = intel_bufferobj_flush_mapped_range; functions->UnmapBuffer = intel_bufferobj_unmap; functions->CopyBufferSubData = intel_bufferobj_copy_subdata; + +#if FEATURE_APPLE_object_purgeable + functions->ObjectPurgeable = intel_bufferobj_purgeable; + functions->ObjectUnpurgeable = intel_bufferobj_unpurgeable; +#endif } diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c index e0022ad..cfdb867 100644 --- a/src/mesa/drivers/dri/intel/intel_context.c +++ b/src/mesa/drivers/dri/intel/intel_context.c @@ -758,6 +758,7 @@ intelInitContext(struct intel_context *intel, intel_fbo_init(intel); + _mesa_enable_extension(ctx, "GL_APPLE_object_purgeable"); if (intel->ctx.Mesa_DXTn) { _mesa_enable_extension(ctx, "GL_EXT_texture_compression_s3tc"); _mesa_enable_extension(ctx, "GL_S3_s3tc"); -- 1.6.5.2 ------------------------------------------------------------------------------ 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 Dri-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dri-devel