/*
 * Copyright © 2016 Red Hat.
 * Copyright © 2016 Bas Nieuwenhuizen
 * SPDX-License-Identifier: MIT
 *
 * based in part on anv driver which is:
 * Copyright © 2015 Intel Corporation
 */

#ifndef TU_FORMATS_H
#define TU_FORMATS_H

#include "tu_common.h"

struct tu_native_format
{
   enum a6xx_format fmt : 8;
   enum a3xx_color_swap swap : 8;
};

static inline bool
tu_pipe_format_is_float16(enum pipe_format format)
{
   const struct util_format_description *desc =
      util_format_description(format);
   const int c = util_format_get_first_non_void_channel(format);
   if (c < 0)
      return false;

   return desc->channel[c].type == UTIL_FORMAT_TYPE_FLOAT && desc->channel[c].size == 16;
}

struct tu_native_format tu6_format_vtx(enum pipe_format format);
struct tu_native_format tu6_format_color(enum pipe_format format, enum a6xx_tile_mode tile_mode);
struct tu_native_format tu6_format_texture(enum pipe_format format, enum a6xx_tile_mode tile_mode);

bool tu6_mutable_format_list_ubwc_compatible(const struct fd_dev_info *info,
                                             const VkImageFormatListCreateInfo *fmt_list);

#endif /* TU_FORMATS_H */
