mesa/main/pack_tmp.h: Add float conversion support
authorSamuel Iglesias Gonsalvez <siglesias@igalia.com>
Fri, 10 Oct 2014 11:06:36 +0000 (13:06 +0200)
committerIago Toral Quiroga <itoral@igalia.com>
Mon, 12 Jan 2015 10:20:28 +0000 (11:20 +0100)
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>
src/mesa/main/pack_tmp.h

index 0d4eb387d8007c32067f1e95e085341a16fa58c3..c6882db14fab01a49ef15bf38d445643a3b5d9e4 100644 (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)",