summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/ilo
diff options
context:
space:
mode:
authorChia-I Wu <[email protected]>2015-05-22 14:21:22 +0800
committerChia-I Wu <[email protected]>2015-06-14 15:43:20 +0800
commit9cb0df4b50593e69f65b65704f5b64f3a12be9b5 (patch)
treeec711762dd00b86b4c45179524be9cee0a86930a /src/gallium/drivers/ilo
parentf0de65cbc29b45fffbe4bf4e1ce299ddb8be9eda (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.c19
-rw-r--r--src/gallium/drivers/ilo/core/ilo_image.h5
-rw-r--r--src/gallium/drivers/ilo/ilo_resource.c12
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: