intel/isl: fix 2d view of 3d textures

according to KHR_gl_texture_3D_image:

    If <target> is EGL_GL_TEXTURE_3D_KHR, <buffer> must be the name of a
    complete, nonzero, GL_TEXTURE_3D (or equivalent in GL extensions) target
    texture object, cast
    into the type EGLClientBuffer.  <attr_list> should specify the mipmap
    level (EGL_GL_TEXTURE_LEVEL_KHR) and z-offset (EGL_GL_TEXTURE_ZOFFSET_KHR)
    which will be used as the EGLImage source; the specified mipmap level must
    be part of <buffer>, and the specified z-offset must be smaller than the
    depth of the specified mipmap level.

thus a 2d view of a 3d surface is not only legal, it's part of the spec and
must be supported when available

cc: mesa-stable

Reviewed-by: Jason Ekstrand <jason.ekstrand@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15584>
This commit is contained in:
Mike Blumenkrantz
2022-03-25 15:19:20 -04:00
committed by Marge Bot
parent 806dcf9db7
commit 65ec846f77
+6 -9
View File
@@ -330,16 +330,13 @@ isl_genX(surf_fill_state_s)(const struct isl_device *dev, void *state,
* assert-failures in the packing function below, we only set the field
* when it's actually going to be used by the hardware.
*
* Similaraly, the MinimumArrayElement field is ignored by all hardware
* prior to Sky Lake when texturing and we want it set to 0 anyway.
* Since it's already initialized to 0, we can just leave it alone for
* texture surfaces.
* The MinimumArrayElement field is ignored by all hardware
* prior to Sky Lake when texturing, and drivers are responsible
* for validating the correctness of this parameter.
* KHR_gl_texture_3D_image requires this functionality.
*/
if (info->view->usage & (ISL_SURF_USAGE_RENDER_TARGET_BIT |
ISL_SURF_USAGE_STORAGE_BIT)) {
s.MinimumArrayElement = info->view->base_array_layer;
s.RenderTargetViewExtent = info->view->array_len - 1;
}
s.MinimumArrayElement = info->view->base_array_layer;
s.RenderTargetViewExtent = info->view->array_len - 1;
break;
default:
unreachable("bad SurfaceType");