[Mesa-dev] [PATCH v3] i965: Fix calculation of layers array length for isl_view
Jason Ekstrand
jason at jlekstrand.net
Tue Nov 13 21:53:25 UTC 2018
On Mon, Sep 10, 2018 at 10:21 AM Danylo Piliaiev <danylo.piliaiev at gmail.com>
wrote:
> Handle all cases in calculation of layers count for isl_view
> taking into account texture view and image unit.
> st_convert_image was taken as a reference.
>
> When u->Layered is true the whole level is taken with respect to
> image view. In other case only one layer is taken.
>
> v3: (Józef Kucia and Ilia Mirkin)
> - Rewrote patch by taking st_convert_image as a reference
> - Removed now unused get_image_num_layers function
> - Changed commit message
>
> Fixes: 5a8c8903
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107856
>
> Signed-off-by: Danylo Piliaiev <danylo.piliaiev at globallogic.com>
> ---
> .../drivers/dri/i965/brw_wm_surface_state.c | 32 ++++++++++---------
> 1 file changed, 17 insertions(+), 15 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> index 944762ec46..9bfe6e2037 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> @@ -1499,18 +1499,6 @@ update_buffer_image_param(struct brw_context *brw,
> param->stride[0] = _mesa_get_format_bytes(u->_ActualFormat);
> }
>
> -static unsigned
> -get_image_num_layers(const struct intel_mipmap_tree *mt, GLenum target,
> - unsigned level)
> -{
> - if (target == GL_TEXTURE_CUBE_MAP)
> - return 6;
> -
> - return target == GL_TEXTURE_3D ?
> - minify(mt->surf.logical_level0_px.depth, level) :
> - mt->surf.logical_level0_px.array_len;
> -}
> -
> static void
> update_image_surface(struct brw_context *brw,
> struct gl_image_unit *u,
> @@ -1541,14 +1529,28 @@ update_image_surface(struct brw_context *brw,
> } else {
> struct intel_texture_object *intel_obj =
> intel_texture_object(obj);
> struct intel_mipmap_tree *mt = intel_obj->mt;
> - const unsigned num_layers = u->Layered ?
> - get_image_num_layers(mt, obj->Target, u->Level) : 1;
> +
> + unsigned base_layer, num_layers;
> + if (u->Layered) {
> + if (obj->Target == GL_TEXTURE_3D) {
> + base_layer = 0;
> + num_layers = minify(mt->surf.logical_level0_px.depth,
> u->Level);
> + } else {
> + base_layer = obj->MinLayer;
> + num_layers = obj->Immutable ?
> + obj->NumLayers :
> + mt->surf.logical_level0_px.array_len;
>
Doesn't this need to be array_len - base_layer? I'm not sure on the others
without digging.
> + }
> + } else {
> + base_layer = obj->MinLayer + u->_Layer;
> + num_layers = 1;
> + }
>
> struct isl_view view = {
> .format = format,
> .base_level = obj->MinLevel + u->Level,
> .levels = 1,
> - .base_array_layer = obj->MinLayer + u->_Layer,
> + .base_array_layer = base_layer,
> .array_len = num_layers,
> .swizzle = ISL_SWIZZLE_IDENTITY,
> .usage = ISL_SURF_USAGE_STORAGE_BIT,
> --
> 2.18.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20181113/d4740777/attachment.html>
More information about the mesa-dev
mailing list