[Mesa-dev] [PATCH v2 1/3] i965/miptree: Enforce that height == 1 for 1-D array textures
Iago Toral
itoral at igalia.com
Wed Jul 20 07:03:55 UTC 2016
All 4 patches are:
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
On Tue, 2016-07-19 at 08:26 -0700, Jason Ekstrand wrote:
> The GL API and mesa internals do this differently than we do. In GL,
> there
> is no depth parameter for 1-D arrays and height is used. In the i965
> miptree code we do the sane thing and make height == 1 and use depth
> for
> number of slices. This makes for a mismatch every time we create a
> 1-D
> array texture from GL. Instead of actually solving this problem, we
> just
> said "1-D is hard, let's make sure it works no matter which way we
> pass the
> parameters" and called it a day.
>
> This commit fixes the one GL -> i965 transition point where we
> weren't
> already handling 1-D array textures to do the right thing and then
> replaces
> the magic fixup code with an assert that you're doing the right
> thing.
>
> Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
> Cc: "12.0 11.2 11.1" <mesa-stable at lists.freedesktop.org>
> ---
> src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 22 +++------------
> -------
> src/mesa/drivers/dri/i965/intel_tex.c | 2 ++
> 2 files changed, 5 insertions(+), 19 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> index c705c98..10158fe 100644
> --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> @@ -364,25 +364,8 @@ intel_miptree_create_layout(struct brw_context
> *brw,
> _mesa_get_format_name(format),
> first_level, last_level, depth0, mt);
>
> - if (target == GL_TEXTURE_1D_ARRAY) {
> - /* For a 1D Array texture the OpenGL API will treat the
> height0
> - * parameter as the number of array slices. For Intel
> hardware, we treat
> - * the 1D array as a 2D Array with a height of 1.
> - *
> - * So, when we first come through this path to create a 1D
> Array
> - * texture, height0 stores the number of slices, and depth0 is
> 1. In
> - * this case, we want to swap height0 and depth0.
> - *
> - * Since some miptrees will be created based on the base
> miptree, we may
> - * come through this path and see height0 as 1 and depth0
> being the
> - * number of slices. In this case we don't need to do the
> swap.
> - */
> - assert(height0 == 1 || depth0 == 1);
> - if (height0 > 1) {
> - depth0 = height0;
> - height0 = 1;
> - }
> - }
> + if (target == GL_TEXTURE_1D_ARRAY)
> + assert(height0 == 1);
>
> mt->target = target;
> mt->format = format;
> @@ -1048,6 +1031,7 @@ intel_get_image_dims(struct gl_texture_image
> *image,
> * as a 2D Array with a height of 1. So, here we want to swap
> image
> * height and depth.
> */
> + assert(image->Depth == 1);
> *width = image->Width;
> *height = 1;
> *depth = image->Height;
> diff --git a/src/mesa/drivers/dri/i965/intel_tex.c
> b/src/mesa/drivers/dri/i965/intel_tex.c
> index 8c32fe3..d3e24f4 100644
> --- a/src/mesa/drivers/dri/i965/intel_tex.c
> +++ b/src/mesa/drivers/dri/i965/intel_tex.c
> @@ -141,6 +141,8 @@ intel_alloc_texture_storage(struct gl_context
> *ctx,
> !intel_miptree_match_image(intel_texobj->mt, first_image) ||
> intel_texobj->mt->last_level != levels - 1) {
> intel_miptree_release(&intel_texobj->mt);
> +
> + intel_get_image_dims(first_image, &width, &height, &depth);
> intel_texobj->mt = intel_miptree_create(brw, texobj->Target,
> first_image-
> >TexFormat,
> 0, levels - 1,
More information about the mesa-dev
mailing list