mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
st/mesa: simplify the update_single_texture() function
In particular, rework the sRGB/linear format selection code. There's no reason to mess with the Mesa format. Just do everything in terms of the gallium pipe_format. Reviewed-by: Marek Olšák <maraeo@gmail.com>
This commit is contained in:
parent
5f81549f6c
commit
624528834f
1 changed files with 7 additions and 28 deletions
|
|
@ -214,7 +214,7 @@ update_single_texture(struct st_context *st,
|
|||
const struct gl_sampler_object *samp;
|
||||
struct gl_texture_object *texObj;
|
||||
struct st_texture_object *stObj;
|
||||
enum pipe_format st_view_format;
|
||||
enum pipe_format view_format;
|
||||
GLboolean retval;
|
||||
|
||||
samp = _mesa_get_samplerobj(ctx, texUnit);
|
||||
|
|
@ -234,32 +234,11 @@ update_single_texture(struct st_context *st,
|
|||
}
|
||||
|
||||
/* Determine the format of the texture sampler view */
|
||||
st_view_format = stObj->pt->format;
|
||||
view_format = stObj->pt->format;
|
||||
|
||||
{
|
||||
gl_format texFormat;
|
||||
enum pipe_format firstImageFormat;
|
||||
|
||||
if (texObj->Target == GL_TEXTURE_BUFFER) {
|
||||
texFormat = stObj->base._BufferObjectFormat;
|
||||
} else {
|
||||
const struct st_texture_image *firstImage =
|
||||
st_texture_image(stObj->base.Image[0][stObj->base.BaseLevel]);
|
||||
texFormat = firstImage->base.TexFormat;
|
||||
}
|
||||
firstImageFormat = st_mesa_format_to_pipe_format(texFormat);
|
||||
if ((samp->sRGBDecode == GL_SKIP_DECODE_EXT) &&
|
||||
(_mesa_get_format_color_encoding(texFormat) == GL_SRGB)) {
|
||||
/* Don't do sRGB->RGB conversion. Interpret the texture data as
|
||||
* linear values.
|
||||
*/
|
||||
const gl_format linearFormat =
|
||||
_mesa_get_srgb_format_linear(texFormat);
|
||||
firstImageFormat = st_mesa_format_to_pipe_format(linearFormat);
|
||||
}
|
||||
|
||||
if (firstImageFormat != stObj->pt->format)
|
||||
st_view_format = firstImageFormat;
|
||||
/* If sRGB decoding is off, use the linear format */
|
||||
if (samp->sRGBDecode == GL_SKIP_DECODE_EXT) {
|
||||
view_format = util_format_linear(view_format);
|
||||
}
|
||||
|
||||
/* if sampler view has changed dereference it */
|
||||
|
|
@ -267,7 +246,7 @@ update_single_texture(struct st_context *st,
|
|||
if (check_sampler_swizzle(stObj->sampler_view,
|
||||
stObj->base._Swizzle,
|
||||
stObj->base.DepthMode) ||
|
||||
(st_view_format != stObj->sampler_view->format) ||
|
||||
(view_format != stObj->sampler_view->format) ||
|
||||
stObj->base.BaseLevel != stObj->sampler_view->u.tex.first_level) {
|
||||
pipe_sampler_view_reference(&stObj->sampler_view, NULL);
|
||||
}
|
||||
|
|
@ -275,7 +254,7 @@ update_single_texture(struct st_context *st,
|
|||
|
||||
*sampler_view = st_get_texture_sampler_view_from_stobj(stObj, pipe,
|
||||
samp,
|
||||
st_view_format);
|
||||
view_format);
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue