Signed-off-by: Chris Wilson <[email protected]>
---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel