diff options
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_cmdbuf.c | 3 | ||||
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_context.h | 4 | ||||
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_ioctl.c | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_reg.h | 18 | ||||
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_state.c | 20 |
5 files changed, 19 insertions, 28 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_cmdbuf.c b/src/mesa/drivers/dri/r300/r300_cmdbuf.c index cd8b7228c6..df825ba3b4 100644 --- a/src/mesa/drivers/dri/r300/r300_cmdbuf.c +++ b/src/mesa/drivers/dri/r300/r300_cmdbuf.c @@ -341,8 +341,6 @@ void r300InitCmdBuf(r300ContextPtr r300) ALLOC_STATE( lsf, always, 2, "lsf", 0 ); r300->hw.lsf.cmd[0] = cmducs(R300_RE_LINE_STIPPLE_FACTOR, 1); #endif - ALLOC_STATE( sm, always, 2, "sm", 0 ); - r300->hw.sm.cmd[0] = cmducs(R300_RE_SHADE_MODEL, 1); ALLOC_STATE( unk4260, always, 4, "unk4260", 0 ); r300->hw.unk4260.cmd[0] = cmducs(0x4260, 3); ALLOC_STATE( unk4274, always, 5, "unk4274", 0 ); @@ -487,7 +485,6 @@ void r300InitCmdBuf(r300ContextPtr r300) #endif insert_at_tail(&r300->hw.atomlist, &r300->hw.unk4260); insert_at_tail(&r300->hw.atomlist, &r300->hw.unk4274); - insert_at_tail(&r300->hw.atomlist, &r300->hw.sm); insert_at_tail(&r300->hw.atomlist, &r300->hw.unk4288); insert_at_tail(&r300->hw.atomlist, &r300->hw.unk42A0); insert_at_tail(&r300->hw.atomlist, &r300->hw.zbs); diff --git a/src/mesa/drivers/dri/r300/r300_context.h b/src/mesa/drivers/dri/r300/r300_context.h index 86f7cfaba6..fa6dbbf8af 100644 --- a/src/mesa/drivers/dri/r300/r300_context.h +++ b/src/mesa/drivers/dri/r300/r300_context.h @@ -271,9 +271,6 @@ struct r300_state_atom { #define R300_PS_POINTSIZE 1 #define R300_PS_CMDSIZE 2 -#define R300_SM_CMD_0 0 -#define R300_SM 1 - #define R300_ZBS_CMD_0 0 #define R300_ZBS_T_FACTOR 1 #define R300_ZBS_T_CONSTANT 2 @@ -423,7 +420,6 @@ struct r300_hw_state { #endif struct r300_state_atom unk4260; /* (4260) */ struct r300_state_atom unk4274; /* (4274) */ - struct r300_state_atom sm; /* shade model (4278) */ struct r300_state_atom unk4288; /* (4288) */ struct r300_state_atom unk42A0; /* (42A0) */ struct r300_state_atom zbs; /* zbias (42A4) */ diff --git a/src/mesa/drivers/dri/r300/r300_ioctl.c b/src/mesa/drivers/dri/r300/r300_ioctl.c index 39233bfc25..17a8b53777 100644 --- a/src/mesa/drivers/dri/r300/r300_ioctl.c +++ b/src/mesa/drivers/dri/r300/r300_ioctl.c @@ -184,7 +184,7 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer) R300_STATECHANGE(r300, pvs); r300->hw.pvs.cmd[R300_PVS_CNTL_1] = (0 << R300_PVS_CNTL_1_PROGRAM_START_SHIFT) | - (0 << R300_PVS_CNTL_1_UNKNOWN_SHIFT) | + (0 << R300_PVS_CNTL_1_POS_END_SHIFT) | (1 << R300_PVS_CNTL_1_PROGRAM_END_SHIFT); r300->hw.pvs.cmd[R300_PVS_CNTL_2] = 0; /* no parameters */ r300->hw.pvs.cmd[R300_PVS_CNTL_3] = diff --git a/src/mesa/drivers/dri/r300/r300_reg.h b/src/mesa/drivers/dri/r300/r300_reg.h index 32f4ebeea2..cd72856c71 100644 --- a/src/mesa/drivers/dri/r300/r300_reg.h +++ b/src/mesa/drivers/dri/r300/r300_reg.h @@ -232,18 +232,14 @@ I am fairly certain that they are correct unless stated otherwise in comments. // experiments so far have shown that both *must* point to an instruction // inside the vertex program, otherwise the GPU locks up. // fglrx usually sets CNTL_3_UNKNOWN to the end of the program and -// CNTL_1_UNKNOWN somewhere in the middle, but the criteria are not clear. - -// Some tests would indicate that CNTL_3_UNKNOWN is set to program len - -// number of "temp to result instrutions". I havent yet seen a case where -// "temp to result instrutions" have not been moved at the end of program. -// However tests have shown that fgls vertex program implementation is -// not perfect and im having hard-time trusting -// it at the time being. -aet +// CNTL_1_UNKNOWN points to instruction where last write to position takes place. +// Most likely this is used to ignore rest of the program in cases where group of verts arent visible. +// For some reason this "section" is sometimes accepted other instruction that have +// no relationship with position calculations. */ #define R300_VAP_PVS_CNTL_1 0x22D0 # define R300_PVS_CNTL_1_PROGRAM_START_SHIFT 0 -# define R300_PVS_CNTL_1_UNKNOWN_SHIFT 10 +# define R300_PVS_CNTL_1_POS_END_SHIFT 10 # define R300_PVS_CNTL_1_PROGRAM_END_SHIFT 20 /* Addresses are relative the the vertex program parameters area. */ #define R300_VAP_PVS_CNTL_2 0x22D4 @@ -292,11 +288,15 @@ I am fairly certain that they are correct unless stated otherwise in comments. # define R300_GB_VAP_RASTER_VTX_FMT_1__TEX_6_COMP_CNT_SHIFT 18 # define R300_GB_VAP_RASTER_VTX_FMT_1__TEX_7_COMP_CNT_SHIFT 21 +/* UNK30 seems to enables point to quad transformation on textures + (or something closely related to that). + This bit is rather fatal at the time being due to lackings at pixel shader side */ #define R300_GB_ENABLE 0x4008 # define R300_GB_POINT_STUFF_ENABLE (1<<0) # define R300_GB_LINE_STUFF_ENABLE (1<<1) # define R300_GB_TRIANGLE_STUFF_ENABLE (1<<2) # define R300_GB_STENCIL_AUTO_ENABLE (1<<4) +# define R300_GB_UNK30 (1<<30) /* each of the following is 2 bits wide */ #define R300_GB_TEX_REPLICATE 0 #define R300_GB_TEX_ST 1 diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c index 3d9f6ee8fd..64b8da1f5c 100644 --- a/src/mesa/drivers/dri/r300/r300_state.c +++ b/src/mesa/drivers/dri/r300/r300_state.c @@ -681,7 +681,7 @@ static void r300PointSize(GLcontext * ctx, GLfloat size) size = ctx->Point._Size; R300_STATECHANGE(r300, ps); - r300->hw.ps.cmd[R300_PS_POINTSIZE] = + r300->hw.ps.cmd[R300_PS_POINTSIZE] = ((int)(size * 6) << R300_POINTSIZE_X_SHIFT) | ((int)(size * 6) << R300_POINTSIZE_Y_SHIFT); @@ -890,13 +890,13 @@ static void r300ShadeModel(GLcontext * ctx, GLenum mode) { r300ContextPtr rmesa = R300_CONTEXT(ctx); - R300_STATECHANGE(rmesa, sm); + R300_STATECHANGE(rmesa, unk4274); switch (mode) { case GL_FLAT: - rmesa->hw.sm.cmd[R300_SM] = R300_RE_SHADE_MODEL_FLAT; + rmesa->hw.unk4274.cmd[2] = R300_RE_SHADE_MODEL_FLAT; break; case GL_SMOOTH: - rmesa->hw.sm.cmd[R300_SM] = R300_RE_SHADE_MODEL_SMOOTH; + rmesa->hw.unk4274.cmd[2] = R300_RE_SHADE_MODEL_SMOOTH; break; default: return; @@ -1770,7 +1770,7 @@ void r300SetupVertexShader(r300ContextPtr rmesa) R300_STATECHANGE(rmesa, pvs); rmesa->hw.pvs.cmd[R300_PVS_CNTL_1]=(rmesa->state.vertex_shader.program_start << R300_PVS_CNTL_1_PROGRAM_START_SHIFT) - | (rmesa->state.vertex_shader.unknown_ptr1 << R300_PVS_CNTL_1_UNKNOWN_SHIFT) + | (rmesa->state.vertex_shader.unknown_ptr1 << R300_PVS_CNTL_1_POS_END_SHIFT) | (rmesa->state.vertex_shader.program_end << R300_PVS_CNTL_1_PROGRAM_END_SHIFT); rmesa->hw.pvs.cmd[R300_PVS_CNTL_2]=(rmesa->state.vertex_shader.param_offset << R300_PVS_CNTL_2_PARAM_OFFSET_SHIFT) | (rmesa->state.vertex_shader.param_count << R300_PVS_CNTL_2_PARAM_COUNT_SHIFT); @@ -1815,7 +1815,7 @@ void r300SetupVertexProgram(r300ContextPtr rmesa) R300_STATECHANGE(rmesa, pvs); rmesa->hw.pvs.cmd[R300_PVS_CNTL_1]=(0 << R300_PVS_CNTL_1_PROGRAM_START_SHIFT) - | (inst_count/*pos_end*/ << R300_PVS_CNTL_1_UNKNOWN_SHIFT) + | (inst_count/*pos_end*/ << R300_PVS_CNTL_1_POS_END_SHIFT) | (inst_count << R300_PVS_CNTL_1_PROGRAM_END_SHIFT); rmesa->hw.pvs.cmd[R300_PVS_CNTL_2]=(0 << R300_PVS_CNTL_2_PARAM_OFFSET_SHIFT) | (param_count << R300_PVS_CNTL_2_PARAM_COUNT_SHIFT); @@ -2115,8 +2115,6 @@ void r300ResetHwState(r300ContextPtr r300) r300DepthMask(ctx, ctx->Depth.Mask); r300DepthFunc(ctx, ctx->Depth.Func); - r300ShadeModel(ctx, ctx->Light.ShadeModel); - /* stencil */ r300Enable(ctx, GL_STENCIL_TEST, ctx->Stencil.Enabled); r300StencilMask(ctx, ctx->Stencil.WriteMask[0]); @@ -2200,7 +2198,7 @@ void r300ResetHwState(r300ContextPtr r300) r300->hw.gb_enable.cmd[1] = R300_GB_POINT_STUFF_ENABLE | R300_GB_LINE_STUFF_ENABLE - | R300_GB_TRIANGLE_STUFF_ENABLE; + | R300_GB_TRIANGLE_STUFF_ENABLE /*| R300_GB_UNK30*/; r300->hw.gb_misc.cmd[R300_GB_MISC_MSPOS_0] = 0x66666666; r300->hw.gb_misc.cmd[R300_GB_MISC_MSPOS_1] = 0x06666666; @@ -2234,7 +2232,7 @@ void r300ResetHwState(r300ContextPtr r300) (6 << R300_POINTSIZE_Y_SHIFT); #endif - r300->hw.unk4230.cmd[1] = 0x01800000; + r300->hw.unk4230.cmd[1] = 0x01800000;//18000006; r300->hw.unk4230.cmd[2] = 0x00020006; r300->hw.unk4230.cmd[3] = r300PackFloat32(1.0 / 192.0); @@ -2249,7 +2247,7 @@ void r300ResetHwState(r300ContextPtr r300) r300->hw.unk4260.cmd[3] = r300PackFloat32(1.0); r300->hw.unk4274.cmd[1] = 0x00000002; - r300->hw.unk4274.cmd[2] = 0x0003AAAA; + r300ShadeModel(ctx, ctx->Light.ShadeModel); r300->hw.unk4274.cmd[3] = 0x00000000; r300->hw.unk4274.cmd[4] = 0x00000000; |