return true;
}
+
+bool
+ilo_image_disable_aux(struct ilo_image *img, const struct ilo_dev *dev)
+{
+ /* HiZ is required for separate stencil on Gen6 */
+ if (ilo_dev_gen(dev) == ILO_GEN(6) &&
+ img->aux.type == ILO_IMAGE_AUX_HIZ &&
+ img->separate_stencil)
+ return false;
+
+ /* MCS is required for multisample images */
+ if (img->aux.type == ILO_IMAGE_AUX_MCS &&
+ img->sample_count > 1)
+ return false;
+
+ img->aux.enables = 0x0;
+
+ return true;
+}
enum gen_surface_tiling tiling,
unsigned bo_stride);
+bool
+ilo_image_disable_aux(struct ilo_image *img, const struct ilo_dev *dev);
+
static inline bool
ilo_image_can_enable_aux(const struct ilo_image *img, unsigned level)
{
- return (img->aux.bo && (img->aux.enables & (1 << level)));
+ return (img->aux.enables & (1 << level));
}
/**
switch (tex->image.aux.type) {
case ILO_IMAGE_AUX_HIZ:
- if (!tex_create_hiz(tex)) {
- /* Separate Stencil Buffer requires HiZ to be enabled */
- if (ilo_dev_gen(&is->dev) == ILO_GEN(6) &&
- tex->image.separate_stencil)
- return false;
- }
+ if (!tex_create_hiz(tex) &&
+ !ilo_image_disable_aux(&tex->image, &is->dev))
+ return false;
break;
case ILO_IMAGE_AUX_MCS:
- if (!tex_create_mcs(tex))
+ if (!tex_create_mcs(tex) &&
+ !ilo_image_disable_aux(&tex->image, &is->dev))
return false;
break;
default: