From 9f9abc82149839159a5fe5412ad09daa4f80442d Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 28 Jun 2016 14:46:07 -0700 Subject: [PATCH] i965/blorp: Add a z_offset field to blorp_surface_info The layer field is in terms of physical layers which isn't quite what the sampler will want for 2-D MS array textures. Reviewed-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.c | 9 +++++++++ src/mesa/drivers/dri/i965/brw_blorp.h | 3 +++ src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 11 ++--------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c b/src/mesa/drivers/dri/i965/brw_blorp.c index bc26e41532d..1a4579ec165 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp.c +++ b/src/mesa/drivers/dri/i965/brw_blorp.c @@ -201,6 +201,15 @@ brw_blorp_surface_info_init(struct brw_context *brw, }, }; + if (brw->gen >= 8 && !is_render_target && info->surf.dim == ISL_SURF_DIM_3D) { + /* On gen8+ we use actual 3-D textures so we need to pass the layer + * through to the sampler. + */ + info->z_offset = layer; + } else { + info->z_offset = 0; + } + info->level = level; info->layer = layer; diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri/i965/brw_blorp.h index 282235d2851..ec12dfe9365 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp.h +++ b/src/mesa/drivers/dri/i965/brw_blorp.h @@ -78,6 +78,9 @@ struct brw_blorp_surface_info struct isl_view view; + /* Z offset into a 3-D texture or slice of a 2-D array texture. */ + uint32_t z_offset; + /** * The miplevel to use. */ diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp index 85cd26fdb25..a175156226f 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp @@ -1756,15 +1756,8 @@ brw_blorp_blit_miptrees(struct brw_context *brw, brw_blorp_setup_coord_transform(¶ms.wm_inputs.coord_transform[1], src_y0, src_y1, dst_y0, dst_y1, mirror_y); - if (brw->gen >= 8 && params.src.mt->target == GL_TEXTURE_3D) { - /* On gen8+ we use actual 3-D textures so we need to pass the layer - * through to the sampler. - */ - params.wm_inputs.src_z = params.src.layer; - } else { - /* On gen7 and earlier, we fake everything with 2-D textures */ - params.wm_inputs.src_z = 0; - } + /* For some texture types, we need to pass the layer through the sampler. */ + params.wm_inputs.src_z = params.src.z_offset; if (brw->gen > 6 && dst_mt->msaa_layout == INTEL_MSAA_LAYOUT_IMS) { /* We must expand the rectangle we send through the rendering pipeline, -- 2.30.2