diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c index b36ffc78917..38396d7e3e6 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c @@ -243,6 +243,26 @@ 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; + } + } + mt->target = target; mt->format = format; mt->first_level = first_level; |