Lines Matching refs:track
300 static void r600_cs_track_init(struct r600_cs_track *track) in r600_cs_track_init() argument
305 track->sq_config = DX9_CONSTS; in r600_cs_track_init()
307 track->cb_color_base_last[i] = 0; in r600_cs_track_init()
308 track->cb_color_size[i] = 0; in r600_cs_track_init()
309 track->cb_color_size_idx[i] = 0; in r600_cs_track_init()
310 track->cb_color_info[i] = 0; in r600_cs_track_init()
311 track->cb_color_view[i] = 0xFFFFFFFF; in r600_cs_track_init()
312 track->cb_color_bo[i] = NULL; in r600_cs_track_init()
313 track->cb_color_bo_offset[i] = 0xFFFFFFFF; in r600_cs_track_init()
314 track->cb_color_bo_mc[i] = 0xFFFFFFFF; in r600_cs_track_init()
315 track->cb_color_frag_bo[i] = NULL; in r600_cs_track_init()
316 track->cb_color_frag_offset[i] = 0xFFFFFFFF; in r600_cs_track_init()
317 track->cb_color_tile_bo[i] = NULL; in r600_cs_track_init()
318 track->cb_color_tile_offset[i] = 0xFFFFFFFF; in r600_cs_track_init()
319 track->cb_color_mask[i] = 0xFFFFFFFF; in r600_cs_track_init()
321 track->is_resolve = false; in r600_cs_track_init()
322 track->nsamples = 16; in r600_cs_track_init()
323 track->log_nsamples = 4; in r600_cs_track_init()
324 track->cb_target_mask = 0xFFFFFFFF; in r600_cs_track_init()
325 track->cb_shader_mask = 0xFFFFFFFF; in r600_cs_track_init()
326 track->cb_dirty = true; in r600_cs_track_init()
327 track->db_bo = NULL; in r600_cs_track_init()
328 track->db_bo_mc = 0xFFFFFFFF; in r600_cs_track_init()
330 track->db_depth_info = 7 | (1 << 25); in r600_cs_track_init()
331 track->db_depth_view = 0xFFFFC000; in r600_cs_track_init()
332 track->db_depth_size = 0xFFFFFFFF; in r600_cs_track_init()
333 track->db_depth_size_idx = 0; in r600_cs_track_init()
334 track->db_depth_control = 0xFFFFFFFF; in r600_cs_track_init()
335 track->db_dirty = true; in r600_cs_track_init()
336 track->htile_bo = NULL; in r600_cs_track_init()
337 track->htile_offset = 0xFFFFFFFF; in r600_cs_track_init()
338 track->htile_surface = 0; in r600_cs_track_init()
341 track->vgt_strmout_size[i] = 0; in r600_cs_track_init()
342 track->vgt_strmout_bo[i] = NULL; in r600_cs_track_init()
343 track->vgt_strmout_bo_offset[i] = 0xFFFFFFFF; in r600_cs_track_init()
344 track->vgt_strmout_bo_mc[i] = 0xFFFFFFFF; in r600_cs_track_init()
346 track->streamout_dirty = true; in r600_cs_track_init()
347 track->sx_misc_kill_all_prims = false; in r600_cs_track_init()
352 struct r600_cs_track *track = p->track; in r600_cs_track_validate_cb() local
361 unsigned nsamples = track->is_resolve && i == 1 ? 1 : track->nsamples; in r600_cs_track_validate_cb()
363 size = radeon_bo_size(track->cb_color_bo[i]) - track->cb_color_bo_offset[i]; in r600_cs_track_validate_cb()
364 format = G_0280A0_FORMAT(track->cb_color_info[i]); in r600_cs_track_validate_cb()
368 i, track->cb_color_info[i]); in r600_cs_track_validate_cb()
372 pitch = (G_028060_PITCH_TILE_MAX(track->cb_color_size[i]) + 1) * 8; in r600_cs_track_validate_cb()
373 slice_tile_max = G_028060_SLICE_TILE_MAX(track->cb_color_size[i]) + 1; in r600_cs_track_validate_cb()
378 array_mode = G_0280A0_ARRAY_MODE(track->cb_color_info[i]); in r600_cs_track_validate_cb()
380 base_offset = track->cb_color_bo_mc[i] + track->cb_color_bo_offset[i]; in r600_cs_track_validate_cb()
382 array_check.group_size = track->group_size; in r600_cs_track_validate_cb()
383 array_check.nbanks = track->nbanks; in r600_cs_track_validate_cb()
384 array_check.npipes = track->npipes; in r600_cs_track_validate_cb()
390 G_0280A0_ARRAY_MODE(track->cb_color_info[i]), i, in r600_cs_track_validate_cb()
391 track->cb_color_info[i]); in r600_cs_track_validate_cb()
408 G_0280A0_ARRAY_MODE(track->cb_color_info[i]), i, in r600_cs_track_validate_cb()
409 track->cb_color_info[i]); in r600_cs_track_validate_cb()
436 tmp += track->cb_color_view[i] & 0xFF; in r600_cs_track_validate_cb()
440 tmp += G_028080_SLICE_MAX(track->cb_color_view[i]) * tmp; in r600_cs_track_validate_cb()
443 if ((tmp + track->cb_color_bo_offset[i]) > radeon_bo_size(track->cb_color_bo[i])) { in r600_cs_track_validate_cb()
454 track->cb_color_bo_offset[i], tmp, in r600_cs_track_validate_cb()
455 radeon_bo_size(track->cb_color_bo[i]), in r600_cs_track_validate_cb()
468 ib[track->cb_color_size_idx[i]] = tmp; in r600_cs_track_validate_cb()
471 switch (G_0280A0_TILE_MODE(track->cb_color_info[i])) { in r600_cs_track_validate_cb()
475 if (track->nsamples > 1) { in r600_cs_track_validate_cb()
476 uint32_t tile_max = G_028100_FMASK_TILE_MAX(track->cb_color_mask[i]); in r600_cs_track_validate_cb()
479 uint32_t bytes = track->nsamples * track->log_nsamples * 8 * (tile_max + 1); in r600_cs_track_validate_cb()
481 if (bytes + track->cb_color_frag_offset[i] > in r600_cs_track_validate_cb()
482 radeon_bo_size(track->cb_color_frag_bo[i])) { in r600_cs_track_validate_cb()
486 track->cb_color_frag_offset[i], in r600_cs_track_validate_cb()
487 radeon_bo_size(track->cb_color_frag_bo[i])); in r600_cs_track_validate_cb()
494 uint32_t block_max = G_028100_CMASK_BLOCK_MAX(track->cb_color_mask[i]); in r600_cs_track_validate_cb()
499 if (bytes + track->cb_color_tile_offset[i] > in r600_cs_track_validate_cb()
500 radeon_bo_size(track->cb_color_tile_bo[i])) { in r600_cs_track_validate_cb()
504 track->cb_color_tile_offset[i], in r600_cs_track_validate_cb()
505 radeon_bo_size(track->cb_color_tile_bo[i])); in r600_cs_track_validate_cb()
519 struct r600_cs_track *track = p->track; in r600_cs_track_validate_db() local
530 if (track->db_bo == NULL) { in r600_cs_track_validate_db()
534 switch (G_028010_FORMAT(track->db_depth_info)) { in r600_cs_track_validate_db()
549 dev_warn(p->dev, "z/stencil with invalid format %d\n", G_028010_FORMAT(track->db_depth_info)); in r600_cs_track_validate_db()
552 if ((track->db_depth_size & 0xFFFFFC00) == 0xFFFFFC00) { in r600_cs_track_validate_db()
553 if (!track->db_depth_size_idx) { in r600_cs_track_validate_db()
557 tmp = radeon_bo_size(track->db_bo) - track->db_offset; in r600_cs_track_validate_db()
561 track->db_depth_size, bpe, track->db_offset, in r600_cs_track_validate_db()
562 radeon_bo_size(track->db_bo)); in r600_cs_track_validate_db()
565 ib[track->db_depth_size_idx] = S_028000_SLICE_TILE_MAX(tmp - 1) | (track->db_depth_size & 0x3FF); in r600_cs_track_validate_db()
567 size = radeon_bo_size(track->db_bo); in r600_cs_track_validate_db()
569 pitch = (G_028000_PITCH_TILE_MAX(track->db_depth_size) + 1) * 8; in r600_cs_track_validate_db()
570 slice_tile_max = G_028000_SLICE_TILE_MAX(track->db_depth_size) + 1; in r600_cs_track_validate_db()
575 base_offset = track->db_bo_mc + track->db_offset; in r600_cs_track_validate_db()
576 array_mode = G_028010_ARRAY_MODE(track->db_depth_info); in r600_cs_track_validate_db()
578 array_check.group_size = track->group_size; in r600_cs_track_validate_db()
579 array_check.nbanks = track->nbanks; in r600_cs_track_validate_db()
580 array_check.npipes = track->npipes; in r600_cs_track_validate_db()
581 array_check.nsamples = track->nsamples; in r600_cs_track_validate_db()
586 G_028010_ARRAY_MODE(track->db_depth_info), in r600_cs_track_validate_db()
587 track->db_depth_info); in r600_cs_track_validate_db()
599 G_028010_ARRAY_MODE(track->db_depth_info), in r600_cs_track_validate_db()
600 track->db_depth_info); in r600_cs_track_validate_db()
620 ntiles = G_028000_SLICE_TILE_MAX(track->db_depth_size) + 1; in r600_cs_track_validate_db()
621 nviews = G_028004_SLICE_MAX(track->db_depth_view) + 1; in r600_cs_track_validate_db()
622 tmp = ntiles * bpe * 64 * nviews * track->nsamples; in r600_cs_track_validate_db()
623 if ((tmp + track->db_offset) > radeon_bo_size(track->db_bo)) { in r600_cs_track_validate_db()
626 track->db_depth_size, ntiles, nviews, bpe, tmp + track->db_offset, in r600_cs_track_validate_db()
627 radeon_bo_size(track->db_bo)); in r600_cs_track_validate_db()
633 if (G_028010_TILE_SURFACE_ENABLE(track->db_depth_info)) { in r600_cs_track_validate_db()
637 if (track->htile_bo == NULL) { in r600_cs_track_validate_db()
639 __func__, __LINE__, track->db_depth_info); in r600_cs_track_validate_db()
642 if ((track->db_depth_size & 0xFFFFFC00) == 0xFFFFFC00) { in r600_cs_track_validate_db()
644 __func__, __LINE__, track->db_depth_size); in r600_cs_track_validate_db()
650 if (G_028D24_LINEAR(track->htile_surface)) { in r600_cs_track_validate_db()
654 nby = round_up(nby, track->npipes * 8); in r600_cs_track_validate_db()
660 switch (track->npipes) { in r600_cs_track_validate_db()
683 __func__, __LINE__, track->npipes); in r600_cs_track_validate_db()
691 size = roundup(nbx * nby * 4, track->npipes * (2 << 10)); in r600_cs_track_validate_db()
692 size += track->htile_offset; in r600_cs_track_validate_db()
694 if (size > radeon_bo_size(track->htile_bo)) { in r600_cs_track_validate_db()
696 __func__, __LINE__, radeon_bo_size(track->htile_bo), in r600_cs_track_validate_db()
702 track->db_dirty = false; in r600_cs_track_validate_db()
708 struct r600_cs_track *track = p->track; in r600_cs_track_check() local
717 if (track->streamout_dirty && track->vgt_strmout_en) { in r600_cs_track_check()
719 if (track->vgt_strmout_buffer_en & (1 << i)) { in r600_cs_track_check()
720 if (track->vgt_strmout_bo[i]) { in r600_cs_track_check()
721 u64 offset = (u64)track->vgt_strmout_bo_offset[i] + in r600_cs_track_check()
722 (u64)track->vgt_strmout_size[i]; in r600_cs_track_check()
723 if (offset > radeon_bo_size(track->vgt_strmout_bo[i])) { in r600_cs_track_check()
726 radeon_bo_size(track->vgt_strmout_bo[i])); in r600_cs_track_check()
735 track->streamout_dirty = false; in r600_cs_track_check()
738 if (track->sx_misc_kill_all_prims) in r600_cs_track_check()
744 if (track->cb_dirty) { in r600_cs_track_check()
745 tmp = track->cb_target_mask; in r600_cs_track_check()
748 if (track->is_resolve) { in r600_cs_track_check()
753 u32 format = G_0280A0_FORMAT(track->cb_color_info[i]); in r600_cs_track_check()
758 if (track->cb_color_bo[i] == NULL) { in r600_cs_track_check()
760 __func__, __LINE__, track->cb_target_mask, track->cb_shader_mask, i); in r600_cs_track_check()
769 track->cb_dirty = false; in r600_cs_track_check()
773 if (track->db_dirty && in r600_cs_track_check()
774 G_028010_FORMAT(track->db_depth_info) != V_028010_DEPTH_INVALID && in r600_cs_track_check()
775 (G_028800_STENCIL_ENABLE(track->db_depth_control) || in r600_cs_track_check()
776 G_028800_Z_ENABLE(track->db_depth_control))) { in r600_cs_track_check()
971 struct r600_cs_track *track = (struct r600_cs_track *)p->track; in r600_cs_check_reg() local
1026 track->sq_config = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1029 track->db_depth_control = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1030 track->db_dirty = true; in r600_cs_check_reg()
1041 track->db_depth_info = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1043 track->db_depth_info &= C_028010_ARRAY_MODE; in r600_cs_check_reg()
1046 track->db_depth_info |= S_028010_ARRAY_MODE(V_028010_ARRAY_2D_TILED_THIN1); in r600_cs_check_reg()
1049 track->db_depth_info |= S_028010_ARRAY_MODE(V_028010_ARRAY_1D_TILED_THIN1); in r600_cs_check_reg()
1052 track->db_depth_info = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1054 track->db_dirty = true; in r600_cs_check_reg()
1057 track->db_depth_view = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1058 track->db_dirty = true; in r600_cs_check_reg()
1061 track->db_depth_size = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1062 track->db_depth_size_idx = idx; in r600_cs_check_reg()
1063 track->db_dirty = true; in r600_cs_check_reg()
1066 track->vgt_strmout_en = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1067 track->streamout_dirty = true; in r600_cs_check_reg()
1070 track->vgt_strmout_buffer_en = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1071 track->streamout_dirty = true; in r600_cs_check_reg()
1084 track->vgt_strmout_bo_offset[tmp] = radeon_get_ib_value(p, idx) << 8; in r600_cs_check_reg()
1086 track->vgt_strmout_bo[tmp] = reloc->robj; in r600_cs_check_reg()
1087 track->vgt_strmout_bo_mc[tmp] = reloc->gpu_offset; in r600_cs_check_reg()
1088 track->streamout_dirty = true; in r600_cs_check_reg()
1096 track->vgt_strmout_size[tmp] = radeon_get_ib_value(p, idx) * 4; in r600_cs_check_reg()
1097 track->streamout_dirty = true; in r600_cs_check_reg()
1109 track->cb_target_mask = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1110 track->cb_dirty = true; in r600_cs_check_reg()
1113 track->cb_shader_mask = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1117 track->log_nsamples = tmp; in r600_cs_check_reg()
1118 track->nsamples = 1 << tmp; in r600_cs_check_reg()
1119 track->cb_dirty = true; in r600_cs_check_reg()
1123 track->is_resolve = tmp == V_028808_SPECIAL_RESOLVE_BOX; in r600_cs_check_reg()
1124 track->cb_dirty = true; in r600_cs_check_reg()
1142 track->cb_color_info[tmp] = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1145 track->cb_color_info[tmp] |= S_0280A0_ARRAY_MODE(V_0280A0_ARRAY_2D_TILED_THIN1); in r600_cs_check_reg()
1148 track->cb_color_info[tmp] |= S_0280A0_ARRAY_MODE(V_0280A0_ARRAY_1D_TILED_THIN1); in r600_cs_check_reg()
1152 track->cb_color_info[tmp] = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1154 track->cb_dirty = true; in r600_cs_check_reg()
1165 track->cb_color_view[tmp] = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1166 track->cb_dirty = true; in r600_cs_check_reg()
1177 track->cb_color_size[tmp] = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1178 track->cb_color_size_idx[tmp] = idx; in r600_cs_check_reg()
1179 track->cb_dirty = true; in r600_cs_check_reg()
1200 if (!track->cb_color_base_last[tmp]) { in r600_cs_check_reg()
1204 track->cb_color_frag_bo[tmp] = track->cb_color_bo[tmp]; in r600_cs_check_reg()
1205 track->cb_color_frag_offset[tmp] = track->cb_color_bo_offset[tmp]; in r600_cs_check_reg()
1206 ib[idx] = track->cb_color_base_last[tmp]; in r600_cs_check_reg()
1213 track->cb_color_frag_bo[tmp] = reloc->robj; in r600_cs_check_reg()
1214 track->cb_color_frag_offset[tmp] = (u64)ib[idx] << 8; in r600_cs_check_reg()
1217 if (G_0280A0_TILE_MODE(track->cb_color_info[tmp])) { in r600_cs_check_reg()
1218 track->cb_dirty = true; in r600_cs_check_reg()
1231 if (!track->cb_color_base_last[tmp]) { in r600_cs_check_reg()
1235 track->cb_color_tile_bo[tmp] = track->cb_color_bo[tmp]; in r600_cs_check_reg()
1236 track->cb_color_tile_offset[tmp] = track->cb_color_bo_offset[tmp]; in r600_cs_check_reg()
1237 ib[idx] = track->cb_color_base_last[tmp]; in r600_cs_check_reg()
1244 track->cb_color_tile_bo[tmp] = reloc->robj; in r600_cs_check_reg()
1245 track->cb_color_tile_offset[tmp] = (u64)ib[idx] << 8; in r600_cs_check_reg()
1248 if (G_0280A0_TILE_MODE(track->cb_color_info[tmp])) { in r600_cs_check_reg()
1249 track->cb_dirty = true; in r600_cs_check_reg()
1261 track->cb_color_mask[tmp] = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1262 if (G_0280A0_TILE_MODE(track->cb_color_info[tmp])) { in r600_cs_check_reg()
1263 track->cb_dirty = true; in r600_cs_check_reg()
1281 track->cb_color_bo_offset[tmp] = radeon_get_ib_value(p, idx) << 8; in r600_cs_check_reg()
1283 track->cb_color_base_last[tmp] = ib[idx]; in r600_cs_check_reg()
1284 track->cb_color_bo[tmp] = reloc->robj; in r600_cs_check_reg()
1285 track->cb_color_bo_mc[tmp] = reloc->gpu_offset; in r600_cs_check_reg()
1286 track->cb_dirty = true; in r600_cs_check_reg()
1295 track->db_offset = radeon_get_ib_value(p, idx) << 8; in r600_cs_check_reg()
1297 track->db_bo = reloc->robj; in r600_cs_check_reg()
1298 track->db_bo_mc = reloc->gpu_offset; in r600_cs_check_reg()
1299 track->db_dirty = true; in r600_cs_check_reg()
1308 track->htile_offset = radeon_get_ib_value(p, idx) << 8; in r600_cs_check_reg()
1310 track->htile_bo = reloc->robj; in r600_cs_check_reg()
1311 track->db_dirty = true; in r600_cs_check_reg()
1314 track->htile_surface = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1317 track->db_dirty = true; in r600_cs_check_reg()
1390 track->sx_misc_kill_all_prims = (radeon_get_ib_value(p, idx) & 0x1) != 0; in r600_cs_check_reg()
1476 struct r600_cs_track *track = p->track; in r600_check_texture_resource() local
1516 array_check.group_size = track->group_size; in r600_check_texture_resource()
1517 array_check.nbanks = track->nbanks; in r600_check_texture_resource()
1518 array_check.npipes = track->npipes; in r600_check_texture_resource()
1630 struct r600_cs_track *track; in r600_packet3_check() local
1638 track = (struct r600_cs_track *)p->track; in r600_packet3_check()
2024 if (track->sq_config & DX9_CONSTS) { in r600_packet3_check()
2102 if (reloc->robj != track->vgt_strmout_bo[idx_value]) { in r600_packet3_check()
2108 if (offset != track->vgt_strmout_bo_offset[idx_value]) { in r600_packet3_check()
2110 offset, track->vgt_strmout_bo_offset[idx_value]); in r600_packet3_check()
2271 struct r600_cs_track *track; in r600_cs_parse() local
2274 if (p->track == NULL) { in r600_cs_parse()
2276 track = kzalloc(sizeof(*track), GFP_KERNEL); in r600_cs_parse()
2277 if (track == NULL) in r600_cs_parse()
2279 r600_cs_track_init(track); in r600_cs_parse()
2281 track->npipes = p->rdev->config.r600.tiling_npipes; in r600_cs_parse()
2282 track->nbanks = p->rdev->config.r600.tiling_nbanks; in r600_cs_parse()
2283 track->group_size = p->rdev->config.r600.tiling_group_size; in r600_cs_parse()
2285 track->npipes = p->rdev->config.rv770.tiling_npipes; in r600_cs_parse()
2286 track->nbanks = p->rdev->config.rv770.tiling_nbanks; in r600_cs_parse()
2287 track->group_size = p->rdev->config.rv770.tiling_group_size; in r600_cs_parse()
2289 p->track = track; in r600_cs_parse()
2294 kfree(p->track); in r600_cs_parse()
2295 p->track = NULL; in r600_cs_parse()
2310 kfree(p->track); in r600_cs_parse()
2311 p->track = NULL; in r600_cs_parse()
2315 kfree(p->track); in r600_cs_parse()
2316 p->track = NULL; in r600_cs_parse()
2326 kfree(p->track); in r600_cs_parse()
2327 p->track = NULL; in r600_cs_parse()