[Mesa-dev] [PATCH v2] i965: Fix calculation of layers array length for isl_view
Danylo Piliaiev
danylo.piliaiev at gmail.com
Fri Sep 7 15:39:34 UTC 2018
Comment for array_len field states:
"Indicates the number of array elements starting at
Base Array Layer."
And most usages of array_len expect it to be equal or less than
total layers - base layer
v2: Do not subtract base layer if image unit is not layered (Ilia Mirkin)
Fixes: 5a8c8903
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107856
Signed-off-by: Danylo Piliaiev <danylo.piliaiev at globallogic.com>
---
src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 6 ++++--
1 file changed, 4 insertions(+), 2 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 42af41aca3..54f62f0396 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
@@ -1539,14 +1539,16 @@ 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 base_layer = obj->MinLayer + u->_Layer;
const unsigned num_layers = u->Layered ?
- get_image_num_layers(mt, obj->Target, u->Level) : 1;
+ (get_image_num_layers(mt, obj->Target, u->Level) - base_layer) : 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
More information about the mesa-dev
mailing list