Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Joshua Ashton
mesa
Commits
ae27f9a6
Commit
ae27f9a6
authored
Jun 03, 2004
by
Keith Whitwell
Browse files
Fix problems when sizeof(Node) != sizeof(float)
parent
80704437
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/mesa/main/dlist.c
View file @
ae27f9a6
...
...
@@ -618,11 +618,7 @@ static GLuint translate_id( GLsizei n, GLenum type, const GLvoid *list )
/***** Public *****/
/**********************************************************************/
/**
* Do one-time initialiazations for display lists.
*/
void
_mesa_init_lists
(
void
)
void
_mesa_init_lists
(
void
)
{
static
int
init_flag
=
0
;
...
...
@@ -793,32 +789,6 @@ _mesa_init_lists( void )
}
/**
* Wrapper for _mesa_unpack_image() that handles pixel buffer objects.
* \todo This won't suffice when the PBO is really in VRAM/GPU memory.
*/
static
GLvoid
*
unpack_image
(
GLsizei
width
,
GLsizei
height
,
GLsizei
depth
,
GLenum
format
,
GLenum
type
,
const
GLvoid
*
pixels
,
const
struct
gl_pixelstore_attrib
*
unpack
)
{
if
(
unpack
->
BufferObj
->
Name
==
0
)
{
/* no PBO */
return
_mesa_unpack_image
(
width
,
height
,
depth
,
format
,
type
,
pixels
,
unpack
);
}
else
if
(
_mesa_validate_pbo_access
(
unpack
,
width
,
height
,
depth
,
format
,
type
,
pixels
))
{
const
GLubyte
*
src
=
ADD_POINTERS
(
unpack
->
BufferObj
->
Data
,
pixels
);
return
_mesa_unpack_image
(
width
,
height
,
depth
,
format
,
type
,
src
,
unpack
);
}
/* bad access! */
return
NULL
;
}
/*
* Allocate space for a display list instruction.
* \param opcode - type of instruction
...
...
@@ -1285,8 +1255,8 @@ static void GLAPIENTRY save_ColorTable( GLenum target, GLenum internalFormat,
format
,
type
,
table
);
}
else
{
GLvoid
*
image
=
unpack_image
(
width
,
1
,
1
,
format
,
type
,
table
,
&
ctx
->
Unpack
);
GLvoid
*
image
=
_mesa_
unpack_image
(
width
,
1
,
1
,
format
,
type
,
table
,
&
ctx
->
Unpack
);
Node
*
n
;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH
(
ctx
);
n
=
ALLOC_INSTRUCTION
(
ctx
,
OPCODE_COLOR_TABLE
,
6
);
...
...
@@ -1374,8 +1344,8 @@ static void GLAPIENTRY save_ColorSubTable( GLenum target, GLsizei start, GLsizei
const
GLvoid
*
table
)
{
GET_CURRENT_CONTEXT
(
ctx
);
GLvoid
*
image
=
unpack_image
(
count
,
1
,
1
,
format
,
type
,
table
,
&
ctx
->
Unpack
);
GLvoid
*
image
=
_mesa_
unpack_image
(
count
,
1
,
1
,
format
,
type
,
table
,
&
ctx
->
Unpack
);
Node
*
n
;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH
(
ctx
);
n
=
ALLOC_INSTRUCTION
(
ctx
,
OPCODE_COLOR_SUB_TABLE
,
6
);
...
...
@@ -1445,8 +1415,8 @@ save_ConvolutionFilter1D(GLenum target, GLenum internalFormat, GLsizei width,
GLenum
format
,
GLenum
type
,
const
GLvoid
*
filter
)
{
GET_CURRENT_CONTEXT
(
ctx
);
GLvoid
*
image
=
unpack_image
(
width
,
1
,
1
,
format
,
type
,
filter
,
&
ctx
->
Unpack
);
GLvoid
*
image
=
_mesa_
unpack_image
(
width
,
1
,
1
,
format
,
type
,
filter
,
&
ctx
->
Unpack
);
Node
*
n
;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH
(
ctx
);
n
=
ALLOC_INSTRUCTION
(
ctx
,
OPCODE_CONVOLUTION_FILTER_1D
,
6
);
...
...
@@ -1474,8 +1444,8 @@ save_ConvolutionFilter2D(GLenum target, GLenum internalFormat,
GLenum
type
,
const
GLvoid
*
filter
)
{
GET_CURRENT_CONTEXT
(
ctx
);
GLvoid
*
image
=
unpack_image
(
width
,
height
,
1
,
format
,
type
,
filter
,
&
ctx
->
Unpack
);
GLvoid
*
image
=
_mesa_
unpack_image
(
width
,
height
,
1
,
format
,
type
,
filter
,
&
ctx
->
Unpack
);
Node
*
n
;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH
(
ctx
);
n
=
ALLOC_INSTRUCTION
(
ctx
,
OPCODE_CONVOLUTION_FILTER_2D
,
7
);
...
...
@@ -1839,8 +1809,8 @@ static void GLAPIENTRY save_DrawPixels( GLsizei width, GLsizei height,
const
GLvoid
*
pixels
)
{
GET_CURRENT_CONTEXT
(
ctx
);
GLvoid
*
image
=
unpack_image
(
width
,
height
,
1
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
GLvoid
*
image
=
_mesa_
unpack_image
(
width
,
height
,
1
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
Node
*
n
;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH
(
ctx
);
n
=
ALLOC_INSTRUCTION
(
ctx
,
OPCODE_DRAW_PIXELS
,
5
);
...
...
@@ -3395,8 +3365,8 @@ static void GLAPIENTRY save_TexImage1D( GLenum target,
border
,
format
,
type
,
pixels
);
}
else
{
GLvoid
*
image
=
unpack_image
(
width
,
1
,
1
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
GLvoid
*
image
=
_mesa_
unpack_image
(
width
,
1
,
1
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
Node
*
n
;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH
(
ctx
);
n
=
ALLOC_INSTRUCTION
(
ctx
,
OPCODE_TEX_IMAGE1D
,
8
);
...
...
@@ -3434,8 +3404,8 @@ static void GLAPIENTRY save_TexImage2D( GLenum target,
height
,
border
,
format
,
type
,
pixels
);
}
else
{
GLvoid
*
image
=
unpack_image
(
width
,
height
,
1
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
GLvoid
*
image
=
_mesa_
unpack_image
(
width
,
height
,
1
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
Node
*
n
;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH
(
ctx
);
n
=
ALLOC_INSTRUCTION
(
ctx
,
OPCODE_TEX_IMAGE2D
,
9
);
...
...
@@ -3476,8 +3446,8 @@ static void GLAPIENTRY save_TexImage3D( GLenum target,
}
else
{
Node
*
n
;
GLvoid
*
image
=
unpack_image
(
width
,
height
,
depth
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
GLvoid
*
image
=
_mesa_
unpack_image
(
width
,
height
,
depth
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH
(
ctx
);
n
=
ALLOC_INSTRUCTION
(
ctx
,
OPCODE_TEX_IMAGE3D
,
10
);
if
(
n
)
{
...
...
@@ -3509,8 +3479,8 @@ static void GLAPIENTRY save_TexSubImage1D( GLenum target, GLint level, GLint xof
{
GET_CURRENT_CONTEXT
(
ctx
);
Node
*
n
;
GLvoid
*
image
=
unpack_image
(
width
,
1
,
1
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
GLvoid
*
image
=
_mesa_
unpack_image
(
width
,
1
,
1
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH
(
ctx
);
n
=
ALLOC_INSTRUCTION
(
ctx
,
OPCODE_TEX_SUB_IMAGE1D
,
7
);
if
(
n
)
{
...
...
@@ -3540,8 +3510,8 @@ static void GLAPIENTRY save_TexSubImage2D( GLenum target, GLint level,
{
GET_CURRENT_CONTEXT
(
ctx
);
Node
*
n
;
GLvoid
*
image
=
unpack_image
(
width
,
height
,
1
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
GLvoid
*
image
=
_mesa_
unpack_image
(
width
,
height
,
1
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH
(
ctx
);
n
=
ALLOC_INSTRUCTION
(
ctx
,
OPCODE_TEX_SUB_IMAGE2D
,
9
);
if
(
n
)
{
...
...
@@ -3573,8 +3543,8 @@ static void GLAPIENTRY save_TexSubImage3D( GLenum target, GLint level,
{
GET_CURRENT_CONTEXT
(
ctx
);
Node
*
n
;
GLvoid
*
image
=
unpack_image
(
width
,
height
,
depth
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
GLvoid
*
image
=
_mesa_
unpack_image
(
width
,
height
,
depth
,
format
,
type
,
pixels
,
&
ctx
->
Unpack
);
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH
(
ctx
);
n
=
ALLOC_INSTRUCTION
(
ctx
,
OPCODE_TEX_SUB_IMAGE3D
,
11
);
if
(
n
)
{
...
...
@@ -5313,8 +5283,8 @@ execute_list( GLcontext *ctx, GLuint list )
break
;
case
OPCODE_BITMAP
:
{
const
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
ctx
->
DefaultP
acking
;
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
_mesa_native_p
acking
;
(
*
ctx
->
Exec
->
Bitmap
)(
(
GLsizei
)
n
[
1
].
i
,
(
GLsizei
)
n
[
2
].
i
,
n
[
3
].
f
,
n
[
4
].
f
,
n
[
5
].
f
,
n
[
6
].
f
,
(
const
GLubyte
*
)
n
[
7
].
data
);
ctx
->
Unpack
=
save
;
/* restore */
...
...
@@ -5384,8 +5354,8 @@ execute_list( GLcontext *ctx, GLuint list )
break
;
case
OPCODE_COLOR_TABLE
:
{
const
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
ctx
->
DefaultP
acking
;
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
_mesa_native_p
acking
;
(
*
ctx
->
Exec
->
ColorTable
)(
n
[
1
].
e
,
n
[
2
].
e
,
n
[
3
].
i
,
n
[
4
].
e
,
n
[
5
].
e
,
n
[
6
].
data
);
ctx
->
Unpack
=
save
;
/* restore */
...
...
@@ -5413,8 +5383,8 @@ execute_list( GLcontext *ctx, GLuint list )
break
;
case
OPCODE_COLOR_SUB_TABLE
:
{
const
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
ctx
->
DefaultP
acking
;
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
_mesa_native_p
acking
;
(
*
ctx
->
Exec
->
ColorSubTable
)(
n
[
1
].
e
,
n
[
2
].
i
,
n
[
3
].
i
,
n
[
4
].
e
,
n
[
5
].
e
,
n
[
6
].
data
);
ctx
->
Unpack
=
save
;
/* restore */
...
...
@@ -5422,8 +5392,8 @@ execute_list( GLcontext *ctx, GLuint list )
break
;
case
OPCODE_CONVOLUTION_FILTER_1D
:
{
const
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
ctx
->
DefaultP
acking
;
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
_mesa_native_p
acking
;
(
*
ctx
->
Exec
->
ConvolutionFilter1D
)(
n
[
1
].
e
,
n
[
2
].
i
,
n
[
3
].
i
,
n
[
4
].
e
,
n
[
5
].
e
,
n
[
6
].
data
);
ctx
->
Unpack
=
save
;
/* restore */
...
...
@@ -5431,8 +5401,8 @@ execute_list( GLcontext *ctx, GLuint list )
break
;
case
OPCODE_CONVOLUTION_FILTER_2D
:
{
const
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
ctx
->
DefaultP
acking
;
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
_mesa_native_p
acking
;
(
*
ctx
->
Exec
->
ConvolutionFilter2D
)(
n
[
1
].
e
,
n
[
2
].
i
,
n
[
3
].
i
,
n
[
4
].
i
,
n
[
5
].
e
,
n
[
6
].
e
,
n
[
7
].
data
);
ctx
->
Unpack
=
save
;
/* restore */
...
...
@@ -5516,8 +5486,8 @@ execute_list( GLcontext *ctx, GLuint list )
break
;
case
OPCODE_DRAW_PIXELS
:
{
const
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
ctx
->
DefaultP
acking
;
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
_mesa_native_p
acking
;
(
*
ctx
->
Exec
->
DrawPixels
)(
n
[
1
].
i
,
n
[
2
].
i
,
n
[
3
].
e
,
n
[
4
].
e
,
n
[
5
].
data
);
ctx
->
Unpack
=
save
;
/* restore */
...
...
@@ -5785,8 +5755,8 @@ execute_list( GLcontext *ctx, GLuint list )
break
;
case
OPCODE_TEX_IMAGE1D
:
{
const
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
ctx
->
DefaultP
acking
;
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
_mesa_native_p
acking
;
(
*
ctx
->
Exec
->
TexImage1D
)(
n
[
1
].
e
,
/* target */
n
[
2
].
i
,
/* level */
...
...
@@ -5801,8 +5771,8 @@ execute_list( GLcontext *ctx, GLuint list )
break
;
case
OPCODE_TEX_IMAGE2D
:
{
const
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
ctx
->
DefaultP
acking
;
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
_mesa_native_p
acking
;
(
*
ctx
->
Exec
->
TexImage2D
)(
n
[
1
].
e
,
/* target */
n
[
2
].
i
,
/* level */
...
...
@@ -5818,8 +5788,8 @@ execute_list( GLcontext *ctx, GLuint list )
break
;
case
OPCODE_TEX_IMAGE3D
:
{
const
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
ctx
->
DefaultP
acking
;
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
_mesa_native_p
acking
;
(
*
ctx
->
Exec
->
TexImage3D
)(
n
[
1
].
e
,
/* target */
n
[
2
].
i
,
/* level */
...
...
@@ -5836,8 +5806,8 @@ execute_list( GLcontext *ctx, GLuint list )
break
;
case
OPCODE_TEX_SUB_IMAGE1D
:
{
const
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
ctx
->
DefaultP
acking
;
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
_mesa_native_p
acking
;
(
*
ctx
->
Exec
->
TexSubImage1D
)(
n
[
1
].
e
,
n
[
2
].
i
,
n
[
3
].
i
,
n
[
4
].
i
,
n
[
5
].
e
,
n
[
6
].
e
,
n
[
7
].
data
);
...
...
@@ -5846,8 +5816,8 @@ execute_list( GLcontext *ctx, GLuint list )
break
;
case
OPCODE_TEX_SUB_IMAGE2D
:
{
const
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
ctx
->
DefaultP
acking
;
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
_mesa_native_p
acking
;
(
*
ctx
->
Exec
->
TexSubImage2D
)(
n
[
1
].
e
,
n
[
2
].
i
,
n
[
3
].
i
,
n
[
4
].
i
,
n
[
5
].
e
,
n
[
6
].
i
,
n
[
7
].
e
,
n
[
8
].
e
,
n
[
9
].
data
);
...
...
@@ -5856,8 +5826,8 @@ execute_list( GLcontext *ctx, GLuint list )
break
;
case
OPCODE_TEX_SUB_IMAGE3D
:
{
const
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
ctx
->
DefaultP
acking
;
struct
gl_pixelstore_attrib
save
=
ctx
->
Unpack
;
ctx
->
Unpack
=
_mesa_native_p
acking
;
(
*
ctx
->
Exec
->
TexSubImage3D
)(
n
[
1
].
e
,
n
[
2
].
i
,
n
[
3
].
i
,
n
[
4
].
i
,
n
[
5
].
i
,
n
[
6
].
i
,
n
[
7
].
i
,
n
[
8
].
i
,
n
[
9
].
e
,
n
[
10
].
e
,
...
...
@@ -5980,16 +5950,42 @@ execute_list( GLcontext *ctx, GLuint list )
(
*
ctx
->
Exec
->
VertexAttrib1fNV
)(
n
[
1
].
e
,
n
[
2
].
f
);
break
;
case
OPCODE_ATTR_2F
:
(
*
ctx
->
Exec
->
VertexAttrib2fvNV
)(
n
[
1
].
e
,
&
n
[
2
].
f
);
/* Really shouldn't have to do this - the Node structure
* is convenient, but it would be better to store the data
* packed appropriately so that it can be sent directly
* on. With x86_64 becoming common, this will start to
* matter more.
*/
if
(
sizeof
(
Node
)
==
sizeof
(
GLfloat
))
(
*
ctx
->
Exec
->
VertexAttrib2fvNV
)(
n
[
1
].
e
,
&
n
[
2
].
f
);
else
(
*
ctx
->
Exec
->
VertexAttrib2fNV
)(
n
[
1
].
e
,
n
[
2
].
f
,
n
[
3
].
f
);
break
;
case
OPCODE_ATTR_3F
:
(
*
ctx
->
Exec
->
VertexAttrib3fvNV
)(
n
[
1
].
e
,
&
n
[
2
].
f
);
if
(
sizeof
(
Node
)
==
sizeof
(
GLfloat
))
(
*
ctx
->
Exec
->
VertexAttrib3fvNV
)(
n
[
1
].
e
,
&
n
[
2
].
f
);
else
(
*
ctx
->
Exec
->
VertexAttrib3fNV
)(
n
[
1
].
e
,
n
[
2
].
f
,
n
[
3
].
f
,
n
[
4
].
f
);
break
;
case
OPCODE_ATTR_4F
:
(
*
ctx
->
Exec
->
VertexAttrib4fvNV
)(
n
[
1
].
e
,
&
n
[
2
].
f
);
if
(
sizeof
(
Node
)
==
sizeof
(
GLfloat
))
(
*
ctx
->
Exec
->
VertexAttrib4fvNV
)(
n
[
1
].
e
,
&
n
[
2
].
f
);
else
(
*
ctx
->
Exec
->
VertexAttrib4fNV
)(
n
[
1
].
e
,
n
[
2
].
f
,
n
[
3
].
f
,
n
[
4
].
f
,
n
[
5
].
f
);
break
;
case
OPCODE_MATERIAL
:
(
*
ctx
->
Exec
->
Materialfv
)(
n
[
1
].
e
,
n
[
2
].
e
,
&
n
[
3
].
f
);
if
(
sizeof
(
Node
)
==
sizeof
(
GLfloat
))
(
*
ctx
->
Exec
->
Materialfv
)(
n
[
1
].
e
,
n
[
2
].
e
,
&
n
[
3
].
f
);
else
{
GLfloat
f
[
4
];
f
[
0
]
=
n
[
3
].
f
;
f
[
1
]
=
n
[
4
].
f
;
f
[
2
]
=
n
[
5
].
f
;
f
[
3
]
=
n
[
6
].
f
;
(
*
ctx
->
Exec
->
Materialfv
)(
n
[
1
].
e
,
n
[
2
].
e
,
f
);
}
break
;
case
OPCODE_INDEX
:
(
*
ctx
->
Exec
->
Indexi
)(
n
[
1
].
i
);
...
...
@@ -6010,7 +6006,7 @@ execute_list( GLcontext *ctx, GLuint list )
(
*
ctx
->
Exec
->
EvalCoord1f
)(
n
[
1
].
f
);
break
;
case
OPCODE_EVAL_C2
:
(
*
ctx
->
Exec
->
EvalCoord2f
v
)(
&
n
[
1
].
f
);
(
*
ctx
->
Exec
->
EvalCoord2f
)(
n
[
1
].
f
,
n
[
2
].
f
);
break
;
case
OPCODE_EVAL_P1
:
(
*
ctx
->
Exec
->
EvalPoint1
)(
n
[
1
].
i
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment