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 cf6c17f28f7e744dd252444dbeeab7f47231fce5..631093273bf21efa7ed9b7102894fcf9de19a6df 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 8307cb68f9c1e6a575a6551eea98c47e43f366a8..af15e856028d280915487dbc955f8cb88c1441a4 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 91e4d63fc8df0b87f2532ea19fe22e13cb75c680..b6f5d26da5b48e678a20644f6650f0723443624a 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: