[R300-commit] r300_driver/r300 r300_context.h,1.54,1.55 r300_maos.c,1.13,1.14 r300_render.c,1.78,1.7
Brought to you by:
volodya
From: Aapo T. <aa...@us...> - 2005-03-18 14:44:36
|
Update of /cvsroot/r300/r300_driver/r300 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14795 Modified Files: r300_context.h r300_maos.c r300_render.c r300_state.c r300_vertexprog.c Log Message: Misc fixes. Index: r300_vertexprog.c =================================================================== RCS file: /cvsroot/r300/r300_driver/r300/r300_vertexprog.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- r300_vertexprog.c 17 Mar 2005 22:28:06 -0000 1.17 +++ r300_vertexprog.c 18 Mar 2005 14:44:28 -0000 1.18 @@ -357,8 +357,10 @@ { int i; - if(vp == NULL) + if(vp == NULL){ + fprintf(stderr, "vp null in call to %s from %s\n", __FUNCTION__, caller); return ; + } fprintf(stderr, "%s:<", caller); for(i=0; i < VERT_ATTRIB_MAX; i++) @@ -402,6 +404,18 @@ src->Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE); } +static unsigned long t_src_scalar(struct r300_vertex_program *vp, struct vp_src_register *src) +{ + + return MAKE_VSF_SOURCE(t_src_index(vp, src), + t_swizzle(src->Swizzle[0]), + t_swizzle(src->Swizzle[0]), + t_swizzle(src->Swizzle[0]), + t_swizzle(src->Swizzle[0]), + t_src_class(src->File), + src->Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE); +} + static unsigned long t_opcode(enum vp_opcode opcode) { @@ -461,6 +475,7 @@ VERTEX_SHADER_INSTRUCTION t2rs[1024]; VERTEX_SHADER_INSTRUCTION *o_inst; unsigned long operands; + int are_srcs_scalar; /* Initial value should be last tmp reg that hw supports. Strangely enough r300 doesnt mind even though these would be out of range. Smart enough to realize that it doesnt need it? */ @@ -498,6 +513,8 @@ for(vpi=mesa_vp->Instructions; vpi->Opcode != VP_OPCODE_END; vpi++, o_inst++){ operands=op_operands(vpi->Opcode); + are_srcs_scalar=operands & SCALAR_FLAG; + operands &= ~SCALAR_FLAG; for(i=0; i < operands; i++) src[i]=vpi->SrcReg[i]; @@ -771,30 +788,57 @@ o_inst->op=MAKE_VSF_OP(t_opcode(vpi->Opcode), vpi->DstReg.Index, t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File)); - - switch(operands){ - case 1: - o_inst->src1=t_src(vp, &src[0]); - o_inst->src2=0; - o_inst->src3=0; - break; + + if(are_srcs_scalar){ + switch(operands){ + case 1: + o_inst->src1=t_src_scalar(vp, &src[0]); + o_inst->src2=0; + o_inst->src3=0; + break; + + case 2: + o_inst->src1=t_src_scalar(vp, &src[0]); + o_inst->src2=t_src_scalar(vp, &src[1]); + o_inst->src3=0; + break; + + case 3: + o_inst->src1=t_src_scalar(vp, &src[0]); + o_inst->src2=t_src_scalar(vp, &src[1]); + o_inst->src3=t_src_scalar(vp, &src[2]); + break; + + default: + fprintf(stderr, "scalars and op RCC not handled yet"); + exit(-1); + break; + } + }else{ + switch(operands){ + case 1: + o_inst->src1=t_src(vp, &src[0]); + o_inst->src2=0; + o_inst->src3=0; + break; - case 2: - o_inst->src1=t_src(vp, &src[0]); - o_inst->src2=t_src(vp, &src[1]); - o_inst->src3=0; - break; + case 2: + o_inst->src1=t_src(vp, &src[0]); + o_inst->src2=t_src(vp, &src[1]); + o_inst->src3=0; + break; - case 3: - o_inst->src1=t_src(vp, &src[0]); - o_inst->src2=t_src(vp, &src[1]); - o_inst->src3=t_src(vp, &src[2]); - break; + case 3: + o_inst->src1=t_src(vp, &src[0]); + o_inst->src2=t_src(vp, &src[1]); + o_inst->src3=t_src(vp, &src[2]); + break; - default: - fprintf(stderr, "scalars and op RCC not handled yet"); - exit(-1); - break; + default: + fprintf(stderr, "scalars and op RCC not handled yet"); + exit(-1); + break; + } } next: ; #if 0 @@ -890,13 +934,14 @@ struct program *prog) { struct r300_vertex_program *vp=(void *)prog; -#if 0 +#if 0 fprintf(stderr, "r300ProgramStringNotify\n"); #endif switch(target) { case GL_VERTEX_PROGRAM_ARB: vp->translated=GL_FALSE; + break; case GL_FRAGMENT_PROGRAM_ARB: return ; break; Index: r300_state.c =================================================================== RCS file: /cvsroot/r300/r300_driver/r300/r300_state.c,v retrieving revision 1.92 retrieving revision 1.93 diff -u -d -r1.92 -r1.93 --- r300_state.c 17 Mar 2005 21:50:01 -0000 1.92 +++ r300_state.c 18 Mar 2005 14:44:28 -0000 1.93 @@ -1435,7 +1435,7 @@ cur_reg = 0; r300->hw.rr.cmd[R300_RR_ROUTE_0] = 0; - if (r300->current_vp != NULL && ctx->VertexProgram._Enabled) + if (VERTPROG_ACTIVE(ctx)) vap_outputs = r300->current_vp->outputs; else vap_outputs = r300->state.render_inputs; @@ -1693,7 +1693,7 @@ 0x400 area might have something to do with pixel shaders as it appears right after pfs programming. 0x406 is set to { 0.0, 0.0, 1.0, 0.0 } most of the time but should change with smooth points and in other rare cases. */ //setup_vertex_shader_fragment(rmesa, 0x406, &unk4); - if(rmesa->current_vp != NULL && ctx->VertexProgram._Enabled){ + if(VERTPROG_ACTIVE(ctx)){ r300SetupVertexProgram(rmesa); return ; } Index: r300_maos.c =================================================================== RCS file: /cvsroot/r300/r300_driver/r300/r300_maos.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- r300_maos.c 17 Mar 2005 21:50:01 -0000 1.13 +++ r300_maos.c 18 Mar 2005 14:44:27 -0000 1.14 @@ -254,7 +254,7 @@ exit(-1); \ } \ \ - if (rmesa->current_vp == NULL) \ + if (VERTPROG_ACTIVE(ctx) == GL_FALSE) \ rmesa->state.aos[nr-1].aos_reg = aa_vap_reg++; \ rmesa->state.aos[nr-1].aos_format = f; \ if (immd) { \ @@ -272,7 +272,7 @@ } \ } - if (rmesa->current_vp != NULL && ctx->VertexProgram._Enabled) { + if (VERTPROG_ACTIVE(ctx)) { if (rmesa->current_vp->inputs[VERT_ATTRIB_POS] != -1) { inputs |= _TNL_BIT_POS; rmesa->state.aos[nr++].aos_reg = rmesa->current_vp->inputs[VERT_ATTRIB_POS]; @@ -497,7 +497,7 @@ #endif /* Stage 3: VAP output */ - if (rmesa->current_vp != NULL && ctx->VertexProgram._Enabled) + if (VERTPROG_ACTIVE(ctx)) outputs = rmesa->current_vp->outputs; else outputs = inputs; Index: r300_context.h =================================================================== RCS file: /cvsroot/r300/r300_driver/r300/r300_context.h,v retrieving revision 1.54 retrieving revision 1.55 diff -u -d -r1.54 -r1.55 --- r300_context.h 16 Mar 2005 22:32:48 -0000 1.54 +++ r300_context.h 18 Mar 2005 14:44:27 -0000 1.55 @@ -566,6 +566,9 @@ int unknown_ptr3; /* pointer within program space */ }; +#define VERTPROG_ACTIVE(ctx) ( ctx->VertexProgram._Enabled && (R300_CONTEXT(ctx)->current_vp != NULL) && \ + (R300_CONTEXT(ctx)->current_vp->translated) ) + /* r300_vertex_shader_state and r300_vertex_program should probably be merged together someday. * Keeping them them seperate for now should ensure fixed pipeline keeps functioning properly. */ Index: r300_render.c =================================================================== RCS file: /cvsroot/r300/r300_driver/r300/r300_render.c,v retrieving revision 1.78 retrieving revision 1.79 diff -u -d -r1.78 -r1.79 --- r300_render.c 17 Mar 2005 21:50:01 -0000 1.78 +++ r300_render.c 18 Mar 2005 14:44:28 -0000 1.79 @@ -759,7 +759,7 @@ stage->active = GL_FALSE; return; } - if((r300->current_vp != NULL) && ctx->VertexProgram._Enabled) { + if(VERTPROG_ACTIVE(ctx)) { stage->active = GL_TRUE; stage->inputs = ctx->VertexProgram.Current->InputsRead; } else { |