mesa: enable GL_EXT_draw_instanced for gles2
[mesa.git] / src / mesa / main / texcompress_rgtc.c
index e96af4eb5a606d741fb0c0354b71d2aeb35f4b70..6839432966fc5a1a01f4e150e90f6d441d4cfb12 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2011 Red Hat Inc.
- * 
+ *
  * block compression parts are:
  * Copyright (C) 2004  Roland Scheidegger   All Rights Reserved.
  *
  * GL_EXT_texture_compression_rgtc support.
  */
 
+#include <stdlib.h>
 
+#include "config.h"
 #include "glheader.h"
-#include "imports.h"
-#include "colormac.h"
+
 #include "image.h"
 #include "macros.h"
 #include "mipmap.h"
@@ -86,7 +87,7 @@ _mesa_texstore_red_rgtc1(TEXSTORE_PARAMS)
    GLint dstRowDiff, redRowStride;
    GLubyte *tempImageSlices[1];
 
-   ASSERT(dstFormat == MESA_FORMAT_R_RGTC1_UNORM ||
+   assert(dstFormat == MESA_FORMAT_R_RGTC1_UNORM ||
           dstFormat == MESA_FORMAT_L_LATC1_UNORM);
 
    tempImage = malloc(srcWidth * srcHeight * 1 * sizeof(GLubyte));
@@ -136,18 +137,24 @@ _mesa_texstore_signed_red_rgtc1(TEXSTORE_PARAMS)
    const GLfloat *srcaddr;
    GLbyte srcpixels[4][4];
    GLbyte *blkaddr;
-   GLint dstRowDiff;
-   ASSERT(dstFormat == MESA_FORMAT_R_RGTC1_SNORM ||
+   GLint dstRowDiff, redRowStride;
+   GLfloat *tempImageSlices[1];
+
+   assert(dstFormat == MESA_FORMAT_R_RGTC1_SNORM ||
           dstFormat == MESA_FORMAT_L_LATC1_SNORM);
 
-   tempImage = _mesa_make_temp_float_image(ctx, dims,
-                                          baseInternalFormat,
-                                          _mesa_get_format_base_format(dstFormat),
-                                          srcWidth, srcHeight, srcDepth,
-                                          srcFormat, srcType, srcAddr,
-                                          srcPacking, 0x0);
+   redRowStride = 1 * srcWidth * sizeof(GLfloat);
+   tempImage = malloc(srcWidth * srcHeight * 1 * sizeof(GLfloat));
    if (!tempImage)
       return GL_FALSE; /* out of memory */
+   tempImageSlices[0] = (GLfloat *) tempImage;
+   _mesa_texstore(ctx, dims,
+                  baseInternalFormat,
+                  MESA_FORMAT_R_FLOAT32,
+                  redRowStride, (GLubyte **)tempImageSlices,
+                  srcWidth, srcHeight, srcDepth,
+                  srcFormat, srcType, srcAddr,
+                  srcPacking);
 
    dst = (GLbyte *) dstSlices[0];
 
@@ -187,13 +194,13 @@ _mesa_texstore_rg_rgtc2(TEXSTORE_PARAMS)
    mesa_format tempFormat;
    GLubyte *tempImageSlices[1];
 
-   ASSERT(dstFormat == MESA_FORMAT_RG_RGTC2_UNORM ||
+   assert(dstFormat == MESA_FORMAT_RG_RGTC2_UNORM ||
           dstFormat == MESA_FORMAT_LA_LATC2_UNORM);
 
    if (baseInternalFormat == GL_RG)
-      tempFormat = MESA_FORMAT_R8G8_UNORM;
+      tempFormat = MESA_FORMAT_RG_UNORM8;
    else
-      tempFormat = MESA_FORMAT_L8A8_UNORM;
+      tempFormat = MESA_FORMAT_LA_UNORM8;
 
    rgRowStride = 2 * srcWidth * sizeof(GLubyte);
    tempImage = malloc(srcWidth * srcHeight * 2 * sizeof(GLubyte));
@@ -248,19 +255,30 @@ _mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS)
    const GLfloat *srcaddr;
    GLbyte srcpixels[4][4];
    GLbyte *blkaddr;
-   GLint dstRowDiff;
+   GLint dstRowDiff, rgRowStride;
+   mesa_format tempFormat;
+   GLfloat *tempImageSlices[1];
 
-   ASSERT(dstFormat == MESA_FORMAT_RG_RGTC2_SNORM ||
+   assert(dstFormat == MESA_FORMAT_RG_RGTC2_SNORM ||
           dstFormat == MESA_FORMAT_LA_LATC2_SNORM);
 
-   tempImage = _mesa_make_temp_float_image(ctx, dims,
-                                          baseInternalFormat,
-                                          _mesa_get_format_base_format(dstFormat),
-                                          srcWidth, srcHeight, srcDepth,
-                                          srcFormat, srcType, srcAddr,
-                                          srcPacking, 0x0);
+   if (baseInternalFormat == GL_RG)
+      tempFormat = MESA_FORMAT_RG_FLOAT32;
+   else
+      tempFormat = MESA_FORMAT_LA_FLOAT32;
+
+   rgRowStride = 2 * srcWidth * sizeof(GLfloat);
+   tempImage = malloc(srcWidth * srcHeight * 2 * sizeof(GLfloat));
    if (!tempImage)
       return GL_FALSE; /* out of memory */
+   tempImageSlices[0] = (GLfloat *) tempImage;
+   _mesa_texstore(ctx, dims,
+                  baseInternalFormat,
+                  tempFormat,
+                  rgRowStride, (GLubyte **)tempImageSlices,
+                  srcWidth, srcHeight, srcDepth,
+                  srcFormat, srcType, srcAddr,
+                  srcPacking);
 
    dst = (GLbyte *) dstSlices[0];