1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
/*
* GLX Hardware Device Driver for Intel i810
* Copyright (C) 1999 Keith Whitwell
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*
*/
#ifndef I810VB_INC
#define I810VB_INC
#include "vb.h"
#include "types.h"
/*
* color type for the vertex data
* we probably want to use an internal datatype here?
*/
typedef struct {
GLubyte blue;
GLubyte green;
GLubyte red;
GLubyte alpha;
} i810_color;
/* A basic fixed format vertex to kick things off. Move to dynamic
* layouts later on. (see also the i810_full_vertex struct in
* i810_3d_reg.h)
*/
typedef struct {
GLfloat x,y,z; /* coordinates in screen space*/
GLfloat oow; /* reciprocal homogeneous w */
i810_color color; /* vertex color */
i810_color specular; /* specular color, alpha is fog */
GLfloat tu0,tv0; /* texture 0 */
GLfloat tu1,tv1; /* texture 1 */
} i810_vertex;
/* Unfortunately only have assembly for 16-stride vertices.
*/
union i810_vertex_t {
i810_vertex v;
float f[16];
};
typedef union i810_vertex_t i810Vertex;
typedef union i810_vertex_t *i810VertexPtr;
struct i810_vertex_buffer_t {
GLvector1ui clipped_elements;
i810VertexPtr verts;
int last_vert;
GLuint *primitive;
GLuint *next_primitive;
void *vert_store;
GLuint size;
};
typedef struct i810_vertex_buffer_t *i810VertexBufferPtr;
#define I810_CONTEXT(ctx) ((i810ContextPtr)(ctx->DriverCtx))
#define I810_DRIVER_DATA(vb) ((i810VertexBufferPtr)((vb)->driver_data))
#define I810_SPEC_BIT 0x1
#define I810_FOG_BIT 0x2
#define I810_ALPHA_BIT 0x4 /* GL_BLEND, not used */
#define I810_TEX1_BIT 0x8
#define I810_TEX0_BIT 0x10
#define I810_RGBA_BIT 0x20
#define I810_WIN_BIT 0x40
extern void i810ChooseRasterSetupFunc(GLcontext *ctx);
extern void i810PrintSetupFlags(char *msg, GLuint flags );
extern void i810DDDoRasterSetup( struct vertex_buffer *VB );
extern void i810DDPartialRasterSetup( struct vertex_buffer *VB );
extern void i810DDCheckPartialRasterSetup( GLcontext *ctx,
struct gl_pipeline_stage *d );
extern void i810DDViewport( GLcontext *ctx,
GLint x, GLint y,
GLsizei width, GLsizei height );
extern void i810DDDepthRange( GLcontext *ctx,
GLclampd nearval, GLclampd farval );
extern void i810DDUnregisterVB( struct vertex_buffer *VB );
extern void i810DDRegisterVB( struct vertex_buffer *VB );
extern void i810DDResizeVB( struct vertex_buffer *VB, GLuint size );
extern void i810DDSetupInit( void );
#endif
|