gallium/xorg st/nv50: add PIPE_BIND_CURSOR
authorMarcin Slusarz <marcin.slusarz@gmail.com>
Fri, 6 May 2011 17:06:20 +0000 (19:06 +0200)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Fri, 6 May 2011 17:09:23 +0000 (19:09 +0200)
We need to distinguish surfaces for mouse cursors from scanouts,
because nv50 hardware display engine ignores tiling flags.

src/gallium/drivers/nv50/nv50_miptree.c
src/gallium/include/pipe/p_defines.h
src/gallium/state_trackers/xorg/xorg_crtc.c

index 9eeca05ada3f0f3a7ad5e39d1f946418dd88c437..486b368ae98efb64ab42a3ef4364d33aec5c8ffb 100644 (file)
@@ -158,6 +158,9 @@ nv50_miptree_create(struct pipe_screen *pscreen,
       tile_flags = 0x6000;
       break;
    default:
+      if (pt->bind & PIPE_BIND_CURSOR)
+         tile_flags = 0;
+      else
       if ((pt->bind & PIPE_BIND_SCANOUT) &&
           util_format_get_blocksizebits(pt->format) == 32)
          tile_flags = 0x7a00;
@@ -165,6 +168,8 @@ nv50_miptree_create(struct pipe_screen *pscreen,
          tile_flags = 0x7000;
       break;
    }
+   if (pt->bind & (PIPE_BIND_SCANOUT | PIPE_BIND_CURSOR))
+      tile_flags |= NOUVEAU_BO_TILE_SCANOUT;
 
    /* For 3D textures, a mipmap is spanned by all the layers, for array
     * textures and cube maps, each layer contains its own mipmaps.
@@ -176,7 +181,10 @@ nv50_miptree_create(struct pipe_screen *pscreen,
       unsigned blocksize = util_format_get_blocksize(pt->format);
 
       lvl->offset = mt->total_size;
-      lvl->tile_mode = get_tile_dims(nbx, nby, d);
+
+      if (tile_flags & NOUVEAU_BO_TILE_LAYOUT_MASK)
+         lvl->tile_mode = get_tile_dims(nbx, nby, d);
+
       lvl->pitch = align(nbx * blocksize, NV50_TILE_PITCH(lvl->tile_mode));
 
       mt->total_size += lvl->pitch *
index 431a7fb66952b8b156b06990f9c8bb7e8545cc6e..5f7dd96516c5965431905bca37025bd666908412 100644 (file)
@@ -300,7 +300,8 @@ enum pipe_transfer_usage {
 #define PIPE_BIND_TRANSFER_WRITE       (1 << 9) /* get_transfer */
 #define PIPE_BIND_TRANSFER_READ        (1 << 10) /* get_transfer */
 #define PIPE_BIND_STREAM_OUTPUT        (1 << 11) /* set_stream_output_buffers */
-#define PIPE_BIND_CUSTOM               (1 << 16) /* state-tracker/winsys usages */
+#define PIPE_BIND_CURSOR               (1 << 16) /* mouse cursor */
+#define PIPE_BIND_CUSTOM               (1 << 17) /* state-tracker/winsys usages */
 
 /* The first two flags above were previously part of the amorphous
  * TEXTURE_USAGE, most of which are now descriptions of the ways a
index 40b8434636b2e62be04a51f81592d275273a21cf..0499ed1ea0b59925004fc6e6343a0a07136788e6 100644 (file)
@@ -221,6 +221,7 @@ crtc_load_cursor_argb_ga3d(xf86CrtcPtr crtc, CARD32 * image)
        memset(&templat, 0, sizeof(templat));
        templat.bind |= PIPE_BIND_RENDER_TARGET;
        templat.bind |= PIPE_BIND_SCANOUT;
+       templat.bind |= PIPE_BIND_CURSOR;
        templat.target = PIPE_TEXTURE_2D;
        templat.last_level = 0;
        templat.depth0 = 1;