mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 20:18:12 +02:00
i965/miptree: Layout 1D Array as 2D Array with height of 1
1D array miptrees were being laid out as a 2D texture with 1 slice.
This happened due to the mesa core storing the 1D array slice count in
the height field. On Intel hardware, we want to create a 2D array with
a height of 1 for the 1D array case.
Fixes assertion failure in piglit (gen6, gen8):
spec/glsl-1.30/execution/tex-miplevel-selection textureOffset 1DArrayShadow
In release builds of Mesa, this test was observed to cause a GPU hang
on gen8.
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Cc: "10.2" <mesa-stable@lists.freedesktop.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=81450
Tested-by: Ben Widawsky <ben@bwidawsk.net>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
(cherry picked from commit c860a379d2)
This commit is contained in:
parent
3baf37f076
commit
1abd1d0430
1 changed files with 20 additions and 0 deletions
|
|
@ -242,6 +242,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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue