diff options
author | Chia-I Wu <[email protected]> | 2015-05-22 14:21:22 +0800 |
---|---|---|
committer | Chia-I Wu <[email protected]> | 2015-06-14 15:43:20 +0800 |
commit | 9cb0df4b50593e69f65b65704f5b64f3a12be9b5 (patch) | |
tree | ec711762dd00b86b4c45179524be9cee0a86930a /src/gallium/drivers/ilo | |
parent | f0de65cbc29b45fffbe4bf4e1ce299ddb8be9eda (diff) |
ilo: add ilo_image_disable_aux()
When aux bo allocation fails, ilo_image_disable_aux() should be called to
disable aux buffer.
Diffstat (limited to 'src/gallium/drivers/ilo')
-rw-r--r-- | src/gallium/drivers/ilo/core/ilo_image.c | 19 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/core/ilo_image.h | 5 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/ilo_resource.c | 12 |
3 files changed, 28 insertions, 8 deletions
diff --git a/src/gallium/drivers/ilo/core/ilo_image.c b/src/gallium/drivers/ilo/core/ilo_image.c index cf6c17f28f7..631093273bf 100644 --- a/src/gallium/drivers/ilo/core/ilo_image.c +++ b/src/gallium/drivers/ilo/core/ilo_image.c @@ -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; +} diff --git a/src/gallium/drivers/ilo/core/ilo_image.h b/src/gallium/drivers/ilo/core/ilo_image.h index 8307cb68f9c..af15e856028 100644 --- a/src/gallium/drivers/ilo/core/ilo_image.h +++ b/src/gallium/drivers/ilo/core/ilo_image.h @@ -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)); } /** diff --git a/src/gallium/drivers/ilo/ilo_resource.c b/src/gallium/drivers/ilo/ilo_resource.c index 91e4d63fc8d..b6f5d26da5b 100644 --- a/src/gallium/drivers/ilo/ilo_resource.c +++ b/src/gallium/drivers/ilo/ilo_resource.c @@ -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: |