mesa/st: use tracked samplerview swizzle values
Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17687>
This commit is contained in:

committed by
Marge Bot

parent
0ccc0f7b50
commit
e00bb6cb98
@@ -304,57 +304,6 @@ st_delete_texture_sampler_views(struct st_context *st,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return swizzle1(swizzle2)
|
|
||||||
*/
|
|
||||||
static unsigned
|
|
||||||
swizzle_swizzle(unsigned swizzle1, unsigned swizzle2)
|
|
||||||
{
|
|
||||||
unsigned i, swz[4];
|
|
||||||
|
|
||||||
if (swizzle1 == SWIZZLE_XYZW) {
|
|
||||||
/* identity swizzle, no change to swizzle2 */
|
|
||||||
return swizzle2;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
|
||||||
unsigned s = GET_SWZ(swizzle1, i);
|
|
||||||
switch (s) {
|
|
||||||
case SWIZZLE_X:
|
|
||||||
case SWIZZLE_Y:
|
|
||||||
case SWIZZLE_Z:
|
|
||||||
case SWIZZLE_W:
|
|
||||||
swz[i] = GET_SWZ(swizzle2, s);
|
|
||||||
break;
|
|
||||||
case SWIZZLE_ZERO:
|
|
||||||
swz[i] = SWIZZLE_ZERO;
|
|
||||||
break;
|
|
||||||
case SWIZZLE_ONE:
|
|
||||||
swz[i] = SWIZZLE_ONE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
assert(!"Bad swizzle term");
|
|
||||||
swz[i] = SWIZZLE_X;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return MAKE_SWIZZLE4(swz[0], swz[1], swz[2], swz[3]);
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned
|
|
||||||
get_texture_format_swizzle(const struct st_context *st,
|
|
||||||
const struct gl_texture_object *texObj,
|
|
||||||
bool glsl130_or_later)
|
|
||||||
{
|
|
||||||
const struct gl_texture_image *img = _mesa_base_tex_image(texObj);
|
|
||||||
unsigned tex_swizzle = glsl130_or_later ? img->FormatSwizzleGLSL130 : img->FormatSwizzle;
|
|
||||||
|
|
||||||
/* Combine the texture format swizzle with user's swizzle */
|
|
||||||
return swizzle_swizzle(texObj->Attrib._Swizzle, tex_swizzle);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return TRUE if the texture's sampler view swizzle is not equal to
|
* Return TRUE if the texture's sampler view swizzle is not equal to
|
||||||
* the texture's swizzle.
|
* the texture's swizzle.
|
||||||
@@ -367,7 +316,7 @@ check_sampler_swizzle(const struct st_context *st,
|
|||||||
const struct pipe_sampler_view *sv,
|
const struct pipe_sampler_view *sv,
|
||||||
bool glsl130_or_later)
|
bool glsl130_or_later)
|
||||||
{
|
{
|
||||||
unsigned swizzle = get_texture_format_swizzle(st, texObj, glsl130_or_later);
|
unsigned swizzle = glsl130_or_later ? texObj->SwizzleGLSL130 : texObj->Swizzle;
|
||||||
|
|
||||||
return ((sv->swizzle_r != GET_SWZ(swizzle, 0)) ||
|
return ((sv->swizzle_r != GET_SWZ(swizzle, 0)) ||
|
||||||
(sv->swizzle_g != GET_SWZ(swizzle, 1)) ||
|
(sv->swizzle_g != GET_SWZ(swizzle, 1)) ||
|
||||||
@@ -487,7 +436,7 @@ st_create_texture_sampler_view_from_stobj(struct st_context *st,
|
|||||||
{
|
{
|
||||||
/* There is no need to clear this structure (consider CPU overhead). */
|
/* There is no need to clear this structure (consider CPU overhead). */
|
||||||
struct pipe_sampler_view templ;
|
struct pipe_sampler_view templ;
|
||||||
unsigned swizzle = get_texture_format_swizzle(st, texObj, glsl130_or_later);
|
unsigned swizzle = glsl130_or_later ? texObj->SwizzleGLSL130 : texObj->Swizzle;
|
||||||
|
|
||||||
templ.format = format;
|
templ.format = format;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user