diff --git a/src/cayman_accel.c b/src/cayman_accel.c index 3d803c2..3dafee1 100644 --- a/src/cayman_accel.c +++ b/src/cayman_accel.c @@ -65,8 +65,10 @@ cayman_set_default_state(ScrnInfoPtr pScrn) evergreen_start_3d(pScrn); - BEGIN_BATCH(21); - EREG(SQ_LDS_ALLOC_PS, 0); + BEGIN_BATCH(22); + PACK0(SQ_LDS_ALLOC, 2); + E32(0); // SQ_LDS_ALLOC + E32(0); // SQ_LDS_ALLOC_PS PACK0(SQ_ESGS_RING_ITEMSIZE, 6); E32(0); @@ -103,9 +105,313 @@ cayman_set_default_state(ScrnInfoPtr pScrn) RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); END_BATCH(); - BEGIN_BATCH(52); + BEGIN_BATCH(3 + 2); + EREG(DB_Z_READ_BASE, 0); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(DB_Z_WRITE_BASE, 0); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(DB_STENCIL_READ_BASE, 0); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(DB_STENCIL_READ_BASE, 0); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + // rings + BEGIN_BATCH(3 + 2); + EREG(SQ_ESGS_RING_BASE, 4096 >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(SQ_GSVS_RING_BASE, (4096 + (96 * 256 * 1)) >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3); + EREG(GRBM_GFX_INDEX, 0x40000000); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(SQ_ESTMP_RING_BASE, (4096 + (96 * 256 * 2)) >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(SQ_GSTMP_RING_BASE, (4096 + (96 * 256 * 3)) >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(SQ_VSTMP_RING_BASE, (4096 + (96 * 256 * 4)) >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(SQ_PSTMP_RING_BASE, (4096 + (96 * 256 * 5)) >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(SQ_LSTMP_RING_BASE, (4096 + (96 * 256 * 6)) >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(SQ_HSTMP_RING_BASE, (4096 + (96 * 256 * 7)) >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3); + EREG(GRBM_GFX_INDEX, 0x40010000); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(SQ_ESTMP_RING_BASE, (4096 + (96 * 256 * 8)) >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(SQ_GSTMP_RING_BASE, (4096 + (96 * 256 * 9)) >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(SQ_VSTMP_RING_BASE, (4096 + (96 * 256 * 10)) >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(SQ_PSTMP_RING_BASE, (4096 + (96 * 256 * 11)) >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(SQ_LSTMP_RING_BASE, (4096 + (96 * 256 * 12)) >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3 + 2); + EREG(SQ_HSTMP_RING_BASE, (4096 + (96 * 256 * 13)) >> 8); + RELOC_BATCH(accel_state->shaders_bo, RADEON_GEM_DOMAIN_VRAM, 0); + END_BATCH(); + + BEGIN_BATCH(3); + EREG(GRBM_GFX_INDEX, 0xC0000000); + END_BATCH(); + + BEGIN_BATCH(24); + EREG(SQ_ESGS_RING_SIZE, 0x50); + EREG(SQ_GSVS_RING_SIZE, 0x60); + EREG(SQ_ESTMP_RING_SIZE, 0x20); + EREG(SQ_GSTMP_RING_SIZE, 0x20); + EREG(SQ_VSTMP_RING_SIZE, 0x20); + EREG(SQ_PSTMP_RING_SIZE, 0x20); + EREG(SQ_LSTMP_RING_SIZE, 0x20); + EREG(SQ_HSTMP_RING_SIZE, 0x20); + END_BATCH(); + + BEGIN_BATCH(68 + 98 + 15); + // 68 + E32(0xC0426900); // ***TYPE 3*** Opcode(0x69) == IT_SET_CONTEXT_REG 0x0043 DWORD 0x001c PKT + E32(0x00000094); // ***TYPE 3*** Body + E32(0x80000000); // 0x0000A094 mmPA_SC_VPORT_SCISSOR_0_TL + E32(0x02000200); // 0x0000A095 mmPA_SC_VPORT_SCISSOR_0_BR + E32(0x80000000); // 0x0000A096 mmPA_SC_VPORT_SCISSOR_1_TL + E32(0x20002000); // 0x0000A097 mmPA_SC_VPORT_SCISSOR_1_BR + E32(0x80000000); // 0x0000A098 mmPA_SC_VPORT_SCISSOR_2_TL + E32(0x20002000); // 0x0000A099 mmPA_SC_VPORT_SCISSOR_2_BR + E32(0x80000000); // 0x0000A09A mmPA_SC_VPORT_SCISSOR_3_TL + E32(0x20002000); // 0x0000A09B mmPA_SC_VPORT_SCISSOR_3_BR + E32(0x80000000); // 0x0000A09C mmPA_SC_VPORT_SCISSOR_4_TL + E32(0x20002000); // 0x0000A09D mmPA_SC_VPORT_SCISSOR_4_BR + E32(0x80000000); // 0x0000A09E mmPA_SC_VPORT_SCISSOR_5_TL + E32(0x20002000); // 0x0000A09F mmPA_SC_VPORT_SCISSOR_5_BR + E32(0x80000000); // 0x0000A0A0 mmPA_SC_VPORT_SCISSOR_6_TL + E32(0x20002000); // 0x0000A0A1 mmPA_SC_VPORT_SCISSOR_6_BR + E32(0x80000000); // 0x0000A0A2 mmPA_SC_VPORT_SCISSOR_7_TL + E32(0x20002000); // 0x0000A0A3 mmPA_SC_VPORT_SCISSOR_7_BR + E32(0x80000000); // 0x0000A0A4 mmPA_SC_VPORT_SCISSOR_8_TL + E32(0x20002000); // 0x0000A0A5 mmPA_SC_VPORT_SCISSOR_8_BR + E32(0x80000000); // 0x0000A0A6 mmPA_SC_VPORT_SCISSOR_9_TL + E32(0x20002000); // 0x0000A0A7 mmPA_SC_VPORT_SCISSOR_9_BR + E32(0x80000000); // 0x0000A0A8 mmPA_SC_VPORT_SCISSOR_10_TL + E32(0x20002000); // 0x0000A0A9 mmPA_SC_VPORT_SCISSOR_10_BR + E32(0x80000000); // 0x0000A0AA mmPA_SC_VPORT_SCISSOR_11_TL + E32(0x20002000); // 0x0000A0AB mmPA_SC_VPORT_SCISSOR_11_BR + E32(0x80000000); // 0x0000A0AC mmPA_SC_VPORT_SCISSOR_12_TL + E32(0x20002000); // 0x0000A0AD mmPA_SC_VPORT_SCISSOR_12_BR + E32(0x80000000); // 0x0000A0AE mmPA_SC_VPORT_SCISSOR_13_TL + E32(0x20002000); // 0x0000A0AF mmPA_SC_VPORT_SCISSOR_13_BR + E32(0x80000000); // 0x0000A0B0 mmPA_SC_VPORT_SCISSOR_14_TL + E32(0x20002000); // 0x0000A0B1 mmPA_SC_VPORT_SCISSOR_14_BR + E32(0x80000000); // 0x0000A0B2 mmPA_SC_VPORT_SCISSOR_15_TL + E32(0x20002000); // 0x0000A0B3 mmPA_SC_VPORT_SCISSOR_15_BR + E32(0x00000000); // 0x0000A0B4 mmPA_SC_VPORT_ZMIN_0 + E32(0x3F800000); // 0x0000A0B5 mmPA_SC_VPORT_ZMAX_0 + E32(0x00000000); // 0x0000A0B6 mmPA_SC_VPORT_ZMIN_1 + E32(0x3F800000); // 0x0000A0B7 mmPA_SC_VPORT_ZMAX_1 + E32(0x00000000); // 0x0000A0B8 mmPA_SC_VPORT_ZMIN_2 + E32(0x3F800000); // 0x0000A0B9 mmPA_SC_VPORT_ZMAX_2 + E32(0x00000000); // 0x0000A0BA mmPA_SC_VPORT_ZMIN_3 + E32(0x3F800000); // 0x0000A0BB mmPA_SC_VPORT_ZMAX_3 + E32(0x00000000); // 0x0000A0BC mmPA_SC_VPORT_ZMIN_4 + E32(0x3F800000); // 0x0000A0BD mmPA_SC_VPORT_ZMAX_4 + E32(0x00000000); // 0x0000A0BE mmPA_SC_VPORT_ZMIN_5 + E32(0x3F800000); // 0x0000A0BF mmPA_SC_VPORT_ZMAX_5 + E32(0x00000000); // 0x0000A0C0 mmPA_SC_VPORT_ZMIN_6 + E32(0x3F800000); // 0x0000A0C1 mmPA_SC_VPORT_ZMAX_6 + E32(0x00000000); // 0x0000A0C2 mmPA_SC_VPORT_ZMIN_7 + E32(0x3F800000); // 0x0000A0C3 mmPA_SC_VPORT_ZMAX_7 + E32(0x00000000); // 0x0000A0C4 mmPA_SC_VPORT_ZMIN_8 + E32(0x3F800000); // 0x0000A0C5 mmPA_SC_VPORT_ZMAX_8 + E32(0x00000000); // 0x0000A0C6 mmPA_SC_VPORT_ZMIN_9 + E32(0x3F800000); // 0x0000A0C7 mmPA_SC_VPORT_ZMAX_9 + E32(0x00000000); // 0x0000A0C8 mmPA_SC_VPORT_ZMIN_10 + E32(0x3F800000); // 0x0000A0C9 mmPA_SC_VPORT_ZMAX_10 + E32(0x00000000); // 0x0000A0CA mmPA_SC_VPORT_ZMIN_11 + E32(0x3F800000); // 0x0000A0CB mmPA_SC_VPORT_ZMAX_11 + E32(0x00000000); // 0x0000A0CC mmPA_SC_VPORT_ZMIN_12 + E32(0x3F800000); // 0x0000A0CD mmPA_SC_VPORT_ZMAX_12 + E32(0x00000000); // 0x0000A0CE mmPA_SC_VPORT_ZMIN_13 + E32(0x3F800000); // 0x0000A0CF mmPA_SC_VPORT_ZMAX_13 + E32(0x00000000); // 0x0000A0D0 mmPA_SC_VPORT_ZMIN_14 + E32(0x3F800000); // 0x0000A0D1 mmPA_SC_VPORT_ZMAX_14 + E32(0x00000000); // 0x0000A0D2 mmPA_SC_VPORT_ZMIN_15 + E32(0x3F800000); // 0x0000A0D3 mmPA_SC_VPORT_ZMAX_15 + E32(0x00000000); // 0x0000A0D4 mmSX_MISC + E32(0x000001FF); // 0x0000A0D5 mmSX_SURFACE_SYNC + + // 98 + E32(0xC0606900); // ***TYPE 3*** Opcode(0x69) == IT_SET_CONTEXT_REG 0x0061 DWORD 0x0020 PKT + E32(0x0000010F); // ***TYPE 3*** Body + E32(0x42800000); // 0x0000A10F mmPA_CL_VPORT_XSCALE + E32(0x42800000); // 0x0000A110 mmPA_CL_VPORT_XOFFSET + E32(0xC2800000); // 0x0000A111 mmPA_CL_VPORT_YSCALE + E32(0x42800000); // 0x0000A112 mmPA_CL_VPORT_YOFFSET + E32(0x3F000000); // 0x0000A113 mmPA_CL_VPORT_ZSCALE + E32(0x3F000000); // 0x0000A114 mmPA_CL_VPORT_ZOFFSET + E32(0x43800000); // 0x0000A115 mmPA_CL_VPORT_XSCALE_1 + E32(0x43800000); // 0x0000A116 mmPA_CL_VPORT_XOFFSET_1 + E32(0xC3800000); // 0x0000A117 mmPA_CL_VPORT_YSCALE_1 + E32(0x43800000); // 0x0000A118 mmPA_CL_VPORT_YOFFSET_1 + E32(0x3F000000); // 0x0000A119 mmPA_CL_VPORT_ZSCALE_1 + E32(0x3F000000); // 0x0000A11A mmPA_CL_VPORT_ZOFFSET_1 + E32(0x43800000); // 0x0000A11B mmPA_CL_VPORT_XSCALE_2 + E32(0x43800000); // 0x0000A11C mmPA_CL_VPORT_XOFFSET_2 + E32(0xC3800000); // 0x0000A11D mmPA_CL_VPORT_YSCALE_2 + E32(0x43800000); // 0x0000A11E mmPA_CL_VPORT_YOFFSET_2 + E32(0x3F000000); // 0x0000A11F mmPA_CL_VPORT_ZSCALE_2 + E32(0x3F000000); // 0x0000A120 mmPA_CL_VPORT_ZOFFSET_2 + E32(0x43800000); // 0x0000A121 mmPA_CL_VPORT_XSCALE_3 + E32(0x43800000); // 0x0000A122 mmPA_CL_VPORT_XOFFSET_3 + E32(0xC3800000); // 0x0000A123 mmPA_CL_VPORT_YSCALE_3 + E32(0x43800000); // 0x0000A124 mmPA_CL_VPORT_YOFFSET_3 + E32(0x3F000000); // 0x0000A125 mmPA_CL_VPORT_ZSCALE_3 + E32(0x3F000000); // 0x0000A126 mmPA_CL_VPORT_ZOFFSET_3 + E32(0x43800000); // 0x0000A127 mmPA_CL_VPORT_XSCALE_4 + E32(0x43800000); // 0x0000A128 mmPA_CL_VPORT_XOFFSET_4 + E32(0xC3800000); // 0x0000A129 mmPA_CL_VPORT_YSCALE_4 + E32(0x43800000); // 0x0000A12A mmPA_CL_VPORT_YOFFSET_4 + E32(0x3F000000); // 0x0000A12B mmPA_CL_VPORT_ZSCALE_4 + E32(0x3F000000); // 0x0000A12C mmPA_CL_VPORT_ZOFFSET_4 + E32(0x43800000); // 0x0000A12D mmPA_CL_VPORT_XSCALE_5 + E32(0x43800000); // 0x0000A12E mmPA_CL_VPORT_XOFFSET_5 + E32(0xC3800000); // 0x0000A12F mmPA_CL_VPORT_YSCALE_5 + E32(0x43800000); // 0x0000A130 mmPA_CL_VPORT_YOFFSET_5 + E32(0x3F000000); // 0x0000A131 mmPA_CL_VPORT_ZSCALE_5 + E32(0x3F000000); // 0x0000A132 mmPA_CL_VPORT_ZOFFSET_5 + E32(0x43800000); // 0x0000A133 mmPA_CL_VPORT_XSCALE_6 + E32(0x43800000); // 0x0000A134 mmPA_CL_VPORT_XOFFSET_6 + E32(0xC3800000); // 0x0000A135 mmPA_CL_VPORT_YSCALE_6 + E32(0x43800000); // 0x0000A136 mmPA_CL_VPORT_YOFFSET_6 + E32(0x3F000000); // 0x0000A137 mmPA_CL_VPORT_ZSCALE_6 + E32(0x3F000000); // 0x0000A138 mmPA_CL_VPORT_ZOFFSET_6 + E32(0x43800000); // 0x0000A139 mmPA_CL_VPORT_XSCALE_7 + E32(0x43800000); // 0x0000A13A mmPA_CL_VPORT_XOFFSET_7 + E32(0xC3800000); // 0x0000A13B mmPA_CL_VPORT_YSCALE_7 + E32(0x43800000); // 0x0000A13C mmPA_CL_VPORT_YOFFSET_7 + E32(0x3F000000); // 0x0000A13D mmPA_CL_VPORT_ZSCALE_7 + E32(0x3F000000); // 0x0000A13E mmPA_CL_VPORT_ZOFFSET_7 + E32(0x43800000); // 0x0000A13F mmPA_CL_VPORT_XSCALE_8 + E32(0x43800000); // 0x0000A140 mmPA_CL_VPORT_XOFFSET_8 + E32(0xC3800000); // 0x0000A141 mmPA_CL_VPORT_YSCALE_8 + E32(0x43800000); // 0x0000A142 mmPA_CL_VPORT_YOFFSET_8 + E32(0x3F000000); // 0x0000A143 mmPA_CL_VPORT_ZSCALE_8 + E32(0x3F000000); // 0x0000A144 mmPA_CL_VPORT_ZOFFSET_8 + E32(0x43800000); // 0x0000A145 mmPA_CL_VPORT_XSCALE_9 + E32(0x43800000); // 0x0000A146 mmPA_CL_VPORT_XOFFSET_9 + E32(0xC3800000); // 0x0000A147 mmPA_CL_VPORT_YSCALE_9 + E32(0x43800000); // 0x0000A148 mmPA_CL_VPORT_YOFFSET_9 + E32(0x3F000000); // 0x0000A149 mmPA_CL_VPORT_ZSCALE_9 + E32(0x3F000000); // 0x0000A14A mmPA_CL_VPORT_ZOFFSET_9 + E32(0x43800000); // 0x0000A14B mmPA_CL_VPORT_XSCALE_10 + E32(0x43800000); // 0x0000A14C mmPA_CL_VPORT_XOFFSET_10 + E32(0xC3800000); // 0x0000A14D mmPA_CL_VPORT_YSCALE_10 + E32(0x43800000); // 0x0000A14E mmPA_CL_VPORT_YOFFSET_10 + E32(0x3F000000); // 0x0000A14F mmPA_CL_VPORT_ZSCALE_10 + E32(0x3F000000); // 0x0000A150 mmPA_CL_VPORT_ZOFFSET_10 + E32(0x43800000); // 0x0000A151 mmPA_CL_VPORT_XSCALE_11 + E32(0x43800000); // 0x0000A152 mmPA_CL_VPORT_XOFFSET_11 + E32(0xC3800000); // 0x0000A153 mmPA_CL_VPORT_YSCALE_11 + E32(0x43800000); // 0x0000A154 mmPA_CL_VPORT_YOFFSET_11 + E32(0x3F000000); // 0x0000A155 mmPA_CL_VPORT_ZSCALE_11 + E32(0x3F000000); // 0x0000A156 mmPA_CL_VPORT_ZOFFSET_11 + E32(0x43800000); // 0x0000A157 mmPA_CL_VPORT_XSCALE_12 + E32(0x43800000); // 0x0000A158 mmPA_CL_VPORT_XOFFSET_12 + E32(0xC3800000); // 0x0000A159 mmPA_CL_VPORT_YSCALE_12 + E32(0x43800000); // 0x0000A15A mmPA_CL_VPORT_YOFFSET_12 + E32(0x3F000000); // 0x0000A15B mmPA_CL_VPORT_ZSCALE_12 + E32(0x3F000000); // 0x0000A15C mmPA_CL_VPORT_ZOFFSET_12 + E32(0x43800000); // 0x0000A15D mmPA_CL_VPORT_XSCALE_13 + E32(0x43800000); // 0x0000A15E mmPA_CL_VPORT_XOFFSET_13 + E32(0xC3800000); // 0x0000A15F mmPA_CL_VPORT_YSCALE_13 + E32(0x43800000); // 0x0000A160 mmPA_CL_VPORT_YOFFSET_13 + E32(0x3F000000); // 0x0000A161 mmPA_CL_VPORT_ZSCALE_13 + E32(0x3F000000); // 0x0000A162 mmPA_CL_VPORT_ZOFFSET_13 + E32(0x43800000); // 0x0000A163 mmPA_CL_VPORT_XSCALE_14 + E32(0x43800000); // 0x0000A164 mmPA_CL_VPORT_XOFFSET_14 + E32(0xC3800000); // 0x0000A165 mmPA_CL_VPORT_YSCALE_14 + E32(0x43800000); // 0x0000A166 mmPA_CL_VPORT_YOFFSET_14 + E32(0x3F000000); // 0x0000A167 mmPA_CL_VPORT_ZSCALE_14 + E32(0x3F000000); // 0x0000A168 mmPA_CL_VPORT_ZOFFSET_14 + E32(0x43800000); // 0x0000A169 mmPA_CL_VPORT_XSCALE_15 + E32(0x43800000); // 0x0000A16A mmPA_CL_VPORT_XOFFSET_15 + E32(0xC3800000); // 0x0000A16B mmPA_CL_VPORT_YSCALE_15 + E32(0x43800000); // 0x0000A16C mmPA_CL_VPORT_YOFFSET_15 + E32(0x3F000000); // 0x0000A16D mmPA_CL_VPORT_ZSCALE_15 + E32(0x3F000000); // 0x0000A16E mmPA_CL_VPORT_ZOFFSET_15 + + // 15 + EREG(SQ_PGM_RESOURCES_2_GS, 0); + EREG(SQ_PGM_RESOURCES_2_ES, 0); + EREG(SQ_PGM_RESOURCES_FS, 0); + EREG(SQ_PGM_RESOURCES_2_HS, 0); + EREG(SQ_PGM_RESOURCES_2_LS, 0); + + END_BATCH(); + + BEGIN_BATCH(4); + PACK0(DB_DEPTH_SIZE, 2); + E32(0); // DB_DEPTH_SIZE + E32(0); // DB_DEPTH_SLICE + + END_BATCH(); + + BEGIN_BATCH(54); EREG(DB_DEPTH_INFO, 0); - EREG(DB_DEPTH_CONTROL, 0); + + PACK0(DB_DEPTH_CONTROL, 2); + E32(0); // DB_DEPTH_CONTROL + E32((1 << 16) | (1 << 20)); // DB_EQAA PACK0(PA_SC_VPORT_ZMIN_0, 2); EFLOAT(0.0); // PA_SC_VPORT_ZMIN_0 @@ -131,7 +437,9 @@ cayman_set_default_state(ScrnInfoPtr pScrn) DUAL_EXPORT_ENABLE_bit)); /* Only useful if no depth export */ // SX - EREG(SX_MISC, 0); + PACK0(SX_MISC, 2); + E32(0); // SX_MISC + E32(0x1ff); // SX_SURFACE_SYNC // CB PACK0(SX_ALPHA_TEST_CONTROL, 5); @@ -158,10 +466,14 @@ cayman_set_default_state(ScrnInfoPtr pScrn) for (i = 0; i < PA_SC_VPORT_SCISSOR_0_TL_num; i++) evergreen_set_vport_scissor (pScrn, i, 0, 0, 8192, 8192); - BEGIN_BATCH(66); - PACK0(PA_SC_MODE_CNTL_0, 2); + BEGIN_BATCH(72); + PACK0(PA_SC_MODE_CNTL_0, 6); E32(0); // PA_SC_MODE_CNTL_0 E32(0); // PA_SC_MODE_CNTL_1 + E32(0); // VGT_ENHANCE + E32(0x00000100); // VGT_GS_PER_ES + E32(0x00000080); // VGT_ES_PER_GS + E32(0x00000002); // VGT_GS_PER_VS PACK0(PA_SC_CENTROID_PRIORITY_0, 34); E32((0 << DISTANCE_0_shift) | @@ -208,15 +520,17 @@ cayman_set_default_state(ScrnInfoPtr pScrn) E32(0xFFFFFFFF); // PA_SC_AA_MASK_* // CL - PACK0(PA_CL_CLIP_CNTL, 8); + PACK0(PA_CL_CLIP_CNTL, 10); E32(CLIP_DISABLE_bit); // PA_CL_CLIP_CNTL E32(FACE_bit); // PA_SU_SC_MODE_CNTL E32(VTX_XY_FMT_bit); // PA_CL_VTE_CNTL - E32(0); // PA_CL_VS_OUT_CNTL + E32(0x01000000); // PA_CL_VS_OUT_CNTL E32(0); // PA_CL_NANINF_CNTL E32(0); // PA_SU_LINE_STIPPLE_CNTL E32(0); // PA_SU_LINE_STIPPLE_SCALE E32(0); // PA_SU_PRIM_FILTER_CNTL + E32(0); // SQ_LSTMP_RING_ITEMSIZE + E32(0); // SQ_HSTMP_RING_ITEMSIZE // SU PACK0(PA_SU_POLY_OFFSET_DB_FMT_CNTL, 6); @@ -259,21 +573,26 @@ cayman_set_default_state(ScrnInfoPtr pScrn) evergreen_fs_setup(pScrn, &fs_conf, RADEON_GEM_DOMAIN_VRAM); // VGT - BEGIN_BATCH(46); + BEGIN_BATCH(51); PACK0(VGT_MAX_VTX_INDX, 4); - E32(0xffffff); - E32(0); - E32(0); - E32(0); - - PACK0(VGT_INSTANCE_STEP_RATE_0, 2); - E32(0); - E32(0); - - PACK0(VGT_REUSE_OFF, 2); - E32(0); - E32(0); + E32(0xffffffff); // VGT_MAX_VTX_INDX + E32(0); // VGT_MIN_VTX_INDX + E32(0); // VGT_INDX_OFFSET + E32(0); // VGT_MULTI_PRIM_IB_RESET_INDX + + PACK0(VGT_INSTANCE_STEP_RATE_0, 3); + E32(0); // VGT_INSTANCE_STEP_RATE_0 + E32(0); // VGT_INSTANCE_STEP_RATE_1 + E32(0x1e); // IA_MULTI_VGT_PARAM + + PACK0(VGT_REUSE_OFF, 6); + E32(0); // VGT_REUSE_OFF + E32(0); // VGT_VTX_CNT_EN + E32(0); // DB_HTILE_SURFACE + E32(0); // DB_SRESULTS_COMPARE_STATE0 + E32(0); // DB_SRESULTS_COMPARE_STATE1 + E32(0); // DB_PRELOAD_CONTROL PACK0(PA_SU_POINT_SIZE, 17); E32(0); // PA_SU_POINT_SIZE diff --git a/src/cayman_reg.h b/src/cayman_reg.h index 25bd4b1..5630fa7 100644 --- a/src/cayman_reg.h +++ b/src/cayman_reg.h @@ -111,10 +111,12 @@ enum { #define IT_WAIT_ADDR(x) ((x) >> 2) enum { - + SQ_LDS_ALLOC = 0x288e8, SQ_LDS_ALLOC_PS = 0x288ec, SQ_DYN_GPR_CNTL_PS_FLUSH_REQ = 0x8d8c, + GRBM_GFX_INDEX = 0x802c, + CP_COHER_CNTL = 0x85f0, DEST_BASE_0_ENA_bit = 1 << 0, DEST_BASE_1_ENA_bit = 1 << 1, diff --git a/src/evergreen_exa.c b/src/evergreen_exa.c index 0aabcdf..77d348d 100644 --- a/src/evergreen_exa.c +++ b/src/evergreen_exa.c @@ -1683,6 +1683,8 @@ EVERGREENAllocShaders(ScrnInfoPtr pScrn, ScreenPtr pScreen) /* 512 bytes per shader for now */ int size = 512 * 9; + /* add some space for shader rings */ + size += 96 * 256 * 14; accel_state->shaders = NULL;