This makes things a tiny bit stickier in isl_calc_phys_total_extent_el but will be worth it when we enable Yf and Ys.
Reviewed-by: Topi Pohjolainen <topi.pohjolai...@intel.com> --- src/intel/isl/isl.c | 18 +++--------------- src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 9 +++------ 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c index 58091795a26..970d437f2e7 100644 --- a/src/intel/isl/isl.c +++ b/src/intel/isl/isl.c @@ -845,21 +845,10 @@ isl_calc_phys_level0_extent_sa(const struct isl_device *dev, unreachable("bad isl_dim_layout"); case ISL_DIM_LAYOUT_GEN4_2D: - assert(ISL_DEV_GEN(dev) >= 9); - + case ISL_DIM_LAYOUT_GEN4_3D: *phys_level0_sa = (struct isl_extent4d) { .w = isl_align_npot(info->width, fmtl->bw), .h = isl_align_npot(info->height, fmtl->bh), - .d = 1, - .a = info->depth, - }; - break; - - case ISL_DIM_LAYOUT_GEN4_3D: - assert(ISL_DEV_GEN(dev) < 9); - *phys_level0_sa = (struct isl_extent4d) { - .w = isl_align(info->width, fmtl->bw), - .h = isl_align(info->height, fmtl->bh), .d = info->depth, .a = 1, }; @@ -986,8 +975,6 @@ isl_calc_phys_slice0_extent_sa_gen4_2d( { const struct isl_format_layout *fmtl = isl_format_get_layout(info->format); - assert(phys_level0_sa->depth == 1); - if (info->levels == 1) { /* Do not pad the surface to the image alignment. Instead, pad it only * to the pixel format's block alignment. @@ -1070,9 +1057,10 @@ isl_calc_phys_total_extent_el_gen4_2d( image_align_sa, phys_level0_sa, array_pitch_span, &phys_slice0_sa); + uint32_t array_len = MAX(phys_level0_sa->d, phys_level0_sa->a); *phys_total_el = (struct isl_extent4d) { .w = isl_assert_div(phys_slice0_sa.w, fmtl->bw), - .h = *array_pitch_el_rows * (phys_level0_sa->array_len - 1) + + .h = *array_pitch_el_rows * (array_len - 1) + isl_assert_div(phys_slice0_sa.h, fmtl->bh), .d = 1, .a = 1, diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c index 88d28c20807..36d080129fa 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c @@ -444,13 +444,10 @@ get_num_phys_layers(const struct isl_surf *surf, unsigned level) /* In case of physical dimensions one needs to consider also the layout. * See isl_calc_phys_level0_extent_sa(). */ - if (surf->dim != ISL_SURF_DIM_3D) + if (surf->dim == ISL_SURF_DIM_3D) + return minify(surf->phys_level0_sa.depth, level); + else return surf->phys_level0_sa.array_len; - - if (surf->dim_layout == ISL_DIM_LAYOUT_GEN4_2D) - return minify(surf->phys_level0_sa.array_len, level); - - return minify(surf->phys_level0_sa.depth, level); } /** \brief Assert that the level and layer are valid for the miptree. */ -- 2.19.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev