ilo: add ilo_image_disable_aux()
authorChia-I Wu <olvaffe@gmail.com>
Fri, 22 May 2015 06:21:22 +0000 (14:21 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Sun, 14 Jun 2015 07:43:20 +0000 (15:43 +0800)
When aux bo allocation fails, ilo_image_disable_aux() should be called to
disable aux buffer.

src/gallium/drivers/ilo/core/ilo_image.c
src/gallium/drivers/ilo/core/ilo_image.h
src/gallium/drivers/ilo/ilo_resource.c

index cf6c17f..6310932 100644 (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;
+}
index 8307cb6..af15e85 100644 (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));
 }
 
 /**
index 91e4d63..b6f5d26 100644 (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: