diff options
author | Ilija Hadzic <ihadzic@research.bell-labs.com> | 2011-10-12 23:29:37 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-10-18 05:06:23 -0400 |
commit | 3a38612e329ffe5183122a9523eacae33e7cbb07 (patch) | |
tree | 2bd06564275c38ce283453dcbd0c741035aa22fa | |
parent | 6018faf58da5be0f0307b7bd2af113b9a60b7a7e (diff) |
drm/radeon/kms: demystify r600 blit code
some 3d register bits look like magic in r600 blit functions
use predefined constants to make it more intuitive what they are
Signed-off-by: Ilija Hadzic <ihadzic@research.bell-labs.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | drivers/gpu/drm/radeon/r600_blit_kms.c | 30 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/r600d.h | 22 |
2 files changed, 39 insertions, 13 deletions
diff --git a/drivers/gpu/drm/radeon/r600_blit_kms.c b/drivers/gpu/drm/radeon/r600_blit_kms.c index 3940be619af7..d4e215f15062 100644 --- a/drivers/gpu/drm/radeon/r600_blit_kms.c +++ b/drivers/gpu/drm/radeon/r600_blit_kms.c | |||
@@ -58,7 +58,9 @@ set_render_target(struct radeon_device *rdev, int format, | |||
58 | if (h < 8) | 58 | if (h < 8) |
59 | h = 8; | 59 | h = 8; |
60 | 60 | ||
61 | cb_color_info = ((format << 2) | (1 << 27) | (1 << 8)); | 61 | cb_color_info = CB_FORMAT(format) | |
62 | CB_SOURCE_FORMAT(CB_SF_EXPORT_NORM) | | ||
63 | CB_ARRAY_MODE(ARRAY_1D_TILED_THIN1); | ||
62 | pitch = (w / 8) - 1; | 64 | pitch = (w / 8) - 1; |
63 | slice = ((w * h) / 64) - 1; | 65 | slice = ((w * h) / 64) - 1; |
64 | 66 | ||
@@ -168,9 +170,10 @@ set_vtx_resource(struct radeon_device *rdev, u64 gpu_addr) | |||
168 | { | 170 | { |
169 | u32 sq_vtx_constant_word2; | 171 | u32 sq_vtx_constant_word2; |
170 | 172 | ||
171 | sq_vtx_constant_word2 = ((upper_32_bits(gpu_addr) & 0xff) | (16 << 8)); | 173 | sq_vtx_constant_word2 = SQ_VTXC_BASE_ADDR_HI(upper_32_bits(gpu_addr) & 0xff) | |
174 | SQ_VTXC_STRIDE(16); | ||
172 | #ifdef __BIG_ENDIAN | 175 | #ifdef __BIG_ENDIAN |
173 | sq_vtx_constant_word2 |= (2 << 30); | 176 | sq_vtx_constant_word2 |= SQ_VTXC_ENDIAN_SWAP(SQ_ENDIAN_8IN32); |
174 | #endif | 177 | #endif |
175 | 178 | ||
176 | radeon_ring_write(rdev, PACKET3(PACKET3_SET_RESOURCE, 7)); | 179 | radeon_ring_write(rdev, PACKET3(PACKET3_SET_RESOURCE, 7)); |
@@ -206,18 +209,19 @@ set_tex_resource(struct radeon_device *rdev, | |||
206 | if (h < 1) | 209 | if (h < 1) |
207 | h = 1; | 210 | h = 1; |
208 | 211 | ||
209 | sq_tex_resource_word0 = (1 << 0) | (1 << 3); | 212 | sq_tex_resource_word0 = S_038000_DIM(V_038000_SQ_TEX_DIM_2D) | |
210 | sq_tex_resource_word0 |= ((((pitch >> 3) - 1) << 8) | | 213 | S_038000_TILE_MODE(V_038000_ARRAY_1D_TILED_THIN1); |
211 | ((w - 1) << 19)); | 214 | sq_tex_resource_word0 |= S_038000_PITCH((pitch >> 3) - 1) | |
215 | S_038000_TEX_WIDTH(w - 1); | ||
212 | 216 | ||
213 | sq_tex_resource_word1 = (format << 26); | 217 | sq_tex_resource_word1 = S_038004_DATA_FORMAT(format); |
214 | sq_tex_resource_word1 |= ((h - 1) << 0); | 218 | sq_tex_resource_word1 |= S_038004_TEX_HEIGHT(h - 1); |
215 | 219 | ||
216 | sq_tex_resource_word4 = ((1 << 14) | | 220 | sq_tex_resource_word4 = S_038010_REQUEST_SIZE(1) | |
217 | (0 << 16) | | 221 | S_038010_DST_SEL_X(SQ_SEL_X) | |
218 | (1 << 19) | | 222 | S_038010_DST_SEL_Y(SQ_SEL_Y) | |
219 | (2 << 22) | | 223 | S_038010_DST_SEL_Z(SQ_SEL_Z) | |
220 | (3 << 25)); | 224 | S_038010_DST_SEL_W(SQ_SEL_W); |
221 | 225 | ||
222 | radeon_ring_write(rdev, PACKET3(PACKET3_SET_RESOURCE, 7)); | 226 | radeon_ring_write(rdev, PACKET3(PACKET3_SET_RESOURCE, 7)); |
223 | radeon_ring_write(rdev, 0); | 227 | radeon_ring_write(rdev, 0); |
diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h index 0245ae6c204e..bfe1b5d92afe 100644 --- a/drivers/gpu/drm/radeon/r600d.h +++ b/drivers/gpu/drm/radeon/r600d.h | |||
@@ -79,6 +79,11 @@ | |||
79 | #define CB_COLOR0_SIZE 0x28060 | 79 | #define CB_COLOR0_SIZE 0x28060 |
80 | #define CB_COLOR0_VIEW 0x28080 | 80 | #define CB_COLOR0_VIEW 0x28080 |
81 | #define CB_COLOR0_INFO 0x280a0 | 81 | #define CB_COLOR0_INFO 0x280a0 |
82 | # define CB_FORMAT(x) ((x) << 2) | ||
83 | # define CB_ARRAY_MODE(x) ((x) << 8) | ||
84 | # define CB_SOURCE_FORMAT(x) ((x) << 27) | ||
85 | # define CB_SF_EXPORT_FULL 0 | ||
86 | # define CB_SF_EXPORT_NORM 1 | ||
82 | #define CB_COLOR0_TILE 0x280c0 | 87 | #define CB_COLOR0_TILE 0x280c0 |
83 | #define CB_COLOR0_FRAG 0x280e0 | 88 | #define CB_COLOR0_FRAG 0x280e0 |
84 | #define CB_COLOR0_MASK 0x28100 | 89 | #define CB_COLOR0_MASK 0x28100 |
@@ -417,6 +422,17 @@ | |||
417 | #define SQ_PGM_START_VS 0x28858 | 422 | #define SQ_PGM_START_VS 0x28858 |
418 | #define SQ_PGM_RESOURCES_VS 0x28868 | 423 | #define SQ_PGM_RESOURCES_VS 0x28868 |
419 | #define SQ_PGM_CF_OFFSET_VS 0x288d0 | 424 | #define SQ_PGM_CF_OFFSET_VS 0x288d0 |
425 | |||
426 | #define SQ_VTX_CONSTANT_WORD0_0 0x30000 | ||
427 | #define SQ_VTX_CONSTANT_WORD1_0 0x30004 | ||
428 | #define SQ_VTX_CONSTANT_WORD2_0 0x30008 | ||
429 | # define SQ_VTXC_BASE_ADDR_HI(x) ((x) << 0) | ||
430 | # define SQ_VTXC_STRIDE(x) ((x) << 8) | ||
431 | # define SQ_VTXC_ENDIAN_SWAP(x) ((x) << 30) | ||
432 | # define SQ_ENDIAN_NONE 0 | ||
433 | # define SQ_ENDIAN_8IN16 1 | ||
434 | # define SQ_ENDIAN_8IN32 2 | ||
435 | #define SQ_VTX_CONSTANT_WORD3_0 0x3000c | ||
420 | #define SQ_VTX_CONSTANT_WORD6_0 0x38018 | 436 | #define SQ_VTX_CONSTANT_WORD6_0 0x38018 |
421 | #define S__SQ_VTX_CONSTANT_TYPE(x) (((x) & 3) << 30) | 437 | #define S__SQ_VTX_CONSTANT_TYPE(x) (((x) & 3) << 30) |
422 | #define G__SQ_VTX_CONSTANT_TYPE(x) (((x) >> 30) & 3) | 438 | #define G__SQ_VTX_CONSTANT_TYPE(x) (((x) >> 30) & 3) |
@@ -1352,6 +1368,12 @@ | |||
1352 | #define S_038010_DST_SEL_W(x) (((x) & 0x7) << 25) | 1368 | #define S_038010_DST_SEL_W(x) (((x) & 0x7) << 25) |
1353 | #define G_038010_DST_SEL_W(x) (((x) >> 25) & 0x7) | 1369 | #define G_038010_DST_SEL_W(x) (((x) >> 25) & 0x7) |
1354 | #define C_038010_DST_SEL_W 0xF1FFFFFF | 1370 | #define C_038010_DST_SEL_W 0xF1FFFFFF |
1371 | # define SQ_SEL_X 0 | ||
1372 | # define SQ_SEL_Y 1 | ||
1373 | # define SQ_SEL_Z 2 | ||
1374 | # define SQ_SEL_W 3 | ||
1375 | # define SQ_SEL_0 4 | ||
1376 | # define SQ_SEL_1 5 | ||
1355 | #define S_038010_BASE_LEVEL(x) (((x) & 0xF) << 28) | 1377 | #define S_038010_BASE_LEVEL(x) (((x) & 0xF) << 28) |
1356 | #define G_038010_BASE_LEVEL(x) (((x) >> 28) & 0xF) | 1378 | #define G_038010_BASE_LEVEL(x) (((x) >> 28) & 0xF) |
1357 | #define C_038010_BASE_LEVEL 0x0FFFFFFF | 1379 | #define C_038010_BASE_LEVEL 0x0FFFFFFF |