New glTexImage code.
The gl_texture_format struct now has a StoreTexImageFunc that's called by glTex[Sub]Image[123]D to convert the user's texture data into the specific texture format layout. Now it's much easier to add new texture formats (like the 16/32-bit floating point formats). The texutil.[ch] and texutil_tmp.h files are obsolete.
This commit is contained in:
@@ -445,7 +445,6 @@ r200ValidateClientStorage( GLcontext *ctx, GLenum target,
|
|||||||
|
|
||||||
{
|
{
|
||||||
r200ContextPtr rmesa = R200_CONTEXT(ctx);
|
r200ContextPtr rmesa = R200_CONTEXT(ctx);
|
||||||
int texelBytes;
|
|
||||||
|
|
||||||
if (0)
|
if (0)
|
||||||
fprintf(stderr, "intformat %s format %s type %s\n",
|
fprintf(stderr, "intformat %s format %s type %s\n",
|
||||||
@@ -468,7 +467,6 @@ r200ValidateClientStorage( GLcontext *ctx, GLenum target,
|
|||||||
case GL_RGBA:
|
case GL_RGBA:
|
||||||
if ( format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8_REV ) {
|
if ( format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8_REV ) {
|
||||||
texImage->TexFormat = &_mesa_texformat_argb8888;
|
texImage->TexFormat = &_mesa_texformat_argb8888;
|
||||||
texelBytes = 4;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
@@ -477,7 +475,6 @@ r200ValidateClientStorage( GLcontext *ctx, GLenum target,
|
|||||||
case GL_RGB:
|
case GL_RGB:
|
||||||
if ( format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5 ) {
|
if ( format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5 ) {
|
||||||
texImage->TexFormat = &_mesa_texformat_rgb565;
|
texImage->TexFormat = &_mesa_texformat_rgb565;
|
||||||
texelBytes = 2;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
@@ -487,19 +484,16 @@ r200ValidateClientStorage( GLcontext *ctx, GLenum target,
|
|||||||
if ( format == GL_YCBCR_MESA &&
|
if ( format == GL_YCBCR_MESA &&
|
||||||
type == GL_UNSIGNED_SHORT_8_8_REV_APPLE ) {
|
type == GL_UNSIGNED_SHORT_8_8_REV_APPLE ) {
|
||||||
texImage->TexFormat = &_mesa_texformat_ycbcr_rev;
|
texImage->TexFormat = &_mesa_texformat_ycbcr_rev;
|
||||||
texelBytes = 2;
|
|
||||||
}
|
}
|
||||||
else if ( format == GL_YCBCR_MESA &&
|
else if ( format == GL_YCBCR_MESA &&
|
||||||
(type == GL_UNSIGNED_SHORT_8_8_APPLE ||
|
(type == GL_UNSIGNED_SHORT_8_8_APPLE ||
|
||||||
type == GL_UNSIGNED_BYTE)) {
|
type == GL_UNSIGNED_BYTE)) {
|
||||||
texImage->TexFormat = &_mesa_texformat_ycbcr;
|
texImage->TexFormat = &_mesa_texformat_ycbcr;
|
||||||
texelBytes = 2;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -538,7 +532,8 @@ r200ValidateClientStorage( GLcontext *ctx, GLenum target,
|
|||||||
*/
|
*/
|
||||||
texImage->Data = (void *)pixels;
|
texImage->Data = (void *)pixels;
|
||||||
texImage->IsClientData = GL_TRUE;
|
texImage->IsClientData = GL_TRUE;
|
||||||
texImage->RowStride = srcRowStride / texelBytes;
|
texImage->RowStride = srcRowStride / texImage->TexFormat->TexelBytes;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -963,6 +963,7 @@ tdfxTexImage2D(GLcontext *ctx, GLenum target, GLint level,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* unpack image, apply transfer ops and store in tempImage */
|
/* unpack image, apply transfer ops and store in tempImage */
|
||||||
|
#if !NEWTEXSTORE
|
||||||
_mesa_transfer_teximage(ctx, 2, texImage->Format,
|
_mesa_transfer_teximage(ctx, 2, texImage->Format,
|
||||||
texImage->TexFormat,
|
texImage->TexFormat,
|
||||||
tempImage,
|
tempImage,
|
||||||
@@ -970,6 +971,15 @@ tdfxTexImage2D(GLcontext *ctx, GLenum target, GLint level,
|
|||||||
width * texelBytes,
|
width * texelBytes,
|
||||||
0, /* dstImageStride */
|
0, /* dstImageStride */
|
||||||
format, type, pixels, packing);
|
format, type, pixels, packing);
|
||||||
|
#else
|
||||||
|
texImage->TexFormat->StoreImage(ctx, 2, texImage->Format,
|
||||||
|
texImage->Format, tempImage,
|
||||||
|
0, 0, 0, /* dstX/Y/Zoffset */
|
||||||
|
width * texelBytes, /* dstRowStride */
|
||||||
|
0, /* dstImageStride */
|
||||||
|
width, height, 1,
|
||||||
|
format, type, pixels, packing);
|
||||||
|
#endif
|
||||||
assert(!texImage->Data);
|
assert(!texImage->Data);
|
||||||
texImage->Data = MESA_PBUFFER_ALLOC(mml->width * mml->height * texelBytes);
|
texImage->Data = MESA_PBUFFER_ALLOC(mml->width * mml->height * texelBytes);
|
||||||
if (!texImage->Data) {
|
if (!texImage->Data) {
|
||||||
@@ -993,6 +1003,7 @@ tdfxTexImage2D(GLcontext *ctx, GLenum target, GLint level,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* unpack image, apply transfer ops and store in texImage->Data */
|
/* unpack image, apply transfer ops and store in texImage->Data */
|
||||||
|
#if !NEWTEXSTORE
|
||||||
_mesa_transfer_teximage(ctx, 2, texImage->Format,
|
_mesa_transfer_teximage(ctx, 2, texImage->Format,
|
||||||
texImage->TexFormat, texImage->Data,
|
texImage->TexFormat, texImage->Data,
|
||||||
width, height, 1, 0, 0, 0,
|
width, height, 1, 0, 0, 0,
|
||||||
@@ -1000,6 +1011,15 @@ tdfxTexImage2D(GLcontext *ctx, GLenum target, GLint level,
|
|||||||
0, /* dstImageStride */
|
0, /* dstImageStride */
|
||||||
format, type, pixels, packing);
|
format, type, pixels, packing);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
texImage->TexFormat->StoreImage(ctx, 2, texImage->Format,
|
||||||
|
texImage->Format, texImage->Data,
|
||||||
|
0, 0, 0, /* dstX/Y/Zoffset */
|
||||||
|
width * texelBytes, /* dstRowStride */
|
||||||
|
0, /* dstImageStride */
|
||||||
|
width, height, 1,
|
||||||
|
format, type, pixels, packing);
|
||||||
|
#endif
|
||||||
|
|
||||||
RevalidateTexture(ctx, texObj);
|
RevalidateTexture(ctx, texObj);
|
||||||
|
|
||||||
@@ -1050,6 +1070,7 @@ tdfxTexSubImage2D(GLcontext *ctx, GLenum target, GLint level,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !NEWTEXSTORE
|
||||||
_mesa_transfer_teximage(ctx, 2, texImage->Format,/* Tex int format */
|
_mesa_transfer_teximage(ctx, 2, texImage->Format,/* Tex int format */
|
||||||
texImage->TexFormat, /* dest format */
|
texImage->TexFormat, /* dest format */
|
||||||
(GLubyte *) tempImage, /* dest */
|
(GLubyte *) tempImage, /* dest */
|
||||||
@@ -1058,6 +1079,15 @@ tdfxTexSubImage2D(GLcontext *ctx, GLenum target, GLint level,
|
|||||||
width * texelBytes, /* dest row stride */
|
width * texelBytes, /* dest row stride */
|
||||||
0, /* dst image stride */
|
0, /* dst image stride */
|
||||||
format, type, pixels, packing);
|
format, type, pixels, packing);
|
||||||
|
#else
|
||||||
|
texImage->TexFormat->StoreImage(ctx, 2, texImage->Format,
|
||||||
|
texImage->Format, texImage->Data,
|
||||||
|
0, 0, 0, /* dstX/Y/Zoffset */
|
||||||
|
width * texelBytes, /* dstRowStride */
|
||||||
|
0, /* dstImageStride */
|
||||||
|
width, height, 1,
|
||||||
|
format, type, pixels, packing);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* now rescale */
|
/* now rescale */
|
||||||
scaledImage = MALLOC(newWidth * newHeight * texelBytes);
|
scaledImage = MALLOC(newWidth * newHeight * texelBytes);
|
||||||
@@ -1083,6 +1113,7 @@ tdfxTexSubImage2D(GLcontext *ctx, GLenum target, GLint level,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* no rescaling needed */
|
/* no rescaling needed */
|
||||||
|
#if !NEWTEXSTORE
|
||||||
_mesa_transfer_teximage(ctx, 2, texImage->Format, /* Tex int format */
|
_mesa_transfer_teximage(ctx, 2, texImage->Format, /* Tex int format */
|
||||||
texImage->TexFormat, /* dest format */
|
texImage->TexFormat, /* dest format */
|
||||||
(GLubyte *) texImage->Data,/* dest */
|
(GLubyte *) texImage->Data,/* dest */
|
||||||
@@ -1091,6 +1122,15 @@ tdfxTexSubImage2D(GLcontext *ctx, GLenum target, GLint level,
|
|||||||
mml->width * texelBytes, /* dest row stride */
|
mml->width * texelBytes, /* dest row stride */
|
||||||
0, /* dst image stride */
|
0, /* dst image stride */
|
||||||
format, type, pixels, packing);
|
format, type, pixels, packing);
|
||||||
|
#else
|
||||||
|
texImage->TexFormat->StoreImage(ctx, 2, texImage->Format,
|
||||||
|
texImage->Format, texImage->Data,
|
||||||
|
xoffset, yoffset, 0,
|
||||||
|
mml->width * texelBytes, /* dstRowStride */
|
||||||
|
0, /* dstImageStride */
|
||||||
|
width, height, 1,
|
||||||
|
format, type, pixels, packing);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
ti->reloadImages = GL_TRUE; /* signal the image needs to be reloaded */
|
ti->reloadImages = GL_TRUE; /* signal the image needs to be reloaded */
|
||||||
|
@@ -414,7 +414,7 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat,
|
|||||||
|
|
||||||
assert(table);
|
assert(table);
|
||||||
|
|
||||||
if (!_mesa_is_legal_format_and_type(format, type) ||
|
if (!_mesa_is_legal_format_and_type(ctx, format, type) ||
|
||||||
format == GL_INTENSITY) {
|
format == GL_INTENSITY) {
|
||||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glColorTable(format or type)");
|
_mesa_error(ctx, GL_INVALID_OPERATION, "glColorTable(format or type)");
|
||||||
return;
|
return;
|
||||||
@@ -596,7 +596,7 @@ _mesa_ColorSubTable( GLenum target, GLsizei start,
|
|||||||
|
|
||||||
assert(table);
|
assert(table);
|
||||||
|
|
||||||
if (!_mesa_is_legal_format_and_type(format, type) ||
|
if (!_mesa_is_legal_format_and_type(ctx, format, type) ||
|
||||||
format == GL_INTENSITY) {
|
format == GL_INTENSITY) {
|
||||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glColorSubTable(format or type)");
|
_mesa_error(ctx, GL_INVALID_OPERATION, "glColorSubTable(format or type)");
|
||||||
return;
|
return;
|
||||||
|
@@ -123,7 +123,7 @@ _mesa_ConvolutionFilter1D(GLenum target, GLenum internalFormat, GLsizei width, G
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_mesa_is_legal_format_and_type(format, type)) {
|
if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glConvolutionFilter1D(format or type)");
|
_mesa_error(ctx, GL_INVALID_OPERATION, "glConvolutionFilter1D(format or type)");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -201,7 +201,7 @@ _mesa_ConvolutionFilter2D(GLenum target, GLenum internalFormat, GLsizei width, G
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_mesa_is_legal_format_and_type(format, type)) {
|
if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glConvolutionFilter2D(format or type)");
|
_mesa_error(ctx, GL_INVALID_OPERATION, "glConvolutionFilter2D(format or type)");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -532,7 +532,7 @@ _mesa_GetConvolutionFilter(GLenum target, GLenum format, GLenum type, GLvoid *im
|
|||||||
_mesa_update_state(ctx);
|
_mesa_update_state(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_mesa_is_legal_format_and_type(format, type)) {
|
if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetConvolutionFilter(format or type)");
|
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetConvolutionFilter(format or type)");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -718,7 +718,7 @@ _mesa_GetSeparableFilter(GLenum target, GLenum format, GLenum type, GLvoid *row,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_mesa_is_legal_format_and_type(format, type)) {
|
if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetConvolutionFilter(format or type)");
|
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetConvolutionFilter(format or type)");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -787,7 +787,7 @@ _mesa_SeparableFilter2D(GLenum target, GLenum internalFormat, GLsizei width, GLs
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_mesa_is_legal_format_and_type(format, type)) {
|
if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glSeparableFilter2D(format or type)");
|
_mesa_error(ctx, GL_INVALID_OPERATION, "glSeparableFilter2D(format or type)");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -43,6 +43,7 @@ static const struct {
|
|||||||
} default_extensions[] = {
|
} default_extensions[] = {
|
||||||
{ OFF, "GL_ARB_depth_texture", F(ARB_depth_texture) },
|
{ OFF, "GL_ARB_depth_texture", F(ARB_depth_texture) },
|
||||||
{ OFF, "GL_ARB_fragment_program", F(ARB_fragment_program) },
|
{ OFF, "GL_ARB_fragment_program", F(ARB_fragment_program) },
|
||||||
|
{ OFF, "GL_MESAX_half_float_pixel", F(ARB_half_float_pixel) },
|
||||||
{ OFF, "GL_ARB_imaging", F(ARB_imaging) },
|
{ OFF, "GL_ARB_imaging", F(ARB_imaging) },
|
||||||
{ OFF, "GL_ARB_multisample", F(ARB_multisample) },
|
{ OFF, "GL_ARB_multisample", F(ARB_multisample) },
|
||||||
{ OFF, "GL_ARB_multitexture", F(ARB_multitexture) },
|
{ OFF, "GL_ARB_multitexture", F(ARB_multitexture) },
|
||||||
@@ -58,6 +59,7 @@ static const struct {
|
|||||||
{ OFF, "GL_ARB_texture_env_combine", F(ARB_texture_env_combine) },
|
{ OFF, "GL_ARB_texture_env_combine", F(ARB_texture_env_combine) },
|
||||||
{ OFF, "GL_ARB_texture_env_crossbar", F(ARB_texture_env_crossbar) },
|
{ OFF, "GL_ARB_texture_env_crossbar", F(ARB_texture_env_crossbar) },
|
||||||
{ OFF, "GL_ARB_texture_env_dot3", F(ARB_texture_env_dot3) },
|
{ OFF, "GL_ARB_texture_env_dot3", F(ARB_texture_env_dot3) },
|
||||||
|
{ OFF, "GL_MESAX_texture_float", F(ARB_texture_float) },
|
||||||
{ OFF, "GL_ARB_texture_mirrored_repeat", F(ARB_texture_mirrored_repeat)},
|
{ OFF, "GL_ARB_texture_mirrored_repeat", F(ARB_texture_mirrored_repeat)},
|
||||||
{ OFF, "GL_ARB_texture_non_power_of_two", F(ARB_texture_non_power_of_two)},
|
{ OFF, "GL_ARB_texture_non_power_of_two", F(ARB_texture_non_power_of_two)},
|
||||||
{ ON, "GL_ARB_transpose_matrix", F(ARB_transpose_matrix) },
|
{ ON, "GL_ARB_transpose_matrix", F(ARB_transpose_matrix) },
|
||||||
@@ -162,6 +164,7 @@ _mesa_enable_sw_extensions(GLcontext *ctx)
|
|||||||
#if FEATURE_ARB_fragment_program
|
#if FEATURE_ARB_fragment_program
|
||||||
/*ctx->Extensions.ARB_fragment_program = GL_TRUE;*/
|
/*ctx->Extensions.ARB_fragment_program = GL_TRUE;*/
|
||||||
#endif
|
#endif
|
||||||
|
ctx->Extensions.ARB_half_float_pixel = GL_TRUE;
|
||||||
ctx->Extensions.ARB_imaging = GL_TRUE;
|
ctx->Extensions.ARB_imaging = GL_TRUE;
|
||||||
ctx->Extensions.ARB_multitexture = GL_TRUE;
|
ctx->Extensions.ARB_multitexture = GL_TRUE;
|
||||||
#if FEATURE_ARB_occlusion_query
|
#if FEATURE_ARB_occlusion_query
|
||||||
@@ -174,6 +177,7 @@ _mesa_enable_sw_extensions(GLcontext *ctx)
|
|||||||
ctx->Extensions.ARB_texture_env_combine = GL_TRUE;
|
ctx->Extensions.ARB_texture_env_combine = GL_TRUE;
|
||||||
ctx->Extensions.ARB_texture_env_crossbar = GL_TRUE;
|
ctx->Extensions.ARB_texture_env_crossbar = GL_TRUE;
|
||||||
ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE;
|
ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE;
|
||||||
|
ctx->Extensions.ARB_texture_float = GL_TRUE;
|
||||||
ctx->Extensions.ARB_texture_mirrored_repeat = GL_TRUE;
|
ctx->Extensions.ARB_texture_mirrored_repeat = GL_TRUE;
|
||||||
ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE;
|
ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE;
|
||||||
#if FEATURE_ARB_vertex_program
|
#if FEATURE_ARB_vertex_program
|
||||||
|
@@ -220,6 +220,42 @@ typedef struct tagPIXELFORMATDESCRIPTOR PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESC
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* XXX temporary hack */
|
||||||
|
#ifndef GL_ARB_half_float_pixel
|
||||||
|
#define GL_ARB_half_float_pixel 1
|
||||||
|
#define GL_HALF_FLOAT_ARB 0x140B
|
||||||
|
typedef GLushort GLhalfARB;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* XXX temporary hack */
|
||||||
|
#ifndef GL_ARB_texture_float
|
||||||
|
#define GL_ARB_texture_float 1
|
||||||
|
#define GL_TEXTURE_RED_TYPE_ARB 0x9000
|
||||||
|
#define GL_TEXTURE_GREEN_TYPE_ARB 0x9001
|
||||||
|
#define GL_TEXTURE_BLUE_TYPE_ARB 0x9002
|
||||||
|
#define GL_TEXTURE_ALPHA_TYPE_ARB 0x9003
|
||||||
|
#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x9004
|
||||||
|
#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x9005
|
||||||
|
#define GL_TEXTURE_DEPTH_TYPE_ARB 0x9006
|
||||||
|
#define GL_UNSIGNED_NORMALIZED_ARB 0x9007
|
||||||
|
#define GL_RGBA32F_ARB 0x8814
|
||||||
|
#define GL_RGB32F_ARB 0x8815
|
||||||
|
#define GL_ALPHA32F_ARB 0x8816
|
||||||
|
#define GL_INTENSITY32F_ARB 0x8817
|
||||||
|
#define GL_LUMINANCE32F_ARB 0x8818
|
||||||
|
#define GL_LUMINANCE_ALPHA32F_ARB 0x8819
|
||||||
|
#define GL_RGBA16F_ARB 0x881A
|
||||||
|
#define GL_RGB16F_ARB 0x881B
|
||||||
|
#define GL_ALPHA16F_ARB 0x881C
|
||||||
|
#define GL_INTENSITY16F_ARB 0x881D
|
||||||
|
#define GL_LUMINANCE16F_ARB 0x881E
|
||||||
|
#define GL_LUMINANCE_ALPHA16F_ARB 0x881F
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Disable unreachable code warnings for Watcom C++ */
|
/* Disable unreachable code warnings for Watcom C++ */
|
||||||
#ifdef __WATCOMC__
|
#ifdef __WATCOMC__
|
||||||
#pragma disable_message(201)
|
#pragma disable_message(201)
|
||||||
|
@@ -1,9 +1,8 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Mesa 3-D graphics library
|
* Mesa 3-D graphics library
|
||||||
* Version: 5.1
|
* Version: 6.1
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
|
* Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
@@ -247,6 +246,23 @@ pack_histogram( GLcontext *ctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case GL_HALF_FLOAT_ARB:
|
||||||
|
{
|
||||||
|
/* temporarily store as GLuints */
|
||||||
|
GLuint temp[4*HISTOGRAM_TABLE_SIZE];
|
||||||
|
GLhalfARB *dst = (GLhalfARB *) destination;
|
||||||
|
GLuint i;
|
||||||
|
/* get GLuint values */
|
||||||
|
PACK_MACRO(GLuint);
|
||||||
|
/* convert to GLhalf */
|
||||||
|
for (i = 0; i < n * comps; i++) {
|
||||||
|
dst[i] = _mesa_float_to_half((GLfloat) temp[i]);
|
||||||
|
}
|
||||||
|
if (packing->SwapBytes) {
|
||||||
|
_mesa_swap2((GLushort *) dst, n * comps);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case GL_UNSIGNED_BYTE_3_3_2:
|
case GL_UNSIGNED_BYTE_3_3_2:
|
||||||
if (format == GL_RGB) {
|
if (format == GL_RGB) {
|
||||||
GLubyte *dst = (GLubyte *) destination;
|
GLubyte *dst = (GLubyte *) destination;
|
||||||
@@ -678,31 +694,22 @@ _mesa_GetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvo
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_mesa_is_legal_format_and_type(format, type)) {
|
if (format != GL_RED &&
|
||||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmax(format or type)");
|
format != GL_GREEN &&
|
||||||
return;
|
format != GL_BLUE &&
|
||||||
|
format != GL_ALPHA &&
|
||||||
|
format != GL_RGB &&
|
||||||
|
format != GL_BGR &&
|
||||||
|
format != GL_RGBA &&
|
||||||
|
format != GL_BGRA &&
|
||||||
|
format != GL_ABGR_EXT &&
|
||||||
|
format != GL_LUMINANCE &&
|
||||||
|
format != GL_LUMINANCE_ALPHA) {
|
||||||
|
_mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogram(format)");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type != GL_UNSIGNED_BYTE &&
|
if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||||
type != GL_BYTE &&
|
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmax(format or type)");
|
||||||
type != GL_UNSIGNED_SHORT &&
|
|
||||||
type != GL_SHORT &&
|
|
||||||
type != GL_UNSIGNED_INT &&
|
|
||||||
type != GL_INT &&
|
|
||||||
type != GL_FLOAT &&
|
|
||||||
type != GL_UNSIGNED_BYTE_3_3_2 &&
|
|
||||||
type != GL_UNSIGNED_BYTE_2_3_3_REV &&
|
|
||||||
type != GL_UNSIGNED_SHORT_5_6_5 &&
|
|
||||||
type != GL_UNSIGNED_SHORT_5_6_5_REV &&
|
|
||||||
type != GL_UNSIGNED_SHORT_4_4_4_4 &&
|
|
||||||
type != GL_UNSIGNED_SHORT_4_4_4_4_REV &&
|
|
||||||
type != GL_UNSIGNED_SHORT_5_5_5_1 &&
|
|
||||||
type != GL_UNSIGNED_SHORT_1_5_5_5_REV &&
|
|
||||||
type != GL_UNSIGNED_INT_8_8_8_8 &&
|
|
||||||
type != GL_UNSIGNED_INT_8_8_8_8_REV &&
|
|
||||||
type != GL_UNSIGNED_INT_10_10_10_2 &&
|
|
||||||
type != GL_UNSIGNED_INT_2_10_10_10_REV) {
|
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetMinmax(type)");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -745,31 +752,22 @@ _mesa_GetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, G
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_mesa_is_legal_format_and_type(format, type)) {
|
if (format != GL_RED &&
|
||||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogram(format or type)");
|
format != GL_GREEN &&
|
||||||
return;
|
format != GL_BLUE &&
|
||||||
|
format != GL_ALPHA &&
|
||||||
|
format != GL_RGB &&
|
||||||
|
format != GL_BGR &&
|
||||||
|
format != GL_RGBA &&
|
||||||
|
format != GL_BGRA &&
|
||||||
|
format != GL_ABGR_EXT &&
|
||||||
|
format != GL_LUMINANCE &&
|
||||||
|
format != GL_LUMINANCE_ALPHA) {
|
||||||
|
_mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogram(format)");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type != GL_UNSIGNED_BYTE &&
|
if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||||
type != GL_BYTE &&
|
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogram(format or type)");
|
||||||
type != GL_UNSIGNED_SHORT &&
|
|
||||||
type != GL_SHORT &&
|
|
||||||
type != GL_UNSIGNED_INT &&
|
|
||||||
type != GL_INT &&
|
|
||||||
type != GL_FLOAT &&
|
|
||||||
type != GL_UNSIGNED_BYTE_3_3_2 &&
|
|
||||||
type != GL_UNSIGNED_BYTE_2_3_3_REV &&
|
|
||||||
type != GL_UNSIGNED_SHORT_5_6_5 &&
|
|
||||||
type != GL_UNSIGNED_SHORT_5_6_5_REV &&
|
|
||||||
type != GL_UNSIGNED_SHORT_4_4_4_4 &&
|
|
||||||
type != GL_UNSIGNED_SHORT_4_4_4_4_REV &&
|
|
||||||
type != GL_UNSIGNED_SHORT_5_5_5_1 &&
|
|
||||||
type != GL_UNSIGNED_SHORT_1_5_5_5_REV &&
|
|
||||||
type != GL_UNSIGNED_INT_8_8_8_8 &&
|
|
||||||
type != GL_UNSIGNED_INT_8_8_8_8_REV &&
|
|
||||||
type != GL_UNSIGNED_INT_10_10_10_2 &&
|
|
||||||
type != GL_UNSIGNED_INT_2_10_10_10_REV) {
|
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogram(type)");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,8 +1,3 @@
|
|||||||
/**
|
|
||||||
* \file image.c
|
|
||||||
* Image handling.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mesa 3-D graphics library
|
* Mesa 3-D graphics library
|
||||||
* Version: 6.1
|
* Version: 6.1
|
||||||
@@ -28,6 +23,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file image.c
|
||||||
|
* Image handling.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "glheader.h"
|
#include "glheader.h"
|
||||||
#include "bufferobj.h"
|
#include "bufferobj.h"
|
||||||
#include "colormac.h"
|
#include "colormac.h"
|
||||||
@@ -141,8 +142,8 @@ GLint _mesa_sizeof_type( GLenum type )
|
|||||||
return sizeof(GLint);
|
return sizeof(GLint);
|
||||||
case GL_FLOAT:
|
case GL_FLOAT:
|
||||||
return sizeof(GLfloat);
|
return sizeof(GLfloat);
|
||||||
case GL_HALF_FLOAT_NV:
|
case GL_HALF_FLOAT_ARB:
|
||||||
return sizeof(GLhalfNV);
|
return sizeof(GLhalfARB);
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -170,8 +171,8 @@ GLint _mesa_sizeof_packed_type( GLenum type )
|
|||||||
return sizeof(GLuint);
|
return sizeof(GLuint);
|
||||||
case GL_INT:
|
case GL_INT:
|
||||||
return sizeof(GLint);
|
return sizeof(GLint);
|
||||||
case GL_HALF_FLOAT_NV:
|
case GL_HALF_FLOAT_ARB:
|
||||||
return sizeof(GLhalfNV);
|
return sizeof(GLhalfARB);
|
||||||
case GL_FLOAT:
|
case GL_FLOAT:
|
||||||
return sizeof(GLfloat);
|
return sizeof(GLfloat);
|
||||||
case GL_UNSIGNED_BYTE_3_3_2:
|
case GL_UNSIGNED_BYTE_3_3_2:
|
||||||
@@ -281,8 +282,8 @@ GLint _mesa_bytes_per_pixel( GLenum format, GLenum type )
|
|||||||
return comps * sizeof(GLint);
|
return comps * sizeof(GLint);
|
||||||
case GL_FLOAT:
|
case GL_FLOAT:
|
||||||
return comps * sizeof(GLfloat);
|
return comps * sizeof(GLfloat);
|
||||||
case GL_HALF_FLOAT_NV:
|
case GL_HALF_FLOAT_ARB:
|
||||||
return comps * sizeof(GLhalfNV);
|
return comps * sizeof(GLhalfARB);
|
||||||
case GL_UNSIGNED_BYTE_3_3_2:
|
case GL_UNSIGNED_BYTE_3_3_2:
|
||||||
case GL_UNSIGNED_BYTE_2_3_3_REV:
|
case GL_UNSIGNED_BYTE_2_3_3_REV:
|
||||||
if (format == GL_RGB || format == GL_BGR)
|
if (format == GL_RGB || format == GL_BGR)
|
||||||
@@ -333,7 +334,7 @@ GLint _mesa_bytes_per_pixel( GLenum format, GLenum type )
|
|||||||
* otherwise.
|
* otherwise.
|
||||||
*/
|
*/
|
||||||
GLboolean
|
GLboolean
|
||||||
_mesa_is_legal_format_and_type( GLenum format, GLenum type )
|
_mesa_is_legal_format_and_type( GLcontext *ctx, GLenum format, GLenum type )
|
||||||
{
|
{
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case GL_COLOR_INDEX:
|
case GL_COLOR_INDEX:
|
||||||
@@ -347,8 +348,9 @@ _mesa_is_legal_format_and_type( GLenum format, GLenum type )
|
|||||||
case GL_INT:
|
case GL_INT:
|
||||||
case GL_UNSIGNED_INT:
|
case GL_UNSIGNED_INT:
|
||||||
case GL_FLOAT:
|
case GL_FLOAT:
|
||||||
case GL_HALF_FLOAT_NV:
|
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
|
case GL_HALF_FLOAT_ARB:
|
||||||
|
return ctx->Extensions.ARB_half_float_pixel;
|
||||||
default:
|
default:
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
@@ -368,8 +370,9 @@ _mesa_is_legal_format_and_type( GLenum format, GLenum type )
|
|||||||
case GL_INT:
|
case GL_INT:
|
||||||
case GL_UNSIGNED_INT:
|
case GL_UNSIGNED_INT:
|
||||||
case GL_FLOAT:
|
case GL_FLOAT:
|
||||||
case GL_HALF_FLOAT_NV:
|
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
|
case GL_HALF_FLOAT_ARB:
|
||||||
|
return ctx->Extensions.ARB_half_float_pixel;
|
||||||
default:
|
default:
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
@@ -383,12 +386,13 @@ _mesa_is_legal_format_and_type( GLenum format, GLenum type )
|
|||||||
case GL_INT:
|
case GL_INT:
|
||||||
case GL_UNSIGNED_INT:
|
case GL_UNSIGNED_INT:
|
||||||
case GL_FLOAT:
|
case GL_FLOAT:
|
||||||
case GL_HALF_FLOAT_NV:
|
|
||||||
case GL_UNSIGNED_BYTE_3_3_2:
|
case GL_UNSIGNED_BYTE_3_3_2:
|
||||||
case GL_UNSIGNED_BYTE_2_3_3_REV:
|
case GL_UNSIGNED_BYTE_2_3_3_REV:
|
||||||
case GL_UNSIGNED_SHORT_5_6_5:
|
case GL_UNSIGNED_SHORT_5_6_5:
|
||||||
case GL_UNSIGNED_SHORT_5_6_5_REV:
|
case GL_UNSIGNED_SHORT_5_6_5_REV:
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
|
case GL_HALF_FLOAT_ARB:
|
||||||
|
return ctx->Extensions.ARB_half_float_pixel;
|
||||||
default:
|
default:
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
@@ -403,7 +407,6 @@ _mesa_is_legal_format_and_type( GLenum format, GLenum type )
|
|||||||
case GL_INT:
|
case GL_INT:
|
||||||
case GL_UNSIGNED_INT:
|
case GL_UNSIGNED_INT:
|
||||||
case GL_FLOAT:
|
case GL_FLOAT:
|
||||||
case GL_HALF_FLOAT_NV:
|
|
||||||
case GL_UNSIGNED_SHORT_4_4_4_4:
|
case GL_UNSIGNED_SHORT_4_4_4_4:
|
||||||
case GL_UNSIGNED_SHORT_4_4_4_4_REV:
|
case GL_UNSIGNED_SHORT_4_4_4_4_REV:
|
||||||
case GL_UNSIGNED_SHORT_5_5_5_1:
|
case GL_UNSIGNED_SHORT_5_5_5_1:
|
||||||
@@ -413,6 +416,8 @@ _mesa_is_legal_format_and_type( GLenum format, GLenum type )
|
|||||||
case GL_UNSIGNED_INT_10_10_10_2:
|
case GL_UNSIGNED_INT_10_10_10_2:
|
||||||
case GL_UNSIGNED_INT_2_10_10_10_REV:
|
case GL_UNSIGNED_INT_2_10_10_10_REV:
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
|
case GL_HALF_FLOAT_ARB:
|
||||||
|
return ctx->Extensions.ARB_half_float_pixel;
|
||||||
default:
|
default:
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
@@ -1547,9 +1552,9 @@ _mesa_pack_rgba_span_float( GLcontext *ctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GL_HALF_FLOAT_NV:
|
case GL_HALF_FLOAT_ARB:
|
||||||
{
|
{
|
||||||
GLhalfNV *dst = (GLhalfNV *) dstAddr;
|
GLhalfARB *dst = (GLhalfARB *) dstAddr;
|
||||||
switch (dstFormat) {
|
switch (dstFormat) {
|
||||||
case GL_RED:
|
case GL_RED:
|
||||||
for (i=0;i<n;i++)
|
for (i=0;i<n;i++)
|
||||||
@@ -2010,7 +2015,7 @@ extract_uint_indexes(GLuint n, GLuint indexes[],
|
|||||||
srcType == GL_SHORT ||
|
srcType == GL_SHORT ||
|
||||||
srcType == GL_UNSIGNED_INT ||
|
srcType == GL_UNSIGNED_INT ||
|
||||||
srcType == GL_INT ||
|
srcType == GL_INT ||
|
||||||
srcType == GL_HALF_FLOAT_NV ||
|
srcType == GL_HALF_FLOAT_ARB ||
|
||||||
srcType == GL_FLOAT);
|
srcType == GL_FLOAT);
|
||||||
|
|
||||||
switch (srcType) {
|
switch (srcType) {
|
||||||
@@ -2148,13 +2153,13 @@ extract_uint_indexes(GLuint n, GLuint indexes[],
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GL_HALF_FLOAT_NV:
|
case GL_HALF_FLOAT_ARB:
|
||||||
{
|
{
|
||||||
GLuint i;
|
GLuint i;
|
||||||
const GLhalfNV *s = (const GLhalfNV *) src;
|
const GLhalfARB *s = (const GLhalfARB *) src;
|
||||||
if (unpack->SwapBytes) {
|
if (unpack->SwapBytes) {
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
GLhalfNV value = s[i];
|
GLhalfARB value = s[i];
|
||||||
SWAP2BYTE(value);
|
SWAP2BYTE(value);
|
||||||
indexes[i] = (GLuint) _mesa_half_to_float(value);
|
indexes[i] = (GLuint) _mesa_half_to_float(value);
|
||||||
}
|
}
|
||||||
@@ -2216,7 +2221,7 @@ extract_float_rgba(GLuint n, GLfloat rgba[][4],
|
|||||||
srcType == GL_SHORT ||
|
srcType == GL_SHORT ||
|
||||||
srcType == GL_UNSIGNED_INT ||
|
srcType == GL_UNSIGNED_INT ||
|
||||||
srcType == GL_INT ||
|
srcType == GL_INT ||
|
||||||
srcType == GL_HALF_FLOAT_NV ||
|
srcType == GL_HALF_FLOAT_ARB ||
|
||||||
srcType == GL_FLOAT ||
|
srcType == GL_FLOAT ||
|
||||||
srcType == GL_UNSIGNED_BYTE_3_3_2 ||
|
srcType == GL_UNSIGNED_BYTE_3_3_2 ||
|
||||||
srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
|
srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
|
||||||
@@ -2395,11 +2400,11 @@ extract_float_rgba(GLuint n, GLfloat rgba[][4],
|
|||||||
PROCESS(blueIndex, BCOMP, 0.0F, GLfloat, (GLfloat));
|
PROCESS(blueIndex, BCOMP, 0.0F, GLfloat, (GLfloat));
|
||||||
PROCESS(alphaIndex, ACOMP, 1.0F, GLfloat, (GLfloat));
|
PROCESS(alphaIndex, ACOMP, 1.0F, GLfloat, (GLfloat));
|
||||||
break;
|
break;
|
||||||
case GL_HALF_FLOAT_NV:
|
case GL_HALF_FLOAT_ARB:
|
||||||
PROCESS(redIndex, RCOMP, 0.0F, GLhalfNV, _mesa_half_to_float);
|
PROCESS(redIndex, RCOMP, 0.0F, GLhalfARB, _mesa_half_to_float);
|
||||||
PROCESS(greenIndex, GCOMP, 0.0F, GLhalfNV, _mesa_half_to_float);
|
PROCESS(greenIndex, GCOMP, 0.0F, GLhalfARB, _mesa_half_to_float);
|
||||||
PROCESS(blueIndex, BCOMP, 0.0F, GLhalfNV, _mesa_half_to_float);
|
PROCESS(blueIndex, BCOMP, 0.0F, GLhalfARB, _mesa_half_to_float);
|
||||||
PROCESS(alphaIndex, ACOMP, 1.0F, GLhalfNV, _mesa_half_to_float);
|
PROCESS(alphaIndex, ACOMP, 1.0F, GLhalfARB, _mesa_half_to_float);
|
||||||
break;
|
break;
|
||||||
case GL_UNSIGNED_BYTE_3_3_2:
|
case GL_UNSIGNED_BYTE_3_3_2:
|
||||||
{
|
{
|
||||||
@@ -2736,7 +2741,7 @@ _mesa_unpack_color_span_chan( GLcontext *ctx,
|
|||||||
srcType == GL_SHORT ||
|
srcType == GL_SHORT ||
|
||||||
srcType == GL_UNSIGNED_INT ||
|
srcType == GL_UNSIGNED_INT ||
|
||||||
srcType == GL_INT ||
|
srcType == GL_INT ||
|
||||||
srcType == GL_HALF_FLOAT_NV ||
|
srcType == GL_HALF_FLOAT_ARB ||
|
||||||
srcType == GL_FLOAT ||
|
srcType == GL_FLOAT ||
|
||||||
srcType == GL_UNSIGNED_BYTE_3_3_2 ||
|
srcType == GL_UNSIGNED_BYTE_3_3_2 ||
|
||||||
srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
|
srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
|
||||||
@@ -2752,7 +2757,7 @@ _mesa_unpack_color_span_chan( GLcontext *ctx,
|
|||||||
srcType == GL_UNSIGNED_INT_2_10_10_10_REV);
|
srcType == GL_UNSIGNED_INT_2_10_10_10_REV);
|
||||||
|
|
||||||
/* Try simple cases first */
|
/* Try simple cases first */
|
||||||
if (transferOps == 0 ){
|
if (transferOps == 0) {
|
||||||
if (srcType == CHAN_TYPE) {
|
if (srcType == CHAN_TYPE) {
|
||||||
if (dstFormat == GL_RGBA) {
|
if (dstFormat == GL_RGBA) {
|
||||||
if (srcFormat == GL_RGBA) {
|
if (srcFormat == GL_RGBA) {
|
||||||
@@ -3080,7 +3085,7 @@ _mesa_unpack_color_span_float( GLcontext *ctx,
|
|||||||
srcType == GL_SHORT ||
|
srcType == GL_SHORT ||
|
||||||
srcType == GL_UNSIGNED_INT ||
|
srcType == GL_UNSIGNED_INT ||
|
||||||
srcType == GL_INT ||
|
srcType == GL_INT ||
|
||||||
srcType == GL_HALF_FLOAT_NV ||
|
srcType == GL_HALF_FLOAT_ARB ||
|
||||||
srcType == GL_FLOAT ||
|
srcType == GL_FLOAT ||
|
||||||
srcType == GL_UNSIGNED_BYTE_3_3_2 ||
|
srcType == GL_UNSIGNED_BYTE_3_3_2 ||
|
||||||
srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
|
srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
|
||||||
@@ -3288,7 +3293,7 @@ _mesa_unpack_index_span( const GLcontext *ctx, GLuint n,
|
|||||||
srcType == GL_SHORT ||
|
srcType == GL_SHORT ||
|
||||||
srcType == GL_UNSIGNED_INT ||
|
srcType == GL_UNSIGNED_INT ||
|
||||||
srcType == GL_INT ||
|
srcType == GL_INT ||
|
||||||
srcType == GL_HALF_FLOAT_NV ||
|
srcType == GL_HALF_FLOAT_ARB ||
|
||||||
srcType == GL_FLOAT);
|
srcType == GL_FLOAT);
|
||||||
|
|
||||||
ASSERT(dstType == GL_UNSIGNED_BYTE ||
|
ASSERT(dstType == GL_UNSIGNED_BYTE ||
|
||||||
@@ -3461,9 +3466,9 @@ _mesa_pack_index_span( const GLcontext *ctx, GLuint n,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GL_HALF_FLOAT_NV:
|
case GL_HALF_FLOAT_ARB:
|
||||||
{
|
{
|
||||||
GLhalfNV *dst = (GLhalfNV *) dest;
|
GLhalfARB *dst = (GLhalfARB *) dest;
|
||||||
GLuint i;
|
GLuint i;
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
dst[i] = _mesa_float_to_half((GLfloat) source[i]);
|
dst[i] = _mesa_float_to_half((GLfloat) source[i]);
|
||||||
@@ -3507,7 +3512,7 @@ _mesa_unpack_stencil_span( const GLcontext *ctx, GLuint n,
|
|||||||
srcType == GL_SHORT ||
|
srcType == GL_SHORT ||
|
||||||
srcType == GL_UNSIGNED_INT ||
|
srcType == GL_UNSIGNED_INT ||
|
||||||
srcType == GL_INT ||
|
srcType == GL_INT ||
|
||||||
srcType == GL_HALF_FLOAT_NV ||
|
srcType == GL_HALF_FLOAT_ARB ||
|
||||||
srcType == GL_FLOAT);
|
srcType == GL_FLOAT);
|
||||||
|
|
||||||
ASSERT(dstType == GL_UNSIGNED_BYTE ||
|
ASSERT(dstType == GL_UNSIGNED_BYTE ||
|
||||||
@@ -3694,9 +3699,9 @@ _mesa_pack_stencil_span( const GLcontext *ctx, GLuint n,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GL_HALF_FLOAT_NV:
|
case GL_HALF_FLOAT_ARB:
|
||||||
{
|
{
|
||||||
GLhalfNV *dst = (GLhalfNV *) dest;
|
GLhalfARB *dst = (GLhalfARB *) dest;
|
||||||
GLuint i;
|
GLuint i;
|
||||||
for (i=0;i<n;i++) {
|
for (i=0;i<n;i++) {
|
||||||
dst[i] = _mesa_float_to_half( (float) source[i] );
|
dst[i] = _mesa_float_to_half( (float) source[i] );
|
||||||
@@ -3807,10 +3812,10 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n, GLfloat *dest,
|
|||||||
case GL_FLOAT:
|
case GL_FLOAT:
|
||||||
MEMCPY(dest, source, n * sizeof(GLfloat));
|
MEMCPY(dest, source, n * sizeof(GLfloat));
|
||||||
break;
|
break;
|
||||||
case GL_HALF_FLOAT_NV:
|
case GL_HALF_FLOAT_ARB:
|
||||||
{
|
{
|
||||||
GLuint i;
|
GLuint i;
|
||||||
const GLhalfNV *src = (const GLhalfNV *) source;
|
const GLhalfARB *src = (const GLhalfARB *) source;
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
dest[i] = _mesa_half_to_float(src[i]);
|
dest[i] = _mesa_half_to_float(src[i]);
|
||||||
}
|
}
|
||||||
@@ -3936,9 +3941,9 @@ _mesa_pack_depth_span( const GLcontext *ctx, GLuint n, GLvoid *dest,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GL_HALF_FLOAT_NV:
|
case GL_HALF_FLOAT_ARB:
|
||||||
{
|
{
|
||||||
GLhalfNV *dst = (GLhalfNV *) dest;
|
GLhalfARB *dst = (GLhalfARB *) dest;
|
||||||
GLuint i;
|
GLuint i;
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
dst[i] = _mesa_float_to_half(depthSpan[i]);
|
dst[i] = _mesa_float_to_half(depthSpan[i]);
|
||||||
|
@@ -54,7 +54,7 @@ extern GLint
|
|||||||
_mesa_bytes_per_pixel( GLenum format, GLenum type );
|
_mesa_bytes_per_pixel( GLenum format, GLenum type );
|
||||||
|
|
||||||
extern GLboolean
|
extern GLboolean
|
||||||
_mesa_is_legal_format_and_type( GLenum format, GLenum type );
|
_mesa_is_legal_format_and_type( GLcontext *ctx, GLenum format, GLenum type );
|
||||||
|
|
||||||
|
|
||||||
extern GLvoid *
|
extern GLvoid *
|
||||||
|
@@ -32,9 +32,9 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Mesa 3-D graphics library
|
* Mesa 3-D graphics library
|
||||||
* Version: 5.1
|
* Version: 6.1
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
|
* Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
@@ -533,7 +533,7 @@ _mesa_bitcount(unsigned int n)
|
|||||||
* Based on code from:
|
* Based on code from:
|
||||||
* http://www.opengl.org/discussion_boards/ubb/Forum3/HTML/008786.html
|
* http://www.opengl.org/discussion_boards/ubb/Forum3/HTML/008786.html
|
||||||
*/
|
*/
|
||||||
GLhalfNV
|
GLhalfARB
|
||||||
_mesa_float_to_half(float val)
|
_mesa_float_to_half(float val)
|
||||||
{
|
{
|
||||||
const int flt = *((int *) &val);
|
const int flt = *((int *) &val);
|
||||||
@@ -541,7 +541,7 @@ _mesa_float_to_half(float val)
|
|||||||
const int flt_e = (flt >> 23) & 0xff;
|
const int flt_e = (flt >> 23) & 0xff;
|
||||||
const int flt_s = (flt >> 31) & 0x1;
|
const int flt_s = (flt >> 31) & 0x1;
|
||||||
int s, e, m = 0;
|
int s, e, m = 0;
|
||||||
GLhalfNV result;
|
GLhalfARB result;
|
||||||
|
|
||||||
/* sign bit */
|
/* sign bit */
|
||||||
s = flt_s;
|
s = flt_s;
|
||||||
@@ -620,7 +620,7 @@ _mesa_float_to_half(float val)
|
|||||||
* http://www.opengl.org/discussion_boards/ubb/Forum3/HTML/008786.html
|
* http://www.opengl.org/discussion_boards/ubb/Forum3/HTML/008786.html
|
||||||
*/
|
*/
|
||||||
float
|
float
|
||||||
_mesa_half_to_float(GLhalfNV val)
|
_mesa_half_to_float(GLhalfARB val)
|
||||||
{
|
{
|
||||||
/* XXX could also use a 64K-entry lookup table */
|
/* XXX could also use a 64K-entry lookup table */
|
||||||
const int m = val & 0x3ff;
|
const int m = val & 0x3ff;
|
||||||
|
@@ -1,11 +1,3 @@
|
|||||||
/**
|
|
||||||
* \file imports.h
|
|
||||||
* Standard C library function wrappers.
|
|
||||||
*
|
|
||||||
* This file provides wrappers for all the standard C library functions
|
|
||||||
* like malloc(), free(), printf(), getenv(), etc.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mesa 3-D graphics library
|
* Mesa 3-D graphics library
|
||||||
* Version: 6.1
|
* Version: 6.1
|
||||||
@@ -31,6 +23,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file imports.h
|
||||||
|
* Standard C library function wrappers.
|
||||||
|
*
|
||||||
|
* This file provides wrappers for all the standard C library functions
|
||||||
|
* like malloc(), free(), printf(), getenv(), etc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef IMPORTS_H
|
#ifndef IMPORTS_H
|
||||||
#define IMPORTS_H
|
#define IMPORTS_H
|
||||||
|
|
||||||
@@ -705,11 +706,11 @@ _mesa_log2(float x);
|
|||||||
extern unsigned int
|
extern unsigned int
|
||||||
_mesa_bitcount(unsigned int n);
|
_mesa_bitcount(unsigned int n);
|
||||||
|
|
||||||
extern GLhalfNV
|
extern GLhalfARB
|
||||||
_mesa_float_to_half(float f);
|
_mesa_float_to_half(float f);
|
||||||
|
|
||||||
extern float
|
extern float
|
||||||
_mesa_half_to_float(GLhalfNV h);
|
_mesa_half_to_float(GLhalfARB h);
|
||||||
|
|
||||||
|
|
||||||
extern char *
|
extern char *
|
||||||
|
@@ -143,6 +143,8 @@ struct gl_texture_object;
|
|||||||
typedef struct __GLcontextRec GLcontext;
|
typedef struct __GLcontextRec GLcontext;
|
||||||
typedef struct __GLcontextModesRec GLvisual;
|
typedef struct __GLcontextModesRec GLvisual;
|
||||||
typedef struct gl_frame_buffer GLframebuffer;
|
typedef struct gl_frame_buffer GLframebuffer;
|
||||||
|
struct gl_pixelstore_attrib;
|
||||||
|
struct gl_texture_format;
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
|
||||||
@@ -1024,16 +1026,37 @@ typedef void (*FetchTexelFuncF)( const struct gl_texture_image *texImage,
|
|||||||
GLint col, GLint row, GLint img,
|
GLint col, GLint row, GLint img,
|
||||||
GLfloat *texelOut );
|
GLfloat *texelOut );
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TexImage store function. This is called by the glTex[Sub]Image
|
||||||
|
* functions and is responsible for converting the user-specified texture
|
||||||
|
* image into a specific (hardware) image format.
|
||||||
|
*/
|
||||||
|
typedef GLboolean (*StoreTexImageFunc)(GLcontext *ctx, GLuint dims,
|
||||||
|
GLenum baseInternalFormat,
|
||||||
|
const struct gl_texture_format *dstFormat,
|
||||||
|
GLvoid *dstAddr,
|
||||||
|
GLint dstXoffset, GLint dstYoffset, GLint dstZoffset,
|
||||||
|
GLint dstRowStride, GLint dstImageStride,
|
||||||
|
GLint srcWidth, GLint srcHeight, GLint srcDepth,
|
||||||
|
GLenum srcFormat, GLenum srcType,
|
||||||
|
const GLvoid *srcAddr,
|
||||||
|
const struct gl_pixelstore_attrib *srcPacking);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Texture format record
|
* Texture format record
|
||||||
*/
|
*/
|
||||||
struct gl_texture_format {
|
struct gl_texture_format {
|
||||||
GLint MesaFormat; /**< One of the MESA_FORMAT_* values */
|
GLint MesaFormat; /**< One of the MESA_FORMAT_* values */
|
||||||
|
|
||||||
GLenum BaseFormat; /**< Either GL_ALPHA, GL_INTENSITY, GL_LUMINANCE,
|
GLenum BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_ALPHA,
|
||||||
* GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA,
|
* GL_LUMINANCE, GL_LUMINANCE_ALPHA,
|
||||||
* GL_COLOR_INDEX or GL_DEPTH_COMPONENT.
|
* GL_INTENSITY, GL_COLOR_INDEX or
|
||||||
|
* GL_DEPTH_COMPONENT.
|
||||||
*/
|
*/
|
||||||
|
GLenum DataType; /**< GL_FLOAT or GL_UNSIGNED_NORMALIZED_ARB */
|
||||||
GLubyte RedBits; /**< Bits per texel component */
|
GLubyte RedBits; /**< Bits per texel component */
|
||||||
GLubyte GreenBits; /**< These are just rough approximations for */
|
GLubyte GreenBits; /**< These are just rough approximations for */
|
||||||
GLubyte BlueBits; /**< compressed texture formats. */
|
GLubyte BlueBits; /**< compressed texture formats. */
|
||||||
@@ -1043,7 +1066,9 @@ struct gl_texture_format {
|
|||||||
GLubyte IndexBits;
|
GLubyte IndexBits;
|
||||||
GLubyte DepthBits;
|
GLubyte DepthBits;
|
||||||
|
|
||||||
GLint TexelBytes; /**< Bytes per texel (0 for compressed formats */
|
GLint TexelBytes; /**< Bytes per texel, 0 if compressed format */
|
||||||
|
|
||||||
|
StoreTexImageFunc StoreImage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Texel fetch function pointers
|
* \name Texel fetch function pointers
|
||||||
@@ -1063,9 +1088,10 @@ struct gl_texture_format {
|
|||||||
* Texture image record
|
* Texture image record
|
||||||
*/
|
*/
|
||||||
struct gl_texture_image {
|
struct gl_texture_image {
|
||||||
GLenum Format; /**< GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA,
|
GLenum Format; /**< Either GL_RGB, GL_RGBA, GL_ALPHA,
|
||||||
* GL_INTENSITY, GL_RGB, GL_RGBA,
|
* GL_LUMINANCE, GL_LUMINANCE_ALPHA,
|
||||||
* GL_COLOR_INDEX or GL_DEPTH_COMPONENT only.
|
* GL_INTENSITY, GL_COLOR_INDEX or
|
||||||
|
* GL_DEPTH_COMPONENT only.
|
||||||
* Used for choosing TexEnv arithmetic.
|
* Used for choosing TexEnv arithmetic.
|
||||||
*/
|
*/
|
||||||
GLint IntFormat; /**< Internal format as given by the user */
|
GLint IntFormat; /**< Internal format as given by the user */
|
||||||
@@ -1828,6 +1854,7 @@ struct gl_extensions
|
|||||||
GLboolean dummy; /* don't remove this! */
|
GLboolean dummy; /* don't remove this! */
|
||||||
GLboolean ARB_depth_texture;
|
GLboolean ARB_depth_texture;
|
||||||
GLboolean ARB_fragment_program;
|
GLboolean ARB_fragment_program;
|
||||||
|
GLboolean ARB_half_float_pixel;
|
||||||
GLboolean ARB_imaging;
|
GLboolean ARB_imaging;
|
||||||
GLboolean ARB_multisample;
|
GLboolean ARB_multisample;
|
||||||
GLboolean ARB_multitexture;
|
GLboolean ARB_multitexture;
|
||||||
@@ -1840,6 +1867,7 @@ struct gl_extensions
|
|||||||
GLboolean ARB_texture_env_combine;
|
GLboolean ARB_texture_env_combine;
|
||||||
GLboolean ARB_texture_env_crossbar;
|
GLboolean ARB_texture_env_crossbar;
|
||||||
GLboolean ARB_texture_env_dot3;
|
GLboolean ARB_texture_env_dot3;
|
||||||
|
GLboolean ARB_texture_float;
|
||||||
GLboolean ARB_texture_mirrored_repeat;
|
GLboolean ARB_texture_mirrored_repeat;
|
||||||
GLboolean ARB_texture_non_power_of_two;
|
GLboolean ARB_texture_non_power_of_two;
|
||||||
GLboolean ARB_transpose_matrix;
|
GLboolean ARB_transpose_matrix;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,15 +1,8 @@
|
|||||||
/**
|
|
||||||
* \file texformat.h
|
|
||||||
* Texture formats definitions.
|
|
||||||
*
|
|
||||||
* \author Gareth Hughes
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mesa 3-D graphics library
|
* Mesa 3-D graphics library
|
||||||
* Version: 5.1
|
* Version: 6.1
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
|
* Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
@@ -30,16 +23,26 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file texformat.h
|
||||||
|
* Texture formats definitions.
|
||||||
|
*
|
||||||
|
* \author Gareth Hughes
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef TEXFORMAT_H
|
#ifndef TEXFORMAT_H
|
||||||
#define TEXFORMAT_H
|
#define TEXFORMAT_H
|
||||||
|
|
||||||
|
#define NEWTEXSTORE 1
|
||||||
|
|
||||||
|
|
||||||
#include "mtypes.h"
|
#include "mtypes.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mesa internal texture image types.
|
* Mesa internal texture image formats.
|
||||||
*
|
* All texture images are stored in one of these formats.
|
||||||
* All texture images must be stored in one of these formats.
|
|
||||||
*
|
*
|
||||||
* NOTE: when you add a new format, be sure to update the do_row()
|
* NOTE: when you add a new format, be sure to update the do_row()
|
||||||
* function in texstore.c used for auto mipmap generation.
|
* function in texstore.c used for auto mipmap generation.
|
||||||
@@ -111,10 +114,8 @@ enum _format {
|
|||||||
/**
|
/**
|
||||||
* \name Generic GLchan-based formats.
|
* \name Generic GLchan-based formats.
|
||||||
*
|
*
|
||||||
* These are the default formats used by the software rasterizer and, unless
|
* Software-oriented texture formats. Texels are arrays of GLchan
|
||||||
* the driver overrides the texture image functions, incoming images will be
|
* values so there will be no big/little endian issues.
|
||||||
* converted to one of these formats. Components are arrays of GLchan
|
|
||||||
* values, so there will be no big/little endian issues.
|
|
||||||
*
|
*
|
||||||
* \note Because these are based on the GLchan data type, one cannot assume
|
* \note Because these are based on the GLchan data type, one cannot assume
|
||||||
* 8 bits per channel with these formats. If you require GLubyte channels,
|
* 8 bits per channel with these formats. If you require GLubyte channels,
|
||||||
@@ -130,30 +131,34 @@ enum _format {
|
|||||||
MESA_FORMAT_COLOR_INDEX,
|
MESA_FORMAT_COLOR_INDEX,
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Depth textures
|
||||||
|
*/
|
||||||
|
/*@{*/
|
||||||
|
MESA_FORMAT_DEPTH_COMPONENT_FLOAT32,
|
||||||
|
MESA_FORMAT_DEPTH_COMPONENT16,
|
||||||
|
/*@}*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Floating point texture formats.
|
* \name Floating point texture formats.
|
||||||
*/
|
*/
|
||||||
/*@{*/
|
/*@{*/
|
||||||
MESA_FORMAT_DEPTH_COMPONENT,
|
|
||||||
MESA_FORMAT_RGBA_FLOAT32,
|
MESA_FORMAT_RGBA_FLOAT32,
|
||||||
MESA_FORMAT_RGBA_FLOAT16,
|
MESA_FORMAT_RGBA_FLOAT16,
|
||||||
MESA_FORMAT_RGB_FLOAT32,
|
MESA_FORMAT_RGB_FLOAT32,
|
||||||
MESA_FORMAT_RGB_FLOAT16
|
MESA_FORMAT_RGB_FLOAT16,
|
||||||
|
MESA_FORMAT_ALPHA_FLOAT32,
|
||||||
|
MESA_FORMAT_ALPHA_FLOAT16,
|
||||||
|
MESA_FORMAT_LUMINANCE_FLOAT32,
|
||||||
|
MESA_FORMAT_LUMINANCE_FLOAT16,
|
||||||
|
MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32,
|
||||||
|
MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16,
|
||||||
|
MESA_FORMAT_INTENSITY_FLOAT32,
|
||||||
|
MESA_FORMAT_INTENSITY_FLOAT16
|
||||||
/*@}*/
|
/*@}*/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
extern GLboolean
|
|
||||||
_mesa_is_hardware_tex_format( const struct gl_texture_format *format );
|
|
||||||
|
|
||||||
extern const struct gl_texture_format *
|
|
||||||
_mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat,
|
|
||||||
GLenum format, GLenum type );
|
|
||||||
|
|
||||||
extern GLint
|
|
||||||
_mesa_base_compressed_texformat(GLcontext *ctx, GLint intFormat);
|
|
||||||
|
|
||||||
|
|
||||||
/** The default formats, GLchan per component */
|
/** The default formats, GLchan per component */
|
||||||
/*@{*/
|
/*@{*/
|
||||||
extern const struct gl_texture_format _mesa_texformat_rgba;
|
extern const struct gl_texture_format _mesa_texformat_rgba;
|
||||||
@@ -165,13 +170,26 @@ extern const struct gl_texture_format _mesa_texformat_intensity;
|
|||||||
extern const struct gl_texture_format _mesa_texformat_color_index;
|
extern const struct gl_texture_format _mesa_texformat_color_index;
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
/** Depth textures */
|
||||||
|
/*@{*/
|
||||||
|
extern const struct gl_texture_format _mesa_texformat_depth_component_float32;
|
||||||
|
extern const struct gl_texture_format _mesa_texformat_depth_component16;
|
||||||
|
/*@}*/
|
||||||
|
|
||||||
/** Floating point texture formats */
|
/** Floating point texture formats */
|
||||||
/*@{*/
|
/*@{*/
|
||||||
extern const struct gl_texture_format _mesa_texformat_depth_component;
|
|
||||||
extern const struct gl_texture_format _mesa_texformat_rgba_float32;
|
extern const struct gl_texture_format _mesa_texformat_rgba_float32;
|
||||||
extern const struct gl_texture_format _mesa_texformat_rgba_float16;
|
extern const struct gl_texture_format _mesa_texformat_rgba_float16;
|
||||||
extern const struct gl_texture_format _mesa_texformat_rgb_float32;
|
extern const struct gl_texture_format _mesa_texformat_rgb_float32;
|
||||||
extern const struct gl_texture_format _mesa_texformat_rgb_float16;
|
extern const struct gl_texture_format _mesa_texformat_rgb_float16;
|
||||||
|
extern const struct gl_texture_format _mesa_texformat_alpha_float32;
|
||||||
|
extern const struct gl_texture_format _mesa_texformat_alpha_float16;
|
||||||
|
extern const struct gl_texture_format _mesa_texformat_luminance_float32;
|
||||||
|
extern const struct gl_texture_format _mesa_texformat_luminance_float16;
|
||||||
|
extern const struct gl_texture_format _mesa_texformat_luminance_alpha_float32;
|
||||||
|
extern const struct gl_texture_format _mesa_texformat_luminance_alpha_float16;
|
||||||
|
extern const struct gl_texture_format _mesa_texformat_intensity_float32;
|
||||||
|
extern const struct gl_texture_format _mesa_texformat_intensity_float16;
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
/** \name The hardware-friendly formats */
|
/** \name The hardware-friendly formats */
|
||||||
@@ -203,4 +221,18 @@ extern const struct gl_texture_format _mesa_texformat_rgba_dxt5;
|
|||||||
extern const struct gl_texture_format _mesa_null_texformat;
|
extern const struct gl_texture_format _mesa_null_texformat;
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
|
||||||
|
#if !NEWTEXSTORE
|
||||||
|
extern GLboolean
|
||||||
|
_mesa_is_hardware_tex_format( const struct gl_texture_format *format );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern const struct gl_texture_format *
|
||||||
|
_mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat,
|
||||||
|
GLenum format, GLenum type );
|
||||||
|
|
||||||
|
extern GLint
|
||||||
|
_mesa_base_compressed_texformat(GLcontext *ctx, GLint intFormat);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1,20 +1,3 @@
|
|||||||
/**
|
|
||||||
* \file texformat_tmp.h
|
|
||||||
* Texel fetch functions template.
|
|
||||||
*
|
|
||||||
* This template file is used by texformat.c to generate texel fetch functions
|
|
||||||
* for 1-D, 2-D and 3-D texture images.
|
|
||||||
*
|
|
||||||
* It should be expanded by definining \p DIM as the number texture dimensions
|
|
||||||
* (1, 2 or 3). According to the value of \p DIM a serie of macros is defined
|
|
||||||
* for the texel lookup in the gl_texture_image::Data.
|
|
||||||
*
|
|
||||||
* \sa texformat.c and FetchTexel.
|
|
||||||
*
|
|
||||||
* \author Gareth Hughes
|
|
||||||
* \author Brian Paul
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mesa 3-D graphics library
|
* Mesa 3-D graphics library
|
||||||
* Version: 6.1
|
* Version: 6.1
|
||||||
@@ -40,6 +23,24 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file texformat_tmp.h
|
||||||
|
* Texel fetch functions template.
|
||||||
|
*
|
||||||
|
* This template file is used by texformat.c to generate texel fetch functions
|
||||||
|
* for 1-D, 2-D and 3-D texture images.
|
||||||
|
*
|
||||||
|
* It should be expanded by defining \p DIM as the number texture dimensions
|
||||||
|
* (1, 2 or 3). According to the value of \p DIM a series of macros is defined
|
||||||
|
* for the texel lookup in the gl_texture_image::Data.
|
||||||
|
*
|
||||||
|
* \sa texformat.c and FetchTexel.
|
||||||
|
*
|
||||||
|
* \author Gareth Hughes
|
||||||
|
* \author Brian Paul
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#if DIM == 1
|
#if DIM == 1
|
||||||
|
|
||||||
#define CHAN_SRC( t, i, j, k, sz ) \
|
#define CHAN_SRC( t, i, j, k, sz ) \
|
||||||
@@ -51,7 +52,7 @@
|
|||||||
#define FLOAT_SRC( t, i, j, k, sz ) \
|
#define FLOAT_SRC( t, i, j, k, sz ) \
|
||||||
((GLfloat *)(t)->Data + (i) * (sz))
|
((GLfloat *)(t)->Data + (i) * (sz))
|
||||||
#define HALF_SRC( t, i, j, k, sz ) \
|
#define HALF_SRC( t, i, j, k, sz ) \
|
||||||
((GLhalfNV *)(t)->Data + (i) * (sz))
|
((GLhalfARB *)(t)->Data + (i) * (sz))
|
||||||
|
|
||||||
#define FETCH(x) fetch_texel_1d_##x
|
#define FETCH(x) fetch_texel_1d_##x
|
||||||
|
|
||||||
@@ -66,7 +67,7 @@
|
|||||||
#define FLOAT_SRC( t, i, j, k, sz ) \
|
#define FLOAT_SRC( t, i, j, k, sz ) \
|
||||||
((GLfloat *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))
|
((GLfloat *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))
|
||||||
#define HALF_SRC( t, i, j, k, sz ) \
|
#define HALF_SRC( t, i, j, k, sz ) \
|
||||||
((GLhalfNV *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))
|
((GLhalfARB *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))
|
||||||
|
|
||||||
#define FETCH(x) fetch_texel_2d_##x
|
#define FETCH(x) fetch_texel_2d_##x
|
||||||
|
|
||||||
@@ -85,7 +86,7 @@
|
|||||||
((GLfloat *)(t)->Data + (((t)->Height * (k) + (j)) * \
|
((GLfloat *)(t)->Data + (((t)->Height * (k) + (j)) * \
|
||||||
(t)->RowStride + (i)) * (sz))
|
(t)->RowStride + (i)) * (sz))
|
||||||
#define HALF_SRC( t, i, j, k, sz ) \
|
#define HALF_SRC( t, i, j, k, sz ) \
|
||||||
((GLhalfNV *)(t)->Data + (((t)->Height * (k) + (j)) * \
|
((GLhalfARB *)(t)->Data + (((t)->Height * (k) + (j)) * \
|
||||||
(t)->RowStride + (i)) * (sz))
|
(t)->RowStride + (i)) * (sz))
|
||||||
|
|
||||||
#define FETCH(x) fetch_texel_3d_##x
|
#define FETCH(x) fetch_texel_3d_##x
|
||||||
@@ -244,9 +245,11 @@ static void FETCH(f_color_index)( const struct gl_texture_image *texImage,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Fetch depth texel from 1D, 2D or 3D DEPTH texture, returning 1 GLfloat */
|
/* Fetch depth texel from 1D, 2D or 3D float32 DEPTH texture,
|
||||||
/* Note: no GLchan version of this function */
|
* returning 1 GLfloat.
|
||||||
static void FETCH(f_depth_component)( const struct gl_texture_image *texImage,
|
* Note: no GLchan version of this function.
|
||||||
|
*/
|
||||||
|
static void FETCH(f_depth_component_f32)( const struct gl_texture_image *texImage,
|
||||||
GLint i, GLint j, GLint k, GLfloat *texel )
|
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||||
{
|
{
|
||||||
const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 );
|
const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 );
|
||||||
@@ -254,6 +257,31 @@ static void FETCH(f_depth_component)( const struct gl_texture_image *texImage,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Fetch depth texel from 1D, 2D or 3D float32 DEPTH texture,
|
||||||
|
* returning 1 GLfloat.
|
||||||
|
* Note: no GLchan version of this function.
|
||||||
|
*/
|
||||||
|
static void FETCH(f_depth_component16)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||||
|
{
|
||||||
|
const GLushort *src = USHORT_SRC( texImage, i, j, k );
|
||||||
|
texel[0] = src[0] * (1.0F / 65535.0F);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D RGBA_FLOAT32 texture,
|
||||||
|
* returning 4 GLchans.
|
||||||
|
*/
|
||||||
|
static void FETCH(rgba_f32)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
|
{
|
||||||
|
const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 4 );
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], src[0]);
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[GCOMP], src[1]);
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[BCOMP], src[2]);
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[ACOMP], src[3]);
|
||||||
|
}
|
||||||
|
|
||||||
/* Fetch color texel from 1D, 2D or 3D RGBA_FLOAT32 texture,
|
/* Fetch color texel from 1D, 2D or 3D RGBA_FLOAT32 texture,
|
||||||
* returning 4 GLfloats.
|
* returning 4 GLfloats.
|
||||||
*/
|
*/
|
||||||
@@ -267,19 +295,44 @@ static void FETCH(f_rgba_f32)( const struct gl_texture_image *texImage,
|
|||||||
texel[ACOMP] = src[3];
|
texel[ACOMP] = src[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D RGBA_FLOAT16 texture,
|
||||||
|
* returning 4 GLchans.
|
||||||
|
*/
|
||||||
|
static void FETCH(rgba_f16)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
|
{
|
||||||
|
const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 4 );
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], _mesa_half_to_float(src[0]));
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[GCOMP], _mesa_half_to_float(src[1]));
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[BCOMP], _mesa_half_to_float(src[2]));
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[ACOMP], _mesa_half_to_float(src[3]));
|
||||||
|
}
|
||||||
|
|
||||||
/* Fetch color texel from 1D, 2D or 3D RGBA_FLOAT16 texture,
|
/* Fetch color texel from 1D, 2D or 3D RGBA_FLOAT16 texture,
|
||||||
* returning 4 GLfloats.
|
* returning 4 GLfloats.
|
||||||
*/
|
*/
|
||||||
static void FETCH(f_rgba_f16)( const struct gl_texture_image *texImage,
|
static void FETCH(f_rgba_f16)( const struct gl_texture_image *texImage,
|
||||||
GLint i, GLint j, GLint k, GLfloat *texel )
|
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||||
{
|
{
|
||||||
const GLhalfNV *src = HALF_SRC( texImage, i, j, k, 4 );
|
const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 4 );
|
||||||
texel[RCOMP] = _mesa_half_to_float(src[0]);
|
texel[RCOMP] = _mesa_half_to_float(src[0]);
|
||||||
texel[GCOMP] = _mesa_half_to_float(src[1]);
|
texel[GCOMP] = _mesa_half_to_float(src[1]);
|
||||||
texel[BCOMP] = _mesa_half_to_float(src[2]);
|
texel[BCOMP] = _mesa_half_to_float(src[2]);
|
||||||
texel[ACOMP] = _mesa_half_to_float(src[3]);
|
texel[ACOMP] = _mesa_half_to_float(src[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D RGB_FLOAT32 texture,
|
||||||
|
* returning 4 GLchans.
|
||||||
|
*/
|
||||||
|
static void FETCH(rgb_f32)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
|
{
|
||||||
|
const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 3 );
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], src[0]);
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[GCOMP], src[1]);
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[BCOMP], src[2]);
|
||||||
|
texel[ACOMP] = CHAN_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
/* Fetch color texel from 1D, 2D or 3D RGB_FLOAT32 texture,
|
/* Fetch color texel from 1D, 2D or 3D RGB_FLOAT32 texture,
|
||||||
* returning 4 GLfloats.
|
* returning 4 GLfloats.
|
||||||
@@ -294,19 +347,240 @@ static void FETCH(f_rgb_f32)( const struct gl_texture_image *texImage,
|
|||||||
texel[ACOMP] = CHAN_MAXF;
|
texel[ACOMP] = CHAN_MAXF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D RGBA_FLOAT16 texture,
|
||||||
|
* returning 4 GLchans.
|
||||||
|
*/
|
||||||
|
static void FETCH(rgb_f16)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
|
{
|
||||||
|
const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 3 );
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], _mesa_half_to_float(src[0]));
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[GCOMP], _mesa_half_to_float(src[1]));
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[BCOMP], _mesa_half_to_float(src[2]));
|
||||||
|
texel[ACOMP] = CHAN_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
/* Fetch color texel from 1D, 2D or 3D RGB_FLOAT16 texture,
|
/* Fetch color texel from 1D, 2D or 3D RGB_FLOAT16 texture,
|
||||||
* returning 4 GLfloats.
|
* returning 4 GLfloats.
|
||||||
*/
|
*/
|
||||||
static void FETCH(f_rgb_f16)( const struct gl_texture_image *texImage,
|
static void FETCH(f_rgb_f16)( const struct gl_texture_image *texImage,
|
||||||
GLint i, GLint j, GLint k, GLfloat *texel )
|
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||||
{
|
{
|
||||||
const GLhalfNV *src = HALF_SRC( texImage, i, j, k, 3 );
|
const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 3 );
|
||||||
texel[RCOMP] = _mesa_half_to_float(src[0]);
|
texel[RCOMP] = _mesa_half_to_float(src[0]);
|
||||||
texel[GCOMP] = _mesa_half_to_float(src[1]);
|
texel[GCOMP] = _mesa_half_to_float(src[1]);
|
||||||
texel[BCOMP] = _mesa_half_to_float(src[2]);
|
texel[BCOMP] = _mesa_half_to_float(src[2]);
|
||||||
texel[ACOMP] = CHAN_MAXF;
|
texel[ACOMP] = CHAN_MAXF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D ALPHA_FLOAT32 texture,
|
||||||
|
* returning 4 GLchans.
|
||||||
|
*/
|
||||||
|
static void FETCH(alpha_f32)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
|
{
|
||||||
|
const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 );
|
||||||
|
texel[RCOMP] =
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] = 0;
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[ACOMP], src[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D ALPHA_FLOAT32 texture,
|
||||||
|
* returning 4 GLfloats.
|
||||||
|
*/
|
||||||
|
static void FETCH(f_alpha_f32)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||||
|
{
|
||||||
|
const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 );
|
||||||
|
texel[RCOMP] =
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] = 0.0F;
|
||||||
|
texel[ACOMP] = src[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D ALPHA_FLOAT16 texture,
|
||||||
|
* returning 4 GLchans.
|
||||||
|
*/
|
||||||
|
static void FETCH(alpha_f16)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
|
{
|
||||||
|
const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 1 );
|
||||||
|
texel[RCOMP] =
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] = 0;
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[ACOMP], _mesa_half_to_float(src[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D ALPHA_FLOAT16 texture,
|
||||||
|
* returning 4 GLfloats.
|
||||||
|
*/
|
||||||
|
static void FETCH(f_alpha_f16)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||||
|
{
|
||||||
|
const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 1 );
|
||||||
|
texel[RCOMP] =
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] = 0.0F;
|
||||||
|
texel[ACOMP] = _mesa_half_to_float(src[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D LUMINANCE_FLOAT32 texture,
|
||||||
|
* returning 4 GLchans.
|
||||||
|
*/
|
||||||
|
static void FETCH(luminance_f32)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
|
{
|
||||||
|
const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 );
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], src[0]);
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] = texel[RCOMP];
|
||||||
|
texel[ACOMP] = CHAN_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D LUMINANCE_FLOAT32 texture,
|
||||||
|
* returning 4 GLfloats.
|
||||||
|
*/
|
||||||
|
static void FETCH(f_luminance_f32)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||||
|
{
|
||||||
|
const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 );
|
||||||
|
texel[RCOMP] =
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] = src[0];
|
||||||
|
texel[ACOMP] = CHAN_MAXF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D LUMINANCE_FLOAT16 texture,
|
||||||
|
* returning 4 GLchans.
|
||||||
|
*/
|
||||||
|
static void FETCH(luminance_f16)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
|
{
|
||||||
|
const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 1 );
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], _mesa_half_to_float(src[0]));
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] = texel[RCOMP];
|
||||||
|
texel[ACOMP] = CHAN_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D LUMINANCE_FLOAT16 texture,
|
||||||
|
* returning 4 GLfloats.
|
||||||
|
*/
|
||||||
|
static void FETCH(f_luminance_f16)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||||
|
{
|
||||||
|
const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 1 );
|
||||||
|
texel[RCOMP] =
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] = _mesa_half_to_float(src[0]);
|
||||||
|
texel[ACOMP] = CHAN_MAXF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D LUMINANCE_ALPHA_FLOAT32 texture,
|
||||||
|
* returning 4 GLchans.
|
||||||
|
*/
|
||||||
|
static void FETCH(luminance_alpha_f32)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
|
{
|
||||||
|
const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 2 );
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], src[0]);
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] = texel[RCOMP];
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[ACOMP], src[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D LUMINANCE_ALPHA_FLOAT32 texture,
|
||||||
|
* returning 4 GLfloats.
|
||||||
|
*/
|
||||||
|
static void FETCH(f_luminance_alpha_f32)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||||
|
{
|
||||||
|
const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 2 );
|
||||||
|
texel[RCOMP] =
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] = src[0];
|
||||||
|
texel[ACOMP] = src[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D LUMINANCE_ALPHA_FLOAT16 texture,
|
||||||
|
* returning 4 GLfloats.
|
||||||
|
*/
|
||||||
|
static void FETCH(luminance_alpha_f16)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
|
{
|
||||||
|
const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 2 );
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], _mesa_half_to_float(src[0]));
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] = texel[RCOMP];
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[ACOMP], _mesa_half_to_float(src[1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D LUMINANCE_ALPHA_FLOAT16 texture,
|
||||||
|
* returning 4 GLfloats.
|
||||||
|
*/
|
||||||
|
static void FETCH(f_luminance_alpha_f16)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||||
|
{
|
||||||
|
const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 2 );
|
||||||
|
texel[RCOMP] =
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] = _mesa_half_to_float(src[0]);
|
||||||
|
texel[ACOMP] = _mesa_half_to_float(src[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D INTENSITY_FLOAT32 texture,
|
||||||
|
* returning 4 GLchans.
|
||||||
|
*/
|
||||||
|
static void FETCH(intensity_f32)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
|
{
|
||||||
|
const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 );
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], src[0]);
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] =
|
||||||
|
texel[ACOMP] = texel[RCOMP];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D INTENSITY_FLOAT32 texture,
|
||||||
|
* returning 4 GLfloats.
|
||||||
|
*/
|
||||||
|
static void FETCH(f_intensity_f32)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||||
|
{
|
||||||
|
const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 );
|
||||||
|
texel[RCOMP] =
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] =
|
||||||
|
texel[ACOMP] = src[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D INTENSITY_FLOAT16 texture,
|
||||||
|
* returning 4 GLchans.
|
||||||
|
*/
|
||||||
|
static void FETCH(intensity_f16)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
|
{
|
||||||
|
const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 1 );
|
||||||
|
UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], _mesa_half_to_float(src[0]));
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] =
|
||||||
|
texel[ACOMP] = texel[RCOMP];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fetch color texel from 1D, 2D or 3D INTENSITY_FLOAT16 texture,
|
||||||
|
* returning 4 GLfloats.
|
||||||
|
*/
|
||||||
|
static void FETCH(f_intensity_f16)( const struct gl_texture_image *texImage,
|
||||||
|
GLint i, GLint j, GLint k, GLfloat *texel )
|
||||||
|
{
|
||||||
|
const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 1 );
|
||||||
|
texel[RCOMP] =
|
||||||
|
texel[GCOMP] =
|
||||||
|
texel[BCOMP] =
|
||||||
|
texel[ACOMP] = _mesa_half_to_float(src[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -510,8 +784,8 @@ static void FETCH(a8)( const struct gl_texture_image *texImage,
|
|||||||
GLint i, GLint j, GLint k, GLchan *texel )
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
{
|
{
|
||||||
const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
|
const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
|
||||||
texel[RCOMP] = 0;
|
texel[RCOMP] =
|
||||||
texel[GCOMP] = 0;
|
texel[GCOMP] =
|
||||||
texel[BCOMP] = 0;
|
texel[BCOMP] = 0;
|
||||||
texel[ACOMP] = UBYTE_TO_CHAN( src[0] );
|
texel[ACOMP] = UBYTE_TO_CHAN( src[0] );
|
||||||
}
|
}
|
||||||
@@ -533,8 +807,8 @@ static void FETCH(l8)( const struct gl_texture_image *texImage,
|
|||||||
GLint i, GLint j, GLint k, GLchan *texel )
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
{
|
{
|
||||||
const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
|
const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
|
||||||
texel[RCOMP] = UBYTE_TO_CHAN( src[0] );
|
texel[RCOMP] =
|
||||||
texel[GCOMP] = UBYTE_TO_CHAN( src[0] );
|
texel[GCOMP] =
|
||||||
texel[BCOMP] = UBYTE_TO_CHAN( src[0] );
|
texel[BCOMP] = UBYTE_TO_CHAN( src[0] );
|
||||||
texel[ACOMP] = CHAN_MAX;
|
texel[ACOMP] = CHAN_MAX;
|
||||||
}
|
}
|
||||||
@@ -556,9 +830,9 @@ static void FETCH(i8)( const struct gl_texture_image *texImage,
|
|||||||
GLint i, GLint j, GLint k, GLchan *texel )
|
GLint i, GLint j, GLint k, GLchan *texel )
|
||||||
{
|
{
|
||||||
const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
|
const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
|
||||||
texel[RCOMP] = UBYTE_TO_CHAN( src[0] );
|
texel[RCOMP] =
|
||||||
texel[GCOMP] = UBYTE_TO_CHAN( src[0] );
|
texel[GCOMP] =
|
||||||
texel[BCOMP] = UBYTE_TO_CHAN( src[0] );
|
texel[BCOMP] =
|
||||||
texel[ACOMP] = UBYTE_TO_CHAN( src[0] );
|
texel[ACOMP] = UBYTE_TO_CHAN( src[0] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -199,6 +199,12 @@ _mesa_base_tex_format( GLcontext *ctx, GLint internalFormat )
|
|||||||
case GL_RGBA12:
|
case GL_RGBA12:
|
||||||
case GL_RGBA16:
|
case GL_RGBA16:
|
||||||
return GL_RGBA;
|
return GL_RGBA;
|
||||||
|
default:
|
||||||
|
; /* fallthrough */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx->Extensions.EXT_paletted_texture) {
|
||||||
|
switch (internalFormat) {
|
||||||
case GL_COLOR_INDEX:
|
case GL_COLOR_INDEX:
|
||||||
case GL_COLOR_INDEX1_EXT:
|
case GL_COLOR_INDEX1_EXT:
|
||||||
case GL_COLOR_INDEX2_EXT:
|
case GL_COLOR_INDEX2_EXT:
|
||||||
@@ -206,96 +212,111 @@ _mesa_base_tex_format( GLcontext *ctx, GLint internalFormat )
|
|||||||
case GL_COLOR_INDEX8_EXT:
|
case GL_COLOR_INDEX8_EXT:
|
||||||
case GL_COLOR_INDEX12_EXT:
|
case GL_COLOR_INDEX12_EXT:
|
||||||
case GL_COLOR_INDEX16_EXT:
|
case GL_COLOR_INDEX16_EXT:
|
||||||
if (ctx->Extensions.EXT_paletted_texture)
|
|
||||||
return GL_COLOR_INDEX;
|
return GL_COLOR_INDEX;
|
||||||
else
|
default:
|
||||||
return -1;
|
; /* fallthrough */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx->Extensions.SGIX_depth_texture) {
|
||||||
|
switch (internalFormat) {
|
||||||
case GL_DEPTH_COMPONENT:
|
case GL_DEPTH_COMPONENT:
|
||||||
case GL_DEPTH_COMPONENT16_SGIX:
|
case GL_DEPTH_COMPONENT16_SGIX:
|
||||||
case GL_DEPTH_COMPONENT24_SGIX:
|
case GL_DEPTH_COMPONENT24_SGIX:
|
||||||
case GL_DEPTH_COMPONENT32_SGIX:
|
case GL_DEPTH_COMPONENT32_SGIX:
|
||||||
if (ctx->Extensions.SGIX_depth_texture)
|
|
||||||
return GL_DEPTH_COMPONENT;
|
return GL_DEPTH_COMPONENT;
|
||||||
else
|
default:
|
||||||
return -1;
|
; /* fallthrough */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* GL_ARB_texture_compression */
|
if (ctx->Extensions.ARB_texture_compression) {
|
||||||
|
switch (internalFormat) {
|
||||||
case GL_COMPRESSED_ALPHA:
|
case GL_COMPRESSED_ALPHA:
|
||||||
if (ctx->Extensions.ARB_texture_compression)
|
|
||||||
return GL_ALPHA;
|
return GL_ALPHA;
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
case GL_COMPRESSED_LUMINANCE:
|
case GL_COMPRESSED_LUMINANCE:
|
||||||
if (ctx->Extensions.ARB_texture_compression)
|
|
||||||
return GL_LUMINANCE;
|
return GL_LUMINANCE;
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
case GL_COMPRESSED_LUMINANCE_ALPHA:
|
case GL_COMPRESSED_LUMINANCE_ALPHA:
|
||||||
if (ctx->Extensions.ARB_texture_compression)
|
|
||||||
return GL_LUMINANCE_ALPHA;
|
return GL_LUMINANCE_ALPHA;
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
case GL_COMPRESSED_INTENSITY:
|
case GL_COMPRESSED_INTENSITY:
|
||||||
if (ctx->Extensions.ARB_texture_compression)
|
|
||||||
return GL_INTENSITY;
|
return GL_INTENSITY;
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
case GL_COMPRESSED_RGB:
|
case GL_COMPRESSED_RGB:
|
||||||
if (ctx->Extensions.ARB_texture_compression)
|
|
||||||
return GL_RGB;
|
return GL_RGB;
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
case GL_COMPRESSED_RGBA:
|
case GL_COMPRESSED_RGBA:
|
||||||
if (ctx->Extensions.ARB_texture_compression)
|
|
||||||
return GL_RGBA;
|
return GL_RGBA;
|
||||||
else
|
default:
|
||||||
return -1;
|
; /* fallthrough */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx->Extensions.TDFX_texture_compression_FXT1) {
|
||||||
|
switch (internalFormat) {
|
||||||
case GL_COMPRESSED_RGB_FXT1_3DFX:
|
case GL_COMPRESSED_RGB_FXT1_3DFX:
|
||||||
if (ctx->Extensions.TDFX_texture_compression_FXT1)
|
|
||||||
return GL_RGB;
|
return GL_RGB;
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
case GL_COMPRESSED_RGBA_FXT1_3DFX:
|
case GL_COMPRESSED_RGBA_FXT1_3DFX:
|
||||||
if (ctx->Extensions.TDFX_texture_compression_FXT1)
|
|
||||||
return GL_RGBA;
|
return GL_RGBA;
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||||||
if (ctx->Extensions.EXT_texture_compression_s3tc)
|
|
||||||
return GL_RGB;
|
return GL_RGB;
|
||||||
else
|
default:
|
||||||
return -1;
|
; /* fallthrough */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx->Extensions.EXT_texture_compression_s3tc) {
|
||||||
|
switch (internalFormat) {
|
||||||
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||||||
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||||||
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||||||
if (ctx->Extensions.EXT_texture_compression_s3tc)
|
|
||||||
return GL_RGBA;
|
return GL_RGBA;
|
||||||
else
|
default:
|
||||||
return -1;
|
; /* fallthrough */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx->Extensions.S3_s3tc) {
|
||||||
|
switch (internalFormat) {
|
||||||
case GL_RGB_S3TC:
|
case GL_RGB_S3TC:
|
||||||
case GL_RGB4_S3TC:
|
case GL_RGB4_S3TC:
|
||||||
if (ctx->Extensions.S3_s3tc)
|
|
||||||
return GL_RGB;
|
return GL_RGB;
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
case GL_RGBA_S3TC:
|
case GL_RGBA_S3TC:
|
||||||
case GL_RGBA4_S3TC:
|
case GL_RGBA4_S3TC:
|
||||||
if (ctx->Extensions.S3_s3tc)
|
|
||||||
return GL_RGBA;
|
return GL_RGBA;
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
case GL_YCBCR_MESA:
|
|
||||||
if (ctx->Extensions.MESA_ycbcr_texture)
|
|
||||||
return GL_YCBCR_MESA;
|
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
/* XXX add float texture formats here */
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return -1; /* error */
|
; /* fallthrough */
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx->Extensions.MESA_ycbcr_texture) {
|
||||||
|
if (internalFormat == GL_YCBCR_MESA)
|
||||||
|
return GL_YCBCR_MESA;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx->Extensions.ARB_texture_float) {
|
||||||
|
switch (internalFormat) {
|
||||||
|
case GL_ALPHA16F_ARB:
|
||||||
|
case GL_ALPHA32F_ARB:
|
||||||
|
return GL_ALPHA;
|
||||||
|
case GL_RGBA16F_ARB:
|
||||||
|
case GL_RGBA32F_ARB:
|
||||||
|
return GL_RGBA;
|
||||||
|
case GL_RGB16F_ARB:
|
||||||
|
case GL_RGB32F_ARB:
|
||||||
|
return GL_RGB;
|
||||||
|
case GL_INTENSITY16F_ARB:
|
||||||
|
case GL_INTENSITY32F_ARB:
|
||||||
|
return GL_INTENSITY;
|
||||||
|
case GL_LUMINANCE16F_ARB:
|
||||||
|
case GL_LUMINANCE32F_ARB:
|
||||||
|
return GL_LUMINANCE;
|
||||||
|
case GL_LUMINANCE_ALPHA16F_ARB:
|
||||||
|
case GL_LUMINANCE_ALPHA32F_ARB:
|
||||||
|
return GL_LUMINANCE_ALPHA;
|
||||||
|
default:
|
||||||
|
; /* nothing */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1; /* error */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -351,7 +372,19 @@ is_color_format(GLenum internalFormat)
|
|||||||
case GL_RGB10_A2:
|
case GL_RGB10_A2:
|
||||||
case GL_RGBA12:
|
case GL_RGBA12:
|
||||||
case GL_RGBA16:
|
case GL_RGBA16:
|
||||||
/* XXX add float texture formats here */
|
/* float texture formats */
|
||||||
|
case GL_ALPHA16F_ARB:
|
||||||
|
case GL_ALPHA32F_ARB:
|
||||||
|
case GL_LUMINANCE16F_ARB:
|
||||||
|
case GL_LUMINANCE32F_ARB:
|
||||||
|
case GL_LUMINANCE_ALPHA16F_ARB:
|
||||||
|
case GL_LUMINANCE_ALPHA32F_ARB:
|
||||||
|
case GL_INTENSITY16F_ARB:
|
||||||
|
case GL_INTENSITY32F_ARB:
|
||||||
|
case GL_RGB16F_ARB:
|
||||||
|
case GL_RGB32F_ARB:
|
||||||
|
case GL_RGBA16F_ARB:
|
||||||
|
case GL_RGBA32F_ARB:
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
case GL_YCBCR_MESA: /* not considered to be RGB */
|
case GL_YCBCR_MESA: /* not considered to be RGB */
|
||||||
default:
|
default:
|
||||||
@@ -1241,7 +1274,7 @@ texture_error_check( GLcontext *ctx, GLenum target,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check incoming image format and type */
|
/* Check incoming image format and type */
|
||||||
if (!_mesa_is_legal_format_and_type(format, type)) {
|
if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||||
/* Yes, generate GL_INVALID_OPERATION, not GL_INVALID_ENUM, if there
|
/* Yes, generate GL_INVALID_OPERATION, not GL_INVALID_ENUM, if there
|
||||||
* is a type/format mismatch. See 1.2 spec page 94, sec 3.6.4.
|
* is a type/format mismatch. See 1.2 spec page 94, sec 3.6.4.
|
||||||
*/
|
*/
|
||||||
@@ -1449,7 +1482,7 @@ subtexture_error_check( GLcontext *ctx, GLuint dimensions,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_mesa_is_legal_format_and_type(format, type)) {
|
if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||||
"glTexSubImage%dD(format or type)", dimensions);
|
"glTexSubImage%dD(format or type)", dimensions);
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
* Mesa 3-D graphics library
|
* Mesa 3-D graphics library
|
||||||
* Version: 6.1
|
* Version: 6.1
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
|
* Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
@@ -1794,6 +1794,70 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* GL_ARB_texture_float */
|
||||||
|
case GL_TEXTURE_RED_TYPE_ARB:
|
||||||
|
if (ctx->Extensions.ARB_texture_float) {
|
||||||
|
*params = img->TexFormat->RedBits ? img->TexFormat->DataType : GL_NONE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||||
|
"glGetTexLevelParameter[if]v(pname)");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
case GL_TEXTURE_GREEN_TYPE_ARB:
|
||||||
|
if (ctx->Extensions.ARB_texture_float) {
|
||||||
|
*params = img->TexFormat->GreenBits ? img->TexFormat->DataType : GL_NONE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||||
|
"glGetTexLevelParameter[if]v(pname)");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
case GL_TEXTURE_BLUE_TYPE_ARB:
|
||||||
|
if (ctx->Extensions.ARB_texture_float) {
|
||||||
|
*params = img->TexFormat->BlueBits ? img->TexFormat->DataType : GL_NONE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||||
|
"glGetTexLevelParameter[if]v(pname)");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
case GL_TEXTURE_ALPHA_TYPE_ARB:
|
||||||
|
if (ctx->Extensions.ARB_texture_float) {
|
||||||
|
*params = img->TexFormat->AlphaBits ? img->TexFormat->DataType : GL_NONE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||||
|
"glGetTexLevelParameter[if]v(pname)");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
case GL_TEXTURE_LUMINANCE_TYPE_ARB:
|
||||||
|
if (ctx->Extensions.ARB_texture_float) {
|
||||||
|
*params = img->TexFormat->LuminanceBits ? img->TexFormat->DataType : GL_NONE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||||
|
"glGetTexLevelParameter[if]v(pname)");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
case GL_TEXTURE_INTENSITY_TYPE_ARB:
|
||||||
|
if (ctx->Extensions.ARB_texture_float) {
|
||||||
|
*params = img->TexFormat->IntensityBits ? img->TexFormat->DataType : GL_NONE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||||
|
"glGetTexLevelParameter[if]v(pname)");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
case GL_TEXTURE_DEPTH_TYPE_ARB:
|
||||||
|
if (ctx->Extensions.ARB_texture_float) {
|
||||||
|
*params = img->TexFormat->DepthBits ? img->TexFormat->DataType : GL_NONE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||||
|
"glGetTexLevelParameter[if]v(pname)");
|
||||||
|
}
|
||||||
|
return;
|
||||||
default:
|
default:
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||||
"glGetTexLevelParameter[if]v(pname)");
|
"glGetTexLevelParameter[if]v(pname)");
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,15 +1,8 @@
|
|||||||
/**
|
|
||||||
* \file texstore.h
|
|
||||||
* Texture image storage.
|
|
||||||
*
|
|
||||||
* \author Brian Paul
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mesa 3-D graphics library
|
* Mesa 3-D graphics library
|
||||||
* Version: 5.1
|
* Version: 6.1
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
|
* Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
@@ -30,12 +23,55 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file texstore.h
|
||||||
|
* Texture image storage routines.
|
||||||
|
*
|
||||||
|
* \author Brian Paul
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef TEXSTORE_H
|
#ifndef TEXSTORE_H
|
||||||
#define TEXSTORE_H
|
#define TEXSTORE_H
|
||||||
|
|
||||||
|
|
||||||
#include "mtypes.h"
|
#include "mtypes.h"
|
||||||
|
|
||||||
|
/*** NEWTEXSTORE ***/
|
||||||
|
|
||||||
|
/* Macro just to save some typing */
|
||||||
|
#define STORE_PARAMS \
|
||||||
|
GLcontext *ctx, GLuint dims, \
|
||||||
|
GLenum baseInternalFormat, \
|
||||||
|
const struct gl_texture_format *dstFormat, \
|
||||||
|
GLvoid *dstAddr, \
|
||||||
|
GLint dstXoffset, GLint dstYoffset, GLint dstZoffset, \
|
||||||
|
GLint dstRowStride, GLint dstImageStride, \
|
||||||
|
GLint srcWidth, GLint srcHeight, GLint srcDepth, \
|
||||||
|
GLenum srcFormat, GLenum srcType, \
|
||||||
|
const GLvoid *srcAddr, \
|
||||||
|
const struct gl_pixelstore_attrib *srcPacking
|
||||||
|
|
||||||
|
|
||||||
|
extern GLboolean _mesa_texstore_rgba(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_color_index(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_depth_component16(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_depth_component_float32(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_rgb565(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_rgba8888(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_argb8888(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_rgb888(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_argb4444(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_argb1555(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_al88(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_rgb332(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_a8(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_ci8(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_ycbcr(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_rgba_float32(STORE_PARAMS);
|
||||||
|
extern GLboolean _mesa_texstore_rgba_float16(STORE_PARAMS);
|
||||||
|
|
||||||
|
#if !NEWTEXSTORE
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
_mesa_transfer_teximage(GLcontext *ctx, GLuint dimensions,
|
_mesa_transfer_teximage(GLcontext *ctx, GLuint dimensions,
|
||||||
@@ -49,6 +85,8 @@ _mesa_transfer_teximage(GLcontext *ctx, GLuint dimensions,
|
|||||||
const GLvoid *srcAddr,
|
const GLvoid *srcAddr,
|
||||||
const struct gl_pixelstore_attrib *srcPacking);
|
const struct gl_pixelstore_attrib *srcPacking);
|
||||||
|
|
||||||
|
#endif /* NEWTEXSTORE */
|
||||||
|
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
_mesa_store_teximage1d(GLcontext *ctx, GLenum target, GLint level,
|
_mesa_store_teximage1d(GLcontext *ctx, GLenum target, GLint level,
|
||||||
|
@@ -46,6 +46,9 @@
|
|||||||
#include "texutil.h"
|
#include "texutil.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if !NEWTEXSTORE
|
||||||
|
|
||||||
|
|
||||||
#define DEBUG_TEXUTIL 0
|
#define DEBUG_TEXUTIL 0
|
||||||
|
|
||||||
|
|
||||||
@@ -1033,3 +1036,5 @@ do { \
|
|||||||
_mesa_problem(NULL,"unexpected bytes/pixel in _mesa_rescale_teximage2d");
|
_mesa_problem(NULL,"unexpected bytes/pixel in _mesa_rescale_teximage2d");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@@ -750,7 +750,7 @@ draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,
|
|||||||
|
|
||||||
INIT_SPAN(span, GL_BITMAP, 0, 0, SPAN_RGBA);
|
INIT_SPAN(span, GL_BITMAP, 0, 0, SPAN_RGBA);
|
||||||
|
|
||||||
if (!_mesa_is_legal_format_and_type(format, type)) {
|
if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM, "glDrawPixels(format or type)");
|
_mesa_error(ctx, GL_INVALID_ENUM, "glDrawPixels(format or type)");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -366,12 +366,18 @@ read_rgba_pixels( GLcontext *ctx,
|
|||||||
case GL_UNSIGNED_INT_2_10_10_10_REV:
|
case GL_UNSIGNED_INT_2_10_10_10_REV:
|
||||||
/* valid pixel type */
|
/* valid pixel type */
|
||||||
break;
|
break;
|
||||||
|
case GL_HALF_FLOAT_ARB:
|
||||||
|
if (!ctx->Extensions.ARB_half_float_pixel) {
|
||||||
|
_mesa_error( ctx, GL_INVALID_ENUM, "glReadPixels(type)" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
_mesa_error( ctx, GL_INVALID_ENUM, "glReadPixels(type)" );
|
_mesa_error( ctx, GL_INVALID_ENUM, "glReadPixels(type)" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_mesa_is_legal_format_and_type(format, type) ||
|
if (!_mesa_is_legal_format_and_type(ctx, format, type) ||
|
||||||
format == GL_INTENSITY) {
|
format == GL_INTENSITY) {
|
||||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(format or type)");
|
_mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(format or type)");
|
||||||
return;
|
return;
|
||||||
|
Reference in New Issue
Block a user