Replace it with intel_renderbuffer::region::hiz::region.

Signed-off-by: Chad Versace <c...@chad-versace.us>
---
 src/mesa/drivers/dri/i965/brw_misc_state.c     |   27 +++++++++--------
 src/mesa/drivers/dri/intel/intel_context.c     |   10 ++++--
 src/mesa/drivers/dri/intel/intel_fbo.c         |   36 +++++------------------
 src/mesa/drivers/dri/intel/intel_fbo.h         |    3 --
 src/mesa/drivers/dri/intel/intel_mipmap_tree.c |    1 -
 src/mesa/drivers/dri/intel/intel_mipmap_tree.h |   14 ---------
 6 files changed, 29 insertions(+), 62 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c 
b/src/mesa/drivers/dri/i965/brw_misc_state.c
index 2e6780b..6b521e0 100644
--- a/src/mesa/drivers/dri/i965/brw_misc_state.c
+++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
@@ -206,8 +206,8 @@ static void prepare_depthbuffer(struct brw_context *brw)
 
    if (drb)
       brw_add_validated_bo(brw, drb->region->bo);
-   if (drb && drb->hiz_region)
-      brw_add_validated_bo(brw, drb->hiz_region->bo);
+   if (drb && drb->region->hiz.region)
+      brw_add_validated_bo(brw, drb->region->hiz.region->bo);
    if (srb)
       brw_add_validated_bo(brw, srb->region->bo);
 }
@@ -220,7 +220,7 @@ static void emit_depthbuffer(struct brw_context *brw)
    /* _NEW_BUFFERS */
    struct intel_renderbuffer *depth_irb = intel_get_renderbuffer(fb, 
BUFFER_DEPTH);
    struct intel_renderbuffer *stencil_irb = intel_get_renderbuffer(fb, 
BUFFER_STENCIL);
-   struct intel_region *hiz_region = depth_irb ? depth_irb->hiz_region : NULL;
+   bool has_hiz = intel_framebuffer_has_hiz(fb);
    unsigned int len;
 
    /* 3DSTATE_DEPTH_BUFFER, 3DSTATE_STENCIL_BUFFER are both
@@ -315,7 +315,7 @@ static void emit_depthbuffer(struct brw_context *brw)
       uint32_t tile_x, tile_y, offset;
 
       /* If using separate stencil, hiz must be enabled. */
-      assert(!stencil_irb || hiz_region);
+      assert(!stencil_irb || has_hiz);
 
       switch (region->cpp) {
       case 2:
@@ -324,7 +324,7 @@ static void emit_depthbuffer(struct brw_context *brw)
       case 4:
         if (intel->depth_buffer_is_float)
            format = BRW_DEPTHFORMAT_D32_FLOAT;
-        else if (hiz_region)
+        else if (has_hiz)
            format = BRW_DEPTHFORMAT_D24_UNORM_X8_UINT;
         else
            format = BRW_DEPTHFORMAT_D24_UNORM_S8_UINT;
@@ -337,14 +337,14 @@ static void emit_depthbuffer(struct brw_context *brw)
       offset = intel_renderbuffer_tile_offsets(depth_irb, &tile_x, &tile_y);
 
       assert(intel->gen < 6 || region->tiling == I915_TILING_Y);
-      assert(!hiz_region || region->tiling == I915_TILING_Y);
+      assert(!has_hiz || region->tiling == I915_TILING_Y);
 
       BEGIN_BATCH(len);
       OUT_BATCH(_3DSTATE_DEPTH_BUFFER << 16 | (len - 2));
       OUT_BATCH(((region->pitch * region->cpp) - 1) |
                (format << 18) |
-               ((hiz_region ? 1 : 0) << 21) | /* separate stencil enable */
-               ((hiz_region ? 1 : 0) << 22) | /* hiz enable */
+               ((has_hiz ? 1 : 0) << 21) | /* separate stencil enable */
+               ((has_hiz ? 1 : 0) << 22) | /* hiz enable */
                (BRW_TILEWALK_YMAJOR << 26) |
                ((region->tiling != I915_TILING_NONE) << 27) |
                (BRW_SURFACE_2D << 29));
@@ -367,7 +367,7 @@ static void emit_depthbuffer(struct brw_context *brw)
       ADVANCE_BATCH();
    }
 
-   if (hiz_region || stencil_irb) {
+   if (has_hiz || stencil_irb) {
       /*
        * In the 3DSTATE_DEPTH_BUFFER batch emitted above, the 'separate
        * stencil enable' and 'hiz enable' bits were set. Therefore we must
@@ -377,11 +377,12 @@ static void emit_depthbuffer(struct brw_context *brw)
        */
 
       /* Emit hiz buffer. */
-      if (hiz_region) {
+      if (has_hiz) {
+        struct intel_hiz_control *hiz = &depth_irb->region->hiz;
         BEGIN_BATCH(3);
         OUT_BATCH((_3DSTATE_HIER_DEPTH_BUFFER << 16) | (3 - 2));
-        OUT_BATCH(hiz_region->pitch * hiz_region->cpp - 1);
-        OUT_RELOC(hiz_region->bo,
+        OUT_BATCH(hiz->region->pitch * hiz->region->cpp - 1);
+        OUT_RELOC(hiz->region->bo,
                   I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
                   0);
         ADVANCE_BATCH();
@@ -419,7 +420,7 @@ static void emit_depthbuffer(struct brw_context *brw)
     *     3DSTATE_CLEAR_PARAMS packet must follow the DEPTH_BUFFER_STATE packet
     *     when HiZ is enabled and the DEPTH_BUFFER_STATE changes.
     */
-   if (intel->gen >= 6 || hiz_region) {
+   if (intel->gen >= 6 || has_hiz) {
       if (intel->gen == 6)
         intel_emit_post_sync_nonzero_flush(intel);
 
diff --git a/src/mesa/drivers/dri/intel/intel_context.c 
b/src/mesa/drivers/dri/intel/intel_context.c
index 7f8347e..8b4744a 100644
--- a/src/mesa/drivers/dri/intel/intel_context.c
+++ b/src/mesa/drivers/dri/intel/intel_context.c
@@ -1315,8 +1315,8 @@ intel_process_dri2_buffer_with_separate_stencil(struct 
intel_context *intel,
        rb->region &&
        rb->region->name == buffer->name) ||
        (buffer->attachment == __DRI_BUFFER_HIZ &&
-       rb->hiz_region &&
-       rb->hiz_region->name == buffer->name)) {
+       rb->region->hiz.region &&
+       rb->region->hiz.region->name == buffer->name)) {
       return;
    }
 
@@ -1354,7 +1354,11 @@ intel_process_dri2_buffer_with_separate_stencil(struct 
intel_context *intel,
                                    buffer_name);
 
    if (buffer->attachment == __DRI_BUFFER_HIZ) {
-      intel_region_reference(&rb->hiz_region, region);
+      /* We assume that the depth buffer has already been processed. */
+      struct intel_hiz_control *hiz = &rb->region->hiz;
+      intel_region_reference(&hiz->region, region);
+      hiz->need_resolve = INTEL_HIZ_NEED_NO_RESOLVE;
+      hiz->depth_format = rb->Base.Format;
    } else {
       intel_region_reference(&rb->region, region);
    }
diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c 
b/src/mesa/drivers/dri/intel/intel_fbo.c
index 17397e1..0527c97 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.c
+++ b/src/mesa/drivers/dri/intel/intel_fbo.c
@@ -75,7 +75,6 @@ intel_delete_renderbuffer(struct gl_renderbuffer *rb)
    ASSERT(irb);
 
    intel_region_release(&irb->region);
-   intel_region_release(&irb->hiz_region);
 
    _mesa_reference_renderbuffer(&irb->wrapped_depth, NULL);
    _mesa_reference_renderbuffer(&irb->wrapped_stencil, NULL);
@@ -104,8 +103,8 @@ intel_framebuffer_get_hiz_region(struct gl_framebuffer *fb)
    if (fb)
       rb = intel_get_renderbuffer(fb, BUFFER_DEPTH);
 
-   if (rb)
-      return rb->hiz_region;
+   if (rb && rb->region)
+      return rb->region->hiz.region;
    else
       return NULL;
 }
@@ -183,9 +182,6 @@ intel_alloc_renderbuffer_storage(struct gl_context * ctx, 
struct gl_renderbuffer
    if (irb->region) {
       intel_region_release(&irb->region);
    }
-   if (irb->hiz_region) {
-      intel_region_release(&irb->hiz_region);
-   }
 
    /* allocate new memory region/renderbuffer */
 
@@ -268,13 +264,8 @@ intel_alloc_renderbuffer_storage(struct gl_context * ctx, 
struct gl_renderbuffer
         return false;
 
       if (intel->vtbl.is_hiz_depth_format(intel, rb->Format)) {
-        irb->hiz_region = intel_region_alloc(intel->intelScreen,
-                                             I915_TILING_Y,
-                                             irb->region->cpp,
-                                             irb->region->width,
-                                             irb->region->height,
-                                             GL_TRUE);
-        if (!irb->hiz_region) {
+        bool ok = intel_renderbuffer_alloc_hiz(intel, irb);
+        if (!ok) {
            intel_region_release(&irb->region);
            return false;
         }
@@ -583,21 +574,10 @@ intel_update_tex_wrapper_regions(struct intel_context 
*intel,
 
    /* Allocate the texture's hiz region if necessary. */
    if (intel->vtbl.is_hiz_depth_format(intel, rb->Format)
-       && !intel_image->mt->hiz_region) {
-      intel_image->mt->hiz_region =
-         intel_region_alloc(intel->intelScreen,
-                            I915_TILING_Y,
-                            _mesa_get_format_bytes(rb->Format),
-                            rb->Width,
-                            rb->Height,
-                            GL_TRUE);
-      if (!intel_image->mt->hiz_region)
-         return GL_FALSE;
-   }
-
-   /* Point the renderbuffer's hiz region to the texture's hiz region. */
-   if (irb->hiz_region != intel_image->mt->hiz_region) {
-      intel_region_reference(&irb->hiz_region, intel_image->mt->hiz_region);
+       && irb->region->hiz.region == NULL) {
+      bool ok = intel_renderbuffer_alloc_hiz(intel, irb);
+      if (!ok)
+        return false;
    }
 
    return GL_TRUE;
diff --git a/src/mesa/drivers/dri/intel/intel_fbo.h 
b/src/mesa/drivers/dri/intel/intel_fbo.h
index 377cb1b..6573d40 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.h
+++ b/src/mesa/drivers/dri/intel/intel_fbo.h
@@ -45,9 +45,6 @@ struct intel_renderbuffer
    struct gl_renderbuffer Base;
    struct intel_region *region;
 
-   /** Only used by depth renderbuffers for which HiZ is enabled. */
-   struct intel_region *hiz_region;
-
    /**
     * \name Packed depth/stencil unwrappers
     *
diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c 
b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
index dbdc5ef..8a5b4e7 100644
--- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
@@ -202,7 +202,6 @@ intel_miptree_release(struct intel_mipmap_tree **mt)
       DBG("%s deleting %p\n", __FUNCTION__, *mt);
 
       intel_region_release(&((*mt)->region));
-      intel_region_release(&((*mt)->hiz_region));
 
       for (i = 0; i < MAX_TEXTURE_LEVELS; i++) {
         free((*mt)->level[i].x_offset);
diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h 
b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h
index 22295aa..20a20db 100644
--- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h
+++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h
@@ -114,20 +114,6 @@ struct intel_mipmap_tree
     */
    struct intel_region *region;
 
-   /**
-    * This points to an auxillary hiz region if all of the following hold:
-    *     1. The texture has been attached to an FBO as a depthbuffer.
-    *     2. The texture format is hiz compatible.
-    *     3. The intel context supports hiz.
-    *
-    * When a texture is attached to multiple FBO's, a separate renderbuffer
-    * wrapper is created for each attachment. This necessitates storing the
-    * hiz region in the texture itself instead of the renderbuffer wrapper.
-    *
-    * \see intel_fbo.c:intel_wrap_texture()
-    */
-   struct intel_region *hiz_region;
-
    /* These are also refcounted:
     */
    GLuint refcount;
-- 
1.7.6.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to