i965: Add flag telling if miptree is for client consumption
authorTopi Pohjolainen <topi.pohjolainen@intel.com>
Sun, 24 Apr 2016 07:45:48 +0000 (10:45 +0300)
committerTopi Pohjolainen <topi.pohjolainen@intel.com>
Thu, 12 May 2016 16:49:22 +0000 (19:49 +0300)
Consider later on adding specific disable flags such as

MIPTREE_LAYOUT_DISABLE_AUX_MCS   = 1 << 3, /* CCS_D */
MIPTREE_LAYOUT_DISABLE_AUX_CCS_E = 1 << 4,
MIPTREE_LAYOUT_DISABLE_AUX       = MIPTREE_LAYOUT_DISABLE_AUX_MCS |
                                   MIPTREE_LAYOUT_DISABLE_AUX_CCS_E,

and equivalent boolean/enums into miptree.

Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Ben Widawsky <ben@bwidawsk.net>
src/mesa/drivers/dri/i965/intel_mipmap_tree.c
src/mesa/drivers/dri/i965/intel_mipmap_tree.h

index 86fe07d7f3fadb416cc866587711dffcbe4768d4..8f6dc2400d806d697116609659f93e9e55ae24ed 100644 (file)
@@ -392,6 +392,7 @@ intel_miptree_create_layout(struct brw_context *brw,
    mt->logical_depth0 = depth0;
    mt->fast_clear_state = INTEL_FAST_CLEAR_STATE_NO_MCS;
    mt->disable_aux_buffers = (layout_flags & MIPTREE_LAYOUT_DISABLE_AUX) != 0;
+   mt->is_scanout = (layout_flags & MIPTREE_LAYOUT_FOR_SCANOUT) != 0;
    exec_list_make_empty(&mt->hiz_map);
    mt->cpp = _mesa_get_format_bytes(format);
    mt->num_samples = num_samples;
@@ -898,7 +899,7 @@ intel_update_winsys_renderbuffer_miptree(struct brw_context *intel,
                                                  height,
                                                  1,
                                                  pitch,
-                                                 0);
+                                                 MIPTREE_LAYOUT_FOR_SCANOUT);
    if (!singlesample_mt)
       goto fail;
 
@@ -957,8 +958,8 @@ intel_miptree_create_for_renderbuffer(struct brw_context *brw,
    bool ok;
    GLenum target = num_samples > 1 ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D;
    const uint32_t layout_flags = MIPTREE_LAYOUT_ACCELERATED_UPLOAD |
-                                 MIPTREE_LAYOUT_TILING_ANY;
-
+                                 MIPTREE_LAYOUT_TILING_ANY |
+                                 MIPTREE_LAYOUT_FOR_SCANOUT;
 
    mt = intel_miptree_create(brw, target, format, 0, 0,
                              width, height, depth, num_samples,
index 4c6877eed9d7e9f1e458a44923ef4956b98e707a..7f6e771b41d61520806b0c5f77df08eb2bf0088a 100644 (file)
@@ -657,6 +657,13 @@ struct intel_mipmap_tree
     */
    bool disable_aux_buffers;
 
+   /**
+    * Tells if the underlying buffer is to be also consumed by entities other
+    * than the driver. This allows logic to turn off features such as lossless
+    * compression which is not currently understood by client applications.
+    */
+   bool is_scanout;
+
    /* These are also refcounted:
     */
    GLuint refcount;
@@ -697,6 +704,8 @@ enum {
    MIPTREE_LAYOUT_TILING_NONE              = 1 << 6,
    MIPTREE_LAYOUT_TILING_ANY               = MIPTREE_LAYOUT_TILING_Y |
                                              MIPTREE_LAYOUT_TILING_NONE,
+
+   MIPTREE_LAYOUT_FOR_SCANOUT              = 1 << 7,
 };
 
 struct intel_mipmap_tree *intel_miptree_create(struct brw_context *brw,