Browse Source

ilo: add ilo_image_disable_aux()

When aux bo allocation fails, ilo_image_disable_aux() should be called to
disable aux buffer.
tags/11.0-branchpoint
Chia-I Wu 10 years ago
parent
commit
9cb0df4b50

+ 19
- 0
src/gallium/drivers/ilo/core/ilo_image.c View File

@@ -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;
}

+ 4
- 1
src/gallium/drivers/ilo/core/ilo_image.h View File

@@ -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));
}

/**

+ 5
- 7
src/gallium/drivers/ilo/ilo_resource.c View File

@@ -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:

Loading…
Cancel
Save