mesa/main/pack_tmp.h: Add float conversion support

We will use this in a later patch to refactor _mesa_pack_rgba_span_float.

Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
Samuel Iglesias Gonsalvez 2014-10-10 13:06:36 +02:00 committed by Iago Toral Quiroga
parent 1a5ec9624a
commit 41a785b09c
1 changed files with 74 additions and 1 deletions

View File

@ -31,6 +31,79 @@ FN_NAME(struct gl_context *ctx,
int i;
switch (dstFormat) {
#ifdef FLOAT_SRC_CONVERT
case GL_RED:
for (i=0;i<n;i++)
dst[i] = FLOAT_SRC_CONVERT(rgba[i][RCOMP]);
break;
case GL_GREEN:
for (i=0;i<n;i++)
dst[i] = FLOAT_SRC_CONVERT(rgba[i][GCOMP]);
break;
case GL_BLUE:
for (i=0;i<n;i++)
dst[i] = FLOAT_SRC_CONVERT(rgba[i][BCOMP]);
break;
case GL_ALPHA:
for (i=0;i<n;i++)
dst[i] = FLOAT_SRC_CONVERT(rgba[i][ACOMP]);
break;
case GL_LUMINANCE:
for (i=0;i<n;i++)
dst[i] = FLOAT_SRC_CONVERT(luminance[i]);
break;
case GL_LUMINANCE_ALPHA:
for (i=0;i<n;i++) {
dst[i*2+0] = FLOAT_SRC_CONVERT(luminance[i]);
dst[i*2+1] = FLOAT_SRC_CONVERT(rgba[i][ACOMP]);
}
break;
case GL_RG:
for (i=0;i<n;i++) {
dst[i*2+0] = FLOAT_SRC_CONVERT(rgba[i][RCOMP]);
dst[i*2+1] = FLOAT_SRC_CONVERT(rgba[i][GCOMP]);
}
break;
case GL_RGB:
for (i=0;i<n;i++) {
dst[i*3+0] = FLOAT_SRC_CONVERT(rgba[i][RCOMP]);
dst[i*3+1] = FLOAT_SRC_CONVERT(rgba[i][GCOMP]);
dst[i*3+2] = FLOAT_SRC_CONVERT(rgba[i][BCOMP]);
}
break;
case GL_RGBA:
for (i=0;i<n;i++) {
dst[i*4+0] = FLOAT_SRC_CONVERT(rgba[i][RCOMP]);
dst[i*4+1] = FLOAT_SRC_CONVERT(rgba[i][GCOMP]);
dst[i*4+2] = FLOAT_SRC_CONVERT(rgba[i][BCOMP]);
dst[i*4+3] = FLOAT_SRC_CONVERT(rgba[i][ACOMP]);
}
break;
case GL_BGR:
for (i=0;i<n;i++) {
dst[i*3+0] = FLOAT_SRC_CONVERT(rgba[i][BCOMP]);
dst[i*3+1] = FLOAT_SRC_CONVERT(rgba[i][GCOMP]);
dst[i*3+2] = FLOAT_SRC_CONVERT(rgba[i][RCOMP]);
}
break;
case GL_BGRA:
for (i=0;i<n;i++) {
dst[i*4+0] = FLOAT_SRC_CONVERT(rgba[i][BCOMP]);
dst[i*4+1] = FLOAT_SRC_CONVERT(rgba[i][GCOMP]);
dst[i*4+2] = FLOAT_SRC_CONVERT(rgba[i][RCOMP]);
dst[i*4+3] = FLOAT_SRC_CONVERT(rgba[i][ACOMP]);
}
break;
case GL_ABGR_EXT:
for (i=0;i<n;i++) {
dst[i*4+0] = FLOAT_SRC_CONVERT(rgba[i][ACOMP]);
dst[i*4+1] = FLOAT_SRC_CONVERT(rgba[i][BCOMP]);
dst[i*4+2] = FLOAT_SRC_CONVERT(rgba[i][GCOMP]);
dst[i*4+3] = FLOAT_SRC_CONVERT(rgba[i][RCOMP]);
}
break;
#endif
#ifdef SRC_CONVERT
case GL_RED_INTEGER_EXT:
for (i=0;i<n;i++) {
dst[i] = SRC_CONVERT(rgba[i][RCOMP]);
@ -112,7 +185,7 @@ FN_NAME(struct gl_context *ctx,
dst[i*2+1] = SRC_CONVERT(rgba[i][ACOMP]);
}
break;
#endif
default:
_mesa_problem(ctx,
"Unsupported format (%s)",