/*
* 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"
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));
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];
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));
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];