mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
r600: fix regression in texenv
Emit shader consts with the shader program itself
This commit is contained in:
parent
b1700b03af
commit
5e51903606
3 changed files with 37 additions and 60 deletions
|
|
@ -263,11 +263,13 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx)
|
|||
{
|
||||
context_t *context = R700_CONTEXT(ctx);
|
||||
R700_CHIP_CONTEXT *r700 = (R700_CHIP_CONTEXT*)(&context->hw);
|
||||
|
||||
BATCH_LOCALS(&context->radeon);
|
||||
struct r700_fragment_program *fp = (struct r700_fragment_program *)
|
||||
(ctx->FragmentProgram._Current);
|
||||
r700_AssemblerBase *pAsm = &(fp->r700AsmCode);
|
||||
struct gl_fragment_program *mesa_fp = &(fp->mesa_program);
|
||||
struct gl_program_parameter_list *paramList;
|
||||
unsigned int unNumParamData;
|
||||
unsigned int ui, i;
|
||||
unsigned int unNumOfReg;
|
||||
unsigned int unBit;
|
||||
|
|
@ -335,6 +337,35 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx)
|
|||
CLEARbit(r700->DB_SHADER_CONTROL.u32All, Z_EXPORT_ENABLE_bit);
|
||||
}
|
||||
|
||||
/* sent out shader constants. */
|
||||
paramList = fp->mesa_program.Base.Parameters;
|
||||
|
||||
if(NULL != paramList)
|
||||
{
|
||||
_mesa_load_state_parameters(ctx, paramList);
|
||||
|
||||
unNumParamData = paramList->NumParameters * 4;
|
||||
|
||||
BEGIN_BATCH_NO_AUTOSTATE(2 + unNumParamData);
|
||||
|
||||
R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_ALU_CONST, unNumParamData));
|
||||
|
||||
/* assembler map const from very beginning. */
|
||||
R600_OUT_BATCH(SQ_ALU_CONSTANT_PS_OFFSET * 4);
|
||||
|
||||
unNumParamData = paramList->NumParameters;
|
||||
|
||||
for(ui=0; ui<unNumParamData; ui++)
|
||||
{
|
||||
R600_OUT_BATCH(*((unsigned int*)&(paramList->ParameterValues[ui][0])));
|
||||
R600_OUT_BATCH(*((unsigned int*)&(paramList->ParameterValues[ui][1])));
|
||||
R600_OUT_BATCH(*((unsigned int*)&(paramList->ParameterValues[ui][2])));
|
||||
R600_OUT_BATCH(*((unsigned int*)&(paramList->ParameterValues[ui][3])));
|
||||
}
|
||||
END_BATCH();
|
||||
COMMIT_BATCH();
|
||||
}
|
||||
|
||||
// emit ps input map
|
||||
unBit = 1 << FRAG_ATTRIB_COL0;
|
||||
if(mesa_fp->Base.InputsRead & unBit)
|
||||
|
|
@ -391,45 +422,3 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx)
|
|||
return GL_TRUE;
|
||||
}
|
||||
|
||||
GLboolean r700SendPSConstants(GLcontext * ctx)
|
||||
{
|
||||
context_t *context = R700_CONTEXT(ctx);
|
||||
BATCH_LOCALS(&context->radeon);
|
||||
struct r700_fragment_program *fp = (struct r700_fragment_program *)
|
||||
(ctx->FragmentProgram._Current);
|
||||
struct gl_program_parameter_list *paramList;
|
||||
unsigned int unNumParamData;
|
||||
unsigned int ui;
|
||||
|
||||
/* sent out shader constants. */
|
||||
paramList = fp->mesa_program.Base.Parameters;
|
||||
|
||||
if(NULL != paramList)
|
||||
{
|
||||
_mesa_load_state_parameters(ctx, paramList);
|
||||
|
||||
unNumParamData = paramList->NumParameters * 4;
|
||||
|
||||
BEGIN_BATCH_NO_AUTOSTATE(2 + unNumParamData);
|
||||
|
||||
R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_ALU_CONST, unNumParamData));
|
||||
|
||||
/* assembler map const from very beginning. */
|
||||
R600_OUT_BATCH(SQ_ALU_CONSTANT_PS_OFFSET * 4);
|
||||
|
||||
unNumParamData = paramList->NumParameters;
|
||||
|
||||
for(ui=0; ui<unNumParamData; ui++)
|
||||
{
|
||||
R600_OUT_BATCH(*((unsigned int*)&(paramList->ParameterValues[ui][0])));
|
||||
R600_OUT_BATCH(*((unsigned int*)&(paramList->ParameterValues[ui][1])));
|
||||
R600_OUT_BATCH(*((unsigned int*)&(paramList->ParameterValues[ui][2])));
|
||||
R600_OUT_BATCH(*((unsigned int*)&(paramList->ParameterValues[ui][3])));
|
||||
}
|
||||
END_BATCH();
|
||||
COMMIT_BATCH();
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -283,8 +283,6 @@ void r700EmitState(GLcontext * ctx)
|
|||
r700SendFSState(context); // FIXME just a place holder for now
|
||||
r700SendPSState(context);
|
||||
r700SendVSState(context);
|
||||
r700SendVSConstants(ctx);
|
||||
r700SendPSConstants(ctx);
|
||||
|
||||
r700SendTextureState(context);
|
||||
r700SetupStreams(ctx);
|
||||
|
|
|
|||
|
|
@ -336,10 +336,14 @@ GLboolean r700SetupVertexProgram(GLcontext * ctx)
|
|||
{
|
||||
context_t *context = R700_CONTEXT(ctx);
|
||||
R700_CHIP_CONTEXT *r700 = (R700_CHIP_CONTEXT*)(&context->hw);
|
||||
|
||||
BATCH_LOCALS(&context->radeon);
|
||||
struct r700_vertex_program *vp
|
||||
= (struct r700_vertex_program *)ctx->VertexProgram._Current;
|
||||
|
||||
struct gl_program_parameter_list *paramList;
|
||||
unsigned int unNumParamData;
|
||||
unsigned int ui;
|
||||
|
||||
if(GL_FALSE == vp->loaded)
|
||||
{
|
||||
if(vp->r700Shader.bNeedsAssembly == GL_TRUE)
|
||||
|
|
@ -385,21 +389,7 @@ GLboolean r700SetupVertexProgram(GLcontext * ctx)
|
|||
CLEARbit(r700->SPI_PS_IN_CONTROL_0.u32All, LINEAR_GRADIENT_ENA_bit);
|
||||
*/
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
GLboolean r700SendVSConstants(GLcontext * ctx)
|
||||
{
|
||||
context_t *context = R700_CONTEXT(ctx);
|
||||
BATCH_LOCALS(&context->radeon);
|
||||
struct r700_vertex_program *vp
|
||||
= (struct r700_vertex_program *)ctx->VertexProgram._Current;
|
||||
struct gl_program_parameter_list *paramList;
|
||||
unsigned int unNumParamData;
|
||||
unsigned int ui;
|
||||
|
||||
/* sent out shader constants. */
|
||||
|
||||
paramList = vp->mesa_program.Base.Parameters;
|
||||
|
||||
if(NULL != paramList)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue