mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
per vp sw fallbacks
This commit is contained in:
parent
7d82d284e3
commit
e797bc8bbe
5 changed files with 55 additions and 26 deletions
|
|
@ -583,6 +583,9 @@ extern int hw_tcl_on;
|
|||
|
||||
#define CURRENT_VERTEX_SHADER(ctx) (ctx->VertexProgram._Current)
|
||||
|
||||
/* Should but doesnt work */
|
||||
//#define CURRENT_VERTEX_SHADER(ctx) (R300_CONTEXT(ctx)->curr_vp)
|
||||
|
||||
//#define TMU_ENABLED(ctx, unit) (hw_tcl_on ? ctx->Texture.Unit[unit]._ReallyEnabled && (OutputsWritten & (1<<(VERT_RESULT_TEX0+(unit)))) :
|
||||
// (r300->state.render_inputs & (_TNL_BIT_TEX0<<(unit))))
|
||||
//#define TMU_ENABLED(ctx, unit) (hw_tcl_on ? ctx->Texture.Unit[unit]._ReallyEnabled && OutputsWritten & (1<<(VERT_RESULT_TEX0+(unit))) :
|
||||
|
|
@ -604,6 +607,9 @@ struct r300_vertex_program {
|
|||
int num_temporaries; /* Number of temp vars used by program */
|
||||
int inputs[VERT_ATTRIB_MAX];
|
||||
int outputs[VERT_RESULT_MAX];
|
||||
int native;
|
||||
int ref_count;
|
||||
int use_ref_count;
|
||||
};
|
||||
|
||||
#if USE_ARB_F_P == 1
|
||||
|
|
@ -852,6 +858,7 @@ struct r300_context {
|
|||
struct r300_hw_state hw;
|
||||
struct r300_cmdbuf cmdbuf;
|
||||
struct r300_state state;
|
||||
struct vertex_program *curr_vp;
|
||||
|
||||
/* Vertex buffers
|
||||
*/
|
||||
|
|
@ -917,4 +924,9 @@ extern void radeon_init_vtxfmt_a(r300ContextPtr rmesa);
|
|||
extern void r300_init_vbo_funcs(struct dd_function_table *functions);
|
||||
#endif
|
||||
|
||||
#define RADEON_D_CAPTURE 0
|
||||
#define RADEON_D_PLAYBACK 1
|
||||
#define RADEON_D_PLAYBACK_RAW 2
|
||||
#define RADEON_D_T 3
|
||||
|
||||
#endif /* __R300_CONTEXT_H__ */
|
||||
|
|
|
|||
|
|
@ -1275,6 +1275,8 @@ I am fairly certain that they are correct unless stated otherwise in comments.
|
|||
#define R300_RB3D_ZSTENCIL_FORMAT 0x4F10
|
||||
# define R300_DEPTH_FORMAT_16BIT_INT_Z (0 << 0)
|
||||
# define R300_DEPTH_FORMAT_24BIT_INT_Z (2 << 0)
|
||||
/* 16 bit format or some aditional bit ? */
|
||||
# define R300_DEPTH_FORMAT_UNK32 (32 << 0)
|
||||
|
||||
/* gap */
|
||||
#define R300_RB3D_DEPTHOFFSET 0x4F20
|
||||
|
|
|
|||
|
|
@ -543,7 +543,7 @@ static GLboolean r300_run_vb_render(GLcontext *ctx,
|
|||
fprintf(stderr, "%s\n", __FUNCTION__);
|
||||
|
||||
|
||||
r300UpdateShaders(rmesa);
|
||||
//r300UpdateShaders(rmesa);
|
||||
|
||||
r300ReleaseArrays(ctx);
|
||||
r300EmitArrays(ctx, GL_FALSE);
|
||||
|
|
@ -567,13 +567,13 @@ static GLboolean r300_run_vb_render(GLcontext *ctx,
|
|||
|
||||
r300_render_vb_primitive(rmesa, ctx, start, start + length, prim);
|
||||
}
|
||||
|
||||
|
||||
reg_start(R300_RB3D_DSTCACHE_CTLSTAT,0);
|
||||
e32(0x0000000a);
|
||||
|
||||
reg_start(0x4f18,0);
|
||||
e32(0x00000003);
|
||||
|
||||
|
||||
#ifdef USER_BUFFERS
|
||||
r300UseArrays(ctx);
|
||||
#endif
|
||||
|
|
@ -690,6 +690,7 @@ void dump_dt(struct dt *dt, int count)
|
|||
if (RADEON_DEBUG & DEBUG_PRIMS)
|
||||
fprintf(stderr, "%s\n", __FUNCTION__);
|
||||
|
||||
r300UpdateShaders(rmesa);
|
||||
if (rmesa->state.VB.LockCount == 0) {
|
||||
r300ReleaseArrays(ctx);
|
||||
r300EmitArraysVtx(ctx, GL_FALSE);
|
||||
|
|
@ -845,6 +846,7 @@ static GLboolean r300_run_tcl_render(GLcontext *ctx,
|
|||
struct tnl_pipeline_stage *stage)
|
||||
{
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx);
|
||||
struct r300_vertex_program *vp;
|
||||
|
||||
hw_tcl_on=future_hw_tcl_on;
|
||||
|
||||
|
|
@ -853,25 +855,23 @@ static GLboolean r300_run_tcl_render(GLcontext *ctx,
|
|||
if(hw_tcl_on == GL_FALSE)
|
||||
return GL_TRUE;
|
||||
|
||||
//r300UpdateShaders(rmesa);
|
||||
r300UpdateShaders(rmesa);
|
||||
|
||||
vp = (struct r300_vertex_program *)CURRENT_VERTEX_SHADER(ctx);
|
||||
#if 0 /* Draw every second request with software arb vp */
|
||||
vp->native++;
|
||||
vp->native &= 1;
|
||||
//vp->native = GL_FALSE;
|
||||
#endif
|
||||
if (vp->native == GL_FALSE) {
|
||||
hw_tcl_on = GL_FALSE;
|
||||
return GL_TRUE;
|
||||
}
|
||||
//r300UpdateShaderStates(rmesa);
|
||||
|
||||
return r300_run_vb_render(ctx, stage);
|
||||
}
|
||||
|
||||
static void r300_check_tcl_render(GLcontext *ctx, struct tnl_pipeline_stage *stage)
|
||||
{
|
||||
|
||||
if (RADEON_DEBUG & DEBUG_STATE)
|
||||
fprintf(stderr, "%s\n", __FUNCTION__);
|
||||
|
||||
/* We only support rendering in hardware for now */
|
||||
if (ctx->RenderMode != GL_RENDER) {
|
||||
//stage->active = GL_FALSE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const struct tnl_pipeline_stage _r300_tcl_stage = {
|
||||
"r300 tcl",
|
||||
NULL,
|
||||
|
|
|
|||
|
|
@ -11,13 +11,22 @@
|
|||
|
||||
static void r300BindProgram(GLcontext *ctx, GLenum target, struct program *prog)
|
||||
{
|
||||
/*
|
||||
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx);
|
||||
struct r300_vertex_program *vp=(void *)prog;
|
||||
*/
|
||||
|
||||
|
||||
switch(target){
|
||||
case GL_VERTEX_PROGRAM_ARB:
|
||||
rmesa->curr_vp = vp;
|
||||
vp->ref_count++;
|
||||
#if 0
|
||||
if((vp->ref_count % 1500) == 0) {
|
||||
fprintf(stderr, "id %p, ref_count %d\n", vp, vp->ref_count);
|
||||
_mesa_print_program(&vp->mesa_program.Base);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if USE_ARB_F_P == 1
|
||||
case GL_FRAGMENT_PROGRAM_ARB:
|
||||
#endif
|
||||
|
|
@ -77,8 +86,11 @@ static struct program *r300NewProgram(GLcontext *ctx, GLenum target, GLuint id)
|
|||
|
||||
static void r300DeleteProgram(GLcontext *ctx, struct program *prog)
|
||||
{
|
||||
//r300ContextPtr rmesa = R300_CONTEXT(ctx);
|
||||
//struct r300_vertex_program *vp=(void *)prog;
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx);
|
||||
struct r300_vertex_program *vp=(void *)prog;
|
||||
|
||||
/*if(rmesa->curr_vp == vp)
|
||||
rmesa->curr_vp = NULL;*/
|
||||
|
||||
_mesa_delete_program(ctx, prog);
|
||||
}
|
||||
|
|
@ -86,16 +98,16 @@ static void r300DeleteProgram(GLcontext *ctx, struct program *prog)
|
|||
static void r300ProgramStringNotify(GLcontext *ctx, GLenum target,
|
||||
struct program *prog)
|
||||
{
|
||||
/*struct r300_vertex_program *vp=(void *)prog;*/
|
||||
struct r300_vertex_program *vp=(void *)prog;
|
||||
#if USE_ARB_F_P == 1
|
||||
struct r300_fragment_program *fp = (struct r300_fragment_program *) prog;
|
||||
#endif
|
||||
|
||||
switch(target) {
|
||||
case GL_VERTEX_PROGRAM_ARB:
|
||||
/*vp->translated=GL_FALSE;
|
||||
translate_vertex_shader(vp);*/
|
||||
//debug_vp(ctx, vp);
|
||||
vp->translated = GL_FALSE;
|
||||
memset(&vp->translated, 0, sizeof(struct r300_vertex_program) - sizeof(struct vertex_program));
|
||||
/*translate_vertex_shader(vp);*/
|
||||
break;
|
||||
case GL_FRAGMENT_PROGRAM_ARB:
|
||||
#if USE_ARB_F_P == 1
|
||||
|
|
|
|||
|
|
@ -934,7 +934,10 @@ void translate_vertex_shader(struct r300_vertex_program *vp)
|
|||
if(u_temp_i < vp->num_temporaries){
|
||||
WARN_ONCE("Ran out of temps, num temps %d, us %d\n", vp->num_temporaries, u_temp_i);
|
||||
vp->translated=GL_TRUE; //GL_FALSE; /* temps exhausted - program cannot be run */
|
||||
}else
|
||||
vp->native = GL_FALSE;
|
||||
}else{
|
||||
vp->translated=GL_TRUE;
|
||||
vp->native = GL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue