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,23 +176,24 @@ 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;
if (st->apply_texture_swizzle_to_border_color) {
const struct st_texture_object *stobj = st_texture_object_const(texobj);
const struct pipe_sampler_view *sv = NULL; 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 /* Just search for the first used view. We can do this because the
swizzle is per-texture, not per context. */ swizzle is per-texture, not per context. */
/* XXX: clean that up to not use the sampler view at all */ /* XXX: clean that up to not use the sampler view at all */
for (i = 0; i < stobj->num_sampler_views; ++i) { for (unsigned i = 0; i < stobj->num_sampler_views; ++i) {
if (stobj->sampler_views[i]) { if (stobj->sampler_views[i]) {
sv = stobj->sampler_views[i]; sv = stobj->sampler_views[i];
break; break;
} }
} }
if (st->apply_texture_swizzle_to_border_color && sv) { if (sv) {
union pipe_color_union tmp;
const unsigned char swz[4] = const unsigned char swz[4] =
{ {
sv->swizzle_r, sv->swizzle_r,
@@ -201,12 +202,16 @@ st_convert_sampler(const struct st_context *st,
sv->swizzle_a, 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,