freedreno/a6xx: Implement fast border colors in sampler
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

There are no fixed border color in GL so we have to compare colors.

Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34786>
This commit is contained in:
Danylo Piliaiev 2025-05-01 14:51:17 +02:00 committed by Marge Bot
parent 3691694933
commit c1dbfa0e0f

View file

@ -292,8 +292,42 @@ fd6_sampler_state_create(struct pipe_context *pctx,
so->texsamp1 |=
A6XX_TEX_SAMP_1_COMPARE_FUNC((enum adreno_compare_func)cso->compare_func); /* maps 1:1 */
if (needs_border)
so->texsamp2 = A6XX_TEX_SAMP_2_BCOLOR(get_bcolor_offset(ctx, cso));
if (needs_border) {
bool fast_border_color_enable = false;
enum a6xx_fast_border_color fast_border_color = A6XX_BORDER_COLOR_0_0_0_0;
if (cso->border_color.ui[0] == 0 &&
cso->border_color.ui[1] == 0 &&
cso->border_color.ui[2] == 0 &&
cso->border_color.ui[3] == 0) {
fast_border_color_enable = true;
fast_border_color = A6XX_BORDER_COLOR_0_0_0_0;
} else if (cso->border_color.ui[0] == 0 &&
cso->border_color.ui[1] == 0 &&
cso->border_color.ui[2] == 0 &&
cso->border_color.ui[3] == 0x3F800000) {
fast_border_color_enable = true;
fast_border_color = A6XX_BORDER_COLOR_0_0_0_1;
} else if (cso->border_color.ui[0] == 0x3F800000 &&
cso->border_color.ui[1] == 0x3F800000 &&
cso->border_color.ui[2] == 0x3F800000 &&
cso->border_color.ui[3] == 0) {
fast_border_color_enable = true;
fast_border_color = A6XX_BORDER_COLOR_1_1_1_0;
} else if (cso->border_color.ui[0] == 0x3F800000 &&
cso->border_color.ui[1] == 0x3F800000 &&
cso->border_color.ui[2] == 0x3F800000 &&
cso->border_color.ui[3] == 0x3F800000) {
fast_border_color_enable = true;
fast_border_color = A6XX_BORDER_COLOR_1_1_1_1;
}
if (fast_border_color_enable) {
so->texsamp2 = A6XX_TEX_SAMP_2_FASTBORDERCOLOR(fast_border_color) |
A6XX_TEX_SAMP_2_FASTBORDERCOLOREN;
} else {
so->texsamp2 = A6XX_TEX_SAMP_2_BCOLOR(get_bcolor_offset(ctx, cso));
}
}
/* We don't know if the format is going to be YUV. Setting CHROMA_LINEAR
* unconditionally seems fine.