X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Filo%2Filo_format.h;h=0a19c02659e8ee352616fc4d93ff9a763b5b1a65;hb=774a556b6dc0d49f9f29c438349a66e69062e6e4;hp=2ea7885694e0b99f1e0d04d5431999968dfa325d;hpb=6c6bd796adda4173ebaf494d6cd2a96d511f1ea3;p=mesa.git diff --git a/src/gallium/drivers/ilo/ilo_format.h b/src/gallium/drivers/ilo/ilo_format.h index 2ea7885694e..0a19c02659e 100644 --- a/src/gallium/drivers/ilo/ilo_format.h +++ b/src/gallium/drivers/ilo/ilo_format.h @@ -32,23 +32,40 @@ #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 */