anv: do not subtract the base layer to compute depth in 3DSTATE_DEPTH_BUFFER
authorIago Toral Quiroga <itoral@igalia.com>
Wed, 22 Feb 2017 10:33:13 +0000 (11:33 +0100)
committerIago Toral Quiroga <itoral@igalia.com>
Thu, 2 Mar 2017 08:04:03 +0000 (09:04 +0100)
According to the PRM description of the Depth field:

  "This field specifies the total number of levels for a volume texture
   or the number of array elements allowed to be accessed starting at the
   Minimum Array Element for arrayed surfaces"

However, ISL defines array_len as the length of the range
[base_array_layer, base_array_layer + array_len], so it already represents
a value relative to the base array layer like the hardware expects.

v2: Depth is defined as a U11-1 field, so subtract 1 from
    the actual value (Jason)

This fixes a number of new CTS tests that would crash otherwise:
dEQP-VK.pipeline.render_to_image.*

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/genX_cmd_buffer.c

index e3f84e32dcc8ee2eedc072c0c0707a0694f1f454..2b070355d2649cb64ff48fda0fcb80a579e7e2a7 100644 (file)
@@ -2268,8 +2268,7 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer)
 
          assert(image->depth_surface.isl.dim != ISL_SURF_DIM_3D);
          db.Depth =
-         db.RenderTargetViewExtent =
-            iview->isl.array_len - iview->isl.base_array_layer - 1;
+         db.RenderTargetViewExtent = iview->isl.array_len - 1;
 
 #if GEN_GEN >= 8
          db.SurfaceQPitch =