From: Yevhenii Kharchenko Date: Mon, 22 Feb 2021 22:15:15 +0000 (+0200) Subject: iris: fix layer calculation for TEXTURE_3D ReadPixels() on mip-level>0 X-Git-Tag: upstream/22.3.5~18678 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b9452627730066872af6cf11a3fc390ca29ca242;p=platform%2Fupstream%2Fmesa.git iris: fix layer calculation for TEXTURE_3D ReadPixels() on mip-level>0 Fixes assert when ReadPixels() called to read from FBO to GL_PIXEL_PACK_BUFFER, on mip-level > 0, since num_layers wasn't properly calculated with mip-level. v2: patched 'iris_create_sampler_view' function instead of 'resolve_sampler_views'. Just like it was suggested in this function's comment. The logic of fix is similar to one in 'update_image_surface' function of i965 driver, which is introduced in commit f9fd0cf4790cb2a530e75d1a2206dbb9d8af7cb2. With a slight change: setting array_len=1, like it was done in https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5808 , since minifying depth fails KHR-GLES2.texture_3d.filtering tests. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4145 Fixes: 3c979b0e ('iris: add some draw resolve hooks') Signed-off-by: Yevhenii Kharchenko Reviewed-by: Tapani Pälli Part-of: --- diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index a2426c3..52181f0 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -2426,10 +2426,15 @@ iris_create_sampler_view(struct pipe_context *ctx, if (tmpl->target != PIPE_BUFFER) { isv->view.base_level = tmpl->u.tex.first_level; isv->view.levels = tmpl->u.tex.last_level - tmpl->u.tex.first_level + 1; - // XXX: do I need to port f9fd0cf4790cb2a530e75d1a2206dbb9d8af7cb2? - isv->view.base_array_layer = tmpl->u.tex.first_layer; - isv->view.array_len = - tmpl->u.tex.last_layer - tmpl->u.tex.first_layer + 1; + + if (tmpl->target == PIPE_TEXTURE_3D) { + isv->view.base_array_layer = 0; + isv->view.array_len = 1; + } else { + isv->view.base_array_layer = tmpl->u.tex.first_layer; + isv->view.array_len = + tmpl->u.tex.last_layer - tmpl->u.tex.first_layer + 1; + } if (iris_resource_unfinished_aux_import(isv->res)) iris_resource_finish_aux_import(&screen->base, isv->res);