mesa: move gl_texture_image::FetchTexel fields to swrast
This also involves passing swrast_texture_image instead of gl_texture_image into all the fetch functions.
This commit is contained in:
@@ -1252,37 +1252,6 @@ typedef enum
|
||||
#define ENABLE_TEXMAT(unit) (1 << (unit))
|
||||
|
||||
|
||||
/**
|
||||
* Texel fetch function prototype. We use texel fetch functions to
|
||||
* extract RGBA, color indexes and depth components out of 1D, 2D and 3D
|
||||
* texture images. These functions help to isolate us from the gritty
|
||||
* details of all the various texture image encodings.
|
||||
*
|
||||
* \param texImage texture image.
|
||||
* \param col texel column.
|
||||
* \param row texel row.
|
||||
* \param img texel image level/layer.
|
||||
* \param texelOut output texel (up to 4 GLchans)
|
||||
*/
|
||||
typedef void (*FetchTexelFuncC)( const struct gl_texture_image *texImage,
|
||||
GLint col, GLint row, GLint img,
|
||||
GLchan *texelOut );
|
||||
|
||||
/**
|
||||
* As above, but returns floats.
|
||||
* Used for depth component images and for upcoming signed/float
|
||||
* texture images.
|
||||
*/
|
||||
typedef void (*FetchTexelFuncF)( const struct gl_texture_image *texImage,
|
||||
GLint col, GLint row, GLint img,
|
||||
GLfloat *texelOut );
|
||||
|
||||
|
||||
typedef void (*StoreTexelFunc)(struct gl_texture_image *texImage,
|
||||
GLint col, GLint row, GLint img,
|
||||
const void *texel);
|
||||
|
||||
|
||||
/**
|
||||
* Texture image state. Describes the dimensions of a texture image,
|
||||
* the texel format and pointers to Texel Fetch functions.
|
||||
@@ -1320,9 +1289,6 @@ struct gl_texture_image
|
||||
/** Cube map face: index into gl_texture_object::Image[] array */
|
||||
GLuint Face;
|
||||
|
||||
FetchTexelFuncC FetchTexelc; /**< GLchan texel fetch function pointer */
|
||||
FetchTexelFuncF FetchTexelf; /**< Float texel fetch function pointer */
|
||||
|
||||
GLuint RowStride; /**< Padded width in units of texels */
|
||||
GLuint *ImageOffsets; /**< if 3D texture: array [Depth] of offsets to
|
||||
each 2D slice in 'Data', in texels */
|
||||
|
@@ -40,6 +40,7 @@
|
||||
#include "texcompress_fxt1.h"
|
||||
#include "texcompress_rgtc.h"
|
||||
#include "texcompress_s3tc.h"
|
||||
#include "swrast/s_context.h"
|
||||
|
||||
|
||||
/**
|
||||
@@ -451,15 +452,15 @@ _mesa_decompress_image(gl_format format, GLuint width, GLuint height,
|
||||
const GLubyte *src, GLint srcRowStride,
|
||||
GLfloat *dest)
|
||||
{
|
||||
void (*fetch)(const struct gl_texture_image *texImage,
|
||||
void (*fetch)(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
struct gl_texture_image texImage; /* dummy teximage */
|
||||
struct swrast_texture_image texImage; /* dummy teximage */
|
||||
GLuint i, j;
|
||||
|
||||
/* setup dummy texture image info */
|
||||
memset(&texImage, 0, sizeof(texImage));
|
||||
texImage.Data = (void *) src;
|
||||
texImage.RowStride = srcRowStride;
|
||||
texImage.Base.Data = (void *) src;
|
||||
texImage.Base.RowStride = srcRowStride;
|
||||
|
||||
switch (format) {
|
||||
/* DXT formats */
|
||||
|
@@ -39,6 +39,7 @@
|
||||
#include "texcompress.h"
|
||||
#include "texcompress_fxt1.h"
|
||||
#include "texstore.h"
|
||||
#include "swrast/s_context.h"
|
||||
|
||||
|
||||
#if FEATURE_texture_fxt1
|
||||
@@ -167,13 +168,13 @@ _mesa_texstore_rgba_fxt1(TEXSTORE_PARAMS)
|
||||
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_rgba_fxt1( const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rgba_fxt1( const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||
{
|
||||
/* just sample as GLchan and convert to float here */
|
||||
GLchan rgba[4];
|
||||
(void) k;
|
||||
fxt1_decode_1(texImage->Data, texImage->RowStride, i, j, rgba);
|
||||
fxt1_decode_1(texImage->Base.Data, texImage->Base.RowStride, i, j, rgba);
|
||||
texel[RCOMP] = CHAN_TO_FLOAT(rgba[RCOMP]);
|
||||
texel[GCOMP] = CHAN_TO_FLOAT(rgba[GCOMP]);
|
||||
texel[BCOMP] = CHAN_TO_FLOAT(rgba[BCOMP]);
|
||||
@@ -182,13 +183,13 @@ _mesa_fetch_texel_2d_f_rgba_fxt1( const struct gl_texture_image *texImage,
|
||||
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_rgb_fxt1( const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rgb_fxt1( const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||
{
|
||||
/* just sample as GLchan and convert to float here */
|
||||
GLchan rgba[4];
|
||||
(void) k;
|
||||
fxt1_decode_1(texImage->Data, texImage->RowStride, i, j, rgba);
|
||||
fxt1_decode_1(texImage->Base.Data, texImage->Base.RowStride, i, j, rgba);
|
||||
texel[RCOMP] = CHAN_TO_FLOAT(rgba[RCOMP]);
|
||||
texel[GCOMP] = CHAN_TO_FLOAT(rgba[GCOMP]);
|
||||
texel[BCOMP] = CHAN_TO_FLOAT(rgba[BCOMP]);
|
||||
|
@@ -29,7 +29,7 @@
|
||||
#include "mfeatures.h"
|
||||
#include "texstore.h"
|
||||
|
||||
struct gl_texture_image;
|
||||
struct swrast_texture_image;
|
||||
|
||||
#if FEATURE_texture_fxt1
|
||||
|
||||
@@ -40,11 +40,11 @@ extern GLboolean
|
||||
_mesa_texstore_rgba_fxt1(TEXSTORE_PARAMS);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_rgba_fxt1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rgba_fxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_rgb_fxt1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rgb_fxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
#else /* FEATURE_texture_fxt1 */
|
||||
|
@@ -43,6 +43,8 @@
|
||||
#include "texcompress.h"
|
||||
#include "texcompress_rgtc.h"
|
||||
#include "texstore.h"
|
||||
#include "swrast/s_context.h"
|
||||
|
||||
|
||||
#define RGTC_DEBUG 0
|
||||
|
||||
@@ -323,11 +325,11 @@ _mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS)
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_red_rgtc1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_red_rgtc1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
GLubyte red;
|
||||
unsigned_fetch_texel_rgtc(texImage->RowStride, (GLubyte *)(texImage->Data),
|
||||
unsigned_fetch_texel_rgtc(texImage->Base.RowStride, (GLubyte *)(texImage->Base.Data),
|
||||
i, j, &red, 1);
|
||||
texel[RCOMP] = UBYTE_TO_FLOAT(red);
|
||||
texel[GCOMP] = 0.0;
|
||||
@@ -336,11 +338,11 @@ _mesa_fetch_texel_2d_f_red_rgtc1(const struct gl_texture_image *texImage,
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_signed_red_rgtc1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_signed_red_rgtc1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
GLbyte red;
|
||||
signed_fetch_texel_rgtc(texImage->RowStride, (GLbyte *)(texImage->Data),
|
||||
signed_fetch_texel_rgtc(texImage->Base.RowStride, (GLbyte *)(texImage->Base.Data),
|
||||
i, j, &red, 1);
|
||||
texel[RCOMP] = BYTE_TO_FLOAT_TEX(red);
|
||||
texel[GCOMP] = 0.0;
|
||||
@@ -349,13 +351,13 @@ _mesa_fetch_texel_2d_f_signed_red_rgtc1(const struct gl_texture_image *texImage,
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_rg_rgtc2(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rg_rgtc2(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
GLubyte red, green;
|
||||
unsigned_fetch_texel_rgtc(texImage->RowStride, (GLubyte *)(texImage->Data),
|
||||
unsigned_fetch_texel_rgtc(texImage->Base.RowStride, (GLubyte *)(texImage->Base.Data),
|
||||
i, j, &red, 2);
|
||||
unsigned_fetch_texel_rgtc(texImage->RowStride, (GLubyte *)(texImage->Data) + 8,
|
||||
unsigned_fetch_texel_rgtc(texImage->Base.RowStride, (GLubyte *)(texImage->Base.Data) + 8,
|
||||
i, j, &green, 2);
|
||||
texel[RCOMP] = UBYTE_TO_FLOAT(red);
|
||||
texel[GCOMP] = UBYTE_TO_FLOAT(green);
|
||||
@@ -364,13 +366,13 @@ _mesa_fetch_texel_2d_f_rg_rgtc2(const struct gl_texture_image *texImage,
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_signed_rg_rgtc2(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_signed_rg_rgtc2(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
GLbyte red, green;
|
||||
signed_fetch_texel_rgtc(texImage->RowStride, (GLbyte *)(texImage->Data),
|
||||
signed_fetch_texel_rgtc(texImage->Base.RowStride, (GLbyte *)(texImage->Base.Data),
|
||||
i, j, &red, 2);
|
||||
signed_fetch_texel_rgtc(texImage->RowStride, (GLbyte *)(texImage->Data) + 8,
|
||||
signed_fetch_texel_rgtc(texImage->Base.RowStride, (GLbyte *)(texImage->Base.Data) + 8,
|
||||
i, j, &green, 2);
|
||||
texel[RCOMP] = BYTE_TO_FLOAT_TEX(red);
|
||||
texel[GCOMP] = BYTE_TO_FLOAT_TEX(green);
|
||||
@@ -379,11 +381,11 @@ _mesa_fetch_texel_2d_f_signed_rg_rgtc2(const struct gl_texture_image *texImage,
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_l_latc1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_l_latc1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
GLubyte red;
|
||||
unsigned_fetch_texel_rgtc(texImage->RowStride, (GLubyte *)(texImage->Data),
|
||||
unsigned_fetch_texel_rgtc(texImage->Base.RowStride, (GLubyte *)(texImage->Base.Data),
|
||||
i, j, &red, 1);
|
||||
texel[RCOMP] =
|
||||
texel[GCOMP] =
|
||||
@@ -392,11 +394,11 @@ _mesa_fetch_texel_2d_f_l_latc1(const struct gl_texture_image *texImage,
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_signed_l_latc1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_signed_l_latc1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
GLbyte red;
|
||||
signed_fetch_texel_rgtc(texImage->RowStride, (GLbyte *)(texImage->Data),
|
||||
signed_fetch_texel_rgtc(texImage->Base.RowStride, (GLbyte *)(texImage->Base.Data),
|
||||
i, j, &red, 1);
|
||||
texel[RCOMP] =
|
||||
texel[GCOMP] =
|
||||
@@ -405,13 +407,13 @@ _mesa_fetch_texel_2d_f_signed_l_latc1(const struct gl_texture_image *texImage,
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_la_latc2(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_la_latc2(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
GLubyte red, green;
|
||||
unsigned_fetch_texel_rgtc(texImage->RowStride, (GLubyte *)(texImage->Data),
|
||||
unsigned_fetch_texel_rgtc(texImage->Base.RowStride, (GLubyte *)(texImage->Base.Data),
|
||||
i, j, &red, 2);
|
||||
unsigned_fetch_texel_rgtc(texImage->RowStride, (GLubyte *)(texImage->Data) + 8,
|
||||
unsigned_fetch_texel_rgtc(texImage->Base.RowStride, (GLubyte *)(texImage->Base.Data) + 8,
|
||||
i, j, &green, 2);
|
||||
texel[RCOMP] =
|
||||
texel[GCOMP] =
|
||||
@@ -420,13 +422,13 @@ _mesa_fetch_texel_2d_f_la_latc2(const struct gl_texture_image *texImage,
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_signed_la_latc2(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_signed_la_latc2(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
GLbyte red, green;
|
||||
signed_fetch_texel_rgtc(texImage->RowStride, (GLbyte *)(texImage->Data),
|
||||
signed_fetch_texel_rgtc(texImage->Base.RowStride, (GLbyte *)(texImage->Base.Data),
|
||||
i, j, &red, 2);
|
||||
signed_fetch_texel_rgtc(texImage->RowStride, (GLbyte *)(texImage->Data) + 8,
|
||||
signed_fetch_texel_rgtc(texImage->Base.RowStride, (GLbyte *)(texImage->Base.Data) + 8,
|
||||
i, j, &green, 2);
|
||||
texel[RCOMP] =
|
||||
texel[GCOMP] =
|
||||
|
@@ -28,7 +28,7 @@
|
||||
#include "mfeatures.h"
|
||||
#include "texstore.h"
|
||||
|
||||
struct gl_texture_image;
|
||||
struct swrast_texture_image;
|
||||
|
||||
extern GLboolean
|
||||
_mesa_texstore_red_rgtc1(TEXSTORE_PARAMS);
|
||||
@@ -43,35 +43,35 @@ extern GLboolean
|
||||
_mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_red_rgtc1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_red_rgtc1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_signed_red_rgtc1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_signed_red_rgtc1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_rg_rgtc2(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rg_rgtc2(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_signed_rg_rgtc2(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_signed_rg_rgtc2(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_l_latc1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_l_latc1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_signed_l_latc1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_signed_l_latc1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_la_latc2(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_la_latc2(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_signed_la_latc2(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_signed_la_latc2(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
#endif
|
||||
|
@@ -44,6 +44,7 @@
|
||||
#include "texcompress.h"
|
||||
#include "texcompress_s3tc.h"
|
||||
#include "texstore.h"
|
||||
#include "swrast/s_context.h"
|
||||
|
||||
|
||||
#if FEATURE_texture_s3tc
|
||||
@@ -388,14 +389,14 @@ _mesa_texstore_rgba_dxt5(TEXSTORE_PARAMS)
|
||||
|
||||
|
||||
static void
|
||||
fetch_texel_2d_rgb_dxt1( const struct gl_texture_image *texImage,
|
||||
fetch_texel_2d_rgb_dxt1( const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLchan *texel )
|
||||
{
|
||||
(void) k;
|
||||
if (fetch_ext_rgb_dxt1) {
|
||||
ASSERT (sizeof(GLchan) == sizeof(GLubyte));
|
||||
fetch_ext_rgb_dxt1(texImage->RowStride,
|
||||
(GLubyte *)(texImage)->Data, i, j, texel);
|
||||
fetch_ext_rgb_dxt1(texImage->Base.RowStride,
|
||||
(GLubyte *)(texImage)->Base.Data, i, j, texel);
|
||||
}
|
||||
else
|
||||
_mesa_debug(NULL, "attempted to decode s3tc texture without library available: fetch_texel_2d_rgb_dxt1");
|
||||
@@ -403,7 +404,7 @@ fetch_texel_2d_rgb_dxt1( const struct gl_texture_image *texImage,
|
||||
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_rgb_dxt1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rgb_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLchan and convert to float here */
|
||||
@@ -417,13 +418,13 @@ _mesa_fetch_texel_2d_f_rgb_dxt1(const struct gl_texture_image *texImage,
|
||||
|
||||
|
||||
static void
|
||||
fetch_texel_2d_rgba_dxt1( const struct gl_texture_image *texImage,
|
||||
fetch_texel_2d_rgba_dxt1( const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLchan *texel )
|
||||
{
|
||||
(void) k;
|
||||
if (fetch_ext_rgba_dxt1) {
|
||||
fetch_ext_rgba_dxt1(texImage->RowStride,
|
||||
(GLubyte *)(texImage)->Data, i, j, texel);
|
||||
fetch_ext_rgba_dxt1(texImage->Base.RowStride,
|
||||
(GLubyte *)(texImage)->Base.Data, i, j, texel);
|
||||
}
|
||||
else
|
||||
_mesa_debug(NULL, "attempted to decode s3tc texture without library available: fetch_texel_2d_rgba_dxt1\n");
|
||||
@@ -431,7 +432,7 @@ fetch_texel_2d_rgba_dxt1( const struct gl_texture_image *texImage,
|
||||
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLchan and convert to float here */
|
||||
@@ -445,13 +446,14 @@ _mesa_fetch_texel_2d_f_rgba_dxt1(const struct gl_texture_image *texImage,
|
||||
|
||||
|
||||
static void
|
||||
fetch_texel_2d_rgba_dxt3( const struct gl_texture_image *texImage,
|
||||
fetch_texel_2d_rgba_dxt3( const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLchan *texel )
|
||||
{
|
||||
(void) k;
|
||||
if (fetch_ext_rgba_dxt3) {
|
||||
ASSERT (sizeof(GLchan) == sizeof(GLubyte));
|
||||
fetch_ext_rgba_dxt3(texImage->RowStride, (GLubyte *)(texImage)->Data,
|
||||
fetch_ext_rgba_dxt3(texImage->Base.RowStride,
|
||||
(GLubyte *)(texImage)->Base.Data,
|
||||
i, j, texel);
|
||||
}
|
||||
else
|
||||
@@ -460,7 +462,7 @@ fetch_texel_2d_rgba_dxt3( const struct gl_texture_image *texImage,
|
||||
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt3(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt3(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLchan and convert to float here */
|
||||
@@ -474,12 +476,13 @@ _mesa_fetch_texel_2d_f_rgba_dxt3(const struct gl_texture_image *texImage,
|
||||
|
||||
|
||||
static void
|
||||
fetch_texel_2d_rgba_dxt5( const struct gl_texture_image *texImage,
|
||||
fetch_texel_2d_rgba_dxt5( const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLchan *texel )
|
||||
{
|
||||
(void) k;
|
||||
if (fetch_ext_rgba_dxt5) {
|
||||
fetch_ext_rgba_dxt5(texImage->RowStride, (GLubyte *)(texImage)->Data,
|
||||
fetch_ext_rgba_dxt5(texImage->Base.RowStride,
|
||||
(GLubyte *)(texImage)->Base.Data,
|
||||
i, j, texel);
|
||||
}
|
||||
else
|
||||
@@ -488,7 +491,7 @@ fetch_texel_2d_rgba_dxt5( const struct gl_texture_image *texImage,
|
||||
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt5(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt5(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLchan and convert to float here */
|
||||
@@ -502,7 +505,7 @@ _mesa_fetch_texel_2d_f_rgba_dxt5(const struct gl_texture_image *texImage,
|
||||
|
||||
#if FEATURE_EXT_texture_sRGB
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_srgb_dxt1( const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_srgb_dxt1( const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||
{
|
||||
/* just sample as GLchan and convert to float here */
|
||||
@@ -515,7 +518,7 @@ _mesa_fetch_texel_2d_f_srgb_dxt1( const struct gl_texture_image *texImage,
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLchan and convert to float here */
|
||||
@@ -528,7 +531,7 @@ _mesa_fetch_texel_2d_f_srgba_dxt1(const struct gl_texture_image *texImage,
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt3(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt3(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLchan and convert to float here */
|
||||
@@ -541,7 +544,7 @@ _mesa_fetch_texel_2d_f_srgba_dxt3(const struct gl_texture_image *texImage,
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt5(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt5(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel)
|
||||
{
|
||||
/* just sample as GLchan and convert to float here */
|
||||
|
@@ -31,7 +31,7 @@
|
||||
#include "texstore.h"
|
||||
|
||||
struct gl_context;
|
||||
struct gl_texture_image;
|
||||
struct swrast_texture_image;
|
||||
|
||||
#if FEATURE_texture_s3tc
|
||||
|
||||
@@ -48,35 +48,35 @@ extern GLboolean
|
||||
_mesa_texstore_rgba_dxt5(TEXSTORE_PARAMS);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_rgb_dxt1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rgb_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt3(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt3(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt5(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_rgba_dxt5(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_srgb_dxt1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_srgb_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt1(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt1(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt3(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt3(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt5(const struct gl_texture_image *texImage,
|
||||
_mesa_fetch_texel_2d_f_srgba_dxt5(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel);
|
||||
|
||||
extern void
|
||||
|
@@ -1076,8 +1076,6 @@ clear_teximage_fields(struct gl_texture_image *img)
|
||||
img->DepthLog2 = 0;
|
||||
img->Data = NULL;
|
||||
img->TexFormat = MESA_FORMAT_NONE;
|
||||
img->FetchTexelc = NULL;
|
||||
img->FetchTexelf = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -109,6 +109,27 @@ typedef void (*validate_texture_image_func)(struct gl_context *ctx,
|
||||
_NEW_DEPTH)
|
||||
|
||||
|
||||
struct swrast_texture_image;
|
||||
|
||||
|
||||
typedef void (*FetchTexelFuncC)(const struct swrast_texture_image *texImage,
|
||||
GLint col, GLint row, GLint img,
|
||||
GLchan *texelOut);
|
||||
|
||||
/**
|
||||
* As above, but returns floats.
|
||||
* Used for depth component images and for upcoming signed/float
|
||||
* texture images.
|
||||
*/
|
||||
typedef void (*FetchTexelFuncF)(const struct swrast_texture_image *texImage,
|
||||
GLint col, GLint row, GLint img,
|
||||
GLfloat *texelOut);
|
||||
|
||||
|
||||
typedef void (*StoreTexelFunc)(struct swrast_texture_image *texImage,
|
||||
GLint col, GLint row, GLint img,
|
||||
const void *texel);
|
||||
|
||||
/**
|
||||
* Subclass of gl_texture_image.
|
||||
* We need extra fields/info to keep tracking of mapped texture buffers,
|
||||
@@ -118,7 +139,25 @@ struct swrast_texture_image
|
||||
{
|
||||
struct gl_texture_image Base;
|
||||
|
||||
/* XXX new members coming soon */
|
||||
#if 0
|
||||
/** used for mipmap LOD computation */
|
||||
GLfloat WidthScale, HeightScale, DepthScale;
|
||||
GLboolean _IsPowerOfTwo; /**< Are all dimensions powers of two? */
|
||||
|
||||
GLubyte *Data; /**< The actual texture data in malloc'd memory */
|
||||
|
||||
GLint TexelSize; /**< bytes per texel block */
|
||||
#endif
|
||||
|
||||
FetchTexelFuncC FetchTexelc;
|
||||
FetchTexelFuncF FetchTexelf;
|
||||
StoreTexelFunc Store;
|
||||
|
||||
#if 0
|
||||
/** These fields only valid when texture memory is mapped */
|
||||
GLubyte **SliceMaps; /**< points to OneMap or a malloc'd array */
|
||||
GLint RowStride; /**< bytes per row of blocks */
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -137,7 +176,6 @@ swrast_texture_image_const(const struct gl_texture_image *img)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* \struct SWcontext
|
||||
* \brief Per-context state that's private to the software rasterizer module.
|
||||
|
@@ -40,6 +40,7 @@
|
||||
#include "main/texcompress_s3tc.h"
|
||||
#include "main/texcompress_rgtc.h"
|
||||
#include "main/teximage.h"
|
||||
#include "s_context.h"
|
||||
#include "s_texfetch.h"
|
||||
#include "../../gallium/auxiliary/util/u_format_rgb9e5.h"
|
||||
#include "../../gallium/auxiliary/util/u_format_r11g11b10f.h"
|
||||
@@ -90,7 +91,7 @@ nonlinear_to_linear(GLubyte cs8)
|
||||
*
|
||||
* Have to have this so the FetchTexel function pointer is never NULL.
|
||||
*/
|
||||
static void fetch_null_texelf( const struct gl_texture_image *texImage,
|
||||
static void fetch_null_texelf( const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||
{
|
||||
(void) texImage; (void) i; (void) j; (void) k;
|
||||
@@ -101,7 +102,7 @@ static void fetch_null_texelf( const struct gl_texture_image *texImage,
|
||||
_mesa_warning(NULL, "fetch_null_texelf() called!");
|
||||
}
|
||||
|
||||
static void store_null_texel(struct gl_texture_image *texImage,
|
||||
static void store_null_texel(struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, const void *texel)
|
||||
{
|
||||
(void) texImage;
|
||||
@@ -964,11 +965,11 @@ _mesa_get_texel_store_func(gl_format format)
|
||||
* Adaptor for fetching a GLchan texel from a float-valued texture.
|
||||
*/
|
||||
static void
|
||||
fetch_texel_float_to_chan(const struct gl_texture_image *texImage,
|
||||
fetch_texel_float_to_chan(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLchan *texelOut)
|
||||
{
|
||||
GLfloat temp[4];
|
||||
GLenum baseFormat = _mesa_get_format_base_format(texImage->TexFormat);
|
||||
GLenum baseFormat = _mesa_get_format_base_format(texImage->Base.TexFormat);
|
||||
|
||||
ASSERT(texImage->FetchTexelf);
|
||||
texImage->FetchTexelf(texImage, i, j, k, temp);
|
||||
@@ -992,7 +993,7 @@ fetch_texel_float_to_chan(const struct gl_texture_image *texImage,
|
||||
* Adaptor for fetching a float texel from a GLchan-valued texture.
|
||||
*/
|
||||
static void
|
||||
fetch_texel_chan_to_float(const struct gl_texture_image *texImage,
|
||||
fetch_texel_chan_to_float(const struct swrast_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLfloat *texelOut)
|
||||
{
|
||||
GLchan temp[4];
|
||||
@@ -1019,14 +1020,14 @@ fetch_texel_chan_to_float(const struct gl_texture_image *texImage,
|
||||
/**
|
||||
* Initialize the texture image's FetchTexelc and FetchTexelf methods.
|
||||
*/
|
||||
void
|
||||
_mesa_set_fetch_functions(struct gl_texture_image *texImage, GLuint dims)
|
||||
static void
|
||||
set_fetch_functions(struct swrast_texture_image *texImage, GLuint dims)
|
||||
{
|
||||
gl_format format = texImage->TexFormat;
|
||||
gl_format format = texImage->Base.TexFormat;
|
||||
|
||||
ASSERT(dims == 1 || dims == 2 || dims == 3);
|
||||
|
||||
if (texImage->TexObject->Sampler.sRGBDecode == GL_SKIP_DECODE_EXT &&
|
||||
if (texImage->Base.TexObject->Sampler.sRGBDecode == GL_SKIP_DECODE_EXT &&
|
||||
_mesa_get_format_color_encoding(format) == GL_SRGB) {
|
||||
format = _mesa_get_srgb_format_linear(format);
|
||||
}
|
||||
@@ -1050,7 +1051,8 @@ _mesa_update_fetch_functions(struct gl_texture_object *texObj)
|
||||
for (face = 0; face < 6; face++) {
|
||||
for (i = 0; i < MAX_TEXTURE_LEVELS; i++) {
|
||||
if (texObj->Image[face][i]) {
|
||||
_mesa_set_fetch_functions(texObj->Image[face][i], dims);
|
||||
set_fetch_functions(swrast_texture_image(texObj->Image[face][i]),
|
||||
dims);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -35,9 +35,6 @@ _mesa_get_texel_store_func(gl_format format);
|
||||
extern FetchTexelFuncF
|
||||
_mesa_get_texel_fetch_func(gl_format format, GLuint dims);
|
||||
|
||||
extern void
|
||||
_mesa_set_fetch_functions(struct gl_texture_image *texImage, GLuint dims);
|
||||
|
||||
void
|
||||
_mesa_update_fetch_functions(struct gl_texture_object *texObj);
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -802,6 +802,7 @@ sample_1d_nearest(struct gl_context *ctx,
|
||||
const struct gl_texture_image *img,
|
||||
const GLfloat texcoord[4], GLfloat rgba[4])
|
||||
{
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width2; /* without border, power of two */
|
||||
GLint i;
|
||||
i = nearest_texel_location(tObj->Sampler.WrapS, img, width, texcoord[0]);
|
||||
@@ -812,7 +813,7 @@ sample_1d_nearest(struct gl_context *ctx,
|
||||
get_border_color(tObj, img, rgba);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i, 0, 0, rgba);
|
||||
swImg->FetchTexelf(swImg, i, 0, 0, rgba);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -826,6 +827,7 @@ sample_1d_linear(struct gl_context *ctx,
|
||||
const struct gl_texture_image *img,
|
||||
const GLfloat texcoord[4], GLfloat rgba[4])
|
||||
{
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width2;
|
||||
GLint i0, i1;
|
||||
GLbitfield useBorderColor = 0x0;
|
||||
@@ -848,13 +850,13 @@ sample_1d_linear(struct gl_context *ctx,
|
||||
get_border_color(tObj, img, t0);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i0, 0, 0, t0);
|
||||
swImg->FetchTexelf(swImg, i0, 0, 0, t0);
|
||||
}
|
||||
if (useBorderColor & I1BIT) {
|
||||
get_border_color(tObj, img, t1);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i1, 0, 0, t1);
|
||||
swImg->FetchTexelf(swImg, i1, 0, 0, t1);
|
||||
}
|
||||
|
||||
lerp_rgba(rgba, a, t0, t1);
|
||||
@@ -1060,6 +1062,7 @@ sample_2d_nearest(struct gl_context *ctx,
|
||||
const GLfloat texcoord[4],
|
||||
GLfloat rgba[])
|
||||
{
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width2; /* without border, power of two */
|
||||
const GLint height = img->Height2; /* without border, power of two */
|
||||
GLint i, j;
|
||||
@@ -1077,7 +1080,7 @@ sample_2d_nearest(struct gl_context *ctx,
|
||||
get_border_color(tObj, img, rgba);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i, j, 0, rgba);
|
||||
swImg->FetchTexelf(swImg, i, j, 0, rgba);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1093,6 +1096,7 @@ sample_2d_linear(struct gl_context *ctx,
|
||||
const GLfloat texcoord[4],
|
||||
GLfloat rgba[])
|
||||
{
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width2;
|
||||
const GLint height = img->Height2;
|
||||
GLint i0, j0, i1, j1;
|
||||
@@ -1121,25 +1125,25 @@ sample_2d_linear(struct gl_context *ctx,
|
||||
get_border_color(tObj, img, t00);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i0, j0, 0, t00);
|
||||
swImg->FetchTexelf(swImg, i0, j0, 0, t00);
|
||||
}
|
||||
if (useBorderColor & (I1BIT | J0BIT)) {
|
||||
get_border_color(tObj, img, t10);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i1, j0, 0, t10);
|
||||
swImg->FetchTexelf(swImg, i1, j0, 0, t10);
|
||||
}
|
||||
if (useBorderColor & (I0BIT | J1BIT)) {
|
||||
get_border_color(tObj, img, t01);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i0, j1, 0, t01);
|
||||
swImg->FetchTexelf(swImg, i0, j1, 0, t01);
|
||||
}
|
||||
if (useBorderColor & (I1BIT | J1BIT)) {
|
||||
get_border_color(tObj, img, t11);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i1, j1, 0, t11);
|
||||
swImg->FetchTexelf(swImg, i1, j1, 0, t11);
|
||||
}
|
||||
|
||||
lerp_rgba_2d(rgba, a, b, t00, t10, t01, t11);
|
||||
@@ -1157,6 +1161,7 @@ sample_2d_linear_repeat(struct gl_context *ctx,
|
||||
const GLfloat texcoord[4],
|
||||
GLfloat rgba[])
|
||||
{
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width2;
|
||||
const GLint height = img->Height2;
|
||||
GLint i0, j0, i1, j1;
|
||||
@@ -1173,10 +1178,10 @@ sample_2d_linear_repeat(struct gl_context *ctx,
|
||||
linear_repeat_texel_location(width, texcoord[0], &i0, &i1, &wi);
|
||||
linear_repeat_texel_location(height, texcoord[1], &j0, &j1, &wj);
|
||||
|
||||
img->FetchTexelf(img, i0, j0, 0, t00);
|
||||
img->FetchTexelf(img, i1, j0, 0, t10);
|
||||
img->FetchTexelf(img, i0, j1, 0, t01);
|
||||
img->FetchTexelf(img, i1, j1, 0, t11);
|
||||
swImg->FetchTexelf(swImg, i0, j0, 0, t00);
|
||||
swImg->FetchTexelf(swImg, i1, j0, 0, t10);
|
||||
swImg->FetchTexelf(swImg, i0, j1, 0, t01);
|
||||
swImg->FetchTexelf(swImg, i1, j1, 0, t11);
|
||||
|
||||
lerp_rgba_2d(rgba, wi, wj, t00, t10, t01, t11);
|
||||
}
|
||||
@@ -1934,6 +1939,7 @@ sample_3d_nearest(struct gl_context *ctx,
|
||||
const GLfloat texcoord[4],
|
||||
GLfloat rgba[4])
|
||||
{
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width2; /* without border, power of two */
|
||||
const GLint height = img->Height2; /* without border, power of two */
|
||||
const GLint depth = img->Depth2; /* without border, power of two */
|
||||
@@ -1951,7 +1957,7 @@ sample_3d_nearest(struct gl_context *ctx,
|
||||
get_border_color(tObj, img, rgba);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i, j, k, rgba);
|
||||
swImg->FetchTexelf(swImg, i, j, k, rgba);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1966,6 +1972,7 @@ sample_3d_linear(struct gl_context *ctx,
|
||||
const GLfloat texcoord[4],
|
||||
GLfloat rgba[4])
|
||||
{
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width2;
|
||||
const GLint height = img->Height2;
|
||||
const GLint depth = img->Depth2;
|
||||
@@ -2002,50 +2009,50 @@ sample_3d_linear(struct gl_context *ctx,
|
||||
get_border_color(tObj, img, t000);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i0, j0, k0, t000);
|
||||
swImg->FetchTexelf(swImg, i0, j0, k0, t000);
|
||||
}
|
||||
if (useBorderColor & (I1BIT | J0BIT | K0BIT)) {
|
||||
get_border_color(tObj, img, t100);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i1, j0, k0, t100);
|
||||
swImg->FetchTexelf(swImg, i1, j0, k0, t100);
|
||||
}
|
||||
if (useBorderColor & (I0BIT | J1BIT | K0BIT)) {
|
||||
get_border_color(tObj, img, t010);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i0, j1, k0, t010);
|
||||
swImg->FetchTexelf(swImg, i0, j1, k0, t010);
|
||||
}
|
||||
if (useBorderColor & (I1BIT | J1BIT | K0BIT)) {
|
||||
get_border_color(tObj, img, t110);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i1, j1, k0, t110);
|
||||
swImg->FetchTexelf(swImg, i1, j1, k0, t110);
|
||||
}
|
||||
|
||||
if (useBorderColor & (I0BIT | J0BIT | K1BIT)) {
|
||||
get_border_color(tObj, img, t001);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i0, j0, k1, t001);
|
||||
swImg->FetchTexelf(swImg, i0, j0, k1, t001);
|
||||
}
|
||||
if (useBorderColor & (I1BIT | J0BIT | K1BIT)) {
|
||||
get_border_color(tObj, img, t101);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i1, j0, k1, t101);
|
||||
swImg->FetchTexelf(swImg, i1, j0, k1, t101);
|
||||
}
|
||||
if (useBorderColor & (I0BIT | J1BIT | K1BIT)) {
|
||||
get_border_color(tObj, img, t011);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i0, j1, k1, t011);
|
||||
swImg->FetchTexelf(swImg, i0, j1, k1, t011);
|
||||
}
|
||||
if (useBorderColor & (I1BIT | J1BIT | K1BIT)) {
|
||||
get_border_color(tObj, img, t111);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i1, j1, k1, t111);
|
||||
swImg->FetchTexelf(swImg, i1, j1, k1, t111);
|
||||
}
|
||||
|
||||
/* trilinear interpolation of samples */
|
||||
@@ -2544,6 +2551,7 @@ sample_nearest_rect(struct gl_context *ctx,
|
||||
GLfloat rgba[][4])
|
||||
{
|
||||
const struct gl_texture_image *img = tObj->Image[0][0];
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width;
|
||||
const GLint height = img->Height;
|
||||
GLuint i;
|
||||
@@ -2565,7 +2573,7 @@ sample_nearest_rect(struct gl_context *ctx,
|
||||
if (col < 0 || col >= width || row < 0 || row >= height)
|
||||
get_border_color(tObj, img, rgba[i]);
|
||||
else
|
||||
img->FetchTexelf(img, col, row, 0, rgba[i]);
|
||||
swImg->FetchTexelf(swImg, col, row, 0, rgba[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2577,6 +2585,7 @@ sample_linear_rect(struct gl_context *ctx,
|
||||
const GLfloat lambda[], GLfloat rgba[][4])
|
||||
{
|
||||
const struct gl_texture_image *img = tObj->Image[0][0];
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width;
|
||||
const GLint height = img->Height;
|
||||
GLuint i;
|
||||
@@ -2612,22 +2621,22 @@ sample_linear_rect(struct gl_context *ctx,
|
||||
if (useBorderColor & (I0BIT | J0BIT))
|
||||
get_border_color(tObj, img, t00);
|
||||
else
|
||||
img->FetchTexelf(img, i0, j0, 0, t00);
|
||||
swImg->FetchTexelf(swImg, i0, j0, 0, t00);
|
||||
|
||||
if (useBorderColor & (I1BIT | J0BIT))
|
||||
get_border_color(tObj, img, t10);
|
||||
else
|
||||
img->FetchTexelf(img, i1, j0, 0, t10);
|
||||
swImg->FetchTexelf(swImg, i1, j0, 0, t10);
|
||||
|
||||
if (useBorderColor & (I0BIT | J1BIT))
|
||||
get_border_color(tObj, img, t01);
|
||||
else
|
||||
img->FetchTexelf(img, i0, j1, 0, t01);
|
||||
swImg->FetchTexelf(swImg, i0, j1, 0, t01);
|
||||
|
||||
if (useBorderColor & (I1BIT | J1BIT))
|
||||
get_border_color(tObj, img, t11);
|
||||
else
|
||||
img->FetchTexelf(img, i1, j1, 0, t11);
|
||||
swImg->FetchTexelf(swImg, i1, j1, 0, t11);
|
||||
|
||||
lerp_rgba_2d(rgba[i], a, b, t00, t10, t01, t11);
|
||||
}
|
||||
@@ -2686,6 +2695,7 @@ sample_2d_array_nearest(struct gl_context *ctx,
|
||||
const GLfloat texcoord[4],
|
||||
GLfloat rgba[4])
|
||||
{
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width2; /* without border, power of two */
|
||||
const GLint height = img->Height2; /* without border, power of two */
|
||||
const GLint depth = img->Depth;
|
||||
@@ -2704,7 +2714,7 @@ sample_2d_array_nearest(struct gl_context *ctx,
|
||||
get_border_color(tObj, img, rgba);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i, j, array, rgba);
|
||||
swImg->FetchTexelf(swImg, i, j, array, rgba);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2719,6 +2729,7 @@ sample_2d_array_linear(struct gl_context *ctx,
|
||||
const GLfloat texcoord[4],
|
||||
GLfloat rgba[4])
|
||||
{
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width2;
|
||||
const GLint height = img->Height2;
|
||||
const GLint depth = img->Depth;
|
||||
@@ -2755,25 +2766,25 @@ sample_2d_array_linear(struct gl_context *ctx,
|
||||
get_border_color(tObj, img, t00);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i0, j0, array, t00);
|
||||
swImg->FetchTexelf(swImg, i0, j0, array, t00);
|
||||
}
|
||||
if (useBorderColor & (I1BIT | J0BIT)) {
|
||||
get_border_color(tObj, img, t10);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i1, j0, array, t10);
|
||||
swImg->FetchTexelf(swImg, i1, j0, array, t10);
|
||||
}
|
||||
if (useBorderColor & (I0BIT | J1BIT)) {
|
||||
get_border_color(tObj, img, t01);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i0, j1, array, t01);
|
||||
swImg->FetchTexelf(swImg, i0, j1, array, t01);
|
||||
}
|
||||
if (useBorderColor & (I1BIT | J1BIT)) {
|
||||
get_border_color(tObj, img, t11);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i1, j1, array, t11);
|
||||
swImg->FetchTexelf(swImg, i1, j1, array, t11);
|
||||
}
|
||||
|
||||
/* trilinear interpolation of samples */
|
||||
@@ -2996,6 +3007,7 @@ sample_1d_array_nearest(struct gl_context *ctx,
|
||||
const GLfloat texcoord[4],
|
||||
GLfloat rgba[4])
|
||||
{
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width2; /* without border, power of two */
|
||||
const GLint height = img->Height;
|
||||
GLint i;
|
||||
@@ -3011,7 +3023,7 @@ sample_1d_array_nearest(struct gl_context *ctx,
|
||||
get_border_color(tObj, img, rgba);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i, array, 0, rgba);
|
||||
swImg->FetchTexelf(swImg, i, array, 0, rgba);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3026,6 +3038,7 @@ sample_1d_array_linear(struct gl_context *ctx,
|
||||
const GLfloat texcoord[4],
|
||||
GLfloat rgba[4])
|
||||
{
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width2;
|
||||
const GLint height = img->Height;
|
||||
GLint i0, i1;
|
||||
@@ -3054,13 +3067,13 @@ sample_1d_array_linear(struct gl_context *ctx,
|
||||
get_border_color(tObj, img, t0);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i0, array, 0, t0);
|
||||
swImg->FetchTexelf(swImg, i0, array, 0, t0);
|
||||
}
|
||||
if (useBorderColor & (I1BIT | K0BIT)) {
|
||||
get_border_color(tObj, img, t1);
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i1, array, 0, t1);
|
||||
swImg->FetchTexelf(swImg, i1, array, 0, t1);
|
||||
}
|
||||
|
||||
/* bilinear interpolation of samples */
|
||||
@@ -3388,6 +3401,7 @@ sample_depth_texture( struct gl_context *ctx,
|
||||
{
|
||||
const GLint level = choose_depth_texture_level(tObj, lambda[0]);
|
||||
const struct gl_texture_image *img = tObj->Image[0][level];
|
||||
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
|
||||
const GLint width = img->Width;
|
||||
const GLint height = img->Height;
|
||||
const GLint depth = img->Depth;
|
||||
@@ -3423,7 +3437,7 @@ sample_depth_texture( struct gl_context *ctx,
|
||||
|
||||
if (col >= 0 && row >= 0 && col < width && row < height &&
|
||||
slice >= 0 && slice < depth) {
|
||||
img->FetchTexelf(img, col, row, slice, &depthSample);
|
||||
swImg->FetchTexelf(swImg, col, row, slice, &depthSample);
|
||||
}
|
||||
else {
|
||||
depthSample = tObj->Sampler.BorderColor.f[0];
|
||||
@@ -3492,13 +3506,13 @@ sample_depth_texture( struct gl_context *ctx,
|
||||
depth00 = tObj->Sampler.BorderColor.f[0];
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i0, j0, slice, &depth00);
|
||||
swImg->FetchTexelf(swImg, i0, j0, slice, &depth00);
|
||||
}
|
||||
if (useBorderTexel & (I1BIT | J0BIT)) {
|
||||
depth10 = tObj->Sampler.BorderColor.f[0];
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i1, j0, slice, &depth10);
|
||||
swImg->FetchTexelf(swImg, i1, j0, slice, &depth10);
|
||||
}
|
||||
|
||||
if (tObj->Target != GL_TEXTURE_1D_ARRAY_EXT) {
|
||||
@@ -3506,13 +3520,13 @@ sample_depth_texture( struct gl_context *ctx,
|
||||
depth01 = tObj->Sampler.BorderColor.f[0];
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i0, j1, slice, &depth01);
|
||||
swImg->FetchTexelf(swImg, i0, j1, slice, &depth01);
|
||||
}
|
||||
if (useBorderTexel & (I1BIT | J1BIT)) {
|
||||
depth11 = tObj->Sampler.BorderColor.f[0];
|
||||
}
|
||||
else {
|
||||
img->FetchTexelf(img, i1, j1, slice, &depth11);
|
||||
swImg->FetchTexelf(swImg, i1, j1, slice, &depth11);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@@ -6,6 +6,7 @@
|
||||
#include "main/teximage.h"
|
||||
#include "main/renderbuffer.h"
|
||||
#include "swrast/swrast.h"
|
||||
#include "swrast/s_context.h"
|
||||
#include "swrast/s_texfetch.h"
|
||||
|
||||
|
||||
@@ -20,7 +21,7 @@
|
||||
struct texture_renderbuffer
|
||||
{
|
||||
struct gl_renderbuffer Base; /**< Base class object */
|
||||
struct gl_texture_image *TexImage;
|
||||
struct swrast_texture_image *TexImage;
|
||||
StoreTexelFunc Store;
|
||||
FetchTexelFuncF Fetchf;
|
||||
GLint Yoffset; /**< Layer for 1D array textures. */
|
||||
@@ -42,8 +43,8 @@ texture_get_row(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count
|
||||
const GLint z = trb->Zoffset;
|
||||
GLuint i;
|
||||
|
||||
ASSERT(trb->TexImage->Width == rb->Width);
|
||||
ASSERT(trb->TexImage->Height == rb->Height);
|
||||
ASSERT(trb->TexImage->Base.Width == rb->Width);
|
||||
ASSERT(trb->TexImage->Base.Height == rb->Height);
|
||||
|
||||
y += trb->Yoffset;
|
||||
|
||||
@@ -468,7 +469,7 @@ texture_put_mono_values(struct gl_context *ctx, struct gl_renderbuffer *rb,
|
||||
|
||||
|
||||
static void
|
||||
store_nop(struct gl_texture_image *texImage,
|
||||
store_nop(struct swrast_texture_image *texImage,
|
||||
GLint col, GLint row, GLint img,
|
||||
const void *texel)
|
||||
{
|
||||
@@ -534,17 +535,17 @@ update_wrapper(struct gl_context *ctx, struct gl_renderbuffer_attachment *att)
|
||||
(void) ctx;
|
||||
ASSERT(trb);
|
||||
|
||||
trb->TexImage = _mesa_get_attachment_teximage(att);
|
||||
trb->TexImage = swrast_texture_image(_mesa_get_attachment_teximage(att));
|
||||
ASSERT(trb->TexImage);
|
||||
|
||||
trb->Store = _mesa_get_texel_store_func(trb->TexImage->TexFormat);
|
||||
trb->Store = _mesa_get_texel_store_func(trb->TexImage->Base.TexFormat);
|
||||
if (!trb->Store) {
|
||||
/* we'll never draw into some textures (compressed formats) */
|
||||
trb->Store = store_nop;
|
||||
}
|
||||
|
||||
if (!trb->TexImage->FetchTexelf) {
|
||||
_mesa_update_fetch_functions(trb->TexImage->TexObject);
|
||||
_mesa_update_fetch_functions(trb->TexImage->Base.TexObject);
|
||||
}
|
||||
trb->Fetchf = trb->TexImage->FetchTexelf;
|
||||
assert(trb->Fetchf);
|
||||
@@ -558,13 +559,13 @@ update_wrapper(struct gl_context *ctx, struct gl_renderbuffer_attachment *att)
|
||||
trb->Zoffset = att->Zoffset;
|
||||
}
|
||||
|
||||
trb->Base.Width = trb->TexImage->Width;
|
||||
trb->Base.Height = trb->TexImage->Height;
|
||||
trb->Base.InternalFormat = trb->TexImage->InternalFormat;
|
||||
trb->Base.Format = trb->TexImage->TexFormat;
|
||||
trb->Base.Width = trb->TexImage->Base.Width;
|
||||
trb->Base.Height = trb->TexImage->Base.Height;
|
||||
trb->Base.InternalFormat = trb->TexImage->Base.InternalFormat;
|
||||
trb->Base.Format = trb->TexImage->Base.TexFormat;
|
||||
|
||||
/* XXX may need more special cases here */
|
||||
switch (trb->TexImage->TexFormat) {
|
||||
switch (trb->TexImage->Base.TexFormat) {
|
||||
case MESA_FORMAT_Z24_S8:
|
||||
trb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT;
|
||||
trb->Base._BaseFormat = GL_DEPTH_STENCIL;
|
||||
@@ -609,7 +610,7 @@ update_wrapper(struct gl_context *ctx, struct gl_renderbuffer_attachment *att)
|
||||
trb->Base.DataType = CHAN_TYPE;
|
||||
trb->Base._BaseFormat = GL_RGBA;
|
||||
}
|
||||
trb->Base.Data = trb->TexImage->Data;
|
||||
trb->Base.Data = trb->TexImage->Base.Data;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user