st/mesa: sink code needed for apply_texture_swizzle_to_border_color

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Marek Olšák
2017-06-10 22:13:48 +02:00
parent 588371b772
commit 39ab9fb36c

View File

@@ -176,37 +176,42 @@ st_convert_sampler(const struct st_context *st,
msamp->BorderColor.ui[1] || msamp->BorderColor.ui[1] ||
msamp->BorderColor.ui[2] || msamp->BorderColor.ui[2] ||
msamp->BorderColor.ui[3]) { msamp->BorderColor.ui[3]) {
const struct st_texture_object *stobj = st_texture_object_const(texobj);
const GLboolean is_integer = texobj->_IsIntegerFormat; const GLboolean is_integer = texobj->_IsIntegerFormat;
const struct pipe_sampler_view *sv = NULL;
union pipe_color_union border_color;
GLuint i;
/* Just search for the first used view. We can do this because the if (st->apply_texture_swizzle_to_border_color) {
swizzle is per-texture, not per context. */ const struct st_texture_object *stobj = st_texture_object_const(texobj);
/* XXX: clean that up to not use the sampler view at all */ const struct pipe_sampler_view *sv = NULL;
for (i = 0; i < stobj->num_sampler_views; ++i) {
if (stobj->sampler_views[i]) { /* Just search for the first used view. We can do this because the
sv = stobj->sampler_views[i]; swizzle is per-texture, not per context. */
break; /* XXX: clean that up to not use the sampler view at all */
for (unsigned i = 0; i < stobj->num_sampler_views; ++i) {
if (stobj->sampler_views[i]) {
sv = stobj->sampler_views[i];
break;
}
} }
}
if (st->apply_texture_swizzle_to_border_color && sv) { if (sv) {
const unsigned char swz[4] = union pipe_color_union tmp;
{ const unsigned char swz[4] =
sv->swizzle_r, {
sv->swizzle_g, sv->swizzle_r,
sv->swizzle_b, sv->swizzle_g,
sv->swizzle_a, sv->swizzle_b,
}; sv->swizzle_a,
};
st_translate_color(&msamp->BorderColor, st_translate_color(&msamp->BorderColor, &tmp,
&border_color, texBaseFormat, is_integer);
texBaseFormat, is_integer);
util_format_apply_color_swizzle(&sampler->border_color, util_format_apply_color_swizzle(&sampler->border_color,
&border_color, swz, is_integer); &tmp, swz, is_integer);
} else {
st_translate_color(&msamp->BorderColor,
&sampler->border_color,
texBaseFormat, is_integer);
}
} else { } else {
st_translate_color(&msamp->BorderColor, st_translate_color(&msamp->BorderColor,
&sampler->border_color, &sampler->border_color,