Mesa (master): i915g: Create a special 2D layout helper

Jakob Bornecrantz wallbraker at kemper.freedesktop.org
Thu Apr 15 15:53:04 PDT 2010


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

Author: Jakob Bornecrantz <jakob at vmware.com>
Date:   Thu Apr 15 23:30:44 2010 +0100

i915g: Create a special 2D layout helper

---

 src/gallium/drivers/i915/i915_resource_texture.c |   57 +++++++++++----------
 1 files changed, 30 insertions(+), 27 deletions(-)

diff --git a/src/gallium/drivers/i915/i915_resource_texture.c b/src/gallium/drivers/i915/i915_resource_texture.c
index 87c53f1..d9bb63b 100644
--- a/src/gallium/drivers/i915/i915_resource_texture.c
+++ b/src/gallium/drivers/i915/i915_resource_texture.c
@@ -188,6 +188,32 @@ i9x5_display_target_layout(struct i915_texture *tex)
    return TRUE;
 }
 
+/**
+ * Helper function for special layouts
+ */
+static boolean
+i9x5_special_layout(struct i915_texture *tex)
+{
+   struct pipe_resource *pt = &tex->b.b;
+
+   /* Scanouts needs special care */
+   if (pt->bind & PIPE_BIND_SCANOUT)
+      if (i9x5_scanout_layout(tex))
+         return TRUE;
+
+   /* Shared buffers needs to be compatible with X servers
+    *
+    * XXX: need a better name than shared for this if it is to be part
+    * of core gallium, and probably move the flag to resource.flags,
+    * rather than bindings.
+    */
+   if (pt->bind & (PIPE_BIND_SHARED | PIPE_BIND_DISPLAY_TARGET))
+      if (i9x5_display_target_layout(tex))
+         return TRUE;
+
+   return FALSE;
+}
+
 
 /*
  * i915 layout functions
@@ -204,21 +230,6 @@ i915_texture_layout_2d(struct i915_texture *tex)
    unsigned nblocksy = util_format_get_nblocksy(pt->format, pt->width0);
    unsigned align_y = 2;
 
-   /* used for scanouts that need special layouts */
-   if (pt->bind & PIPE_BIND_SCANOUT)
-      if (i9x5_scanout_layout(tex))
-         return;
-
-   /* shared buffers needs to be compatible with X servers 
-    * 
-    * XXX: need a better name than shared for this if it is to be part
-    * of core gallium, and probably move the flag to resource.flags,
-    * rather than bindings.
-    */
-   if (pt->bind & (PIPE_BIND_SHARED | PIPE_BIND_DISPLAY_TARGET))
-      if (i9x5_display_target_layout(tex))
-         return;
-
    if (util_format_is_s3tc(pt->format))
       align_y = 1;
 
@@ -321,7 +332,8 @@ i915_texture_layout(struct i915_texture * tex)
    switch (pt->target) {
    case PIPE_TEXTURE_1D:
    case PIPE_TEXTURE_2D:
-      i915_texture_layout_2d(tex);
+      if (!i9x5_special_layout(tex))
+         i915_texture_layout_2d(tex);
       break;
    case PIPE_TEXTURE_3D:
       i915_texture_layout_3d(tex);
@@ -356,16 +368,6 @@ i945_texture_layout_2d(struct i915_texture *tex)
    unsigned nblocksx = util_format_get_nblocksx(pt->format, pt->width0);
    unsigned nblocksy = util_format_get_nblocksy(pt->format, pt->height0);
 
-   /* used for scanouts that need special layouts */
-   if (tex->b.b.bind & PIPE_BIND_SCANOUT)
-      if (i9x5_scanout_layout(tex))
-         return;
-
-   /* shared buffers needs to be compatible with X servers */
-   if (tex->b.b.bind & (PIPE_BIND_SHARED | PIPE_BIND_DISPLAY_TARGET))
-      if (i9x5_display_target_layout(tex))
-         return;
-
    if (util_format_is_s3tc(pt->format)) {
       align_x = 1;
       align_y = 1;
@@ -574,7 +576,8 @@ i945_texture_layout(struct i915_texture * tex)
    switch (pt->target) {
    case PIPE_TEXTURE_1D:
    case PIPE_TEXTURE_2D:
-      i945_texture_layout_2d(tex);
+      if (!i9x5_special_layout(tex))
+         i945_texture_layout_2d(tex);
       break;
    case PIPE_TEXTURE_3D:
       i945_texture_layout_3d(tex);



More information about the mesa-commit mailing list