vc4: Move job-submit skip cases to vc4_job_submit().
[mesa.git] / src / gallium / drivers / ilo / ilo_format.h
index 2ea7885694e0b99f1e0d04d5431999968dfa325d..0a19c02659e8ee352616fc4d93ff9a763b5b1a65 100644 (file)
 
 #include "ilo_common.h"
 
-struct ilo_screen;
+bool
+ilo_format_support_vb(const struct ilo_dev *dev,
+                      enum pipe_format format);
 
-void
-ilo_init_format_functions(struct ilo_screen *is);
+bool
+ilo_format_support_sol(const struct ilo_dev *dev,
+                       enum pipe_format format);
+
+bool
+ilo_format_support_sampler(const struct ilo_dev *dev,
+                           enum pipe_format format);
+
+bool
+ilo_format_support_rt(const struct ilo_dev *dev,
+                      enum pipe_format format);
+
+bool
+ilo_format_support_zs(const struct ilo_dev *dev,
+                      enum pipe_format format);
 
 int
-ilo_translate_color_format(enum pipe_format format);
+ilo_format_translate_color(const struct ilo_dev *dev,
+                           enum pipe_format format);
 
 /**
  * Translate a pipe format to a hardware surface format suitable for
  * the given purpose.  Return -1 on errors.
  *
  * This is an inline function not only for performance reasons.  There are
- * caveats that the callers should that before calling this function.
+ * caveats that the callers should be aware of before calling this function.
  */
 static inline int
-ilo_translate_format(enum pipe_format format, unsigned bind)
+ilo_format_translate(const struct ilo_dev *dev,
+                     enum pipe_format format, unsigned bind)
 {
    switch (bind) {
    case PIPE_BIND_RENDER_TARGET:
@@ -61,7 +78,7 @@ ilo_translate_format(enum pipe_format format, unsigned bind)
       case PIPE_FORMAT_B8G8R8X8_UNORM:
          return GEN6_FORMAT_B8G8R8A8_UNORM;
       default:
-         return ilo_translate_color_format(format);
+         return ilo_format_translate_color(dev, format);
       }
       break;
    case PIPE_BIND_SAMPLER_VIEW:
@@ -87,10 +104,13 @@ ilo_translate_format(enum pipe_format format, unsigned bind)
       case PIPE_FORMAT_ETC1_RGB8:
          return GEN6_FORMAT_R8G8B8X8_UNORM;
       default:
-         return ilo_translate_color_format(format);
+         return ilo_format_translate_color(dev, format);
       }
       break;
    case PIPE_BIND_VERTEX_BUFFER:
+      if (ilo_dev_gen(dev) >= ILO_GEN(7.5))
+         return ilo_format_translate_color(dev, format);
+
       /*
        * Some 3-component formats are not supported as vertex element formats.
        * But since we move between vertices using vb->stride, we should be
@@ -110,9 +130,12 @@ ilo_translate_format(enum pipe_format format, unsigned bind)
       case PIPE_FORMAT_R8G8B8_SINT:
          return GEN6_FORMAT_R8G8B8A8_SINT;
       default:
-         return ilo_translate_color_format(format);
+         return ilo_format_translate_color(dev, format);
       }
       break;
+   case PIPE_BIND_STREAM_OUTPUT:
+      return ilo_format_translate_color(dev, format);
+      break;
    default:
       assert(!"cannot translate format");
       break;
@@ -122,21 +145,59 @@ ilo_translate_format(enum pipe_format format, unsigned bind)
 }
 
 static inline int
-ilo_translate_render_format(enum pipe_format format)
+ilo_format_translate_render(const struct ilo_dev *dev,
+                            enum pipe_format format)
 {
-   return ilo_translate_format(format, PIPE_BIND_RENDER_TARGET);
+   return ilo_format_translate(dev, format, PIPE_BIND_RENDER_TARGET);
 }
 
 static inline int
-ilo_translate_texture_format(enum pipe_format format)
+ilo_format_translate_texture(const struct ilo_dev *dev,
+                             enum pipe_format format)
 {
-   return ilo_translate_format(format, PIPE_BIND_SAMPLER_VIEW);
+   return ilo_format_translate(dev, format, PIPE_BIND_SAMPLER_VIEW);
 }
 
 static inline int
-ilo_translate_vertex_format(enum pipe_format format)
+ilo_format_translate_vertex(const struct ilo_dev *dev,
+                            enum pipe_format format)
+{
+   return ilo_format_translate(dev, format, PIPE_BIND_VERTEX_BUFFER);
+}
+
+static inline enum gen_depth_format
+ilo_format_translate_depth(const struct ilo_dev *dev,
+                           enum pipe_format format)
 {
-   return ilo_translate_format(format, PIPE_BIND_VERTEX_BUFFER);
+   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
+      switch (format) {
+      case PIPE_FORMAT_Z32_FLOAT:
+         return GEN6_ZFORMAT_D32_FLOAT;
+      case PIPE_FORMAT_Z24X8_UNORM:
+         return GEN6_ZFORMAT_D24_UNORM_X8_UINT;
+      case PIPE_FORMAT_Z16_UNORM:
+         return GEN6_ZFORMAT_D16_UNORM;
+      default:
+         assert(!"unknown depth format");
+         return GEN6_ZFORMAT_D32_FLOAT;
+      }
+   } else {
+      switch (format) {
+      case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
+         return GEN6_ZFORMAT_D32_FLOAT_S8X24_UINT;
+      case PIPE_FORMAT_Z32_FLOAT:
+         return GEN6_ZFORMAT_D32_FLOAT;
+      case PIPE_FORMAT_Z24_UNORM_S8_UINT:
+         return GEN6_ZFORMAT_D24_UNORM_S8_UINT;
+      case PIPE_FORMAT_Z24X8_UNORM:
+         return GEN6_ZFORMAT_D24_UNORM_X8_UINT;
+      case PIPE_FORMAT_Z16_UNORM:
+         return GEN6_ZFORMAT_D16_UNORM;
+      default:
+         assert(!"unknown depth format");
+         return GEN6_ZFORMAT_D32_FLOAT;
+      }
+   }
 }
 
 #endif /* ILO_FORMAT_H */