X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Ffreedreno%2Fvulkan%2Ftu_util.h;h=266dca24548228cb8118f378a233a0f2147eeeb8;hb=0c97e601a422532ea673e842683982b1b4012e6d;hp=fb914cf0ceb88b8005e1de6a2301b1061398a8dc;hpb=72c0522db28b97d9f70b14f28c34f3f0d24b0885;p=mesa.git diff --git a/src/freedreno/vulkan/tu_util.h b/src/freedreno/vulkan/tu_util.h index fb914cf0ceb..266dca24548 100644 --- a/src/freedreno/vulkan/tu_util.h +++ b/src/freedreno/vulkan/tu_util.h @@ -14,6 +14,8 @@ #include "util/macros.h" #include "util/u_math.h" +#include "util/format/u_format_pack.h" +#include "util/format/u_format_zs.h" #include "compiler/shader_enums.h" #include "adreno_common.xml.h" @@ -227,6 +229,7 @@ tu6_pipe2depth(VkFormat format) case VK_FORMAT_D24_UNORM_S8_UINT: return DEPTH6_24_8; case VK_FORMAT_D32_SFLOAT: + case VK_FORMAT_D32_SFLOAT_S8_UINT: case VK_FORMAT_S8_UINT: return DEPTH6_32; default: @@ -249,4 +252,48 @@ tu6_polygon_mode(VkPolygonMode mode) } } +struct bcolor_entry { + uint32_t fp32[4]; + uint64_t ui16; + uint64_t si16; + uint64_t fp16; + uint16_t rgb565; + uint16_t rgb5a1; + uint16_t rgba4; + uint8_t __pad0[2]; + uint32_t ui8; + uint32_t si8; + uint32_t rgb10a2; + uint32_t z24; /* also s8? */ + uint64_t srgb; + uint8_t __pad1[56]; +} __attribute__((aligned(128))); + +static inline void +tu6_pack_border_color(struct bcolor_entry *bcolor, const VkClearColorValue *val, bool is_int) +{ + memcpy(bcolor->fp32, val, 4 * sizeof(float)); + if (is_int) { + /* TODO: clamp? */ + util_format_r16g16b16a16_uint_pack_unsigned((uint8_t*) &bcolor->fp16, + 0, val->uint32, 0, 1, 1); + return; + } +#define PACK_F(x, type) util_format_##type##_pack_rgba_float \ + ( (uint8_t*) (&bcolor->x), 0, val->float32, 0, 1, 1) + PACK_F(ui16, r16g16b16a16_unorm); + PACK_F(si16, r16g16b16a16_snorm); + PACK_F(fp16, r16g16b16a16_float); + PACK_F(rgb565, r5g6b5_unorm); + PACK_F(rgb5a1, r5g5b5a1_unorm); + PACK_F(rgba4, r4g4b4a4_unorm); + PACK_F(ui8, r8g8b8a8_unorm); + PACK_F(si8, r8g8b8a8_snorm); + PACK_F(rgb10a2, r10g10b10a2_unorm); + util_format_x8z24_unorm_pack_z_float((uint8_t*) &bcolor->z24, + 0, val->float32, 0, 1, 1); + PACK_F(srgb, r16g16b16a16_float); /* TODO: clamp? */ +#undef PACK_F +} + #endif /* TU_UTIL_H */