#ifdef MESA_TRACE
#include "GL/gl.h"
#include "tr_context.h"
#include "tr_support.h"
#include "tr_write.h"
#if 0
static void trQueryConvolutionState
( void ) {
if( trCtx
()->trConvolutionWidth
== -1 ) {
/* Query it */
trWriteCMD
( VAR_OOBBEGIN
);
trGetDispatch
()->GetConvolutionParameteriv
( GL_SEPARABLE_2D
, GL_CONVOLUTION_WIDTH
,
&(trCtx
()->trConvolutionWidth
) );
trWriteCMD
( VAR_OOBEND
);
}
if( trCtx
()->trConvolutionHeight
== -1 ) {
/* Query it */
trWriteCMD
( VAR_OOBBEGIN
);
trGetDispatch
()->GetConvolutionParameteriv
( GL_SEPARABLE_2D
, GL_CONVOLUTION_HEIGHT
,
&(trCtx
()->trConvolutionHeight
) );
trWriteCMD
( VAR_OOBEND
);
}
}
#endif
void trZeroGetterData
( GLenum pname
, GLsizei typesize
, GLvoid
* params
) {
switch( pname
) {
case GL_COLOR_MATRIX
:
case GL_MODELVIEW_MATRIX
:
case GL_PROJECTION_MATRIX
:
case GL_TEXTURE_MATRIX
:
memset( params
, 0, typesize
* 16 );
break;
case GL_ACCUM_CLEAR_VALUE
:
case GL_BLEND_COLOR
:
case GL_COLOR_CLEAR_VALUE
:
case GL_COLOR_WRITEMASK
:
case GL_CURRENT_COLOR
:
case GL_CURRENT_RASTER_COLOR
:
case GL_CURRENT_RASTER_POSITION
:
case GL_CURRENT_RASTER_TEXTURE_COORDS
:
case GL_CURRENT_TEXTURE_COORDS
:
case GL_LIGHT_MODEL_AMBIENT
:
case GL_MAP2_GRID_DOMAIN
:
case GL_SCISSOR_BOX
:
case GL_VIEWPORT
:
memset( params
, 0, typesize
* 4 );
break;
case GL_CURRENT_NORMAL
:
memset( params
, 0, typesize
* 3 );
break;
case GL_ALIASED_POINT_SIZE_RANGE
:
case GL_ALIASED_LINE_WIDTH_RANGE
:
case GL_DEPTH_RANGE
:
case GL_MAP1_GRID_DOMAIN
:
case GL_MAP2_GRID_SEGMENTS
:
case GL_MAX_VIEWPORT_DIMS
:
case GL_POLYGON_MODE
:
case GL_SMOOTH_LINE_WIDTH_RANGE
:
case GL_SMOOTH_POINT_SIZE_RANGE
:
memset( params
, 0, typesize
* 2 );
break;
case GL_ACCUM_ALPHA_BITS
:
case GL_ACCUM_BLUE_BITS
:
case GL_ACCUM_GREEN_BITS
:
case GL_ACCUM_RED_BITS
:
case GL_ACTIVE_TEXTURE_ARB
:
case GL_ALPHA_BIAS
:
case GL_ALPHA_BITS
:
case GL_ALPHA_SCALE
:
case GL_ALPHA_TEST
:
case GL_ALPHA_TEST_FUNC
:
case GL_ALPHA_TEST_REF
:
case GL_ATTRIB_STACK_DEPTH
:
case GL_AUTO_NORMAL
:
case GL_AUX_BUFFERS
:
case GL_BLEND
:
case GL_BLEND_SRC
:
case GL_BLUE_BIAS
:
case GL_BLUE_BITS
:
case GL_BLUE_SCALE
:
case GL_CLIENT_ACTIVE_TEXTURE_ARB
:
case GL_CLIENT_ATTRIB_STACK_DEPTH
:
case GL_CLIP_PLANE0
:
case GL_CLIP_PLANE1
:
case GL_CLIP_PLANE2
:
case GL_CLIP_PLANE3
:
case GL_CLIP_PLANE4
:
case GL_CLIP_PLANE5
:
case GL_COLOR_ARRAY
:
case GL_COLOR_ARRAY_SIZE
:
case GL_COLOR_ARRAY_STRIDE
:
case GL_COLOR_ARRAY_TYPE
:
case GL_COLOR_LOGIC_OP
:
case GL_COLOR_MATERIAL
:
case GL_COLOR_MATERIAL_FACE
:
case GL_COLOR_MATERIAL_PARAMETER
:
case GL_COLOR_MATRIX_STACK_DEPTH
:
case GL_COLOR_TABLE
:
case GL_CONVOLUTION_1D
:
case GL_CONVOLUTION_2D
:
case GL_CULL_FACE
:
case GL_CULL_FACE_MODE
:
case GL_CURRENT_INDEX
:
case GL_CURRENT_RASTER_DISTANCE
:
case GL_CURRENT_RASTER_INDEX
:
case GL_CURRENT_RASTER_POSITION_VALID
:
case GL_DEPTH_BIAS
:
case GL_DEPTH_CLEAR_VALUE
:
case GL_DEPTH_FUNC
:
case GL_DEPTH_SCALE
:
case GL_DEPTH_TEST
:
case GL_DEPTH_WRITEMASK
:
case GL_DITHER
:
case GL_DOUBLEBUFFER
:
case GL_DRAW_BUFFER
:
case GL_EDGE_FLAG
:
case GL_EDGE_FLAG_ARRAY
:
case GL_EDGE_FLAG_ARRAY_STRIDE
:
case GL_FEEDBACK_BUFFER_SIZE
:
case GL_FEEDBACK_BUFFER_TYPE
:
case GL_FOG
:
case GL_FOG_DENSITY
:
case GL_FOG_END
:
case GL_FOG_HINT
:
case GL_FOG_INDEX
:
case GL_FOG_MODE
:
case GL_FOG_START
:
case GL_FRONT_FACE
:
case GL_GREEN_BIAS
:
case GL_GREEN_BITS
:
case GL_GREEN_SCALE
:
case GL_HISTOGRAM
:
case GL_INDEX_ARRAY
:
case GL_INDEX_ARRAY_STRIDE
:
case GL_INDEX_ARRAY_TYPE
:
case GL_INDEX_BITS
:
case GL_INDEX_CLEAR_VALUE
:
case GL_INDEX_LOGIC_OP
:
case GL_INDEX_MODE
:
case GL_INDEX_OFFSET
:
case GL_INDEX_SHIFT
:
case GL_INDEX_WRITEMASK
:
case GL_LIGHT0
:
case GL_LIGHT1
:
case GL_LIGHT2
:
case GL_LIGHT3
:
case GL_LIGHT4
:
case GL_LIGHT5
:
case GL_LIGHT6
:
case GL_LIGHT7
:
case GL_LIGHTING
:
case GL_LIGHT_MODEL_COLOR_CONTROL
:
case GL_LIGHT_MODEL_LOCAL_VIEWER
:
case GL_LIGHT_MODEL_TWO_SIDE
:
case GL_LINE_SMOOTH
:
case GL_LINE_SMOOTH_HINT
:
case GL_LINE_STIPPLE
:
case GL_LINE_STIPPLE_PATTERN
:
case GL_LINE_STIPPLE_REPEAT
:
case GL_LINE_WIDTH
:
case GL_LIST_BASE
:
case GL_LIST_INDEX
:
case GL_LIST_MODE
:
case GL_LOGIC_OP_MODE
:
case GL_MAP1_COLOR_4
:
case GL_MAP1_GRID_SEGMENTS
:
case GL_MAP1_INDEX
:
case GL_MAP1_NORMAL
:
case GL_MAP1_TEXTURE_COORD_1
:
case GL_MAP1_TEXTURE_COORD_2
:
case GL_MAP1_TEXTURE_COORD_3
:
case GL_MAP1_TEXTURE_COORD_4
:
case GL_MAP1_VERTEX_3
:
case GL_MAP1_VERTEX_4
:
case GL_MAP2_COLOR_4
:
case GL_MAP2_INDEX
:
case GL_MAP2_NORMAL
:
case GL_MAP2_TEXTURE_COORD_1
:
case GL_MAP2_TEXTURE_COORD_2
:
case GL_MAP2_TEXTURE_COORD_3
:
case GL_MAP2_TEXTURE_COORD_4
:
case GL_MAP2_VERTEX_3
:
case GL_MAP2_VERTEX_4
:
case GL_MAP_COLOR
:
case GL_MAP_STENCIL
:
case GL_MATRIX_MODE
:
case GL_MAX_3D_TEXTURE_SIZE
:
case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
:
case GL_MAX_ATTRIB_STACK_DEPTH
:
case GL_MAX_CLIP_PLANES
:
case GL_MAX_COLOR_MATRIX_STACK_DEPTH
:
case GL_MAX_ELEMENTS_VERTICES
:
case GL_MAX_EVAL_ORDER
:
case GL_MAX_LIGHTS
:
case GL_MAX_LIST_NESTING
:
case GL_MAX_MODELVIEW_STACK_DEPTH
:
case GL_MAX_NAME_STACK_DEPTH
:
case GL_MAX_PIXEL_MAP_TABLE
:
case GL_MAX_PROJECTION_STACK_DEPTH
:
case GL_MAX_TEXTURE_SIZE
:
case GL_MAX_TEXTURE_STACK_DEPTH
:
case GL_MAX_TEXTURE_UNITS_ARB
:
case GL_MINMAX
:
case GL_MODELVIEW_STACK_DEPTH
:
case GL_NAME_STACK_DEPTH
:
case GL_NORMAL_ARRAY
:
case GL_NORMAL_ARRAY_STRIDE
:
case GL_NORMAL_ARRAY_TYPE
:
case GL_NORMALIZE
:
case GL_PACK_ALIGNMENT
:
case GL_PACK_IMAGE_HEIGHT
:
case GL_PACK_LSB_FIRST
:
case GL_PACK_ROW_LENGTH
:
case GL_PACK_SKIP_IMAGES
:
case GL_PACK_SKIP_PIXELS
:
case GL_PACK_SKIP_ROWS
:
case GL_PACK_SWAP_BYTES
:
case GL_PERSPECTIVE_CORRECTION_HINT
:
case GL_PIXEL_MAP_A_TO_A_SIZE
:
case GL_PIXEL_MAP_B_TO_B_SIZE
:
case GL_PIXEL_MAP_G_TO_G_SIZE
:
case GL_PIXEL_MAP_I_TO_A_SIZE
:
case GL_PIXEL_MAP_I_TO_B_SIZE
:
case GL_PIXEL_MAP_I_TO_G_SIZE
:
case GL_PIXEL_MAP_I_TO_I_SIZE
:
case GL_PIXEL_MAP_I_TO_R_SIZE
:
case GL_PIXEL_MAP_R_TO_R_SIZE
:
case GL_PIXEL_MAP_S_TO_S_SIZE
:
case GL_POINT_SIZE
:
case GL_POINT_SMOOTH
:
case GL_POINT_SMOOTH_HINT
:
case GL_POLYGON_OFFSET_FACTOR
:
case GL_POLYGON_OFFSET_UNITS
:
case GL_POLYGON_OFFSET_FILL
:
case GL_POLYGON_OFFSET_LINE
:
case GL_POLYGON_OFFSET_POINT
:
case GL_POLYGON_SMOOTH
:
case GL_POLYGON_SMOOTH_HINT
:
case GL_POLYGON_STIPPLE
:
case GL_POST_COLOR_MATRIX_COLOR_TABLE
:
case GL_POST_COLOR_MATRIX_RED_BIAS
:
case GL_POST_COLOR_MATRIX_GREEN_BIAS
:
case GL_POST_COLOR_MATRIX_BLUE_BIAS
:
case GL_POST_COLOR_MATRIX_ALPHA_BIAS
:
case GL_POST_COLOR_MATRIX_RED_SCALE
:
case GL_POST_COLOR_MATRIX_GREEN_SCALE
:
case GL_POST_COLOR_MATRIX_BLUE_SCALE
:
case GL_POST_COLOR_MATRIX_ALPHA_SCALE
:
case GL_POST_CONVOLUTION_COLOR_TABLE
:
case GL_POST_CONVOLUTION_RED_BIAS
:
case GL_POST_CONVOLUTION_GREEN_BIAS
:
case GL_POST_CONVOLUTION_BLUE_BIAS
:
case GL_POST_CONVOLUTION_ALPHA_BIAS
:
case GL_POST_CONVOLUTION_RED_SCALE
:
case GL_POST_CONVOLUTION_GREEN_SCALE
:
case GL_POST_CONVOLUTION_BLUE_SCALE
:
case GL_POST_CONVOLUTION_ALPHA_SCALE
:
case GL_PROJECTION_STACK_DEPTH
:
case GL_READ_BUFFER
:
case GL_RED_BIAS
:
case GL_RED_BITS
:
case GL_RED_SCALE
:
case GL_RENDER_MODE
:
case GL_RESCALE_NORMAL
:
case GL_RGBA_MODE
:
case GL_SCISSOR_TEST
:
case GL_SELECTION_BUFFER_SIZE
:
case GL_SEPARABLE_2D
:
case GL_SHADE_MODEL
:
case GL_SMOOTH_LINE_WIDTH_GRANULARITY
:
case GL_SMOOTH_POINT_SIZE_GRANULARITY
:
case GL_STENCIL_BITS
:
case GL_STENCIL_CLEAR_VALUE
:
case GL_STENCIL_FAIL
:
case GL_STENCIL_FUNC
:
case GL_STENCIL_PASS_DEPTH_FAIL
:
case GL_STENCIL_PASS_DEPTH_PASS
:
case GL_STENCIL_REF
:
case GL_STENCIL_TEST
:
case GL_STENCIL_VALUE_MASK
:
case GL_STENCIL_WRITEMASK
:
case GL_STEREO
:
case GL_SUBPIXEL_BITS
:
case GL_TEXTURE_1D
:
case GL_TEXTURE_BINDING_1D
:
case GL_TEXTURE_2D
:
case GL_TEXTURE_BINDING_2D
:
case GL_TEXTURE_3D
:
case GL_TEXTURE_BINDING_3D
:
case GL_TEXTURE_COORD_ARRAY
:
case GL_TEXTURE_COORD_ARRAY_SIZE
:
case GL_TEXTURE_COORD_ARRAY_STRIDE
:
case GL_TEXTURE_COORD_ARRAY_TYPE
:
case GL_TEXTURE_GEN_Q
:
case GL_TEXTURE_GEN_R
:
case GL_TEXTURE_GEN_S
:
case GL_TEXTURE_GEN_T
:
case GL_TEXTURE_STACK_DEPTH
:
case GL_UNPACK_ALIGNMENT
:
case GL_UNPACK_IMAGE_HEIGHT
:
case GL_UNPACK_LSB_FIRST
:
case GL_UNPACK_ROW_LENGTH
:
case GL_UNPACK_SKIP_IMAGES
:
case GL_UNPACK_SKIP_PIXELS
:
case GL_UNPACK_SKIP_ROWS
:
case GL_UNPACK_SWAP_BYTES
:
case GL_VERTEX_ARRAY
:
case GL_VERTEX_ARRAY_SIZE
:
case GL_VERTEX_ARRAY_STRIDE
:
case GL_VERTEX_ARRAY_TYPE
:
case GL_ZOOM_X
:
case GL_ZOOM_Y
:
memset( params
, 0, typesize
);
break;
default:
/* Bad enum. What should we do? */
break;
}
}
void trPrintColorTableData
( GLenum pname
, GLenum type
, GLvoid
* params
) {
if( !(trCtx
()->doExec
) ) {
switch( pname
) {
case GL_COLOR_TABLE_SCALE
:
case GL_COLOR_TABLE_BIAS
:
if( type
== GL_FLOAT
) {
memset( params
, 0, 4 * sizeof(GLfloat
) );
} else {
memset( params
, 0, 4 * sizeof(GLint
) );
}
break;
case GL_COLOR_TABLE_FORMAT
:
case GL_COLOR_TABLE_WIDTH
:
case GL_COLOR_TABLE_RED_SIZE
:
case GL_COLOR_TABLE_GREEN_SIZE
:
case GL_COLOR_TABLE_BLUE_SIZE
:
case GL_COLOR_TABLE_ALPHA_SIZE
:
case GL_COLOR_TABLE_LUMINANCE_SIZE
:
case GL_COLOR_TABLE_INTENSITY_SIZE
:
if( type
== GL_FLOAT
) {
((GLfloat
*)params
)[0] = 0.0;
} else {
((GLint
*)params
)[0] = 0;
}
break;
default:
/* The 2nd pass should catch this */
break;
}
}
switch( pname
) {
case GL_COLOR_TABLE_SCALE
:
case GL_COLOR_TABLE_BIAS
:
if( type
== GL_FLOAT
) {
trWriteArrayf
( 4, (GLfloat
*)params
);
} else {
trWriteArrayi
( 4, (GLint
*)params
);
}
break;
case GL_COLOR_TABLE_FORMAT
:
case GL_COLOR_TABLE_WIDTH
:
case GL_COLOR_TABLE_RED_SIZE
:
case GL_COLOR_TABLE_GREEN_SIZE
:
case GL_COLOR_TABLE_BLUE_SIZE
:
case GL_COLOR_TABLE_ALPHA_SIZE
:
case GL_COLOR_TABLE_LUMINANCE_SIZE
:
case GL_COLOR_TABLE_INTENSITY_SIZE
:
if( type
== GL_FLOAT
) {
trWritef
( ((GLfloat
*)params
)[0] );
} else {
trWritei
( ((GLint
*)params
)[0] );
}
break;
default:
/* The 2nd pass should catch this */
break;
}
}
void trWriteTypeArray
( GLenum type
, GLsizei width
, GLsizei pixelsize
, GLint start
, const GLvoid
* ptr
) {
switch( type
) {
case GL_BYTE
:
{
GLbyte
* p
= (GLbyte
*)ptr
+ start
* pixelsize
;
trWriteArrayb
( width
* pixelsize
, p
);
}
break;
case GL_UNSIGNED_BYTE
:
case GL_UNSIGNED_BYTE_3_3_2
:
case GL_UNSIGNED_BYTE_2_3_3_REV
:
{
GLubyte
* p
= (GLubyte
*)ptr
+ start
* pixelsize
;
trWriteArrayub
( width
* pixelsize
, p
);
}
break;
case GL_SHORT
:
{
GLshort
* p
= (GLshort
*)ptr
+ start
* pixelsize
;
trWriteArrays
( width
* pixelsize
, p
);
}
break;
case GL_UNSIGNED_SHORT
:
case GL_UNSIGNED_SHORT_5_6_5
:
case GL_UNSIGNED_SHORT_5_6_5_REV
:
case GL_UNSIGNED_SHORT_4_4_4_4
:
case GL_UNSIGNED_SHORT_4_4_4_4_REV
:
case GL_UNSIGNED_SHORT_5_5_5_1
:
case GL_UNSIGNED_SHORT_1_5_5_5_REV
:
{
GLushort
* p
= (GLushort
*)ptr
+ start
* pixelsize
;
trWriteArrayus
( width
* pixelsize
, p
);
}
break;
case GL_INT
:
{
GLint
* p
= (GLint
*)ptr
+ start
* pixelsize
;
trWriteArrayi
( width
* pixelsize
, p
);
}
break;
case GL_UNSIGNED_INT
:
case GL_UNSIGNED_INT_8_8_8_8
:
case GL_UNSIGNED_INT_8_8_8_8_REV
:
case GL_UNSIGNED_INT_10_10_10_2
:
case GL_UNSIGNED_INT_2_10_10_10_REV
:
{
GLuint
* p
= (GLuint
*)ptr
+ start
* pixelsize
;
trWriteArrayui
( width
* pixelsize
, p
);
}
break;
case GL_FLOAT
:
{
GLfloat
* p
= (GLfloat
*)ptr
+ start
* pixelsize
;
trWriteArrayf
( width
* pixelsize
, p
);
}
break;
default:
/* The 2nd pass should catch this. */
break;
}
}
static GLint trGetFormatSize
( GLenum format
) {
GLint pixelsize
;
switch( format
) {
case GL_RED
:
case GL_GREEN
:
case GL_BLUE
:
case GL_ALPHA
:
case GL_LUMINANCE
:
case GL_INTENSITY
:
case GL_COLOR_INDEX
:
case GL_STENCIL_INDEX
:
case GL_DEPTH_COMPONENT
:
pixelsize
= 1;
break;
case GL_LUMINANCE_ALPHA
:
pixelsize
= 2;
break;
case GL_RGB
:
case GL_BGR
:
pixelsize
= 3;
break;
case GL_RGBA
:
case GL_BGRA
:
pixelsize
= 4;
break;
default:
/* The 2nd pass should catch this. */
pixelsize
= 0;
break;
}
return pixelsize
;
}
GLint trGetPixelSize
( GLenum format
, GLenum type
) {
GLint retval
;
GLint formatsize
= trGetFormatSize
( format
);
switch( type
) {
case GL_BYTE
:
case GL_UNSIGNED_BYTE
:
retval
= formatsize
* sizeof(GLubyte
);
break;
case GL_UNSIGNED_BYTE_3_3_2
:
case GL_UNSIGNED_BYTE_2_3_3_REV
:
if( (type
== GL_RGB
) || (type
== GL_BGR
) ) {
retval
= sizeof(GLubyte
);
} else {
retval
= -1;
}
break;
case GL_SHORT
:
case GL_UNSIGNED_SHORT
:
retval
= sizeof(GLushort
);
break;
case GL_UNSIGNED_SHORT_5_6_5
:
case GL_UNSIGNED_SHORT_5_6_5_REV
:
if( (type
== GL_RGB
) || (type
== GL_BGR
) ) {
retval
= sizeof(GLushort
);
} else {
retval
= -1;
}
break;
case GL_UNSIGNED_SHORT_4_4_4_4
:
case GL_UNSIGNED_SHORT_4_4_4_4_REV
:
case GL_UNSIGNED_SHORT_5_5_5_1
:
case GL_UNSIGNED_SHORT_1_5_5_5_REV
:
if( (type
== GL_RGBA
) || (type
== GL_BGRA
) ) {
retval
= sizeof(GLushort
);
} else {
retval
= -1;
}
break;
case GL_INT
:
case GL_UNSIGNED_INT
:
retval
= sizeof(GLuint
);
break;
case GL_UNSIGNED_INT_8_8_8_8
:
case GL_UNSIGNED_INT_8_8_8_8_REV
:
case GL_UNSIGNED_INT_10_10_10_2
:
case GL_UNSIGNED_INT_2_10_10_10_REV
:
if( (type
== GL_RGBA
) || (type
== GL_BGRA
) ) {
retval
= sizeof(GLuint
);
} else {
retval
= -1;
}
break;
case GL_FLOAT
:
retval
= sizeof(GLfloat
);
break;
default:
retval
= -1;
break;
}
return retval
;
}
#else
extern void tr_support_dummy_func
(void);
void tr_support_dummy_func
(void)
{
}
#endif