i915: Enable winsys to get buffer from texture
authorJakob Bornecrantz <wallbraker@gmail.com>
Tue, 24 Feb 2009 22:22:34 +0000 (23:22 +0100)
committerJakob Bornecrantz <wallbraker@gmail.com>
Wed, 25 Feb 2009 01:00:29 +0000 (02:00 +0100)
src/gallium/drivers/i915simple/i915_texture.c
src/gallium/drivers/i915simple/i915_winsys.h

index 957726523fafb23b2dbe6a4a4a538abada88bb51..6aead3e75e99ef0d9e96e1d3e96b43f6d321ca99 100644 (file)
@@ -42,6 +42,7 @@
 #include "i915_texture.h"
 #include "i915_debug.h"
 #include "i915_screen.h"
+#include "i915_winsys.h"
 
 /*
  * Helper function and arrays
@@ -765,3 +766,20 @@ i915_init_screen_texture_functions(struct pipe_screen *screen)
    screen->texture_blanket = i915_texture_blanket;
    screen->tex_surface_release = i915_tex_surface_release;
 }
+
+boolean i915_get_texture_buffer( struct pipe_texture *texture,
+                                 struct pipe_buffer **buf,
+                                 unsigned *stride )
+{
+   struct i915_texture *tex = (struct i915_texture *)texture;
+
+   if (!tex)
+      return FALSE;
+
+   pipe_buffer_reference(texture->screen, buf, tex->buffer);
+
+   if (stride)
+      *stride = tex->stride;
+
+   return TRUE;
+}
index 39f3f5a8497f3c65b1947a6d01a4ede6726f5827..ff5b34f193ab33498cd0b95409cc678e9240cd88 100644 (file)
@@ -56,6 +56,7 @@ extern "C" {
  */
 
 struct i915_batchbuffer;
+struct pipe_texture;
 struct pipe_buffer;
 struct pipe_fence_handle;
 struct pipe_winsys;
@@ -123,6 +124,18 @@ struct pipe_context *i915_create_context( struct pipe_screen *screen,
                                           struct pipe_winsys *winsys,
                                           struct i915_winsys *i915 );
 
+/**
+ * Used for the winsys to get the buffer used for a texture
+ * and also the stride used for the texture.
+ *
+ * Buffer is referenced for you so you need to unref after use.
+ *
+ * This is needed for example kms.
+ */
+boolean i915_get_texture_buffer( struct pipe_texture *texture,
+                                 struct pipe_buffer **buf,
+                                 unsigned *stride );
+
 #ifdef __cplusplus
 }
 #endif