Module: Mesa Branch: staging/22.0 Commit: 0fa34c40cdd91e79086f26517f3a540461cdfdc0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0fa34c40cdd91e79086f26517f3a540461cdfdc0
Author: Mike Blumenkrantz <[email protected]> Date: Fri Mar 25 15:19:20 2022 -0400 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 <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15584> (cherry picked from commit 65ec846f777a8a112510d9d7a2da2f225880a0e6) --- .pick_status.json | 2 +- src/intel/isl/isl_surface_state.c | 15 ++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 19f04bbe674..dcc5ccf1a3a 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1772,7 +1772,7 @@ "description": "intel/isl: fix 2d view of 3d textures", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "because_sha": null }, { diff --git a/src/intel/isl/isl_surface_state.c b/src/intel/isl/isl_surface_state.c index 98603d782c8..17a4341c04e 100644 --- a/src/intel/isl/isl_surface_state.c +++ b/src/intel/isl/isl_surface_state.c @@ -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");
