From: Faith Ekstrand Date: Tue, 31 Jan 2023 02:11:52 +0000 (-0600) Subject: nil/format: Add helpers for render formats X-Git-Tag: upstream/23.3.3~4418 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5ee481bf26294f3e4ea283919a03247c1aad92f0;p=platform%2Fupstream%2Fmesa.git nil/format: Add helpers for render formats Part-of: --- diff --git a/src/nouveau/nil/nil_format.c b/src/nouveau/nil/nil_format.c index 1b6b8b5..6a5c8b4 100644 --- a/src/nouveau/nil/nil_format.c +++ b/src/nouveau/nil/nil_format.c @@ -4,6 +4,11 @@ #include "gallium/drivers/nouveau/nv50/g80_texture.xml.h" #include "gallium/drivers/nouveau/nvc0/gm107_texture.xml.h" +struct nil_format_info { + uint32_t rt; + struct nil_tic_format tic; +}; + /* Abbreviated usage masks: * T: texturing * R: render target @@ -14,21 +19,27 @@ * I: image / surface, implies T */ +#define G80_ZETA_FORMAT_NONE 0 +#define G80_SURFACE_FORMAT_NONE 0 + #define SF_A(sz) G80_TIC_0_COMPONENTS_SIZES_##sz #define SF_B(sz) G200_TIC_0_COMPONENTS_SIZES_##sz #define SF_C(sz) GF100_TIC_0_COMPONENTS_SIZES_##sz #define SF_D(sz) GM107_TIC2_0_COMPONENTS_SIZES_##sz #define SF(c, pf, sf, r, g, b, a, t0, t1, t2, t3, sz, u) \ [PIPE_FORMAT_##pf] = { \ - SF_##c(sz), \ - G80_TIC_TYPE_##t0, \ - G80_TIC_TYPE_##t1, \ - G80_TIC_TYPE_##t2, \ - G80_TIC_TYPE_##t3, \ - G80_TIC_SOURCE_##r, \ - G80_TIC_SOURCE_##g, \ - G80_TIC_SOURCE_##b, \ - G80_TIC_SOURCE_##a, \ + .rt = sf, \ + .tic = { \ + SF_##c(sz), \ + G80_TIC_TYPE_##t0, \ + G80_TIC_TYPE_##t1, \ + G80_TIC_TYPE_##t2, \ + G80_TIC_TYPE_##t3, \ + G80_TIC_SOURCE_##r, \ + G80_TIC_SOURCE_##g, \ + G80_TIC_SOURCE_##b, \ + G80_TIC_SOURCE_##a, \ + } \ } #define C4(c, p, n, r, g, b, a, t, s, u) \ @@ -65,7 +76,7 @@ #define A1(c, p, n, r, g, b, a, t, s, u) \ C4(c, p, n, ZERO, ZERO, ZERO, a, t, s, u) -const struct nil_tic_format nil_tic_formats[PIPE_FORMAT_COUNT] = +static const struct nil_format_info nil_format_infos[PIPE_FORMAT_COUNT] = { C4(A, B8G8R8A8_UNORM, BGRA8_UNORM, B, G, R, A, UNORM, A8B8G8R8, ID), F3(A, B8G8R8X8_UNORM, BGRX8_UNORM, B, G, R, xx, UNORM, A8B8G8R8, TD), @@ -314,3 +325,28 @@ const struct nil_tic_format nil_tic_formats[PIPE_FORMAT_COUNT] = SF(A, R8SG8SB8UX8U_NORM, 0, R, G, B, ONE_FLOAT, SNORM, SNORM, UNORM, UNORM, A8B8G8R8, T), SF(A, R5SG5SB6U_NORM, 0, R, G, B, ONE_FLOAT, SNORM, SNORM, UNORM, UNORM, B6G5R5, T), }; + +bool +nil_format_supports_render(struct nouveau_ws_device *dev, + enum pipe_format format) +{ + assert(format < PIPE_FORMAT_COUNT); + const struct nil_format_info *fmt = &nil_format_infos[format]; + return fmt->rt != 0; +} + +uint32_t +nil_format_to_render(enum pipe_format format) +{ + assert(format < PIPE_FORMAT_COUNT); + const struct nil_format_info *fmt = &nil_format_infos[format]; + return fmt->rt; +} + +const struct nil_tic_format * +nil_tic_format_for_pipe(enum pipe_format format) +{ + assert(format < PIPE_FORMAT_COUNT); + const struct nil_format_info *fmt = &nil_format_infos[format]; + return fmt->tic.comp_sizes == 0 ? NULL : &fmt->tic; +} diff --git a/src/nouveau/nil/nil_format.h b/src/nouveau/nil/nil_format.h index 41b8aed..12825c5 100644 --- a/src/nouveau/nil/nil_format.h +++ b/src/nouveau/nil/nil_format.h @@ -7,8 +7,15 @@ #include "util/format/u_format.h" +struct nouveau_ws_device; + /* We don't have our own format enum; we use PIPE_FORMAT for everything */ +bool nil_format_supports_render(struct nouveau_ws_device *dev, + enum pipe_format format); + +uint32_t nil_format_to_render(enum pipe_format format); + struct nil_tic_format { unsigned comp_sizes:8; unsigned type_r:3; @@ -21,14 +28,7 @@ struct nil_tic_format { unsigned src_w:3; }; -extern const struct nil_tic_format nil_tic_formats[]; - -static inline const struct nil_tic_format * -nil_tic_format_for_pipe(enum pipe_format format) -{ - assert(format < PIPE_FORMAT_COUNT); - const struct nil_tic_format *fmt = &nil_tic_formats[format]; - return fmt->comp_sizes == 0 ? NULL : fmt; -} +const struct nil_tic_format * +nil_tic_format_for_pipe(enum pipe_format format); #endif /* NIL_FORMAT_H */