ilo: add ilo_image_disable_aux()
When aux bo allocation fails, ilo_image_disable_aux() should be called to disable aux buffer.
This commit is contained in:
@@ -1445,3 +1445,22 @@ ilo_image_init_for_imported(struct ilo_image *img,
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -164,10 +164,13 @@ ilo_image_init_for_imported(struct ilo_image *img,
|
||||
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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -288,15 +288,13 @@ tex_alloc_bos(struct ilo_texture *tex)
|
||||
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user