{
struct radeon_state_atom *atom;
char * dest = rmesa->backup_store.cmd_buf;
-
+ uint32_t dwords;
if (R200_DEBUG & DEBUG_STATE)
fprintf(stderr, "%s\n", __FUNCTION__);
rmesa->backup_store.cmd_used = 0;
foreach( atom, &rmesa->hw.atomlist ) {
- if ( atom->check( rmesa->radeon.glCtx, atom ) ) {
+ dwords = atom->check( rmesa->radeon.glCtx, atom );
+ if ( dwords ) {
int size = atom->cmd_size * 4;
- memcpy( dest, atom->cmd, size);
- dest += size;
- rmesa->backup_store.cmd_used += size;
+
+ if (atom->emit) {
+ (*atom->emit)(rmesa->radeon.glCtx, atom);
+ } else {
+ memcpy( dest, atom->cmd, size);
+ dest += size;
+ rmesa->backup_store.cmd_used += size;
+ }
if (R200_DEBUG & DEBUG_STATE)
print_state_atom( atom );
}
char *dest;
int mtu;
struct radeon_state_atom *atom;
+ uint32_t dwords;
if (R200_DEBUG & (DEBUG_STATE|DEBUG_PRIMS))
fprintf(stderr, "%s\n", __FUNCTION__);
if (R200_DEBUG & DEBUG_STATE) {
foreach( atom, &rmesa->hw.atomlist ) {
if ( atom->dirty || rmesa->hw.all_dirty ) {
- if ( atom->check( rmesa->radeon.glCtx, atom ) )
+ dwords = atom->check( rmesa->radeon.glCtx, atom );
+ if ( dwords )
print_state_atom( atom );
else
fprintf(stderr, "skip state %s\n", atom->name);
if ( rmesa->hw.all_dirty )
atom->dirty = GL_TRUE;
if ( atom->dirty ) {
- if ( atom->check( rmesa->radeon.glCtx, atom ) ) {
+ dwords = atom->check( rmesa->radeon.glCtx, atom );
+ if ( dwords ) {
int size = atom->cmd_size * 4;
- memcpy( dest, atom->cmd, size);
- dest += size;
- rmesa->store.cmd_used += size;
+ if (atom->emit) {
+ (*atom->emit)(rmesa->radeon.glCtx, atom);
+ } else {
+ memcpy( dest, atom->cmd, size);
+ dest += size;
+ rmesa->store.cmd_used += size;
+ }
atom->dirty = GL_FALSE;
}
}
static int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom) \
{ \
r200ContextPtr rmesa = R200_CONTEXT(ctx); \
- (void) atom; \
(void) rmesa; \
- return FLAG; \
+ return (FLAG) ? atom->cmd_size : 0; \
}
#define TCL_CHECK( NM, FLAG ) \
static int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom) \
{ \
r200ContextPtr rmesa = R200_CONTEXT(ctx); \
- (void) atom; \
- return !rmesa->radeon.TclFallback && !ctx->VertexProgram._Enabled && (FLAG); \
+ return (!rmesa->radeon.TclFallback && !ctx->VertexProgram._Enabled && (FLAG)) ? atom->cmd_size : 0; \
}
#define TCL_OR_VP_CHECK( NM, FLAG ) \
static int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom ) \
{ \
r200ContextPtr rmesa = R200_CONTEXT(ctx); \
- (void) atom; \
- return !rmesa->radeon.TclFallback && (FLAG); \
+ return (!rmesa->radeon.TclFallback && (FLAG)) ? atom->cmd_size : 0; \
}
#define VP_CHECK( NM, FLAG ) \
{ \
r200ContextPtr rmesa = R200_CONTEXT(ctx); \
(void) atom; \
- return !rmesa->radeon.TclFallback && ctx->VertexProgram._Enabled && (FLAG); \
+ return (!rmesa->radeon.TclFallback && ctx->VertexProgram._Enabled && (FLAG)) ? atom->cmd_size : 0; \
}
-
CHECK( always, GL_TRUE )
CHECK( never, GL_FALSE )
CHECK( tex_any, ctx->Texture._EnabledUnits )
{
struct radeon_state_atom *atom;
char *dest;
+ uint32_t dwords;
if (RADEON_DEBUG & (DEBUG_STATE|DEBUG_PRIMS))
fprintf(stderr, "%s\n", __FUNCTION__);
atom->is_tcl)
atom->dirty = GL_FALSE;
if (atom->dirty) {
- if (atom->check(rmesa->radeon.glCtx, 0)) {
+ dwords = atom->check(rmesa->radeon.glCtx, atom);
+ if (dwords) {
int size = atom->cmd_size * 4;
- memcpy(dest, atom->cmd, size);
- dest += size;
- rmesa->store.cmd_used += size;
+
+ if (atom->emit) {
+ (*atom->emit)(rmesa->radeon.glCtx, atom);
+ } else {
+ memcpy(dest, atom->cmd, size);
+ dest += size;
+ rmesa->store.cmd_used += size;
+ }
atom->dirty = GL_FALSE;
}
}
#define CHECK( NM, FLAG ) \
static int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom ) \
{ \
- return FLAG; \
+ return FLAG ? atom->cmd_size : 0; \
}
#define TCL_CHECK( NM, FLAG ) \
static int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom ) \
{ \
r100ContextPtr rmesa = R100_CONTEXT(ctx); \
- return !rmesa->radeon.TclFallback && (FLAG); \
+ return (!rmesa->radeon.TclFallback && (FLAG)) ? atom->cmd_size : 0; \
}