ilo: remove layer offsetting
authorChia-I Wu <olvaffe@gmail.com>
Sun, 17 Aug 2014 06:09:43 +0000 (14:09 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Tue, 19 Aug 2014 11:53:37 +0000 (19:53 +0800)
Follow i965 to kill layer offsetting for GEN6.

src/gallium/drivers/ilo/ilo_3d_pipeline_gen6.c
src/gallium/drivers/ilo/ilo_gpe.h
src/gallium/drivers/ilo/ilo_gpe_gen6.c
src/gallium/drivers/ilo/ilo_gpe_gen7.c
src/gallium/drivers/ilo/ilo_layout.c
src/gallium/drivers/ilo/ilo_layout.h
src/gallium/drivers/ilo/ilo_state.c

index c2da385e0eb94407ae8221c5d251422e891cc922..227492a41bfee07826fc0dd6edbccc560246afb9 100644 (file)
@@ -724,7 +724,6 @@ gen6_pipeline_wm_depth(struct ilo_3d_pipeline *p,
    /* 3DSTATE_DEPTH_BUFFER and 3DSTATE_CLEAR_PARAMS */
    if (DIRTY(FB) || session->batch_bo_changed) {
       const struct ilo_zs_surface *zs;
-      struct ilo_zs_surface layer;
       uint32_t clear_params;
 
       if (ilo->fb.state.zsbuf) {
@@ -734,22 +733,9 @@ gen6_pipeline_wm_depth(struct ilo_3d_pipeline *p,
             ilo_texture_get_slice(ilo_texture(surface->base.texture),
                   surface->base.u.tex.level, surface->base.u.tex.first_layer);
 
-         if (ilo->fb.offset_to_layers) {
-            assert(surface->base.u.tex.first_layer ==
-                  surface->base.u.tex.last_layer);
-
-            ilo_gpe_init_zs_surface(ilo->dev,
-                  ilo_texture(surface->base.texture),
-                  surface->base.format, surface->base.u.tex.level,
-                  surface->base.u.tex.first_layer, 1, true, &layer);
-
-            zs = &layer;
-         }
-         else {
-            assert(!surface->is_rt);
-            zs = &surface->u.zs;
-         }
+         assert(!surface->is_rt);
 
+         zs = &surface->u.zs;
          clear_params = slice->clear_value;
       }
       else {
@@ -901,22 +887,6 @@ gen6_pipeline_state_surfaces_rt(struct ilo_3d_pipeline *p,
             surface_state[i] =
                gen6_emit_SURFACE_STATE(p->dev, &fb->null_rt, true, p->cp);
          }
-         else if (fb->offset_to_layers) {
-            struct ilo_view_surface layer;
-
-            assert(surface->base.u.tex.first_layer ==
-                  surface->base.u.tex.last_layer);
-
-            ilo_gpe_init_view_surface_for_texture(ilo->dev,
-                  ilo_texture(surface->base.texture),
-                  surface->base.format,
-                  surface->base.u.tex.level, 1,
-                  surface->base.u.tex.first_layer, 1,
-                  true, true, &layer);
-
-            surface_state[i] =
-               gen6_emit_SURFACE_STATE(p->dev, &layer, true, p->cp);
-         }
          else {
             assert(surface && surface->is_rt);
             surface_state[i] =
index 684626d885608959443ba1a1bcf8267491016051..4c226fd8ab19759170368488ef5a0e6ada81fdd9 100644 (file)
@@ -260,7 +260,6 @@ struct ilo_fb_state {
    struct ilo_zs_surface null_zs;
 
    unsigned num_samples;
-   bool offset_to_layers;
 };
 
 struct ilo_global_binding {
@@ -383,7 +382,7 @@ ilo_gpe_init_view_surface_for_texture_gen6(const struct ilo_dev_info *dev,
                                            unsigned num_levels,
                                            unsigned first_layer,
                                            unsigned num_layers,
-                                           bool is_rt, bool offset_to_layer,
+                                           bool is_rt,
                                            struct ilo_view_surface *surf);
 
 void
@@ -409,7 +408,7 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev,
                                            unsigned num_levels,
                                            unsigned first_layer,
                                            unsigned num_layers,
-                                           bool is_rt, bool offset_to_layer,
+                                           bool is_rt,
                                            struct ilo_view_surface *surf);
 
 static inline void
@@ -455,18 +454,18 @@ ilo_gpe_init_view_surface_for_texture(const struct ilo_dev_info *dev,
                                       unsigned num_levels,
                                       unsigned first_layer,
                                       unsigned num_layers,
-                                      bool is_rt, bool offset_to_layer,
+                                      bool is_rt,
                                       struct ilo_view_surface *surf)
 {
    if (dev->gen >= ILO_GEN(7)) {
       ilo_gpe_init_view_surface_for_texture_gen7(dev, tex, format,
             first_level, num_levels, first_layer, num_layers,
-            is_rt, offset_to_layer, surf);
+            is_rt, surf);
    }
    else {
       ilo_gpe_init_view_surface_for_texture_gen6(dev, tex, format,
             first_level, num_levels, first_layer, num_layers,
-            is_rt, offset_to_layer, surf);
+            is_rt, surf);
    }
 }
 
@@ -475,7 +474,7 @@ ilo_gpe_init_zs_surface(const struct ilo_dev_info *dev,
                         const struct ilo_texture *tex,
                         enum pipe_format format, unsigned level,
                         unsigned first_layer, unsigned num_layers,
-                        bool offset_to_layer, struct ilo_zs_surface *zs);
+                        struct ilo_zs_surface *zs);
 
 void
 ilo_gpe_init_vs_cso(const struct ilo_dev_info *dev,
index bbc269faf4771acfd2fce1444535c103255509cc..9c5c4c8cf34244c81e339ddd4fde40c3fa410379 100644 (file)
@@ -957,7 +957,6 @@ struct ilo_zs_surface_info {
 
    unsigned width, height, depth;
    unsigned lod, first_layer, num_layers;
-   uint32_t x_offset, y_offset;
 };
 
 static void
@@ -981,9 +980,8 @@ zs_init_info(const struct ilo_dev_info *dev,
              const struct ilo_texture *tex,
              enum pipe_format format, unsigned level,
              unsigned first_layer, unsigned num_layers,
-             bool offset_to_layer, struct ilo_zs_surface_info *info)
+             struct ilo_zs_surface_info *info)
 {
-   uint32_t x_offset[3], y_offset[3];
    bool separate_stencil;
 
    ILO_GPE_VALID_GEN(dev, 6, 7.5);
@@ -1077,11 +1075,6 @@ zs_init_info(const struct ilo_dev_info *dev,
       info->zs.bo = tex->bo;
       info->zs.stride = tex->layout.bo_stride;
       info->zs.tiling = tex->layout.tiling;
-
-      if (offset_to_layer) {
-         info->zs.offset = ilo_layout_get_slice_tile_offset(&tex->layout,
-               level, first_layer, &x_offset[0], &y_offset[0]);
-      }
    }
 
    if (tex->separate_s8 || format == PIPE_FORMAT_S8_UINT) {
@@ -1102,31 +1095,12 @@ zs_init_info(const struct ilo_dev_info *dev,
       info->stencil.stride = s8_tex->layout.bo_stride * 2;
 
       info->stencil.tiling = s8_tex->layout.tiling;
-
-      if (offset_to_layer) {
-         info->stencil.offset =
-            ilo_layout_get_slice_tile_offset(&s8_tex->layout,
-                  level, first_layer, &x_offset[1], &y_offset[1]);
-      }
    }
 
    if (ilo_texture_can_enable_hiz(tex, level, first_layer, num_layers)) {
       info->hiz.bo = tex->aux_bo;
       info->hiz.stride = tex->layout.aux_stride;
       info->hiz.tiling = INTEL_TILING_Y;
-
-      /*
-       * Layer offsetting is used on GEN6 only.  And on GEN6, HiZ is enabled
-       * only when the depth buffer is non-mipmapped and non-array, making
-       * layer offsetting no-op.
-       */
-      if (offset_to_layer) {
-         assert(level == 0 && first_layer == 0 && num_layers == 1);
-
-         info->hiz.offset = 0;
-         x_offset[2] = 0;
-         y_offset[2] = 0;
-      }
    }
 
    info->width = tex->layout.width0;
@@ -1137,74 +1111,6 @@ zs_init_info(const struct ilo_dev_info *dev,
    info->lod = level;
    info->first_layer = first_layer;
    info->num_layers = num_layers;
-
-   if (offset_to_layer) {
-      /* the size of the layer */
-      info->width = u_minify(info->width, level);
-      info->height = u_minify(info->height, level);
-      if (info->surface_type == GEN6_SURFTYPE_3D)
-         info->depth = u_minify(info->depth, level);
-      else
-         info->depth = 1;
-
-      /* no layered rendering */
-      assert(num_layers == 1);
-
-      info->lod = 0;
-      info->first_layer = 0;
-      info->num_layers = 1;
-
-      /* all three share the same X/Y offsets */
-      if (info->zs.bo) {
-         if (info->stencil.bo) {
-            assert(x_offset[0] == x_offset[1]);
-            assert(y_offset[0] == y_offset[1]);
-         }
-
-         info->x_offset = x_offset[0];
-         info->y_offset = y_offset[0];
-      }
-      else {
-         assert(info->stencil.bo);
-
-         info->x_offset = x_offset[1];
-         info->y_offset = y_offset[1];
-      }
-
-      if (info->hiz.bo) {
-         assert(info->x_offset == x_offset[2]);
-         assert(info->y_offset == y_offset[2]);
-      }
-
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 326:
-       *
-       *     "The 3 LSBs of both offsets (Depth Coordinate Offset Y and Depth
-       *      Coordinate Offset X) must be zero to ensure correct alignment"
-       *
-       * XXX Skip the check for gen6, which seems to be fine.  We need to make
-       * sure that does not happen eventually.
-       */
-      if (dev->gen >= ILO_GEN(7)) {
-         assert((info->x_offset & 7) == 0 && (info->y_offset & 7) == 0);
-         info->x_offset &= ~7;
-         info->y_offset &= ~7;
-      }
-
-      info->width += info->x_offset;
-      info->height += info->y_offset;
-
-      /* we have to treat them as 2D surfaces */
-      if (info->surface_type == GEN6_SURFTYPE_CUBE) {
-         assert(tex->base.width0 == tex->base.height0);
-         /* we will set slice_offset to point to the single face */
-         info->surface_type = GEN6_SURFTYPE_2D;
-      }
-      else if (info->surface_type == GEN6_SURFTYPE_1D && info->height > 1) {
-         assert(tex->base.height0 == 1);
-         info->surface_type = GEN6_SURFTYPE_2D;
-      }
-   }
 }
 
 void
@@ -1212,7 +1118,7 @@ ilo_gpe_init_zs_surface(const struct ilo_dev_info *dev,
                         const struct ilo_texture *tex,
                         enum pipe_format format, unsigned level,
                         unsigned first_layer, unsigned num_layers,
-                        bool offset_to_layer, struct ilo_zs_surface *zs)
+                        struct ilo_zs_surface *zs)
 {
    const int max_2d_size = (dev->gen >= ILO_GEN(7)) ? 16384 : 8192;
    const int max_array_size = (dev->gen >= ILO_GEN(7)) ? 2048 : 512;
@@ -1221,13 +1127,10 @@ ilo_gpe_init_zs_surface(const struct ilo_dev_info *dev,
 
    ILO_GPE_VALID_GEN(dev, 6, 7.5);
 
-   if (tex) {
-      zs_init_info(dev, tex, format, level, first_layer, num_layers,
-            offset_to_layer, &info);
-   }
-   else {
+   if (tex)
+      zs_init_info(dev, tex, format, level, first_layer, num_layers, &info);
+   else
       zs_init_info_null(dev, &info);
-   }
 
    switch (info.surface_type) {
    case GEN6_SURFTYPE_NULL:
@@ -1247,14 +1150,12 @@ ilo_gpe_init_zs_surface(const struct ilo_dev_info *dev,
    case GEN6_SURFTYPE_3D:
       assert(info.width <= 2048 && info.height <= 2048 && info.depth <= 2048);
       assert(info.first_layer < 2048 && info.num_layers <= max_array_size);
-      assert(info.x_offset == 0 && info.y_offset == 0);
       break;
    case GEN6_SURFTYPE_CUBE:
       assert(info.width <= max_2d_size && info.height <= max_2d_size &&
              info.depth == 1);
       assert(info.first_layer == 0 && info.num_layers == 1);
       assert(info.width == info.height);
-      assert(info.x_offset == 0 && info.y_offset == 0);
       break;
    default:
       assert(!"unexpected depth surface type");
@@ -1295,7 +1196,7 @@ ilo_gpe_init_zs_surface(const struct ilo_dev_info *dev,
       dw4 = (info.depth - 1) << 21 |
             info.first_layer << 10;
 
-      dw5 = info.y_offset << 16 | info.x_offset;
+      dw5 = 0;
 
       dw6 = (info.num_layers - 1) << 21;
    }
@@ -1318,7 +1219,7 @@ ilo_gpe_init_zs_surface(const struct ilo_dev_info *dev,
             info.first_layer << 10 |
             (info.num_layers - 1) << 1;
 
-      dw5 = info.y_offset << 16 | info.x_offset;
+      dw5 = 0;
 
       dw6 = 0;
    }
@@ -1913,12 +1814,11 @@ ilo_gpe_init_view_surface_for_texture_gen6(const struct ilo_dev_info *dev,
                                            unsigned num_levels,
                                            unsigned first_layer,
                                            unsigned num_layers,
-                                           bool is_rt, bool offset_to_layer,
+                                           bool is_rt,
                                            struct ilo_view_surface *surf)
 {
    int surface_type, surface_format;
    int width, height, depth, pitch, lod;
-   unsigned layer_offset, x_offset, y_offset;
    uint32_t *dw;
 
    ILO_GPE_VALID_GEN(dev, 6, 6);
@@ -2006,39 +1906,6 @@ ilo_gpe_init_view_surface_for_texture_gen6(const struct ilo_dev_info *dev,
       lod = num_levels - 1;
    }
 
-   /*
-    * Offset to the layer.  When rendering, the hardware requires LOD and
-    * Depth to be the same for all render targets and the depth buffer.  We
-    * need to offset to the layer manually and always set LOD and Depth to 0.
-    */
-   if (offset_to_layer) {
-      /* we lose the capability for layered rendering */
-      assert(is_rt && num_layers == 1);
-
-      layer_offset = ilo_layout_get_slice_tile_offset(&tex->layout,
-            first_level, first_layer, &x_offset, &y_offset);
-
-      assert(x_offset % 4 == 0);
-      assert(y_offset % 2 == 0);
-      x_offset /= 4;
-      y_offset /= 2;
-
-      /* derive the size for the LOD */
-      width = u_minify(width, first_level);
-      height = u_minify(height, first_level);
-
-      first_level = 0;
-      first_layer = 0;
-
-      lod = 0;
-      depth = 1;
-   }
-   else {
-      layer_offset = 0;
-      x_offset = 0;
-      y_offset = 0;
-   }
-
    /*
     * From the Sandy Bridge PRM, volume 4 part 1, page 76:
     *
@@ -2060,11 +1927,8 @@ ilo_gpe_init_view_surface_for_texture_gen6(const struct ilo_dev_info *dev,
    if (tex->layout.tiling == INTEL_TILING_NONE) {
       if (is_rt) {
          const int elem_size = util_format_get_blocksize(format);
-         assert(layer_offset % elem_size == 0);
          assert(pitch % elem_size == 0);
       }
-
-      assert(!x_offset);
    }
 
    STATIC_ASSERT(Elements(surf->payload) >= 6);
@@ -2082,7 +1946,7 @@ ilo_gpe_init_view_surface_for_texture_gen6(const struct ilo_dev_info *dev,
    if (is_rt)
       dw[0] |= GEN6_SURFACE_DW0_RENDER_CACHE_RW;
 
-   dw[1] = layer_offset;
+   dw[1] = 0;
 
    dw[2] = (height - 1) << GEN6_SURFACE_DW2_HEIGHT__SHIFT |
            (width - 1) << GEN6_SURFACE_DW2_WIDTH__SHIFT |
@@ -2098,8 +1962,7 @@ ilo_gpe_init_view_surface_for_texture_gen6(const struct ilo_dev_info *dev,
            ((tex->base.nr_samples > 1) ? GEN6_SURFACE_DW4_MULTISAMPLECOUNT_4 :
                                          GEN6_SURFACE_DW4_MULTISAMPLECOUNT_1);
 
-   dw[5] = x_offset << GEN6_SURFACE_DW5_X_OFFSET__SHIFT |
-           y_offset << GEN6_SURFACE_DW5_Y_OFFSET__SHIFT;
+   dw[5] = 0;
 
    assert(tex->layout.align_j == 2 || tex->layout.align_j == 4);
    if (tex->layout.align_j == 4)
@@ -2473,7 +2336,7 @@ ilo_gpe_set_fb(const struct ilo_dev_info *dev,
                struct ilo_fb_state *fb)
 {
    const struct pipe_surface *first;
-   unsigned num_surfaces, first_idx;
+   unsigned first_idx;
 
    ILO_GPE_VALID_GEN(dev, 6, 7.5);
 
@@ -2497,79 +2360,8 @@ ilo_gpe_set_fb(const struct ilo_dev_info *dev,
    if (!fb->num_samples)
       fb->num_samples = 1;
 
-   fb->offset_to_layers = false;
-
    /*
     * The PRMs list several restrictions when the framebuffer has more than
-    * one surface, but it seems they are lifted on GEN7+.
+    * one surface.  It seems they are actually lifted on GEN6+.
     */
-   num_surfaces = state->nr_cbufs + !!state->zsbuf;
-
-   if (dev->gen < ILO_GEN(7) && num_surfaces > 1) {
-      const unsigned first_depth =
-         (first->texture->target == PIPE_TEXTURE_3D) ?
-         first->texture->depth0 :
-         first->u.tex.last_layer - first->u.tex.first_layer + 1;
-      bool has_3d_target = (first->texture->target == PIPE_TEXTURE_3D);
-      unsigned i;
-
-      for (i = first_idx + 1; i < num_surfaces; i++) {
-         const struct pipe_surface *surf =
-            (i < state->nr_cbufs) ? state->cbufs[i] : state->zsbuf;
-         unsigned depth;
-
-         if (!surf)
-            continue;
-
-         depth = (surf->texture->target == PIPE_TEXTURE_3D) ?
-            surf->texture->depth0 :
-            surf->u.tex.last_layer - surf->u.tex.first_layer + 1;
-
-         has_3d_target |= (surf->texture->target == PIPE_TEXTURE_3D);
-
-         /*
-          * From the Sandy Bridge PRM, volume 4 part 1, page 79:
-          *
-          *     "The LOD of a render target must be the same as the LOD of the
-          *      other render target(s) and of the depth buffer (defined in
-          *      3DSTATE_DEPTH_BUFFER)."
-          *
-          * From the Sandy Bridge PRM, volume 4 part 1, page 81:
-          *
-          *     "The Depth of a render target must be the same as the Depth of
-          *      the other render target(s) and of the depth buffer (defined
-          *      in 3DSTATE_DEPTH_BUFFER)."
-          */
-         if (surf->u.tex.level != first->u.tex.level ||
-             depth != first_depth) {
-            fb->offset_to_layers = true;
-            break;
-         }
-
-         /*
-          * From the Sandy Bridge PRM, volume 4 part 1, page 77:
-          *
-          *     "The Height of a render target must be the same as the Height
-          *      of the other render targets and the depth buffer (defined in
-          *      3DSTATE_DEPTH_BUFFER), unless Surface Type is SURFTYPE_1D or
-          *      SURFTYPE_2D with Depth = 0 (non-array) and LOD = 0 (non-mip
-          *      mapped)."
-          *
-          * From the Sandy Bridge PRM, volume 4 part 1, page 78:
-          *
-          *     "The Width of a render target must be the same as the Width of
-          *      the other render target(s) and the depth buffer (defined in
-          *      3DSTATE_DEPTH_BUFFER), unless Surface Type is SURFTYPE_1D or
-          *      SURFTYPE_2D with Depth = 0 (non-array) and LOD = 0 (non-mip
-          *      mapped)."
-          */
-         if (surf->texture->width0 != first->texture->width0 ||
-             surf->texture->height0 != first->texture->height0) {
-            if (has_3d_target || first->u.tex.level || first_depth > 1) {
-               fb->offset_to_layers = true;
-               break;
-            }
-         }
-      }
-   }
 }
index 170ec0319f7ebb42af3e14c608ab2cb7a32a4ebf..3d3953713dac68a9c9a11d6225796b19be84c2b2 100644 (file)
@@ -430,12 +430,11 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev,
                                            unsigned num_levels,
                                            unsigned first_layer,
                                            unsigned num_layers,
-                                           bool is_rt, bool offset_to_layer,
+                                           bool is_rt,
                                            struct ilo_view_surface *surf)
 {
    int surface_type, surface_format;
    int width, height, depth, pitch, lod;
-   unsigned layer_offset, x_offset, y_offset;
    uint32_t *dw;
 
    ILO_GPE_VALID_GEN(dev, 7, 7.5);
@@ -513,39 +512,6 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev,
       lod = num_levels - 1;
    }
 
-   /*
-    * Offset to the layer.  When rendering, the hardware requires LOD and
-    * Depth to be the same for all render targets and the depth buffer.  We
-    * need to offset to the layer manually and always set LOD and Depth to 0.
-    */
-   if (offset_to_layer) {
-      /* we lose the capability for layered rendering */
-      assert(is_rt && num_layers == 1);
-
-      layer_offset = ilo_layout_get_slice_tile_offset(&tex->layout,
-            first_level, first_layer, &x_offset, &y_offset);
-
-      assert(x_offset % 4 == 0);
-      assert(y_offset % 2 == 0);
-      x_offset /= 4;
-      y_offset /= 2;
-
-      /* derive the size for the LOD */
-      width = u_minify(width, first_level);
-      height = u_minify(height, first_level);
-
-      first_level = 0;
-      first_layer = 0;
-
-      lod = 0;
-      depth = 1;
-   }
-   else {
-      layer_offset = 0;
-      x_offset = 0;
-      y_offset = 0;
-   }
-
    /*
     * From the Ivy Bridge PRM, volume 4 part 1, page 68:
     *
@@ -572,11 +538,8 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev,
    if (tex->layout.tiling == INTEL_TILING_NONE) {
       if (is_rt) {
          const int elem_size = util_format_get_blocksize(format);
-         assert(layer_offset % elem_size == 0);
          assert(pitch % elem_size == 0);
       }
-
-      assert(!x_offset);
    }
 
    STATIC_ASSERT(Elements(surf->payload) >= 8);
@@ -624,7 +587,7 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev,
    if (surface_type == GEN6_SURFTYPE_CUBE && !is_rt)
       dw[0] |= GEN7_SURFACE_DW0_CUBE_FACE_ENABLES__MASK;
 
-   dw[1] = layer_offset;
+   dw[1] = 0;
 
    dw[2] = SET_FIELD(height - 1, GEN7_SURFACE_DW2_HEIGHT) |
            SET_FIELD(width - 1, GEN7_SURFACE_DW2_WIDTH);
@@ -655,9 +618,7 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev,
    else
       dw[4] |= GEN7_SURFACE_DW4_MULTISAMPLECOUNT_1;
 
-   dw[5] = x_offset << GEN7_SURFACE_DW5_X_OFFSET__SHIFT |
-           y_offset << GEN7_SURFACE_DW5_Y_OFFSET__SHIFT |
-           SET_FIELD(first_level, GEN7_SURFACE_DW5_MIN_LOD) |
+   dw[5] = SET_FIELD(first_level, GEN7_SURFACE_DW5_MIN_LOD) |
            lod;
 
    dw[6] = 0;
index 6770632ae41fddf8b87ada30f62a9412770990b8..b6e958585a59a3af0bf5b16805956528a43d6e03 100644 (file)
@@ -1396,86 +1396,3 @@ ilo_layout_update_for_imported_bo(struct ilo_layout *layout,
 
    return true;
 }
-
-/**
- * Return the offset (in bytes) to a slice within the bo.
- *
- * The returned offset is aligned to tile size.  Since slices are not
- * guaranteed to start at tile boundaries, the X and Y offsets (in pixels)
- * from the tile origin to the slice are also returned.  X offset is always a
- * multiple of 4 and Y offset is always a multiple of 2.
- */
-unsigned
-ilo_layout_get_slice_tile_offset(const struct ilo_layout *layout,
-                                 unsigned level, unsigned slice,
-                                 unsigned *x_offset, unsigned *y_offset)
-{
-   unsigned tile_w, tile_h, tile_size, row_size;
-   unsigned tile_offset, x, y;
-
-   /* see the Sandy Bridge PRM, volume 1 part 2, page 24 */
-
-   switch (layout->tiling) {
-   case INTEL_TILING_NONE:
-      /* W-tiled */
-      if (layout->format == PIPE_FORMAT_S8_UINT) {
-         tile_w = 64;
-         tile_h = 64;
-      }
-      else {
-         tile_w = 1;
-         tile_h = 1;
-      }
-      break;
-   case INTEL_TILING_X:
-      tile_w = 512;
-      tile_h = 8;
-      break;
-   case INTEL_TILING_Y:
-      tile_w = 128;
-      tile_h = 32;
-      break;
-   default:
-      assert(!"unknown tiling");
-      tile_w = 1;
-      tile_h = 1;
-      break;
-   }
-
-   tile_size = tile_w * tile_h;
-   row_size = layout->bo_stride * tile_h;
-
-   ilo_layout_get_slice_pos(layout, level, slice, &x, &y);
-   /* in bytes */
-   ilo_layout_pos_to_mem(layout, x, y, &x, &y);
-   tile_offset = row_size * (y / tile_h) + tile_size * (x / tile_w);
-
-   /*
-    * Since tex->bo_stride is a multiple of tile_w, slice_offset should be
-    * aligned at this point.
-    */
-   assert(tile_offset % tile_size == 0);
-
-   /*
-    * because of the possible values of align_i and align_j in
-    * tex_layout_init_alignments(), x_offset is guaranteed to be a multiple of
-    * 4 and y_offset is guaranteed to be a multiple of 2.
-    */
-   if (x_offset) {
-      /* in pixels */
-      x = (x % tile_w) / layout->block_size * layout->block_width;
-      assert(x % 4 == 0);
-
-      *x_offset = x;
-   }
-
-   if (y_offset) {
-      /* in pixels */
-      y = (y % tile_h) * layout->block_height;
-      assert(y % 2 == 0);
-
-      *y_offset = y;
-   }
-
-   return tile_offset;
-}
index 1da9e2da799cf059ee0fb8acfe5243ead97359ca..3b6677b58c78f922dace0f39ad2f0ec485833fe8 100644 (file)
@@ -289,9 +289,4 @@ ilo_layout_get_slice_pos(const struct ilo_layout *layout,
          layout->bo_height * layout->block_height);
 }
 
-unsigned
-ilo_layout_get_slice_tile_offset(const struct ilo_layout *layout,
-                                 unsigned level, unsigned slice,
-                                 unsigned *x_offset, unsigned *y_offset);
-
 #endif /* ILO_LAYOUT_H */
index 229cc296fbdff950e040580de22a58cce45f74a7..df36de8a766ac9a77133e9aa7bef38ed12283a56 100644 (file)
@@ -936,7 +936,7 @@ ilo_create_sampler_view(struct pipe_context *pipe,
             templ->u.tex.last_level - templ->u.tex.first_level + 1,
             templ->u.tex.first_layer,
             templ->u.tex.last_layer - templ->u.tex.first_layer + 1,
-            false, false, &view->surface);
+            false, &view->surface);
    }
 
    return &view->base;
@@ -984,7 +984,7 @@ ilo_create_surface(struct pipe_context *pipe,
             templ->format, templ->u.tex.level, 1,
             templ->u.tex.first_layer,
             templ->u.tex.last_layer - templ->u.tex.first_layer + 1,
-            true, false, &surf->u.rt);
+            true, &surf->u.rt);
    }
    else {
       assert(res->target != PIPE_BUFFER);
@@ -993,7 +993,7 @@ ilo_create_surface(struct pipe_context *pipe,
             templ->format, templ->u.tex.level,
             templ->u.tex.first_layer,
             templ->u.tex.last_layer - templ->u.tex.first_layer + 1,
-            false, &surf->u.zs);
+            &surf->u.zs);
    }
 
    return &surf->base;
@@ -1183,7 +1183,7 @@ ilo_init_states(struct ilo_context *ilo)
    ilo_gpe_set_scissor_null(ilo->dev, &ilo->scissor);
 
    ilo_gpe_init_zs_surface(ilo->dev, NULL, PIPE_FORMAT_NONE,
-         0, 0, 1, false, &ilo->fb.null_zs);
+         0, 0, 1, &ilo->fb.null_zs);
 
    ilo->dirty = ILO_DIRTY_ALL;
 }