Signed-off-by: Chris Wilson <[email protected]>
---
 src/mesa/drivers/dri/intel/intel_buffer_objects.c |   43 +++++++++++++++++++++
 src/mesa/drivers/dri/intel/intel_extensions.c     |    2 +
 2 files changed, 45 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_extensions.c 
b/src/mesa/drivers/dri/intel/intel_extensions.c
index b6754c9..fe691b9 100644
--- a/src/mesa/drivers/dri/intel/intel_extensions.c
+++ b/src/mesa/drivers/dri/intel/intel_extensions.c
@@ -57,6 +57,7 @@
 #define need_GL_EXT_secondary_color
 #define need_GL_EXT_stencil_two_side
 #define need_GL_APPLE_vertex_array_object
+#define need_GL_APPLE_object_purgeable
 #define need_GL_ATI_separate_stencil
 #define need_GL_ATI_envmap_bumpmap
 #define need_GL_NV_point_sprite
@@ -181,6 +182,7 @@ static const struct dri_extension ttm_extensions[] = {
    { "GL_ARB_pixel_buffer_object",      NULL },
    { "GL_EXT_framebuffer_blit",         GL_EXT_framebuffer_blit_functions },
    { "GL_EXT_framebuffer_object",       GL_EXT_framebuffer_object_functions },
+   { "GL_APPLE_object_purgeable",       GL_APPLE_object_purgeable_functions },
    { NULL, NULL }
 };
 
-- 
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

Reply via email to