mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 02:28:10 +02:00
r600: fix some border color swizzles on CAYMAN
Signed-off-by: Gert Wollny <gert.wollny@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19532>
This commit is contained in:
parent
196499d75e
commit
923d635357
1 changed files with 45 additions and 5 deletions
|
|
@ -2405,6 +2405,41 @@ static void evergreen_emit_cs_sampler_views(struct r600_context *rctx, struct r6
|
||||||
EG_FETCH_CONSTANTS_OFFSET_CS + R600_MAX_CONST_BUFFERS, RADEON_CP_PACKET3_COMPUTE_MODE);
|
EG_FETCH_CONSTANTS_OFFSET_CS + R600_MAX_CONST_BUFFERS, RADEON_CP_PACKET3_COMPUTE_MODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cayman_convert_border_color(union pipe_color_union *in,
|
||||||
|
union pipe_color_union *out,
|
||||||
|
struct pipe_sampler_view *view)
|
||||||
|
{
|
||||||
|
enum pipe_format format = view->format;
|
||||||
|
const struct util_format_description *d = util_format_description(format);
|
||||||
|
|
||||||
|
if ((!util_format_is_alpha(format) &&
|
||||||
|
!util_format_is_luminance(format) &&
|
||||||
|
!util_format_is_luminance_alpha(format) &&
|
||||||
|
!util_format_is_intensity(format) &&
|
||||||
|
//!util_format_is_depth_or_stencil(format) &&
|
||||||
|
(format != PIPE_FORMAT_RGTC1_SNORM) &&
|
||||||
|
(format != PIPE_FORMAT_RGTC1_UNORM) &&
|
||||||
|
(format != PIPE_FORMAT_RGTC2_SNORM) &&
|
||||||
|
(format != PIPE_FORMAT_RGTC2_UNORM) &&
|
||||||
|
!(d->channel[0].size < 8) &&
|
||||||
|
(d->nr_channels > 2)) ||
|
||||||
|
(util_format_is_srgb(format) ||
|
||||||
|
util_format_is_s3tc(format))
|
||||||
|
) {
|
||||||
|
|
||||||
|
for (int i = 0; i < 4; ++i) {
|
||||||
|
switch (i) {
|
||||||
|
case 0: out->f[0] = in->f[view->swizzle_r];break;
|
||||||
|
case 1: out->f[1] = in->f[view->swizzle_g];break;
|
||||||
|
case 2: out->f[2] = in->f[view->swizzle_b];break;
|
||||||
|
case 3: out->f[3] = in->f[view->swizzle_a];break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
memcpy(out->f, in->f, 4 * sizeof(float));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void evergreen_convert_border_color(union pipe_color_union *in,
|
static void evergreen_convert_border_color(union pipe_color_union *in,
|
||||||
union pipe_color_union *out,
|
union pipe_color_union *out,
|
||||||
enum pipe_format format)
|
enum pipe_format format)
|
||||||
|
|
@ -2456,11 +2491,16 @@ static void evergreen_emit_sampler_states(struct r600_context *rctx,
|
||||||
|
|
||||||
if (rstate->border_color_use) {
|
if (rstate->border_color_use) {
|
||||||
struct r600_pipe_sampler_view *rview = texinfo->views.views[i];
|
struct r600_pipe_sampler_view *rview = texinfo->views.views[i];
|
||||||
if (rview) {
|
if (rview) {
|
||||||
evergreen_convert_border_color(&rstate->border_color,
|
if (rctx->b.gfx_level < CAYMAN) {
|
||||||
&border_color, rview->base.format);
|
evergreen_convert_border_color(&rstate->border_color,
|
||||||
} else {
|
&border_color, rview->base.format);
|
||||||
border_color_ptr = &rstate->border_color;
|
} else {
|
||||||
|
cayman_convert_border_color(&rstate->border_color,
|
||||||
|
&border_color, &rview->base);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
border_color_ptr = &rstate->border_color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue