i965/blorp: Add a z_offset field to blorp_surface_info
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 28 Jun 2016 21:46:07 +0000 (14:46 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 17 Aug 2016 21:46:22 +0000 (14:46 -0700)
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 <topi.pohjolainen@intel.com>
src/mesa/drivers/dri/i965/brw_blorp.c
src/mesa/drivers/dri/i965/brw_blorp.h
src/mesa/drivers/dri/i965/brw_blorp_blit.cpp

index bc26e41532dd33fd3cee3bfeb3299586279869c1..1a4579ec165f7f09b6d739436173b98ac8635715 100644 (file)
@@ -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;
 
index 282235d28512fe60052e754f9b97ea291c88f90f..ec12dfe9365c30c4f4d943809ffbe288db0c8924 100644 (file)
@@ -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.
     */
index 85cd26fdb250b4cf508ffd3adc41b2c9e7ae5e91..a175156226faaecd7de90cd98ec6c9ebdc46692e 100644 (file)
@@ -1756,15 +1756,8 @@ brw_blorp_blit_miptrees(struct brw_context *brw,
    brw_blorp_setup_coord_transform(&params.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,