#define GFX10_FORMAT_TABLE_H
#include "pipe/p_format.h"
+#include "ac_gpu_info.h"
#include <stdbool.h>
};
extern const struct gfx10_format gfx10_format_table[PIPE_FORMAT_COUNT];
+extern const struct gfx10_format gfx11_format_table[PIPE_FORMAT_COUNT];
+
+static inline
+const struct gfx10_format* ac_get_gfx10_format_table(struct radeon_info *info)
+{
+ if (info->chip_class >= GFX11)
+ return gfx11_format_table;
+ else
+ return gfx10_format_table;
+}
#endif /* GFX10_FORMAT_TABLE_H */
# Main script
header_template = mako.template.Template("""\
+% if header:
// DO NOT EDIT -- AUTOMATICALLY GENERATED
#include "gfx10_format_table.h"
#include "amdgfxregs.h"
+% endif
+
#define FMT(_img_format, ...) \
- { .img_format = V_008F0C_GFX10_FORMAT_##_img_format, \
+ { .img_format = V_008F0C_${gfx.upper()}_FORMAT_##_img_format, \
##__VA_ARGS__ }
-const struct gfx10_format gfx10_format_table[PIPE_FORMAT_COUNT] = {
+const struct gfx10_format ${gfx}_format_table[PIPE_FORMAT_COUNT] = {
% for pipe_format, args in formats:
% if args is not None:
[${pipe_format}] = FMT(${args}),
/* ${pipe_format} is not supported */
% endif
% endfor
+
+#undef FMT
};
""")
return None
-
-if __name__ == '__main__':
- pipe_formats = parse(sys.argv[1])
-
- with open(sys.argv[2], 'r') as filp:
- db = RegisterDatabase.from_json(json.load(filp))
-
- gfx10_formats = [Gfx10Format(entry) for entry in db.enum('GFX10_FORMAT').entries]
-
- mapping = Gfx10FormatMapping(pipe_formats, gfx10_formats)
-
+def pipe_formats_to_formats(pipe_formats, mapping):
formats = []
for fmt in pipe_formats:
if fmt.name in HARDCODED:
args = None
formats.append((fmt.name, args))
- print(header_template.render(formats=formats))
+ return formats
+
+if __name__ == '__main__':
+ pipe_formats = parse(sys.argv[1])
+
+ # gfx10
+ with open(sys.argv[2], 'r') as filp:
+ db = RegisterDatabase.from_json(json.load(filp))
+
+ gfx10_formats = [Gfx10Format(entry) for entry in db.enum('GFX10_FORMAT').entries]
+ mapping = Gfx10FormatMapping(pipe_formats, gfx10_formats)
+ formats = pipe_formats_to_formats(pipe_formats, mapping)
+ print(header_template.render(header=True, gfx='gfx10', formats=formats))
+
+ # gfx11
+ with open(sys.argv[3], 'r') as filp:
+ db = RegisterDatabase.from_json(json.load(filp))
+
+ gfx11_formats = [Gfx10Format(entry) for entry in db.enum('GFX11_FORMAT').entries]
+ mapping = Gfx10FormatMapping(pipe_formats, gfx11_formats)
+ formats = pipe_formats_to_formats(pipe_formats, mapping)
+ print(header_template.render(header=False, gfx='gfx11', formats=formats))
return false;
if (sscreen->info.chip_class >= GFX10) {
- const struct gfx10_format *fmt = &gfx10_format_table[format];
+ const struct gfx10_format *fmt = &ac_get_gfx10_format_table(&sscreen->info)[format];
if (!fmt->img_format || fmt->buffers_only)
return false;
return true;
}
if (sscreen->info.chip_class >= GFX10) {
- const struct gfx10_format *fmt = &gfx10_format_table[format];
+ const struct gfx10_format *fmt = &ac_get_gfx10_format_table(&sscreen->info)[format];
if (!fmt->img_format || fmt->img_format >= 128)
return 0;
return usage;
S_008F0C_DST_SEL_W(si_map_swizzle(desc->swizzle[3]));
if (screen->info.chip_class >= GFX10) {
- const struct gfx10_format *fmt = &gfx10_format_table[format];
+ const struct gfx10_format *fmt = &ac_get_gfx10_format_table(&screen->info)[format];
/* OOB_SELECT chooses the out-of-bounds check:
* - 0: (index >= NUM_RECORDS) || (offset >= STRIDE)
uint64_t va;
desc = util_format_description(pipe_format);
- img_format = gfx10_format_table[pipe_format].img_format;
+ img_format = ac_get_gfx10_format_table(&screen->info)[pipe_format].img_format;
if (desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS) {
const unsigned char swizzle_xxxx[4] = {0, 0, 0, 0};
S_008F0C_DST_SEL_W(si_map_swizzle(desc->swizzle[3]));
if (sscreen->info.chip_class >= GFX10) {
- const struct gfx10_format *fmt = &gfx10_format_table[elements[i].src_format];
+ const struct gfx10_format *fmt = &ac_get_gfx10_format_table(&sscreen->info)[elements[i].src_format];
assert(fmt->img_format != 0 && fmt->img_format < 128);
v->rsrc_word3[i] |= S_008F0C_FORMAT(fmt->img_format) | S_008F0C_RESOURCE_LEVEL(1);
} else {