intel/isl: Add a format_supports_multisampling helper
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Chad Versace <chadversary@chromium.org> Reviewed-by: Nanley Chery <nanley.g.chery@intel.com>
This commit is contained in:
parent
b7a0f2e1f7
commit
5637f3f120
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) ||
|
||||
|
|
Loading…
Reference in New Issue