Mesa (master): i915g: Add new buffer code not yet hocked up

Jakob Bornecrantz wallbraker at kemper.freedesktop.org
Mon Aug 31 22:42:20 UTC 2009


Module: Mesa
Branch: master
Commit: 105e4b093e28d6cd9e8ec2db9dbc23980d265796
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=105e4b093e28d6cd9e8ec2db9dbc23980d265796

Author: Jakob Bornecrantz <wallbraker at gmail.com>
Date:   Sun Aug 30 16:26:01 2009 +0100

i915g: Add new buffer code not yet hocked up

---

 src/gallium/drivers/i915simple/Makefile      |    1 +
 src/gallium/drivers/i915simple/SConscript    |    1 +
 src/gallium/drivers/i915simple/i915_buffer.c |  136 ++++++++++++++++++++++++++
 src/gallium/drivers/i915simple/i915_buffer.h |   31 ++++++
 4 files changed, 169 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/i915simple/Makefile b/src/gallium/drivers/i915simple/Makefile
index 8870b39..fb533c1 100644
--- a/src/gallium/drivers/i915simple/Makefile
+++ b/src/gallium/drivers/i915simple/Makefile
@@ -5,6 +5,7 @@ LIBNAME = i915simple
 
 C_SOURCES = \
 	i915_blit.c \
+	i915_buffer.c \
 	i915_clear.c \
 	i915_flush.c \
 	i915_context.c \
diff --git a/src/gallium/drivers/i915simple/SConscript b/src/gallium/drivers/i915simple/SConscript
index 2366e12..778c4ed 100644
--- a/src/gallium/drivers/i915simple/SConscript
+++ b/src/gallium/drivers/i915simple/SConscript
@@ -6,6 +6,7 @@ i915simple = env.ConvenienceLibrary(
 	target = 'i915simple',
 	source = [
 		'i915_blit.c',
+		'i915_buffer.c',
 		'i915_clear.c',
 		'i915_context.c',
 		'i915_debug.c',
diff --git a/src/gallium/drivers/i915simple/i915_buffer.c b/src/gallium/drivers/i915simple/i915_buffer.c
new file mode 100644
index 0000000..effeba1
--- /dev/null
+++ b/src/gallium/drivers/i915simple/i915_buffer.c
@@ -0,0 +1,136 @@
+/**************************************************************************
+ *
+ * Copyright © 2009 Jakob Bornecrantz
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+#include "util/u_memory.h"
+#include "i915_screen.h"
+#include "i915_buffer.h"
+
+struct intel_buffer;
+
+struct i915_buffer
+{
+   struct pipe_buffer base;
+
+   struct intel_buffer *ibuf; /** hw buffer */
+
+   void *data; /**< user and malloc data */
+   boolean own; /**< we own the data incase of malloc */
+};
+
+static INLINE struct i915_buffer *
+i915_buffer(struct pipe_buffer *buffer)
+{
+   return (struct i915_buffer *)buffer;
+}
+
+static struct pipe_buffer *
+i915_buffer_create(struct pipe_screen *screen,
+                   unsigned alignment,
+                   unsigned usage,
+                   unsigned size)
+{
+   struct i915_buffer *buf = CALLOC_STRUCT(i915_buffer);
+
+   if (!buf)
+      return NULL;
+
+   pipe_reference_init(&buf->base.reference, 1);
+   buf->base.alignment = alignment;
+   buf->base.screen = screen;
+   buf->base.usage = usage;
+   buf->base.size = size;
+   buf->data = MALLOC(size);
+   buf->own = TRUE;
+
+   if (!buf->data)
+      goto err;
+
+   return &buf->base;
+
+err:
+   FREE(buf);
+   return NULL;
+}
+
+static struct pipe_buffer *
+i915_user_buffer_create(struct pipe_screen *screen,
+                        void *ptr,
+                        unsigned bytes)
+{
+   struct i915_buffer *buf = CALLOC_STRUCT(i915_buffer);
+
+   if (!buf)
+      return NULL;
+
+   pipe_reference_init(&buf->base.reference, 1);
+   buf->base.alignment = 0;
+   buf->base.screen = screen;
+   buf->base.usage = 0;
+   buf->base.size = bytes;
+   buf->data = ptr;
+   buf->own = FALSE;
+
+   return &buf->base;
+}
+
+static void *
+i915_buffer_map(struct pipe_screen *screen,
+                struct pipe_buffer *buffer,
+                unsigned usage)
+{
+   struct i915_buffer *buf = i915_buffer(buffer);
+   assert(!buf->ibuf);
+   return buf->data;
+}
+
+static void
+i915_buffer_unmap(struct pipe_screen *screen,
+                  struct pipe_buffer *buffer)
+{
+   struct i915_buffer *buf = i915_buffer(buffer);
+   assert(!buf->ibuf);
+}
+
+static void
+i915_buffer_destroy(struct pipe_buffer *buffer)
+{
+   struct i915_buffer *buf = i915_buffer(buffer);
+   assert(!buf->ibuf);
+
+   if (buf->own)
+      FREE(buf->data);
+   FREE(buf);
+}
+
+void i915_init_screen_buffer_functions(struct i915_screen *screen)
+{
+   screen->base.buffer_create = i915_buffer_create;
+   screen->base.user_buffer_create = i915_user_buffer_create;
+   screen->base.buffer_map = i915_buffer_map;
+   screen->base.buffer_map_range = NULL;
+   screen->base.buffer_flush_mapped_range = NULL;
+   screen->base.buffer_unmap = i915_buffer_unmap;
+   screen->base.buffer_destroy = i915_buffer_destroy;
+}
diff --git a/src/gallium/drivers/i915simple/i915_buffer.h b/src/gallium/drivers/i915simple/i915_buffer.h
new file mode 100644
index 0000000..80fda7c
--- /dev/null
+++ b/src/gallium/drivers/i915simple/i915_buffer.h
@@ -0,0 +1,31 @@
+/**************************************************************************
+ *
+ * Copyright © 2009 Jakob Bornecrantz
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+#ifndef I915_BUFFER_H
+#define I915_BUFFER_H
+
+void i915_init_screen_buffer_functions(struct i915_screen *screen);
+
+#endif




More information about the mesa-commit mailing list