summaryrefslogtreecommitdiff
path: root/src/intel
diff options
context:
space:
mode:
authorNanley Chery <nanley.g.chery@intel.com>2017-08-23 10:51:28 -0700
committerNanley Chery <nanley.g.chery@intel.com>2017-10-31 14:26:23 -0700
commitc7baaafe543ee5d4756fdd034a89fdcc47429a7e (patch)
treecd87dacbaffadbaef01a1b7f9068f2350735af7a /src/intel
parent3ba973fe3784438690c4029f18ab5b514f7ae5d1 (diff)
intel/isl: Disable some gen10 CCS_E formats for now
CannonLake additionally supports R11G11B10_FLOAT and four 10-10-10-2 formats with CCS_E. None of these formats fit within the current blorp_copy framework so disable them until support is added. Signed-off-by: Nanley Chery <nanley.g.chery@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Diffstat (limited to 'src/intel')
-rw-r--r--src/intel/isl/isl_format.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/intel/isl/isl_format.c b/src/intel/isl/isl_format.c
index fba3ac5e1a..03c591071b 100644
--- a/src/intel/isl/isl_format.c
+++ b/src/intel/isl/isl_format.c
@@ -536,6 +536,30 @@ isl_format_supports_ccs_e(const struct gen_device_info *devinfo,
if (!format_info[format].exists)
return false;
+ /* For simplicity, only report that a format supports CCS_E if blorp can
+ * perform bit-for-bit copies with an image of that format while compressed.
+ * This allows ISL users to avoid having to resolve the image before
+ * performing such a copy. We may want to change this behavior in the
+ * future.
+ *
+ * R11G11B10_FLOAT has no equivalent UINT format. Given how blorp_copy
+ * currently works, bit-for-bit copy operations are not possible without an
+ * intermediate resolve.
+ */
+ if (format == ISL_FORMAT_R11G11B10_FLOAT)
+ return false;
+
+ /* blorp_copy currently doesn't support formats with different bit-widths
+ * per-channel. Until that support is added, report that these formats don't
+ * support CCS_E. FIXME: Add support for these formats.
+ */
+ if (format == ISL_FORMAT_B10G10R10A2_UNORM ||
+ format == ISL_FORMAT_B10G10R10A2_UNORM_SRGB ||
+ format == ISL_FORMAT_R10G10B10A2_UNORM ||
+ format == ISL_FORMAT_R10G10B10A2_UINT) {
+ return false;
+ }
+
return format_gen(devinfo) >= format_info[format].ccs_e;
}