summaryrefslogtreecommitdiffstats
path: root/src/mesa/swrast/s_span.h
diff options
context:
space:
mode:
authorBrian <[email protected]>2007-02-01 09:51:48 -0700
committerBrian <[email protected]>2007-02-01 09:51:48 -0700
commitf3e507ef9f75dbfc58ccd07b5fe8cfca10d9a9e3 (patch)
tree52aaa2c8e7f9688752f2010254cd04aa5b117743 /src/mesa/swrast/s_span.h
parent81ef03be65f1458d627528a13cb86feb992d758f (diff)
New SWspanarrays attribs[] array.
Replace texcoord[], varying[], etc. arrays with single attribs[] array, indexed by FRAG_ATTRIB_* values. Eliminates need to copy data into fragment program machine input registers. Will lead to future clean-ups.
Diffstat (limited to 'src/mesa/swrast/s_span.h')
-rw-r--r--src/mesa/swrast/s_span.h38
1 files changed, 12 insertions, 26 deletions
diff --git a/src/mesa/swrast/s_span.h b/src/mesa/swrast/s_span.h
index 7c514afb0b5..292679bda14 100644
--- a/src/mesa/swrast/s_span.h
+++ b/src/mesa/swrast/s_span.h
@@ -32,7 +32,7 @@
/**
- * \defgroup SpanFlags SPAN_*-flags
+ * \defgroup SpanFlags
* Bitflags used for interpMask and arrayMask fields below to indicate
* which interpolant values and fragment arrays are in use, respectively.
*/
@@ -60,12 +60,10 @@ struct arrays2 {
union {
GLubyte sz1[MAX_WIDTH][4]; /* primary color */
GLushort sz2[MAX_WIDTH][4];
- GLfloat sz4[MAX_WIDTH][4];
} rgba;
union {
GLubyte sz1[MAX_WIDTH][4]; /* specular color and temp storage */
GLushort sz2[MAX_WIDTH][4];
- GLfloat sz4[MAX_WIDTH][4];
} spec;
};
#endif
@@ -80,7 +78,14 @@ struct arrays2 {
* filled in by glDraw/CopyPixels, etc.
* These arrays are separated out of sw_span to conserve memory.
*/
-typedef struct sw_span_arrays {
+typedef struct sw_span_arrays
+{
+ /** Per-fragment attributes (indexed by FRAG_ATTRIB_* tokens) */
+ GLfloat attribs[FRAG_ATTRIB_MAX][MAX_WIDTH][4];
+
+ /** This mask indicates which fragments are alive or culled */
+ GLubyte mask[MAX_WIDTH];
+
GLenum ChanType; /**< Color channel type, GL_UNSIGNED_BYTE, GL_FLOAT */
union {
struct {
@@ -91,37 +96,17 @@ typedef struct sw_span_arrays {
GLushort rgba[MAX_WIDTH][4];
GLushort spec[MAX_WIDTH][4];
} sz2;
- struct {
- GLfloat rgba[MAX_WIDTH][4];
- GLfloat spec[MAX_WIDTH][4];
- } sz4;
} color;
/** XXX these are temporary fields, pointing into above color arrays */
GLchan (*rgba)[4];
GLchan (*spec)[4];
-#if 0
- /* XXX rearrange and unify these arrays to so that we can
- * index all fragment inputs with the FRAG_ATTRIB_* values:
- */
- GLfloat attribs[FRAG_ATTRIB_MAX][MAX_WIDTH][4];
- /*OR*/
- typedef GLfloat (*array4f)[4];
- array4f attribs[FRAG_ATTRIB_MAX];
-#endif
-
GLint x[MAX_WIDTH]; /**< fragment X coords */
GLint y[MAX_WIDTH]; /**< fragment Y coords */
GLuint z[MAX_WIDTH]; /**< fragment Z coords */
GLuint index[MAX_WIDTH]; /**< Color indexes */
- GLfloat fog[MAX_WIDTH];
- GLfloat texcoords[MAX_TEXTURE_COORD_UNITS][MAX_WIDTH][4];
- GLfloat lambda[MAX_TEXTURE_COORD_UNITS][MAX_WIDTH];
+ GLfloat lambda[MAX_TEXTURE_COORD_UNITS][MAX_WIDTH]; /**< Texture LOD */
GLfloat coverage[MAX_WIDTH]; /**< Fragment coverage for AA/smoothing */
- GLfloat varying[MAX_VARYING][MAX_WIDTH][4]; /**< For shaders */
-
- /** This mask indicates which fragments are alive or culled */
- GLubyte mask[MAX_WIDTH];
} SWspanarrays;
@@ -137,7 +122,8 @@ typedef struct sw_span_arrays {
* stream of these structures which would be consumed by one or more
* span-processing threads which could run in parallel.
*/
-typedef struct sw_span {
+typedef struct sw_span
+{
GLint x, y;
/** Only need to process pixels between start <= i < end */