[Mesa-dev] [PATCH 09/24] st/mesa: sink code needed for apply_texture_swizzle_to_border_color
Timothy Arceri
tarceri at itsqueeze.com
Tue Jun 13 06:10:57 UTC 2017
On 13/06/17 04:18, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> AMD SI-VI use this. GFX9 doesn't. We can stop doing this for SI-VI since
> border color swizzling is broken there anyway. The only other user of this
> code is nouveau.
Maybe move this comment into the code as a TODO? I was a little confused
at first as I thought this commit was meant to make the change. With that:
Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
> ---
> src/mesa/state_tracker/st_atom_sampler.c | 61 +++++++++++++++++---------------
> 1 file changed, 33 insertions(+), 28 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_atom_sampler.c b/src/mesa/state_tracker/st_atom_sampler.c
> index 9e5d940..9695069 100644
> --- a/src/mesa/state_tracker/st_atom_sampler.c
> +++ b/src/mesa/state_tracker/st_atom_sampler.c
> @@ -170,51 +170,56 @@ st_convert_sampler(const struct st_context *st,
> sampler->max_lod = sampler->min_lod;
> sampler->min_lod = tmp;
> assert(sampler->min_lod <= sampler->max_lod);
> }
>
> /* For non-black borders... */
> if (msamp->BorderColor.ui[0] ||
> msamp->BorderColor.ui[1] ||
> msamp->BorderColor.ui[2] ||
> msamp->BorderColor.ui[3]) {
> - const struct st_texture_object *stobj = st_texture_object_const(texobj);
> 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
> - swizzle is per-texture, not per context. */
> - /* XXX: clean that up to not use the sampler view at all */
> - for (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) {
> - const unsigned char swz[4] =
> - {
> - sv->swizzle_r,
> - sv->swizzle_g,
> - sv->swizzle_b,
> - sv->swizzle_a,
> - };
> -
> - st_translate_color(&msamp->BorderColor,
> - &border_color,
> - texBaseFormat, is_integer);
> + 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;
> +
> + /* Just search for the first used view. We can do this because the
> + swizzle is per-texture, not per context. */
> + /* 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;
> + }
> + }
>
> - util_format_apply_color_swizzle(&sampler->border_color,
> - &border_color, swz, is_integer);
> + if (sv) {
> + union pipe_color_union tmp;
> + const unsigned char swz[4] =
> + {
> + sv->swizzle_r,
> + sv->swizzle_g,
> + sv->swizzle_b,
> + sv->swizzle_a,
> + };
> +
> + st_translate_color(&msamp->BorderColor, &tmp,
> + texBaseFormat, is_integer);
> +
> + util_format_apply_color_swizzle(&sampler->border_color,
> + &tmp, swz, is_integer);
> + } else {
> + st_translate_color(&msamp->BorderColor,
> + &sampler->border_color,
> + texBaseFormat, is_integer);
> + }
> } else {
> st_translate_color(&msamp->BorderColor,
> &sampler->border_color,
> texBaseFormat, is_integer);
> }
> }
>
> sampler->max_anisotropy = (msamp->MaxAnisotropy == 1.0 ?
> 0 : (GLuint) msamp->MaxAnisotropy);
>
>
More information about the mesa-dev
mailing list