mapping ps input based on vs output;
fix bugs including constants updating for vs.
tags/7.8-rc1
| @@ -1038,7 +1038,8 @@ GLboolean checkop2(r700_AssemblerBase* pAsm) | |||
| checkop_init(pAsm); | |||
| if( (pILInst->SrcReg[0].File == PROGRAM_CONSTANT) || | |||
| if( (pILInst->SrcReg[0].File == PROGRAM_UNIFORM) || | |||
| (pILInst->SrcReg[0].File == PROGRAM_CONSTANT) || | |||
| (pILInst->SrcReg[0].File == PROGRAM_LOCAL_PARAM) || | |||
| (pILInst->SrcReg[0].File == PROGRAM_ENV_PARAM) || | |||
| (pILInst->SrcReg[0].File == PROGRAM_STATE_VAR) ) | |||
| @@ -1049,7 +1050,8 @@ GLboolean checkop2(r700_AssemblerBase* pAsm) | |||
| { | |||
| bSrcConst[0] = GL_FALSE; | |||
| } | |||
| if( (pILInst->SrcReg[1].File == PROGRAM_CONSTANT) || | |||
| if( (pILInst->SrcReg[1].File == PROGRAM_UNIFORM) || | |||
| (pILInst->SrcReg[1].File == PROGRAM_CONSTANT) || | |||
| (pILInst->SrcReg[1].File == PROGRAM_LOCAL_PARAM) || | |||
| (pILInst->SrcReg[1].File == PROGRAM_ENV_PARAM) || | |||
| (pILInst->SrcReg[1].File == PROGRAM_STATE_VAR) ) | |||
| @@ -1082,7 +1084,8 @@ GLboolean checkop3(r700_AssemblerBase* pAsm) | |||
| checkop_init(pAsm); | |||
| if( (pILInst->SrcReg[0].File == PROGRAM_CONSTANT) || | |||
| if( (pILInst->SrcReg[0].File == PROGRAM_UNIFORM) || | |||
| (pILInst->SrcReg[0].File == PROGRAM_CONSTANT) || | |||
| (pILInst->SrcReg[0].File == PROGRAM_LOCAL_PARAM) || | |||
| (pILInst->SrcReg[0].File == PROGRAM_ENV_PARAM) || | |||
| (pILInst->SrcReg[0].File == PROGRAM_STATE_VAR) ) | |||
| @@ -1093,7 +1096,8 @@ GLboolean checkop3(r700_AssemblerBase* pAsm) | |||
| { | |||
| bSrcConst[0] = GL_FALSE; | |||
| } | |||
| if( (pILInst->SrcReg[1].File == PROGRAM_CONSTANT) || | |||
| if( (pILInst->SrcReg[1].File == PROGRAM_UNIFORM) || | |||
| (pILInst->SrcReg[1].File == PROGRAM_CONSTANT) || | |||
| (pILInst->SrcReg[1].File == PROGRAM_LOCAL_PARAM) || | |||
| (pILInst->SrcReg[1].File == PROGRAM_ENV_PARAM) || | |||
| (pILInst->SrcReg[1].File == PROGRAM_STATE_VAR) ) | |||
| @@ -1104,7 +1108,8 @@ GLboolean checkop3(r700_AssemblerBase* pAsm) | |||
| { | |||
| bSrcConst[1] = GL_FALSE; | |||
| } | |||
| if( (pILInst->SrcReg[2].File == PROGRAM_CONSTANT) || | |||
| if( (pILInst->SrcReg[2].File == PROGRAM_UNIFORM) || | |||
| (pILInst->SrcReg[2].File == PROGRAM_CONSTANT) || | |||
| (pILInst->SrcReg[2].File == PROGRAM_LOCAL_PARAM) || | |||
| (pILInst->SrcReg[2].File == PROGRAM_ENV_PARAM) || | |||
| (pILInst->SrcReg[2].File == PROGRAM_STATE_VAR) ) | |||
| @@ -1218,7 +1223,7 @@ GLboolean assemble_src(r700_AssemblerBase *pAsm, | |||
| pAsm->S[fld].src.reg = pILInst->SrcReg[src].Index; | |||
| break; | |||
| case PROGRAM_INPUT: | |||
| setaddrmode_PVSSRC(&(pAsm->S[fld].src), ADDR_ABSOLUTE); | |||
| setaddrmode_PVSSRC(&(pAsm->S[fld].src), ADDR_ABSOLUTE); | |||
| pAsm->S[fld].src.rtype = SRC_REG_INPUT; | |||
| switch (pAsm->currentShaderType) | |||
| { | |||
| @@ -1346,6 +1351,7 @@ GLboolean tex_src(r700_AssemblerBase *pAsm) | |||
| else | |||
| { | |||
| switch (pILInst->SrcReg[0].File) { | |||
| case PROGRAM_UNIFORM: | |||
| case PROGRAM_CONSTANT: | |||
| case PROGRAM_LOCAL_PARAM: | |||
| case PROGRAM_ENV_PARAM: | |||
| @@ -2117,7 +2123,7 @@ GLboolean check_vector(r700_AssemblerBase* pAsm, | |||
| if( is_gpr(sel) ) | |||
| { | |||
| if( GL_FALSE == cycle_for_vector_bank_swizzle(bank_swizzle, src, &cycle) ) | |||
| { | |||
| { | |||
| return GL_FALSE; | |||
| } | |||
| @@ -2129,7 +2135,7 @@ GLboolean check_vector(r700_AssemblerBase* pAsm, | |||
| else | |||
| { | |||
| if( GL_FALSE == reserve_gpr(pAsm, sel, chan, cycle) ) | |||
| { | |||
| { | |||
| return GL_FALSE; | |||
| } | |||
| } | |||
| @@ -2141,7 +2147,7 @@ GLboolean check_vector(r700_AssemblerBase* pAsm, | |||
| if( is_cfile(sel) ) | |||
| { | |||
| if( GL_FALSE == reserve_cfile(pAsm, sel, chan) ) | |||
| { | |||
| { | |||
| return GL_FALSE; | |||
| } | |||
| } | |||
| @@ -2244,7 +2250,7 @@ GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm) | |||
| current_source_index, | |||
| pcurrent_source, | |||
| scalar_channel_index) ) | |||
| { | |||
| { | |||
| return GL_FALSE; | |||
| } | |||
| @@ -2258,7 +2264,7 @@ GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm) | |||
| current_source_index, | |||
| pcurrent_source, | |||
| scalar_channel_index) ) | |||
| { | |||
| { | |||
| return GL_FALSE; | |||
| } | |||
| } | |||
| @@ -2287,7 +2293,7 @@ GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm) | |||
| alu_instruction_ptr->m_Word1.f.dst_gpr = pAsm->D.dst.reg; | |||
| } | |||
| else | |||
| { | |||
| { | |||
| radeon_error("Only temp destination registers supported for ALU dest regs.\n"); | |||
| return GL_FALSE; | |||
| } | |||
| @@ -2401,7 +2407,7 @@ GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm) | |||
| } | |||
| if(GL_FALSE == add_alu_instruction(pAsm, alu_instruction_ptr, contiguous_slots_needed) ) | |||
| { | |||
| { | |||
| return GL_FALSE; | |||
| } | |||
| @@ -2412,15 +2418,15 @@ GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm) | |||
| if (is_single_scalar_operation) | |||
| { | |||
| if(GL_FALSE == check_scalar(pAsm, alu_instruction_ptr) ) | |||
| { | |||
| { | |||
| return GL_FALSE; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| if(GL_FALSE == check_vector(pAsm, alu_instruction_ptr) ) | |||
| { | |||
| return 1; | |||
| { | |||
| return GL_FALSE; | |||
| } | |||
| } | |||
| @@ -2667,7 +2673,7 @@ GLboolean assemble_alu_instruction2(r700_AssemblerBase *pAsm) | |||
| { | |||
| if(GL_FALSE == check_vector(pAsm, alu_instruction_ptr) ) | |||
| { | |||
| return 1; | |||
| return GL_FALSE; | |||
| } | |||
| } | |||
| @@ -3642,6 +3648,7 @@ GLboolean assemble_LRP(r700_AssemblerBase *pAsm) | |||
| { | |||
| return GL_FALSE; | |||
| } | |||
| if( GL_FALSE == assemble_src(pAsm, 2, -1) ) | |||
| { | |||
| return GL_FALSE; | |||
| @@ -4598,6 +4605,7 @@ GLboolean assemble_TEX(r700_AssemblerBase *pAsm) | |||
| switch (pAsm->pILInst[pAsm->uiCurInst].SrcReg[0].File) | |||
| { | |||
| case PROGRAM_UNIFORM: | |||
| case PROGRAM_CONSTANT: | |||
| case PROGRAM_LOCAL_PARAM: | |||
| case PROGRAM_ENV_PARAM: | |||
| @@ -6867,7 +6875,7 @@ GLboolean Process_Vertex_Exports(r700_AssemblerBase *pR700AsmCode, | |||
| export_starting_index++; | |||
| } | |||
| } | |||
| for(i=VERT_RESULT_VAR0; i<VERT_RESULT_MAX; i++) | |||
| { | |||
| unBit = 1 << i; | |||
| @@ -6879,7 +6887,7 @@ GLboolean Process_Vertex_Exports(r700_AssemblerBase *pR700AsmCode, | |||
| 1, | |||
| pR700AsmCode->ucVP_OutputMap[i], | |||
| GL_FALSE) ) | |||
| { | |||
| { | |||
| return GL_FALSE; | |||
| } | |||
| @@ -44,12 +44,18 @@ | |||
| //TODO : Validate FP input with VP output. | |||
| void Map_Fragment_Program(r700_AssemblerBase *pAsm, | |||
| struct gl_fragment_program *mesa_fp) | |||
| struct gl_fragment_program *mesa_fp, | |||
| GLcontext *ctx) | |||
| { | |||
| unsigned int unBit; | |||
| unsigned int i; | |||
| GLuint ui; | |||
| /* match fp inputs with vp exports. */ | |||
| struct r700_vertex_program_cont *vpc = | |||
| (struct r700_vertex_program_cont *)ctx->VertexProgram._Current; | |||
| GLbitfield OutputsWritten = vpc->mesa_program.Base.OutputsWritten; | |||
| pAsm->number_used_registers = 0; | |||
| //Input mapping : mesa_fp->Base.InputsRead set the flag, set in | |||
| @@ -61,41 +67,41 @@ void Map_Fragment_Program(r700_AssemblerBase *pAsm, | |||
| pAsm->uiFP_AttributeMap[FRAG_ATTRIB_WPOS] = pAsm->number_used_registers++; | |||
| } | |||
| unBit = 1 << FRAG_ATTRIB_COL0; | |||
| if(mesa_fp->Base.InputsRead & unBit) | |||
| unBit = 1 << VERT_RESULT_COL0; | |||
| if(OutputsWritten & unBit) | |||
| { | |||
| pAsm->uiFP_AttributeMap[FRAG_ATTRIB_COL0] = pAsm->number_used_registers++; | |||
| } | |||
| unBit = 1 << FRAG_ATTRIB_COL1; | |||
| if(mesa_fp->Base.InputsRead & unBit) | |||
| unBit = 1 << VERT_RESULT_COL1; | |||
| if(OutputsWritten & unBit) | |||
| { | |||
| pAsm->uiFP_AttributeMap[FRAG_ATTRIB_COL1] = pAsm->number_used_registers++; | |||
| } | |||
| unBit = 1 << FRAG_ATTRIB_FOGC; | |||
| if(mesa_fp->Base.InputsRead & unBit) | |||
| unBit = 1 << VERT_RESULT_FOGC; | |||
| if(OutputsWritten & unBit) | |||
| { | |||
| pAsm->uiFP_AttributeMap[FRAG_ATTRIB_FOGC] = pAsm->number_used_registers++; | |||
| pAsm->uiFP_AttributeMap[FRAG_ATTRIB_FOGC] = pAsm->number_used_registers++; | |||
| } | |||
| for(i=0; i<8; i++) | |||
| { | |||
| unBit = 1 << (FRAG_ATTRIB_TEX0 + i); | |||
| if(mesa_fp->Base.InputsRead & unBit) | |||
| unBit = 1 << (VERT_RESULT_TEX0 + i); | |||
| if(OutputsWritten & unBit) | |||
| { | |||
| pAsm->uiFP_AttributeMap[FRAG_ATTRIB_TEX0 + i] = pAsm->number_used_registers++; | |||
| } | |||
| } | |||
| /* order has been taken care of */ | |||
| /* order has been taken care of */ | |||
| #if 1 | |||
| for(i=FRAG_ATTRIB_VAR0; i<FRAG_ATTRIB_MAX; i++) | |||
| { | |||
| for(i=VERT_RESULT_VAR0; i<VERT_RESULT_MAX; i++) | |||
| { | |||
| unBit = 1 << i; | |||
| if(mesa_fp->Base.InputsRead & unBit) | |||
| if(OutputsWritten & unBit) | |||
| { | |||
| pAsm->uiFP_AttributeMap[i] = pAsm->number_used_registers++; | |||
| pAsm->uiFP_AttributeMap[i-VERT_RESULT_VAR0+FRAG_ATTRIB_VAR0] = pAsm->number_used_registers++; | |||
| } | |||
| } | |||
| #else | |||
| @@ -291,7 +297,8 @@ GLboolean Find_Instruction_Dependencies_fp(struct r700_fragment_program *fp, | |||
| } | |||
| GLboolean r700TranslateFragmentShader(struct r700_fragment_program *fp, | |||
| struct gl_fragment_program *mesa_fp) | |||
| struct gl_fragment_program *mesa_fp, | |||
| GLcontext *ctx) | |||
| { | |||
| GLuint number_of_colors_exported; | |||
| GLboolean z_enabled = GL_FALSE; | |||
| @@ -299,7 +306,7 @@ GLboolean r700TranslateFragmentShader(struct r700_fragment_program *fp, | |||
| //Init_Program | |||
| Init_r700_AssemblerBase( SPT_FP, &(fp->r700AsmCode), &(fp->r700Shader) ); | |||
| Map_Fragment_Program(&(fp->r700AsmCode), mesa_fp); | |||
| Map_Fragment_Program(&(fp->r700AsmCode), mesa_fp, ctx); | |||
| if( GL_FALSE == Find_Instruction_Dependencies_fp(fp, mesa_fp) ) | |||
| { | |||
| @@ -366,7 +373,7 @@ void r700SelectFragmentShader(GLcontext *ctx) | |||
| } | |||
| if (GL_FALSE == fp->translated) | |||
| r700TranslateFragmentShader(fp, &(fp->mesa_program)); | |||
| r700TranslateFragmentShader(fp, &(fp->mesa_program), ctx); | |||
| } | |||
| void * r700GetActiveFpShaderBo(GLcontext * ctx) | |||
| @@ -460,6 +467,9 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx) | |||
| EXPORT_MODE_shift, EXPORT_MODE_mask); | |||
| // emit ps input map | |||
| struct r700_vertex_program_cont *vpc = | |||
| (struct r700_vertex_program_cont *)ctx->VertexProgram._Current; | |||
| GLbitfield OutputsWritten = vpc->mesa_program.Base.OutputsWritten; | |||
| unBit = 1 << FRAG_ATTRIB_WPOS; | |||
| if(mesa_fp->Base.InputsRead & unBit) | |||
| { | |||
| @@ -473,8 +483,8 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx) | |||
| CLEARbit(r700->SPI_PS_INPUT_CNTL[ui].u32All, FLAT_SHADE_bit); | |||
| } | |||
| unBit = 1 << FRAG_ATTRIB_COL0; | |||
| if(mesa_fp->Base.InputsRead & unBit) | |||
| unBit = 1 << VERT_RESULT_COL0; | |||
| if(OutputsWritten & unBit) | |||
| { | |||
| ui = pAsm->uiFP_AttributeMap[FRAG_ATTRIB_COL0]; | |||
| SETbit(r700->SPI_PS_INPUT_CNTL[ui].u32All, SEL_CENTROID_bit); | |||
| @@ -486,8 +496,8 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx) | |||
| CLEARbit(r700->SPI_PS_INPUT_CNTL[ui].u32All, FLAT_SHADE_bit); | |||
| } | |||
| unBit = 1 << FRAG_ATTRIB_COL1; | |||
| if(mesa_fp->Base.InputsRead & unBit) | |||
| unBit = 1 << VERT_RESULT_COL1; | |||
| if(OutputsWritten & unBit) | |||
| { | |||
| ui = pAsm->uiFP_AttributeMap[FRAG_ATTRIB_COL1]; | |||
| SETbit(r700->SPI_PS_INPUT_CNTL[ui].u32All, SEL_CENTROID_bit); | |||
| @@ -499,8 +509,8 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx) | |||
| CLEARbit(r700->SPI_PS_INPUT_CNTL[ui].u32All, FLAT_SHADE_bit); | |||
| } | |||
| unBit = 1 << FRAG_ATTRIB_FOGC; | |||
| if(mesa_fp->Base.InputsRead & unBit) | |||
| unBit = 1 << VERT_RESULT_FOGC; | |||
| if(OutputsWritten & unBit) | |||
| { | |||
| ui = pAsm->uiFP_AttributeMap[FRAG_ATTRIB_FOGC]; | |||
| SETbit(r700->SPI_PS_INPUT_CNTL[ui].u32All, SEL_CENTROID_bit); | |||
| @@ -514,8 +524,8 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx) | |||
| for(i=0; i<8; i++) | |||
| { | |||
| unBit = 1 << (FRAG_ATTRIB_TEX0 + i); | |||
| if(mesa_fp->Base.InputsRead & unBit) | |||
| unBit = 1 << (VERT_RESULT_TEX0 + i); | |||
| if(OutputsWritten & unBit) | |||
| { | |||
| ui = pAsm->uiFP_AttributeMap[FRAG_ATTRIB_TEX0 + i]; | |||
| SETbit(r700->SPI_PS_INPUT_CNTL[ui].u32All, SEL_CENTROID_bit); | |||
| @@ -525,12 +535,12 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx) | |||
| } | |||
| } | |||
| for(i=FRAG_ATTRIB_VAR0; i<FRAG_ATTRIB_MAX; i++) | |||
| for(i=VERT_RESULT_VAR0; i<VERT_RESULT_MAX; i++) | |||
| { | |||
| unBit = 1 << i; | |||
| if(mesa_fp->Base.InputsRead & unBit) | |||
| unBit = 1 << i; | |||
| if(OutputsWritten & unBit) | |||
| { | |||
| ui = pAsm->uiFP_AttributeMap[i]; | |||
| ui = pAsm->uiFP_AttributeMap[i-VERT_RESULT_VAR0+FRAG_ATTRIB_VAR0]; | |||
| SETbit(r700->SPI_PS_INPUT_CNTL[ui].u32All, SEL_CENTROID_bit); | |||
| SETfield(r700->SPI_PS_INPUT_CNTL[ui].u32All, ui, | |||
| SEMANTIC_shift, SEMANTIC_mask); | |||
| @@ -538,8 +548,8 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx) | |||
| SETbit(r700->SPI_PS_INPUT_CNTL[ui].u32All, FLAT_SHADE_bit); | |||
| else | |||
| CLEARbit(r700->SPI_PS_INPUT_CNTL[ui].u32All, FLAT_SHADE_bit); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| exportCount = (r700->ps.SQ_PGM_EXPORTS_PS.u32All & EXPORT_MODE_mask) / (1 << EXPORT_MODE_shift); | |||
| if (r700->CB_SHADER_CONTROL.u32All != ((1 << exportCount) - 1)) | |||
| @@ -551,7 +561,8 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx) | |||
| /* sent out shader constants. */ | |||
| paramList = fp->mesa_program.Base.Parameters; | |||
| if(NULL != paramList) { | |||
| if(NULL != paramList) | |||
| { | |||
| _mesa_load_state_parameters(ctx, paramList); | |||
| if (paramList->NumParameters > R700_MAX_DX9_CONSTS) | |||
| @@ -564,10 +575,10 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx) | |||
| unNumParamData = paramList->NumParameters; | |||
| for(ui=0; ui<unNumParamData; ui++) { | |||
| r700->ps.consts[ui][0].f32All = paramList->ParameterValues[ui][0]; | |||
| r700->ps.consts[ui][1].f32All = paramList->ParameterValues[ui][1]; | |||
| r700->ps.consts[ui][2].f32All = paramList->ParameterValues[ui][2]; | |||
| r700->ps.consts[ui][3].f32All = paramList->ParameterValues[ui][3]; | |||
| r700->ps.consts[ui][0].f32All = paramList->ParameterValues[ui][0]; | |||
| r700->ps.consts[ui][1].f32All = paramList->ParameterValues[ui][1]; | |||
| r700->ps.consts[ui][2].f32All = paramList->ParameterValues[ui][2]; | |||
| r700->ps.consts[ui][3].f32All = paramList->ParameterValues[ui][3]; | |||
| } | |||
| } else | |||
| r700->ps.num_consts = 0; | |||
| @@ -49,12 +49,14 @@ struct r700_fragment_program | |||
| /* Internal */ | |||
| void Map_Fragment_Program(r700_AssemblerBase *pAsm, | |||
| struct gl_fragment_program *mesa_fp); | |||
| struct gl_fragment_program *mesa_fp, | |||
| GLcontext *ctx); //richard glsl nov.27 | |||
| GLboolean Find_Instruction_Dependencies_fp(struct r700_fragment_program *fp, | |||
| struct gl_fragment_program *mesa_fp); | |||
| GLboolean r700TranslateFragmentShader(struct r700_fragment_program *fp, | |||
| struct gl_fragment_program *mesa_vp); | |||
| struct gl_fragment_program *mesa_vp, | |||
| GLcontext *ctx); //richard glsl nov.27 | |||
| /* Interface */ | |||
| extern void r700SelectFragmentShader(GLcontext *ctx); | |||
| @@ -631,6 +631,14 @@ GLboolean r700SetupVertexProgram(GLcontext * ctx) | |||
| paramList = vp->mesa_program->Base.Parameters; | |||
| if(NULL != paramList) { | |||
| //vp->mesa_program was cloned, not updated by glsl shader api. | |||
| //_mesa_reference_program has already checked glsl shProg is ok and set ctx->VertexProgem._Current | |||
| // so, use ctx->VertexProgem._Current | |||
| struct gl_program_parameter_list *paramListOrginal = | |||
| paramListOrginal = ctx->VertexProgram._Current->Base.Parameters; | |||
| //--------------------------- | |||
| _mesa_load_state_parameters(ctx, paramList); | |||
| if (paramList->NumParameters > R700_MAX_DX9_CONSTS) | |||
| @@ -643,10 +651,20 @@ GLboolean r700SetupVertexProgram(GLcontext * ctx) | |||
| unNumParamData = paramList->NumParameters; | |||
| for(ui=0; ui<unNumParamData; ui++) { | |||
| r700->vs.consts[ui][0].f32All = paramList->ParameterValues[ui][0]; | |||
| r700->vs.consts[ui][1].f32All = paramList->ParameterValues[ui][1]; | |||
| r700->vs.consts[ui][2].f32All = paramList->ParameterValues[ui][2]; | |||
| r700->vs.consts[ui][3].f32All = paramList->ParameterValues[ui][3]; | |||
| if(paramList->Parameters[ui].Type == PROGRAM_UNIFORM) | |||
| { | |||
| r700->vs.consts[ui][0].f32All = paramListOrginal->ParameterValues[ui][0]; | |||
| r700->vs.consts[ui][1].f32All = paramListOrginal->ParameterValues[ui][1]; | |||
| r700->vs.consts[ui][2].f32All = paramListOrginal->ParameterValues[ui][2]; | |||
| r700->vs.consts[ui][3].f32All = paramListOrginal->ParameterValues[ui][3]; | |||
| } | |||
| else | |||
| { | |||
| r700->vs.consts[ui][0].f32All = paramList->ParameterValues[ui][0]; | |||
| r700->vs.consts[ui][1].f32All = paramList->ParameterValues[ui][1]; | |||
| r700->vs.consts[ui][2].f32All = paramList->ParameterValues[ui][2]; | |||
| r700->vs.consts[ui][3].f32All = paramList->ParameterValues[ui][3]; | |||
| } | |||
| } | |||
| } else | |||
| r700->vs.num_consts = 0; | |||