Browse Source

Bugfixes for vertex format, templates

tags/mesa_3_5
Keith Whitwell 24 years ago
parent
commit
0fe593a71e

+ 12
- 13
src/mesa/drivers/common/t_dd_dmatmp.h View File

@@ -43,18 +43,17 @@
#error "must have at least triangles to use render template"
#endif

#if !HAVE_ELTS
#define ALLOC_ELTS( nr )
#define EMIT_ELT( offset, elt )
#define INCR_ELTS( nr )
#define ELT_INIT(prim)
#define GET_CURRENT_VB_MAX_ELTS() 0
#define GET_SUBSEQUENT_VB_MAX_ELTS() 0
#define ALLOC_ELTS_NEW_PRIMITIVE(nr)
#define RELEASE_ELT_VERTS()
#define EMIT_INDEXED_VERTS( ctx, start, count )

#endif
/* #if !HAVE_ELTS */
/* #define ALLOC_ELTS( nr ) */
/* #define EMIT_ELT( offset, elt ) */
/* #define INCR_ELTS( nr ) */
/* #define ELT_INIT(prim) */
/* #define GET_CURRENT_VB_MAX_ELTS() 0 */
/* #define GET_SUBSEQUENT_VB_MAX_ELTS() 0 */
/* #define ALLOC_ELTS_NEW_PRIMITIVE(nr) */
/* #define RELEASE_ELT_VERTS() */
/* #define EMIT_INDEXED_VERTS( ctx, start, count ) */
/* #endif */

#ifndef EMIT_TWO_ELTS
#define EMIT_TWO_ELTS( offset, elt0, elt1 ) \
@@ -99,7 +98,7 @@ static void TAG(emit_elts)( GLcontext *ctx, GLuint *elts, GLuint nr )

ALLOC_ELTS( nr );

for ( i = 0 ; i < nr ; i++, elts += 2 ) {
for ( i = 0 ; i < nr ; i+=2, elts += 2 ) {
EMIT_TWO_ELTS( 0, elts[0], elts[1] );
INCR_ELTS( 2 );
}

+ 23
- 31
src/mesa/drivers/common/t_dd_vbtmp.h View File

@@ -125,8 +125,6 @@ static void TAG(emit)( GLcontext *ctx,
const GLubyte *mask = VB->ClipMask;
int i;

/* fprintf(stderr, "%s\n", __FUNCTION__); */

if (HAVE_HW_VIEWPORT && HAVE_HW_DIVIDE) {
(void) s;
coord = VB->ClipPtr->data;
@@ -139,16 +137,6 @@ static void TAG(emit)( GLcontext *ctx,

if (DO_TEX3) {
const GLuint t3 = GET_TEXSOURCE(3);

if (VB->TexCoordPtr[2] == 0) {
if (VB->TexCoordPtr[1] == 0) {
if (VB->TexCoordPtr[0] == 0)
VB->TexCoordPtr[0] = VB->TexCoordPtr[t3];
VB->TexCoordPtr[1] = VB->TexCoordPtr[t3];
}
VB->TexCoordPtr[2] = VB->TexCoordPtr[t3];
}

tc3 = VB->TexCoordPtr[t3]->data;
tc3_stride = VB->TexCoordPtr[t3]->stride;
if (DO_PTEX)
@@ -157,28 +145,18 @@ static void TAG(emit)( GLcontext *ctx,

if (DO_TEX2) {
const GLuint t2 = GET_TEXSOURCE(2);

if (VB->TexCoordPtr[1] == 0) {
if (VB->TexCoordPtr[0] == 0)
VB->TexCoordPtr[0] = VB->TexCoordPtr[t2];
VB->TexCoordPtr[1] = VB->TexCoordPtr[t2];
}

tc2 = VB->TexCoordPtr[t2]->data;
tc2_stride = VB->TexCoordPtr[t2]->stride;
if (DO_PTEX)
tc2_size = VB->TexCoordPtr[t2]->size;
}


if (DO_TEX1) {
const GLuint t1 = GET_TEXSOURCE(1);
if (VB->TexCoordPtr[0] == 0)
VB->TexCoordPtr[0] = VB->TexCoordPtr[t1];
tc1 = VB->TexCoordPtr[1]->data;
tc1_stride = VB->TexCoordPtr[1]->stride;
tc1 = VB->TexCoordPtr[t1]->data;
tc1_stride = VB->TexCoordPtr[t1]->stride;
if (DO_PTEX)
tc1_size = VB->TexCoordPtr[1]->size;
tc1_size = VB->TexCoordPtr[t1]->size;
}

if (DO_TEX0) {
@@ -422,8 +400,6 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,

(void) s;

/* fprintf(stderr, "%s (template 2)\n", __FUNCTION__); */

ASSERT(stride == 4);

/* Pack what's left into a 4-dword vertex. Color is in a different
@@ -523,6 +499,15 @@ static GLboolean TAG(check_tex_sizes)( GLcontext *ctx )
{
struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;

if (DO_TEX3 && VB->TexCoordPtr[2] == 0)
VB->TexCoordPtr[2] = VB->TexCoordPtr[3];

if (DO_TEX2 && VB->TexCoordPtr[1] == 0)
VB->TexCoordPtr[1] = VB->TexCoordPtr[2];

if (DO_TEX1 && VB->TexCoordPtr[0] == 0)
VB->TexCoordPtr[0] = VB->TexCoordPtr[1];

if (DO_PTEX)
return GL_TRUE;
@@ -539,6 +524,15 @@ static GLboolean TAG(check_tex_sizes)( GLcontext *ctx )
{
struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;

if (DO_TEX3 && VB->TexCoordPtr[2] == 0)
VB->TexCoordPtr[2] = VB->TexCoordPtr[3];

if (DO_TEX2 && VB->TexCoordPtr[1] == 0)
VB->TexCoordPtr[1] = VB->TexCoordPtr[2];

if (DO_TEX1 && VB->TexCoordPtr[0] == 0)
VB->TexCoordPtr[0] = VB->TexCoordPtr[1];

if (DO_PTEX)
return GL_TRUE;
@@ -582,7 +576,6 @@ static void TAG(interp)( GLcontext *ctx,

(void)s;

/* fprintf(stderr, "%s\n", __FUNCTION__); */
if (!HAVE_HW_DIVIDE) {
w = 1.0 / dstclip[3];
@@ -599,9 +592,8 @@ static void TAG(interp)( GLcontext *ctx,

if (HAVE_HW_DIVIDE || DO_FOG || DO_SPEC || DO_TEX0 || DO_TEX1 ||
DO_TEX2 || DO_TEX3) {
if (!HAVE_HW_VIEWPORT || !HAVE_HW_DIVIDE)
dst->v.w = w;

dst->v.w = w;
INTERP_UB( t, dst->ub4[4][0], out->ub4[4][0], in->ub4[4][0] );
INTERP_UB( t, dst->ub4[4][1], out->ub4[4][1], in->ub4[4][1] );

+ 1
- 1
src/mesa/drivers/common/t_dd_vertex.h View File

@@ -66,5 +66,5 @@ typedef union {
} tv;
float f[16];
unsigned int ui[16];
unsigned char ub4[4][16];
unsigned char ub4[16][4];
} TAG(Vertex), *TAG(VertexPtr);

Loading…
Cancel
Save