anv: Set viewport extents correctly when height is negative
authorJason Ekstrand <jason.ekstrand@intel.com>
Sat, 21 Jan 2017 01:30:51 +0000 (17:30 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 24 Jan 2017 20:27:48 +0000 (12:27 -0800)
As per VK_KHR_maintenance1, setting a negative height in the viewport
can be used to get flipped coordinates.  This is, aparently, very useful
when porting D3D apps to Vulkan.  All we need to do to support this is
to make sure we actually set the min and max correctly.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
src/intel/vulkan/gen8_cmd_buffer.c

index f22037b570f3f8c0ef0a13920162b821b4df72e6..ab68872a260b7f4100e61e566697ea99f4c13b64 100644 (file)
@@ -59,8 +59,8 @@ gen8_cmd_buffer_emit_viewport(struct anv_cmd_buffer *cmd_buffer)
          .YMaxClipGuardband = 1.0f,
          .XMinViewPort = vp->x,
          .XMaxViewPort = vp->x + vp->width - 1,
-         .YMinViewPort = vp->y,
-         .YMaxViewPort = vp->y + vp->height - 1,
+         .YMinViewPort = MIN2(vp->y, vp->y + vp->height),
+         .YMaxViewPort = MAX2(vp->y, vp->y + vp->height) - 1,
       };
 
       GENX(SF_CLIP_VIEWPORT_pack)(NULL, sf_clip_state.map + i * 64,