intel/isl: Add a format_supports_ccs_d helper
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 1 Feb 2017 19:41:51 +0000 (11:41 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 2 Feb 2017 21:33:43 +0000 (13:33 -0800)
Nothing uses this yet but it serves as a nice bit of documentation
that's relatively easy to find.

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Chad Versace <chadversary@chromium.org>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
src/intel/isl/isl.h
src/intel/isl/isl_format.c

index bdc5ebf5c12e1863fd85cc9e95949e56905b5d11..47e4a1eb4ee432e276d054f8005de53d84198bfa 100644 (file)
@@ -1040,6 +1040,8 @@ bool isl_format_supports_filtering(const struct gen_device_info *devinfo,
                                    enum isl_format format);
 bool isl_format_supports_vertex_fetch(const struct gen_device_info *devinfo,
                                       enum isl_format format);
+bool isl_format_supports_ccs_d(const struct gen_device_info *devinfo,
+                               enum isl_format format);
 bool isl_format_supports_ccs_e(const struct gen_device_info *devinfo,
                                enum isl_format format);
 bool isl_format_supports_multisampling(const struct gen_device_info *devinfo,
index ebc8ec9e7086c43e48ef69bd48faa90cfa1b9db6..ed5a0636eb4fb7806dd9db81b5144ccc43e7431f 100644 (file)
@@ -437,6 +437,28 @@ isl_format_supports_vertex_fetch(const struct gen_device_info *devinfo,
    return format_gen(devinfo) >= format_info[format].input_vb;
 }
 
+/**
+ * Returns true if the given format can support single-sample fast clears.
+ * This function only checks the format.  In order to determine if a surface
+ * supports CCS_E, several other factors need to be considered such as tiling
+ * and sample count.  See isl_surf_get_ccs_surf for details.
+ */
+bool
+isl_format_supports_ccs_d(const struct gen_device_info *devinfo,
+                          enum isl_format format)
+{
+   /* Fast clears were first added on Ivy Bridge */
+   if (devinfo->gen < 7)
+      return false;
+
+   if (!isl_format_supports_rendering(devinfo, format))
+      return false;
+
+   const struct isl_format_layout *fmtl = isl_format_get_layout(format);
+
+   return fmtl->bpb == 32 || fmtl->bpb == 64 || fmtl->bpb == 128;
+}
+
 bool
 isl_format_supports_ccs_e(const struct gen_device_info *devinfo,
                           enum isl_format format)