1 /*
2 * Copyright 2022 Alyssa Rosenzweig
3 * SPDX-License-Identifier: MIT
4 */
5
6 #pragma once
7
8 #include <stdbool.h>
9 #include "util/format/u_formats.h"
10
11 /* Define aliases for the subset formats that are accessible in the ISA. These
12 * subsets disregard component mapping and number of components. This
13 * constitutes ABI with the compiler.
14 */
15 enum agx_internal_formats {
16 AGX_INTERNAL_FORMAT_I8 = PIPE_FORMAT_R8_UINT,
17 AGX_INTERNAL_FORMAT_I16 = PIPE_FORMAT_R16_UINT,
18 AGX_INTERNAL_FORMAT_I32 = PIPE_FORMAT_R32_UINT,
19 AGX_INTERNAL_FORMAT_F16 = PIPE_FORMAT_R16_FLOAT,
20 AGX_INTERNAL_FORMAT_U8NORM = PIPE_FORMAT_R8_UNORM,
21 AGX_INTERNAL_FORMAT_S8NORM = PIPE_FORMAT_R8_SNORM,
22 AGX_INTERNAL_FORMAT_U16NORM = PIPE_FORMAT_R16_UNORM,
23 AGX_INTERNAL_FORMAT_S16NORM = PIPE_FORMAT_R16_SNORM,
24 AGX_INTERNAL_FORMAT_RGB10A2 = PIPE_FORMAT_R10G10B10A2_UNORM,
25 AGX_INTERNAL_FORMAT_SRGBA8 = PIPE_FORMAT_R8G8B8A8_SRGB,
26 AGX_INTERNAL_FORMAT_RG11B10F = PIPE_FORMAT_R11G11B10_FLOAT,
27 AGX_INTERNAL_FORMAT_RGB9E5 = PIPE_FORMAT_R9G9B9E5_FLOAT
28 };
29
30 /*
31 * The architecture load/store instructions support masking, but packed formats
32 * are not compatible with masking. Check if a format is packed.
33 */
34 static inline bool
agx_internal_format_supports_mask(enum agx_internal_formats format)35 agx_internal_format_supports_mask(enum agx_internal_formats format)
36 {
37 switch (format) {
38 case AGX_INTERNAL_FORMAT_RGB10A2:
39 case AGX_INTERNAL_FORMAT_RG11B10F:
40 case AGX_INTERNAL_FORMAT_RGB9E5:
41 return false;
42 default:
43 return true;
44 }
45 }
46