isl: Don't use surface format R32_FLOAT for typed atomic integer operations
authorAnuj Phogat <anuj.phogat@gmail.com>
Fri, 30 Jun 2017 17:29:23 +0000 (10:29 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 15 Feb 2018 00:30:05 +0000 (16:30 -0800)
From Skylake PRM Surface Formats section:

   "The surface format for the typed atomic integer operations must
    be R32_UINT or R32_SINT."

Fixes an error and a piglit GPU hang in simulation environment.
Piglit test: gl45-imageAtomicExchange-float.shader_test

Suggested-by: Francisco Jerez <currojerez@riseup.net>
Signed-off-by: Anuj Phogat <anuj.phogat@gmail.co
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Cc: "18.0 17.3" <mesa-stable@lists.freedesktop.org>
src/intel/isl/isl_storage_image.c

index a8aebce6d49c468b7ef2f137f49702d8a850d0ce..20f6fd5faf6000e30d6a4e6ab745978bb054bd99 100644 (file)
@@ -88,9 +88,16 @@ isl_lower_storage_image_format(const struct gen_device_info *devinfo,
    case ISL_FORMAT_R32G32B32A32_FLOAT:
    case ISL_FORMAT_R32_UINT:
    case ISL_FORMAT_R32_SINT:
-   case ISL_FORMAT_R32_FLOAT:
       return format;
 
+   /* The Skylake PRM's "Surface Formats" section says:
+    *
+    *   "The surface format for the typed atomic integer operations must
+    *    be R32_UINT or R32_SINT."
+    */
+   case ISL_FORMAT_R32_FLOAT:
+      return ISL_FORMAT_R32_UINT;
+
    /* From HSW to BDW the only 64bpp format supported for typed access is
     * RGBA_UINT16.  IVB falls back to untyped.
     */