Re: [Mesa-dev] [PATCH 07/43] intel/isl: Add support for gen4 cube maps to get_image_offset_sa
On Wed, May 17, 2017 at 02:40:55AM -0700, Kenneth Graunke wrote: > On Tuesday, May 16, 2017 11:29:32 PM PDT Pohjolainen, Topi wrote: > > On Tue, May 16, 2017 at 03:45:01PM -0700, Jason Ekstrand wrote: > > > Gen4 cube maps are a 2-D surface with ISL_DIM_LAYOUT_GEN4_3D which is a > > > bit weird but accurate none the less. > > > --- > > > src/intel/isl/isl.c | 23 ++- > > > 1 file changed, 18 insertions(+), 5 deletions(-) > > > > > > diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c > > > index f70e188..c728a85 100644 > > > --- a/src/intel/isl/isl.c > > > +++ b/src/intel/isl/isl.c > > > @@ -1829,8 +1829,15 @@ get_image_offset_sa_gen4_3d(const struct isl_surf > > > *surf, > > > uint32_t *y_offset_sa) > > > { > > > assert(level < surf->levels); > > > - assert(logical_z_offset_px < isl_minify(surf->phys_level0_sa.depth, > > > level)); > > > - assert(surf->phys_level0_sa.array_len == 1); > > > + if (surf->dim == ISL_SURF_DIM_3D) { > > > + assert(surf->phys_level0_sa.array_len == 1); > > > + assert(logical_z_offset_px < > > > isl_minify(surf->phys_level0_sa.depth, level)); > > > + } else { > > > + assert(surf->dim == ISL_SURF_DIM_2D); > > > + assert(surf->usage & ISL_SURF_USAGE_CUBE_BIT); > > > + assert(surf->phys_level0_sa.array_len == 6); > > > > Doesn't CUBE_MAP_ARRAY come here? > > Nope - GL_ARB_texture_cube_map_array is Gen6+ only. It'll never happen > on Gen4-5. Old hardware doesn't have cube array support. Okay, I didn't even think there wasn't support on older hw. Reviewed-by: Topi Pohjolainen___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 07/43] intel/isl: Add support for gen4 cube maps to get_image_offset_sa
On Tuesday, May 16, 2017 11:29:32 PM PDT Pohjolainen, Topi wrote: > On Tue, May 16, 2017 at 03:45:01PM -0700, Jason Ekstrand wrote: > > Gen4 cube maps are a 2-D surface with ISL_DIM_LAYOUT_GEN4_3D which is a > > bit weird but accurate none the less. > > --- > > src/intel/isl/isl.c | 23 ++- > > 1 file changed, 18 insertions(+), 5 deletions(-) > > > > diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c > > index f70e188..c728a85 100644 > > --- a/src/intel/isl/isl.c > > +++ b/src/intel/isl/isl.c > > @@ -1829,8 +1829,15 @@ get_image_offset_sa_gen4_3d(const struct isl_surf > > *surf, > > uint32_t *y_offset_sa) > > { > > assert(level < surf->levels); > > - assert(logical_z_offset_px < isl_minify(surf->phys_level0_sa.depth, > > level)); > > - assert(surf->phys_level0_sa.array_len == 1); > > + if (surf->dim == ISL_SURF_DIM_3D) { > > + assert(surf->phys_level0_sa.array_len == 1); > > + assert(logical_z_offset_px < isl_minify(surf->phys_level0_sa.depth, > > level)); > > + } else { > > + assert(surf->dim == ISL_SURF_DIM_2D); > > + assert(surf->usage & ISL_SURF_USAGE_CUBE_BIT); > > + assert(surf->phys_level0_sa.array_len == 6); > > Doesn't CUBE_MAP_ARRAY come here? Nope - GL_ARB_texture_cube_map_array is Gen6+ only. It'll never happen on Gen4-5. Old hardware doesn't have cube array support. signature.asc Description: This is a digitally signed message part. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 07/43] intel/isl: Add support for gen4 cube maps to get_image_offset_sa
On Tue, May 16, 2017 at 03:45:01PM -0700, Jason Ekstrand wrote: > Gen4 cube maps are a 2-D surface with ISL_DIM_LAYOUT_GEN4_3D which is a > bit weird but accurate none the less. > --- > src/intel/isl/isl.c | 23 ++- > 1 file changed, 18 insertions(+), 5 deletions(-) > > diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c > index f70e188..c728a85 100644 > --- a/src/intel/isl/isl.c > +++ b/src/intel/isl/isl.c > @@ -1829,8 +1829,15 @@ get_image_offset_sa_gen4_3d(const struct isl_surf > *surf, > uint32_t *y_offset_sa) > { > assert(level < surf->levels); > - assert(logical_z_offset_px < isl_minify(surf->phys_level0_sa.depth, > level)); > - assert(surf->phys_level0_sa.array_len == 1); > + if (surf->dim == ISL_SURF_DIM_3D) { > + assert(surf->phys_level0_sa.array_len == 1); > + assert(logical_z_offset_px < isl_minify(surf->phys_level0_sa.depth, > level)); > + } else { > + assert(surf->dim == ISL_SURF_DIM_2D); > + assert(surf->usage & ISL_SURF_USAGE_CUBE_BIT); > + assert(surf->phys_level0_sa.array_len == 6); Doesn't CUBE_MAP_ARRAY come here? > + assert(logical_z_offset_px < surf->phys_level0_sa.array_len); > + } > > const struct isl_extent3d image_align_sa = >isl_surf_get_image_alignment_sa(surf); > @@ -1838,13 +1845,16 @@ get_image_offset_sa_gen4_3d(const struct isl_surf > *surf, > const uint32_t W0 = surf->phys_level0_sa.width; > const uint32_t H0 = surf->phys_level0_sa.height; > const uint32_t D0 = surf->phys_level0_sa.depth; > + const uint32_t AL = surf->phys_level0_sa.array_len; > > uint32_t x = 0; > uint32_t y = 0; > > for (uint32_t l = 0; l < level; ++l) { >const uint32_t level_h = isl_align_npot(isl_minify(H0, l), > image_align_sa.h); > - const uint32_t level_d = isl_align_npot(isl_minify(D0, l), > image_align_sa.d); > + const uint32_t level_d = > + isl_align_npot(surf->dim == ISL_SURF_DIM_3D ? isl_minify(D0, l) : > AL, > +image_align_sa.d); >const uint32_t max_layers_vert = isl_align(level_d, 1u << l) / (1u << > l); > >y += level_h * max_layers_vert; > @@ -1852,7 +1862,9 @@ get_image_offset_sa_gen4_3d(const struct isl_surf *surf, > > const uint32_t level_w = isl_align_npot(isl_minify(W0, level), > image_align_sa.w); > const uint32_t level_h = isl_align_npot(isl_minify(H0, level), > image_align_sa.h); > - const uint32_t level_d = isl_align_npot(isl_minify(D0, level), > image_align_sa.d); > + const uint32_t level_d = > + isl_align_npot(surf->dim == ISL_SURF_DIM_3D ? isl_minify(D0, level) : > AL, > + image_align_sa.d); > > const uint32_t max_layers_horiz = MIN(level_d, 1u << level); > > @@ -1928,7 +1940,8 @@ isl_surf_get_image_offset_sa(const struct isl_surf > *surf, >x_offset_sa, y_offset_sa); >break; > case ISL_DIM_LAYOUT_GEN4_3D: > - get_image_offset_sa_gen4_3d(surf, level, logical_z_offset_px, > + get_image_offset_sa_gen4_3d(surf, level, logical_array_layer + > + logical_z_offset_px, >x_offset_sa, y_offset_sa); >break; > > -- > 2.5.0.400.gff86faf > > ___ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 07/43] intel/isl: Add support for gen4 cube maps to get_image_offset_sa
Gen4 cube maps are a 2-D surface with ISL_DIM_LAYOUT_GEN4_3D which is a bit weird but accurate none the less. --- src/intel/isl/isl.c | 23 ++- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c index f70e188..c728a85 100644 --- a/src/intel/isl/isl.c +++ b/src/intel/isl/isl.c @@ -1829,8 +1829,15 @@ get_image_offset_sa_gen4_3d(const struct isl_surf *surf, uint32_t *y_offset_sa) { assert(level < surf->levels); - assert(logical_z_offset_px < isl_minify(surf->phys_level0_sa.depth, level)); - assert(surf->phys_level0_sa.array_len == 1); + if (surf->dim == ISL_SURF_DIM_3D) { + assert(surf->phys_level0_sa.array_len == 1); + assert(logical_z_offset_px < isl_minify(surf->phys_level0_sa.depth, level)); + } else { + assert(surf->dim == ISL_SURF_DIM_2D); + assert(surf->usage & ISL_SURF_USAGE_CUBE_BIT); + assert(surf->phys_level0_sa.array_len == 6); + assert(logical_z_offset_px < surf->phys_level0_sa.array_len); + } const struct isl_extent3d image_align_sa = isl_surf_get_image_alignment_sa(surf); @@ -1838,13 +1845,16 @@ get_image_offset_sa_gen4_3d(const struct isl_surf *surf, const uint32_t W0 = surf->phys_level0_sa.width; const uint32_t H0 = surf->phys_level0_sa.height; const uint32_t D0 = surf->phys_level0_sa.depth; + const uint32_t AL = surf->phys_level0_sa.array_len; uint32_t x = 0; uint32_t y = 0; for (uint32_t l = 0; l < level; ++l) { const uint32_t level_h = isl_align_npot(isl_minify(H0, l), image_align_sa.h); - const uint32_t level_d = isl_align_npot(isl_minify(D0, l), image_align_sa.d); + const uint32_t level_d = + isl_align_npot(surf->dim == ISL_SURF_DIM_3D ? isl_minify(D0, l) : AL, +image_align_sa.d); const uint32_t max_layers_vert = isl_align(level_d, 1u << l) / (1u << l); y += level_h * max_layers_vert; @@ -1852,7 +1862,9 @@ get_image_offset_sa_gen4_3d(const struct isl_surf *surf, const uint32_t level_w = isl_align_npot(isl_minify(W0, level), image_align_sa.w); const uint32_t level_h = isl_align_npot(isl_minify(H0, level), image_align_sa.h); - const uint32_t level_d = isl_align_npot(isl_minify(D0, level), image_align_sa.d); + const uint32_t level_d = + isl_align_npot(surf->dim == ISL_SURF_DIM_3D ? isl_minify(D0, level) : AL, + image_align_sa.d); const uint32_t max_layers_horiz = MIN(level_d, 1u << level); @@ -1928,7 +1940,8 @@ isl_surf_get_image_offset_sa(const struct isl_surf *surf, x_offset_sa, y_offset_sa); break; case ISL_DIM_LAYOUT_GEN4_3D: - get_image_offset_sa_gen4_3d(surf, level, logical_z_offset_px, + get_image_offset_sa_gen4_3d(surf, level, logical_array_layer + + logical_z_offset_px, x_offset_sa, y_offset_sa); break; -- 2.5.0.400.gff86faf ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev