diff options
author | Jason Ekstrand <[email protected]> | 2016-09-01 18:57:01 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2016-10-03 14:53:01 -0700 |
commit | 5637f3f1202b46ff02c80e743dd84752a040685a (patch) | |
tree | 44d2b312053204f14dc752ecb77ed13f9d5578e5 /src | |
parent | b7a0f2e1f769314d88d902c8506250d18393d359 (diff) |
intel/isl: Add a format_supports_multisampling helper
Signed-off-by: Jason Ekstrand <[email protected]>
Reviewed-by: Chad Versace <[email protected]>
Reviewed-by: Nanley Chery <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/intel/isl/isl.h | 2 | ||||
-rw-r--r-- | src/intel/isl/isl_format.c | 28 | ||||
-rw-r--r-- | src/intel/isl/isl_gen6.c | 19 | ||||
-rw-r--r-- | src/intel/isl/isl_gen7.c | 16 | ||||
-rw-r--r-- | src/intel/isl/isl_gen8.c | 4 |
5 files changed, 33 insertions, 36 deletions
diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h index d2f0e168495..29fb3d07f9a 100644 --- a/src/intel/isl/isl.h +++ b/src/intel/isl/isl.h @@ -1030,6 +1030,8 @@ bool isl_format_supports_vertex_fetch(const struct gen_device_info *devinfo, enum isl_format format); bool isl_format_supports_lossless_compression(const struct gen_device_info *devinfo, enum isl_format format); +bool isl_format_supports_multisampling(const struct gen_device_info *devinfo, + enum isl_format format); bool isl_format_has_unorm_channel(enum isl_format fmt) ATTRIBUTE_CONST; bool isl_format_has_snorm_channel(enum isl_format fmt) ATTRIBUTE_CONST; diff --git a/src/intel/isl/isl_format.c b/src/intel/isl/isl_format.c index 2804463b127..81c01e0b8ca 100644 --- a/src/intel/isl/isl_format.c +++ b/src/intel/isl/isl_format.c @@ -429,6 +429,34 @@ isl_format_supports_lossless_compression(const struct gen_device_info *devinfo, return format_gen(devinfo) >= format_info[format].lossless_compression; } +bool +isl_format_supports_multisampling(const struct gen_device_info *devinfo, + enum isl_format format) +{ + /* From the Sandybridge PRM, Volume 4 Part 1 p72, SURFACE_STATE, Surface + * Format: + * + * If Number of Multisamples is set to a value other than + * MULTISAMPLECOUNT_1, this field cannot be set to the following + * formats: + * + * - any format with greater than 64 bits per element + * - any compressed texture format (BC*) + * - any YCRCB* format + * + * The restriction on the format's size is removed on Broadwell. + */ + if (devinfo->gen < 8 && isl_format_get_layout(format)->bpb > 64) { + return false; + } else if (isl_format_is_compressed(format)) { + return false; + } else if (isl_format_is_yuv(format)) { + return false; + } else { + return true; + } +} + static inline bool isl_format_has_channel_type(enum isl_format fmt, enum isl_base_type type) { diff --git a/src/intel/isl/isl_gen6.c b/src/intel/isl/isl_gen6.c index 2c52e38fdbb..b30998d044d 100644 --- a/src/intel/isl/isl_gen6.c +++ b/src/intel/isl/isl_gen6.c @@ -30,8 +30,6 @@ gen6_choose_msaa_layout(const struct isl_device *dev, enum isl_tiling tiling, enum isl_msaa_layout *msaa_layout) { - const struct isl_format_layout *fmtl = isl_format_get_layout(info->format); - assert(ISL_DEV_GEN(dev) == 6); assert(info->samples >= 1); @@ -40,22 +38,7 @@ gen6_choose_msaa_layout(const struct isl_device *dev, return false; } - /* From the Sandybridge PRM, Volume 4 Part 1 p72, SURFACE_STATE, Surface - * Format: - * - * If Number of Multisamples is set to a value other than - * MULTISAMPLECOUNT_1, this field cannot be set to the following - * formats: - * - * - any format with greater than 64 bits per element - * - any compressed texture format (BC*) - * - any YCRCB* format - */ - if (fmtl->bpb > 64) - return false; - if (isl_format_is_compressed(info->format)) - return false; - if (isl_format_is_yuv(info->format)) + if (!isl_format_supports_multisampling(dev->info, info->format)) return false; /* From the Sandybridge PRM, Volume 4 Part 1 p85, SURFACE_STATE, Number of diff --git a/src/intel/isl/isl_gen7.c b/src/intel/isl/isl_gen7.c index 4f1cc9d5f1a..a2a9486211d 100644 --- a/src/intel/isl/isl_gen7.c +++ b/src/intel/isl/isl_gen7.c @@ -30,8 +30,6 @@ gen7_choose_msaa_layout(const struct isl_device *dev, enum isl_tiling tiling, enum isl_msaa_layout *msaa_layout) { - const struct isl_format_layout *fmtl = isl_format_get_layout(info->format); - bool require_array = false; bool require_interleaved = false; @@ -43,19 +41,7 @@ gen7_choose_msaa_layout(const struct isl_device *dev, return true; } - /* From the Ivybridge PRM, Volume 4 Part 1 p63, SURFACE_STATE, Surface - * Format: - * - * If Number of Multisamples is set to a value other than - * MULTISAMPLECOUNT_1, this field cannot be set to the following - * formats: any format with greater than 64 bits per element, any - * compressed texture format (BC*), and any YCRCB* format. - */ - if (fmtl->bpb > 64) - return false; - if (isl_format_is_compressed(info->format)) - return false; - if (isl_format_is_yuv(info->format)) + if (!isl_format_supports_multisampling(dev->info, info->format)) return false; /* From the Ivybridge PRM, Volume 4 Part 1 p73, SURFACE_STATE, Number of diff --git a/src/intel/isl/isl_gen8.c b/src/intel/isl/isl_gen8.c index b456d701f09..0049614a0f4 100644 --- a/src/intel/isl/isl_gen8.c +++ b/src/intel/isl/isl_gen8.c @@ -79,9 +79,7 @@ gen8_choose_msaa_layout(const struct isl_device *dev, /* More obvious restrictions */ if (isl_surf_usage_is_display(info->usage)) return false; - if (isl_format_is_compressed(info->format)) - return false; - if (isl_format_is_yuv(info->format)) + if (!isl_format_supports_multisampling(dev->info, info->format)) return false; if (isl_surf_usage_is_depth_or_stencil(info->usage) || |