mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-04 21:30:26 +01:00
mesa: When unpacking signed integer pixel data, don't clamp to 0.
In the core, we always treat spans of int/uint data as uint, so this
extract function was truncating storage of integer pixel data to a n
int texture to (0, max_int) instead of (min_int, max_int). There is
probably missing code for handling truncation on conversion between
pixel formats, still, but this does improve things.
NOTE: This is a candidate for the 8.0 branch.
Reviewed-by: Brian Paul <brianp@vmware.com>
(cherry picked from commit dadbec1e90)
This commit is contained in:
parent
c1ccb52c72
commit
05ff4d209d
1 changed files with 12 additions and 33 deletions
|
|
@ -3006,27 +3006,6 @@ extract_float_rgba(GLuint n, GLfloat rgba[][4],
|
|||
}
|
||||
|
||||
|
||||
static inline GLuint
|
||||
clamp_byte_to_uint(GLbyte b)
|
||||
{
|
||||
return b < 0 ? 0 : b;
|
||||
}
|
||||
|
||||
|
||||
static inline GLuint
|
||||
clamp_short_to_uint(GLshort s)
|
||||
{
|
||||
return s < 0 ? 0 : s;
|
||||
}
|
||||
|
||||
|
||||
static inline GLuint
|
||||
clamp_int_to_uint(GLint i)
|
||||
{
|
||||
return i < 0 ? 0 : i;
|
||||
}
|
||||
|
||||
|
||||
static inline GLuint
|
||||
clamp_float_to_uint(GLfloat f)
|
||||
{
|
||||
|
|
@ -3149,10 +3128,10 @@ extract_uint_rgba(GLuint n, GLuint rgba[][4],
|
|||
PROCESS(aSrc, ACOMP, 1, GLubyte, (GLuint));
|
||||
break;
|
||||
case GL_BYTE:
|
||||
PROCESS(rSrc, RCOMP, 0, GLbyte, clamp_byte_to_uint);
|
||||
PROCESS(gSrc, GCOMP, 0, GLbyte, clamp_byte_to_uint);
|
||||
PROCESS(bSrc, BCOMP, 0, GLbyte, clamp_byte_to_uint);
|
||||
PROCESS(aSrc, ACOMP, 1, GLbyte, clamp_byte_to_uint);
|
||||
PROCESS(rSrc, RCOMP, 0, GLbyte, (GLuint));
|
||||
PROCESS(gSrc, GCOMP, 0, GLbyte, (GLuint));
|
||||
PROCESS(bSrc, BCOMP, 0, GLbyte, (GLuint));
|
||||
PROCESS(aSrc, ACOMP, 1, GLbyte, (GLuint));
|
||||
break;
|
||||
case GL_UNSIGNED_SHORT:
|
||||
PROCESS(rSrc, RCOMP, 0, GLushort, (GLuint));
|
||||
|
|
@ -3161,10 +3140,10 @@ extract_uint_rgba(GLuint n, GLuint rgba[][4],
|
|||
PROCESS(aSrc, ACOMP, 1, GLushort, (GLuint));
|
||||
break;
|
||||
case GL_SHORT:
|
||||
PROCESS(rSrc, RCOMP, 0, GLshort, clamp_short_to_uint);
|
||||
PROCESS(gSrc, GCOMP, 0, GLshort, clamp_short_to_uint);
|
||||
PROCESS(bSrc, BCOMP, 0, GLshort, clamp_short_to_uint);
|
||||
PROCESS(aSrc, ACOMP, 1, GLshort, clamp_short_to_uint);
|
||||
PROCESS(rSrc, RCOMP, 0, GLshort, (GLuint));
|
||||
PROCESS(gSrc, GCOMP, 0, GLshort, (GLuint));
|
||||
PROCESS(bSrc, BCOMP, 0, GLshort, (GLuint));
|
||||
PROCESS(aSrc, ACOMP, 1, GLshort, (GLuint));
|
||||
break;
|
||||
case GL_UNSIGNED_INT:
|
||||
PROCESS(rSrc, RCOMP, 0, GLuint, (GLuint));
|
||||
|
|
@ -3173,10 +3152,10 @@ extract_uint_rgba(GLuint n, GLuint rgba[][4],
|
|||
PROCESS(aSrc, ACOMP, 1, GLuint, (GLuint));
|
||||
break;
|
||||
case GL_INT:
|
||||
PROCESS(rSrc, RCOMP, 0, GLint, clamp_int_to_uint);
|
||||
PROCESS(gSrc, GCOMP, 0, GLint, clamp_int_to_uint);
|
||||
PROCESS(bSrc, BCOMP, 0, GLint, clamp_int_to_uint);
|
||||
PROCESS(aSrc, ACOMP, 1, GLint, clamp_int_to_uint);
|
||||
PROCESS(rSrc, RCOMP, 0, GLint, (GLuint));
|
||||
PROCESS(gSrc, GCOMP, 0, GLint, (GLuint));
|
||||
PROCESS(bSrc, BCOMP, 0, GLint, (GLuint));
|
||||
PROCESS(aSrc, ACOMP, 1, GLint, (GLuint));
|
||||
break;
|
||||
case GL_FLOAT:
|
||||
PROCESS(rSrc, RCOMP, 0, GLfloat, clamp_float_to_uint);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue