diff options
Diffstat (limited to 'src/mesa/drivers/dri/r300/r300_ioctl.c')
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_ioctl.c | 91 |
1 files changed, 40 insertions, 51 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_ioctl.c b/src/mesa/drivers/dri/r300/r300_ioctl.c index d2cc97d213..15c2cf3ad7 100644 --- a/src/mesa/drivers/dri/r300/r300_ioctl.c +++ b/src/mesa/drivers/dri/r300/r300_ioctl.c @@ -114,7 +114,7 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer) (ctx->Color.ColorMask[RCOMP] ? R300_COLORMASK0_R : 0) | (ctx->Color.ColorMask[ACOMP] ? R300_COLORMASK0_A : 0)); } else { - e32(0); + e32(0x0); } R300_STATECHANGE(r300, zs); @@ -194,6 +194,14 @@ static void r300EmitClearState(GLcontext * ctx) if (!(r300->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL)) has_tcl = 0; + /* FIXME: the values written to R300_VAP_INPUT_ROUTE_0_0 and + * R300_VAP_INPUT_ROUTE_0_1 are in fact known, however, the values are + * quite complex; see the functions in r300_emit.c. + * + * I believe it would be a good idea to extend the functions in + * r300_emit.c so that they can be used to setup the default values for + * these registers, as well as the actual values used for rendering. + */ R300_STATECHANGE(r300, vir[0]); reg_start(R300_VAP_INPUT_ROUTE_0_0, 0); if (!has_tcl) @@ -210,31 +218,33 @@ static void r300EmitClearState(GLcontext * ctx) reg_start(R300_VAP_INPUT_ROUTE_1_0, 0); e32(0xF688F688); + /* R300_VAP_INPUT_CNTL_0, R300_VAP_INPUT_CNTL_1 */ R300_STATECHANGE(r300, vic); reg_start(R300_VAP_INPUT_CNTL_0, 1); - e32(0x00000001); - e32(0x00000405); - - if (!has_tcl) { - R300_STATECHANGE(r300, vte); - /* comes from fglrx startup of clear */ - reg_start(R300_SE_VTE_CNTL, 1); - e32(0x043f); - e32(0x8); - - reg_start(0x21dc, 0); - e32(0xaaaaaaaa); - } + e32(R300_INPUT_CNTL_0_COLOR); + e32(R300_INPUT_CNTL_POS | R300_INPUT_CNTL_COLOR | R300_INPUT_CNTL_TC0); + + R300_STATECHANGE(r300, vte); + /* comes from fglrx startup of clear */ + reg_start(R300_SE_VTE_CNTL, 1); + e32(R300_VTX_W0_FMT | R300_VPORT_X_SCALE_ENA | + R300_VPORT_X_OFFSET_ENA | R300_VPORT_Y_SCALE_ENA | + R300_VPORT_Y_OFFSET_ENA | R300_VPORT_Z_SCALE_ENA | + R300_VPORT_Z_OFFSET_ENA); + e32(0x8); + + reg_start(0x21dc, 0); + e32(0xaaaaaaaa); R300_STATECHANGE(r300, vof); reg_start(R300_VAP_OUTPUT_VTX_FMT_0, 1); e32(R300_VAP_OUTPUT_VTX_FMT_0__POS_PRESENT | R300_VAP_OUTPUT_VTX_FMT_0__COLOR_PRESENT); - e32(0); /* no textures */ + e32(0x0); /* no textures */ R300_STATECHANGE(r300, txe); reg_start(R300_TX_ENABLE, 0); - e32(0); + e32(0x0); R300_STATECHANGE(r300, vpt); reg_start(R300_SE_VPORT_XSCALE, 5); @@ -247,12 +257,12 @@ static void r300EmitClearState(GLcontext * ctx) R300_STATECHANGE(r300, at); reg_start(R300_PP_ALPHA_TEST, 0); - e32(0); + e32(0x0); R300_STATECHANGE(r300, bld); reg_start(R300_RB3D_CBLEND, 1); - e32(0); - e32(0); + e32(0x0); + e32(0x0); R300_STATECHANGE(r300, unk221C); reg_start(R300_VAP_UNKNOWN_221C, 0); @@ -273,21 +283,21 @@ static void r300EmitClearState(GLcontext * ctx) /* The second constant is needed to get glxgears display anything .. */ reg_start(R300_RS_CNTL_0, 1); e32((1 << R300_RS_CNTL_CI_CNT_SHIFT) | R300_RS_CNTL_0_UNKNOWN_18); - e32(0); + e32(0x0); R300_STATECHANGE(r300, rr); reg_start(R300_RS_ROUTE_0, 0); - e32(0x00004000); + e32(R300_RS_ROUTE_0_COLOR); R300_STATECHANGE(r300, fp); reg_start(R300_PFS_CNTL_0, 2); - e32(0); - e32(0); - e32(0); + e32(0x0); + e32(0x0); + e32(0x0); reg_start(R300_PFS_NODE_0, 3); - e32(0); - e32(0); - e32(0); + e32(0x0); + e32(0x0); + e32(0x0); e32(R300_PFS_NODE_OUTPUT_COLOR); R300_STATECHANGE(r300, fpi[0]); @@ -313,7 +323,7 @@ static void r300EmitClearState(GLcontext * ctx) e32((0 << R300_PVS_CNTL_1_PROGRAM_START_SHIFT) | (0 << R300_PVS_CNTL_1_POS_END_SHIFT) | (1 << R300_PVS_CNTL_1_PROGRAM_END_SHIFT)); - e32(0); + e32(0x0); e32(1 << R300_PVS_CNTL_3_PROGRAM_UNKNOWN_SHIFT); R300_STATECHANGE(r300, vpi); @@ -321,12 +331,12 @@ static void r300EmitClearState(GLcontext * ctx) e32(VP_OUT(ADD, OUT, 0, XYZW)); e32(VP_IN(IN, 0)); e32(VP_ZERO()); - e32(0); + e32(0x0); e32(VP_OUT(ADD, OUT, 1, XYZW)); e32(VP_IN(IN, 1)); e32(VP_ZERO()); - e32(0); + e32(0x0); } } @@ -667,27 +677,6 @@ void r300AllocDmaRegion(r300ContextPtr rmesa, #endif -/* Called via glXGetMemoryOffsetMESA() */ -GLuint r300GetMemoryOffsetMESA(__DRInativeDisplay * dpy, int scrn, - const GLvoid * pointer) -{ - GET_CURRENT_CONTEXT(ctx); - r300ContextPtr rmesa; - GLuint card_offset; - - if (!ctx || !(rmesa = R300_CONTEXT(ctx))) { - fprintf(stderr, "%s: no context\n", __FUNCTION__); - return ~0; - } - - if (!r300IsGartMemory(rmesa, pointer, 0)) - return ~0; - - card_offset = r300GartOffsetFromVirtual(rmesa, pointer); - - return card_offset - rmesa->radeon.radeonScreen->gart_base; -} - GLboolean r300IsGartMemory(r300ContextPtr rmesa, const GLvoid * pointer, GLint size) { |