mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-31 05:30:11 +01:00
r600 : add read port allocation for uniform;
mapping ps input based on vs output;
fix bugs including constants updating for vs.
This commit is contained in:
parent
c332525ad3
commit
2db72f329f
4 changed files with 101 additions and 62 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue