Lines Matching defs:kgem

46 	return width * height * 4 > sna->kgem.max_upload_tile_size;
56 static bool download_inplace__cpu(struct kgem *kgem,
64 if (!kgem->memcpy_from_tiled_x)
72 if (!kgem_bo_can_map__cpu(kgem, bo, false))
75 if (kgem->has_llc)
96 read_boxes_inplace__cpu(struct kgem *kgem,
105 if (!download_inplace__cpu(kgem, dst, bo, box, n))
111 assert(kgem_bo_can_map__cpu(kgem, bo, false));
113 src = kgem_bo_map__cpu(kgem, bo);
117 kgem_bo_sync__cpu_full(kgem, bo, 0);
126 memcpy_from_tiled_x(kgem, src, dst, bpp, src_pitch, dst_pitch,
146 static void read_boxes_inplace(struct kgem *kgem,
155 if (read_boxes_inplace__cpu(kgem, pixmap, bo, box, n))
160 if (!kgem_bo_can_map(kgem, bo))
163 kgem_bo_submit(kgem, bo);
165 src = kgem_bo_map(kgem, bo);
201 static bool download_inplace(struct kgem *kgem,
207 if (unlikely(kgem->wedged))
210 cpu = download_inplace__cpu(kgem, p, bo, box, nbox);
211 if (!cpu && !kgem_bo_can_map(kgem, bo))
220 if (kgem->can_blt_cpu && kgem->max_cpu_size)
223 return !__kgem_bo_is_busy(kgem, bo);
229 struct kgem *kgem = &sna->kgem;
263 if (download_inplace(kgem, dst, src_bo, box, nbox)) {
265 read_boxes_inplace(kgem, dst, src_bo, box, nbox);
269 can_blt = kgem_bo_can_blt(kgem, src_bo) &&
289 if (kgem_bo_can_map(kgem, src_bo)) {
296 if (!can_blt || kgem->ring == KGEM_RENDER ||
321 while (step * step * 4 > sna->kgem.max_upload_tile_size)
360 dst_bo = kgem_create_buffer_2d(kgem,
376 kgem_bo_destroy(&sna->kgem, dst_bo);
382 kgem_bo_submit(&sna->kgem, dst_bo);
383 kgem_buffer_read_sync(kgem, dst_bo);
398 kgem_bo_destroy(&sna->kgem, dst_bo);
405 dst_bo = kgem_create_buffer_2d(kgem,
418 kgem_bo_destroy(&sna->kgem, dst_bo);
422 kgem_bo_submit(&sna->kgem, dst_bo);
423 kgem_buffer_read_sync(kgem, dst_bo);
438 kgem_bo_destroy(&sna->kgem, dst_bo);
454 dst_bo = kgem_create_buffer(kgem, offset, KGEM_BUFFER_LAST, &ptr);
456 read_boxes_inplace(kgem, dst, src_bo, box, nbox);
462 if (kgem->gen >= 040 && src_bo->tiling) {
476 kgem_set_mode(kgem, KGEM_BLT, dst_bo);
477 if (!kgem_check_batch(kgem, 10) ||
478 !kgem_check_reloc_and_exec(kgem, 2) ||
479 !kgem_check_many_bo_fenced(kgem, dst_bo, src_bo, NULL)) {
480 kgem_submit(kgem);
481 if (!kgem_check_many_bo_fenced(kgem, dst_bo, src_bo, NULL))
483 _kgem_set_mode(kgem, KGEM_BLT);
485 kgem_bcs_set_tiling(&sna->kgem, src_bo, NULL);
490 if (sna->kgem.gen >= 0100) {
496 rem = kgem_batch_space(kgem);
499 if (2*nbox_this_time > KGEM_RELOC_SIZE(kgem) - kgem->nreloc)
500 nbox_this_time = (KGEM_RELOC_SIZE(kgem) - kgem->nreloc) / 2;
504 assert(kgem->mode == KGEM_BLT);
509 uint32_t *b = kgem->batch + kgem->nbatch;
526 kgem_add_reloc64(kgem, kgem->nbatch + 4, dst_bo,
534 kgem_add_reloc64(kgem, kgem->nbatch + 8, src_bo,
538 kgem->nbatch += 10;
543 _kgem_submit(kgem);
547 _kgem_set_mode(kgem, KGEM_BLT);
548 kgem_bcs_set_tiling(&sna->kgem, src_bo, NULL);
557 rem = kgem_batch_space(kgem);
560 if (2*nbox_this_time > KGEM_RELOC_SIZE(kgem) - kgem->nreloc)
561 nbox_this_time = (KGEM_RELOC_SIZE(kgem) - kgem->nreloc) / 2;
565 assert(kgem->mode == KGEM_BLT);
570 uint32_t *b = kgem->batch + kgem->nbatch;
586 b[4] = kgem_add_reloc(kgem, kgem->nbatch + 4, dst_bo,
593 b[7] = kgem_add_reloc(kgem, kgem->nbatch + 7, src_bo,
597 kgem->nbatch += 8;
602 _kgem_submit(kgem);
606 _kgem_set_mode(kgem, KGEM_BLT);
607 kgem_bcs_set_tiling(&sna->kgem, src_bo, NULL);
613 kgem_buffer_read_sync(kgem, dst_bo);
646 kgem_bo_destroy(kgem, dst_bo);
650 static bool upload_inplace__tiled(struct kgem *kgem, struct kgem_bo *bo)
657 if (!kgem->memcpy_to_tiled_x)
663 if (kgem->has_wc_mmap)
666 return kgem_bo_can_map__cpu(kgem, bo, true);
670 write_boxes_inplace__tiled(struct kgem *kgem,
680 assert(kgem->has_wc_mmap || kgem_bo_can_map__cpu(kgem, bo, true));
682 if (kgem_bo_can_map__cpu(kgem, bo, true)) {
683 dst = kgem_bo_map__cpu(kgem, bo);
687 kgem_bo_sync__cpu(kgem, bo);
689 dst = kgem_bo_map__wc(kgem, bo);
693 kgem_bo_sync__gtt(kgem, bo);
701 memcpy_to_tiled_x(kgem, src, dst, bpp, stride, bo->pitch,
721 static bool write_boxes_inplace(struct kgem *kgem,
731 if (upload_inplace__tiled(kgem, bo) &&
732 write_boxes_inplace__tiled(kgem, src, stride, bpp, src_dx, src_dy,
736 if (!kgem_bo_can_map(kgem, bo))
739 kgem_bo_submit(kgem, bo);
741 dst = kgem_bo_map(kgem, bo);
781 static bool __upload_inplace(struct kgem *kgem,
797 if (kgem_bo_can_map__cpu(kgem, bo, true))
809 if (__kgem_bo_is_busy(kgem, bo))
810 return bytes * bpp >> 12 >= kgem->half_cpu_cache_pages;
815 static bool upload_inplace(struct kgem *kgem,
820 if (unlikely(kgem->wedged))
823 if (!kgem_bo_can_map(kgem, bo) && !upload_inplace__tiled(kgem, bo))
826 return __upload_inplace(kgem, bo, box, n,bpp);
834 struct kgem *kgem = &sna->kgem;
844 if (upload_inplace(kgem, dst_bo, box, nbox, dst->drawable.bitsPerPixel) &&
845 write_boxes_inplace(kgem,
854 can_blt = kgem_bo_can_blt(kgem, dst_bo) &&
875 if (!can_blt || kgem->ring == KGEM_RENDER ||
900 while (step * step * cpp > sna->kgem.max_upload_tile_size)
932 src_bo = kgem_create_buffer_2d(kgem,
980 kgem_bo_destroy(&sna->kgem, src_bo);
993 src_bo = kgem_create_buffer_2d(kgem,
1029 kgem_bo_destroy(&sna->kgem, src_bo);
1040 if (kgem->gen >= 040 && dst_bo->tiling) {
1053 kgem_set_mode(kgem, KGEM_BLT, dst_bo);
1054 if (!kgem_check_batch(kgem, 10) ||
1055 !kgem_check_reloc_and_exec(kgem, 2) ||
1056 !kgem_check_bo_fenced(kgem, dst_bo)) {
1057 kgem_submit(kgem);
1058 if (!kgem_check_bo_fenced(kgem, dst_bo))
1060 _kgem_set_mode(kgem, KGEM_BLT);
1062 kgem_bcs_set_tiling(&sna->kgem, NULL, dst_bo);
1064 if (kgem->gen >= 0100) {
1070 rem = kgem_batch_space(kgem);
1073 if (2*nbox_this_time > KGEM_RELOC_SIZE(kgem) - kgem->nreloc)
1074 nbox_this_time = (KGEM_RELOC_SIZE(kgem) - kgem->nreloc) / 2;
1088 src_bo = kgem_create_buffer(kgem, offset,
1123 assert(kgem->mode == KGEM_BLT);
1124 b = kgem->batch + kgem->nbatch;
1130 kgem_add_reloc64(kgem, kgem->nbatch + 4, dst_bo,
1138 kgem_add_reloc64(kgem, kgem->nbatch + 8, src_bo,
1142 kgem->nbatch += 10;
1152 _kgem_submit(kgem);
1153 _kgem_set_mode(kgem, KGEM_BLT);
1154 kgem_bcs_set_tiling(&sna->kgem, NULL, dst_bo);
1157 kgem_bo_destroy(kgem, src_bo);
1165 rem = kgem_batch_space(kgem);
1168 if (2*nbox_this_time > KGEM_RELOC_SIZE(kgem) - kgem->nreloc)
1169 nbox_this_time = (KGEM_RELOC_SIZE(kgem) - kgem->nreloc) / 2;
1183 src_bo = kgem_create_buffer(kgem, offset,
1190 kgem_bo_destroy(kgem, src_bo);
1222 assert(kgem->mode == KGEM_BLT);
1223 b = kgem->batch + kgem->nbatch;
1228 b[4] = kgem_add_reloc(kgem, kgem->nbatch + 4, dst_bo,
1235 b[7] = kgem_add_reloc(kgem, kgem->nbatch + 7, src_bo,
1239 kgem->nbatch += 8;
1248 _kgem_submit(kgem);
1249 _kgem_set_mode(kgem, KGEM_BLT);
1250 kgem_bcs_set_tiling(&sna->kgem, NULL, dst_bo);
1253 kgem_bo_destroy(kgem, src_bo);
1261 return write_boxes_inplace(kgem,
1268 write_boxes_inplace__xor(struct kgem *kgem,
1278 if (!kgem_bo_can_map(kgem, bo))
1281 kgem_bo_submit(kgem, bo);
1283 dst = kgem_bo_map(kgem, bo);
1322 static bool upload_inplace__xor(struct kgem *kgem,
1327 if (unlikely(kgem->wedged))
1330 if (!kgem_bo_can_map(kgem, bo))
1333 return __upload_inplace(kgem, bo, box, n, bpp);
1342 struct kgem *kgem = &sna->kgem;
1352 if (upload_inplace__xor(kgem, dst_bo, box, nbox, dst->drawable.bitsPerPixel) &&
1353 write_boxes_inplace__xor(kgem,
1363 can_blt = kgem_bo_can_blt(kgem, dst_bo) &&
1382 if (!can_blt || kgem->ring == KGEM_RENDER ||
1406 while (step * step * 4 > sna->kgem.max_upload_tile_size)
1435 src_bo = kgem_create_buffer_2d(kgem,
1485 kgem_bo_destroy(&sna->kgem, src_bo);
1498 src_bo = kgem_create_buffer_2d(kgem,
1535 kgem_bo_destroy(&sna->kgem, src_bo);
1546 if (kgem->gen >= 040 && dst_bo->tiling) {
1559 kgem_set_mode(kgem, KGEM_BLT, dst_bo);
1560 if (!kgem_check_batch(kgem, 10) ||
1561 !kgem_check_reloc_and_exec(kgem, 2) ||
1562 !kgem_check_bo_fenced(kgem, dst_bo)) {
1563 kgem_submit(kgem);
1564 if (!kgem_check_bo_fenced(kgem, dst_bo))
1566 _kgem_set_mode(kgem, KGEM_BLT);
1568 kgem_bcs_set_tiling(&sna->kgem, NULL, dst_bo);
1570 if (sna->kgem.gen >= 0100) {
1576 rem = kgem_batch_space(kgem);
1579 if (2*nbox_this_time > KGEM_RELOC_SIZE(kgem) - kgem->nreloc)
1580 nbox_this_time = (KGEM_RELOC_SIZE(kgem) - kgem->nreloc) / 2;
1594 src_bo = kgem_create_buffer(kgem, offset,
1601 kgem_bo_destroy(kgem, src_bo);
1634 assert(kgem->mode == KGEM_BLT);
1635 b = kgem->batch + kgem->nbatch;
1641 kgem_add_reloc64(kgem, kgem->nbatch + 4, dst_bo,
1649 kgem_add_reloc64(kgem, kgem->nbatch + 8, src_bo,
1653 kgem->nbatch += 10;
1662 _kgem_submit(kgem);
1663 _kgem_set_mode(kgem, KGEM_BLT);
1664 kgem_bcs_set_tiling(&sna->kgem, NULL, dst_bo);
1667 kgem_bo_destroy(kgem, src_bo);
1675 rem = kgem_batch_space(kgem);
1678 if (2*nbox_this_time > KGEM_RELOC_SIZE(kgem) - kgem->nreloc)
1679 nbox_this_time = (KGEM_RELOC_SIZE(kgem) - kgem->nreloc) / 2;
1693 src_bo = kgem_create_buffer(kgem, offset,
1700 kgem_bo_destroy(kgem, src_bo);
1733 assert(kgem->mode == KGEM_BLT);
1734 b = kgem->batch + kgem->nbatch;
1739 b[4] = kgem_add_reloc(kgem, kgem->nbatch + 4, dst_bo,
1746 b[7] = kgem_add_reloc(kgem, kgem->nbatch + 7, src_bo,
1750 kgem->nbatch += 8;
1759 _kgem_submit(kgem);
1760 _kgem_set_mode(kgem, KGEM_BLT);
1761 kgem_bcs_set_tiling(&sna->kgem, NULL, dst_bo);
1764 kgem_bo_destroy(kgem, src_bo);
1772 return write_boxes_inplace__xor(kgem,
1785 struct kgem *kgem = &sna->kgem;
1794 kgem->half_cpu_cache_pages));
1796 if (stride * pixmap->drawable.height >> 12 > kgem->half_cpu_cache_pages)
1799 if (!kgem_bo_can_blt(kgem, bo) &&
1803 src_bo = kgem_create_buffer_2d(kgem,
1832 kgem_bo_destroy(kgem, src_bo);
1851 __kgem_bo_is_busy(&sna->kgem, bo)));
1855 kgem_bo_undo(&sna->kgem, bo);
1857 if (__kgem_bo_is_busy(&sna->kgem, bo)) {
1863 new_bo = kgem_create_2d(&sna->kgem,
1874 kgem_bo_write(&sna->kgem, bo, src,
1878 if (upload_inplace__tiled(&sna->kgem, bo)) {
1885 if (write_boxes_inplace__tiled(&sna->kgem, src,
1891 if (kgem_bo_can_map(&sna->kgem, bo) &&
1892 (dst = kgem_bo_map(&sna->kgem, bo)) != NULL &&
1905 kgem_bo_destroy(&sna->kgem, bo);
1923 kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
1948 kgem_bo_undo(&sna->kgem, bo);
1950 if (!kgem_bo_can_map(&sna->kgem, bo) ||
1951 __kgem_bo_is_busy(&sna->kgem, bo)) {
1954 new_bo = kgem_create_2d(&sna->kgem,
1964 if (kgem_bo_can_map(&sna->kgem, bo) &&
1965 (dst = kgem_bo_map(&sna->kgem, bo)) != NULL &&
1979 kgem_bo_destroy(&sna->kgem, bo);
1997 kgem_bo_destroy(&sna->kgem, priv->gpu_bo);