Lines Matching refs:res

58 init_valid_range(struct d3d12_resource *res)
60 if (can_map_directly(&res->base.b))
61 util_range_init(&res->valid_buffer_range);
79 struct d3d12_resource *res,
82 if (d3d12_batch_has_references(d3d12_current_batch(ctx), res->bo, want_to_write))
88 busy |= d3d12_batch_has_references(batch, res->bo, want_to_write);
95 struct d3d12_resource *res,
98 if (d3d12_batch_has_references(d3d12_current_batch(ctx), res->bo, want_to_write)) {
102 if (d3d12_batch_has_references(batch, res->bo, want_to_write))
119 struct d3d12_resource *res,
158 res->dxgi_format = DXGI_FORMAT_UNKNOWN;
162 res->bo = d3d12_bo_wrap_buffer(screen, buf);
169 struct d3d12_resource *res,
176 res->mip_levels = templ->last_level + 1;
177 res->dxgi_format = d3d12_get_format(templ->format);
180 desc.Format = res->dxgi_format;
287 res->dt = winsys->displaytarget_create(screen->winsys,
288 res->base.b.bind,
289 res->base.b.format,
293 &res->dt_stride);
296 res->bo = d3d12_bo_wrap_res(screen, d3d12_res, init_residency);
302 convert_planar_resource(struct d3d12_resource *res)
304 unsigned num_planes = util_format_get_num_planes(res->base.b.format);
305 if (num_planes <= 1 || res->base.b.next || !res->bo)
310 &res->base.b, nullptr, nullptr
316 *plane_res = *res;
326 plane_res->base.b.format = util_format_get_plane_format(res->base.b.format, plane);
327 plane_res->base.b.width0 = util_format_get_plane_width(res->base.b.format, plane, res->base.b.width0);
328 plane_res->base.b.height0 = util_format_get_plane_height(res->base.b.format, plane, res->base.b.height0);
331 struct d3d12_screen *screen = d3d12_screen(res->base.b.screen);
332 D3D12_RESOURCE_DESC desc = GetDesc(res->bo->res);
340 assert(plane_res->first_plane == &res->base.b);
347 struct d3d12_resource *res,
354 res->base.b = *templ;
356 res->overall_format = templ->format;
357 res->plane_slice = 0;
358 res->first_plane = &res->base.b;
368 pipe_reference_init(&res->base.b.reference, 1);
369 res->base.b.screen = &screen->base;
372 ret = init_buffer(screen, res, templ);
374 ret = init_texture(screen, res, templ, heap, placed_offset);
378 FREE(res);
382 init_valid_range(res);
383 threaded_resource_init(&res->base.b,
387 memset(&res->bind_counts, 0, sizeof(d3d12_resource::bind_counts));
389 convert_planar_resource(res);
391 return &res->base.b;
398 struct d3d12_resource *res = CALLOC_STRUCT(d3d12_resource);
399 if (!res)
402 return d3d12_resource_create_or_place(d3d12_screen(pscreen), res, templ, nullptr, 0);
416 struct d3d12_resource *res = CALLOC_STRUCT(d3d12_resource);
417 if (!res)
423 res->base.b = *templ;
424 res->bo = next->bo;
425 d3d12_bo_reference(res->bo);
445 if (res->bo) {
446 d3d12_res = res->bo->res;
471 assert(!res->bo);
473 return d3d12_resource_create_or_place(screen, res, templ, d3d12_heap, handle->offset);
476 pipe_reference_init(&res->base.b.reference, 1);
477 res->base.b.screen = pscreen;
496 res->base.b.width0 = incoming_res_desc.Width;
497 res->base.b.height0 = incoming_res_desc.Height;
498 res->base.b.depth0 = 1;
499 res->base.b.array_size = 1;
503 res->base.b.target = PIPE_BUFFER;
504 res->base.b.bind = PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_CONSTANT_BUFFER |
509 res->base.b.target = incoming_res_desc.DepthOrArraySize > 1 ?
511 res->base.b.array_size = incoming_res_desc.DepthOrArraySize;
514 res->base.b.target = incoming_res_desc.DepthOrArraySize > 1 ?
516 res->base.b.array_size = incoming_res_desc.DepthOrArraySize;
519 res->base.b.target = PIPE_TEXTURE_3D;
520 res->base.b.depth0 = footprint->Depth;
526 res->base.b.nr_samples = incoming_res_desc.SampleDesc.Count;
527 res->base.b.last_level = incoming_res_desc.MipLevels - 1;
528 res->base.b.usage = PIPE_USAGE_DEFAULT;
529 res->base.b.bind |= PIPE_BIND_SHARED;
531 res->base.b.bind |= PIPE_BIND_RENDER_TARGET | PIPE_BIND_BLENDABLE | PIPE_BIND_DISPLAY_TARGET;
533 res->base.b.bind |= PIPE_BIND_DEPTH_STENCIL;
535 res->base.b.bind |= PIPE_BIND_SHADER_IMAGE;
537 res->base.b.bind |= PIPE_BIND_SAMPLER_VIEW;
540 if (res->base.b.target == PIPE_TEXTURE_2D_ARRAY &&
543 if (res->base.b.array_size < 6) {
547 res->base.b.target = templ->target;
548 res->base.b.array_size /= 6;
551 if (res->base.b.target != templ->target ||
555 res->base.b.array_size != templ->array_size ||
557 res->base.b.last_level != templ->last_level) {
562 res->base.b.target, templ->target,
566 res->base.b.array_size, templ->array_size,
568 res->base.b.last_level + 1, templ->last_level + 1);
592 if (templ->bind & ~res->base.b.bind) {
597 res->base.b.format = templ->format;
598 res->overall_format = (enum pipe_format)handle->format;
601 res->base.b.format = d3d12_get_pipe_format(incoming_res_desc.Format);
603 if (res->base.b.format == PIPE_FORMAT_NONE) {
605 res->base.b.format = d3d12_get_default_pipe_format(incoming_res_desc.Format);
607 if (res->base.b.format == PIPE_FORMAT_NONE) {
613 res->overall_format = res->base.b.format;
617 handle->format = res->overall_format;
619 res->dxgi_format = d3d12_get_format(res->overall_format);
620 res->plane_slice = handle->plane;
621 res->first_plane = &res->base.b;
623 if (!res->bo) {
624 res->bo = d3d12_bo_wrap_res(screen, d3d12_res, d3d12_permanently_resident);
626 init_valid_range(res);
628 threaded_resource_init(&res->base.b, false);
629 convert_planar_resource(res);
631 return &res->base.b;
634 if (res->bo)
635 d3d12_bo_unreference(res->bo);
638 FREE(res);
649 struct d3d12_resource *res = d3d12_resource(pres);
654 handle->com_obj = d3d12_resource_resource(res);
659 screen->dev->CreateSharedHandle(d3d12_resource_resource(res),
718 * expected to be done for res->plane_slice plane only, but some
721 * In this function, we take the res and box the caller passed, and the plane_* properties
725 static void d3d12_adjust_transfer_dimensions_for_plane(const struct d3d12_resource *res,
739 /* first_plane.width = width_multiplier * planes[res->plane_slice].width*/
740 /* first_plane.height = height_multiplier * planes[res->plane_slice].height*/
741 float width_multiplier = res->first_plane->width0 / (float) util_format_get_plane_width(res->overall_format, res->plane_slice, res->first_plane->width0);
742 float height_multiplier = res->first_plane->height0 / (float) util_format_get_plane_height(res->overall_format, res->plane_slice, res->first_plane->height0);
751 ptrans->box.width = util_format_get_plane_width(res->overall_format, plane_slice, ptrans->box.width);
752 ptrans->box.height = util_format_get_plane_height(res->overall_format, plane_slice, ptrans->box.height);
753 ptrans->box.x = util_format_get_plane_width(res->overall_format, plane_slice, ptrans->box.x);
754 ptrans->box.y = util_format_get_plane_height(res->overall_format, plane_slice, ptrans->box.y);
766 struct d3d12_resource* res = d3d12_resource(pres);
768 struct pipe_resource *cur_plane_resource = res->first_plane;
771 int width = util_format_get_plane_width(res->base.b.format, plane_slice, res->first_plane->width0);
772 int height = util_format_get_plane_height(res->base.b.format, plane_slice, res->first_plane->height0);
801 struct d3d12_resource* res = d3d12_resource(pres);
802 unsigned num_planes = util_format_get_num_planes(res->overall_format);
820 *stride = strides[res->plane_slice];
824 *offset = offsets[res->plane_slice];
873 (void)obj->QueryInterface(&memobj->res);
876 if (!memobj->res && !memobj->heap) {
882 bool expect_dedicated = memobj->res != nullptr;
895 if (memobj->res)
896 memobj->res->Release();
912 whandle.com_obj = memobj->res ? (void *) memobj->res : (void *) memobj->heap;
936 get_subresource_id(struct d3d12_resource *res, unsigned resid,
939 unsigned resource_stride = res->base.b.last_level + 1;
940 if (res->base.b.target == PIPE_TEXTURE_1D_ARRAY ||
941 res->base.b.target == PIPE_TEXTURE_2D_ARRAY)
942 resource_stride *= res->base.b.array_size;
944 if (res->base.b.target == PIPE_TEXTURE_CUBE)
947 if (res->base.b.target == PIPE_TEXTURE_CUBE_ARRAY)
948 resource_stride *= 6 * res->base.b.array_size;
950 unsigned layer_stride = res->base.b.last_level + 1;
953 base_level + res->plane_slice * resource_stride;
957 fill_texture_location(struct d3d12_resource *res,
961 int subres = get_subresource_id(res, resid, z, trans->base.b.level);
965 tex_loc.pResource = d3d12_resource_resource(res);
971 struct d3d12_resource *res,
980 auto descr = GetDesc(d3d12_resource_underlying(res, &offset));
984 unsigned sub_resid = get_subresource_id(res, resid, z, trans->base.b.level);
993 if (util_format_has_depth(util_format_description(res->base.b.format)) &&
995 buf_loc.PlacedFootprint.Footprint.Width = res->base.b.width0;
996 buf_loc.PlacedFootprint.Footprint.Height = res->base.b.height0;
997 buf_loc.PlacedFootprint.Footprint.Depth = res->base.b.depth0;
1000 util_format_get_blockwidth(res->base.b.format));
1002 util_format_get_blockheight(res->base.b.format));
1004 util_format_get_blockdepth(res->base.b.format));
1039 struct d3d12_resource *res,
1050 util_format_name(res->base.b.format));
1053 struct d3d12_screen *screen = d3d12_screen(res->base.b.screen);
1056 copy_info.src_loc = fill_buffer_location(ctx, res, staging_res, trans, depth, resid, z);
1059 copy_info.dst = res;
1060 copy_info.dst_loc = fill_texture_location(res, trans, resid, z);
1061 if (util_format_has_depth(util_format_description(res->base.b.format)) &&
1069 copy_info.dst_z = res->base.b.target == PIPE_TEXTURE_CUBE ? 0 : dest_z;
1077 struct d3d12_resource *res,
1081 if (res->base.b.target == PIPE_TEXTURE_3D) {
1083 transfer_buf_to_image_part(ctx, res, staging_res, trans,
1091 transfer_buf_to_image_part(ctx, res, staging_res, trans,
1100 struct d3d12_resource *res,
1109 struct d3d12_screen *screen = d3d12_screen(res->base.b.screen);
1112 copy_info.src = res;
1113 copy_info.src_loc = fill_texture_location(res, trans, resid, z);
1115 copy_info.dst_loc = fill_buffer_location(ctx, res, staging_res, trans,
1120 bool whole_resource = util_texrange_covers_whole_level(&res->base.b, trans->base.b.level,
1123 if (util_format_has_depth(util_format_description(res->base.b.format)) &&
1141 struct d3d12_resource *res,
1156 util_format_name(res->base.b.format), resid,
1161 if (res->base.b.nr_samples > 1) {
1162 struct pipe_resource tmpl = res->base.b;
1166 struct pipe_box box = {0,0,0, (int)res->base.b.width0, (int16_t)res->base.b.height0, (int16_t)res->base.b.depth0};
1169 resolve_info.dst.format = res->base.b.format;
1170 resolve_info.src.resource = &res->base.b;
1172 resolve_info.src.format = res->base.b.format;
1179 res = (struct d3d12_resource *)resolved_resource;
1183 if (res->base.b.target == PIPE_TEXTURE_3D) {
1184 transfer_image_part_to_buf(ctx, res, staging_res, trans, resid,
1189 transfer_image_part_to_buf(ctx, res, staging_res, trans, resid,
1254 struct d3d12_resource *res,
1258 assert(can_map_directly(&res->base.b));
1263 !util_ranges_intersect(&res->valid_buffer_range, range->Begin, range->End)) {
1267 if (!(usage & PIPE_MAP_UNSYNCHRONIZED) && resource_is_busy(ctx, res, usage & PIPE_MAP_WRITE)) {
1269 if (d3d12_batch_has_references(d3d12_current_batch(ctx), res->bo, usage & PIPE_MAP_WRITE))
1274 d3d12_resource_wait_idle(ctx, res, usage & PIPE_MAP_WRITE);
1278 util_range_add(&res->base.b, &res->valid_buffer_range,
1290 res = d3d12_resource(d3d12_resource_create(s, tmpl));
1294 if (res) {
1296 d3d12_bo_unmap(res->bo, nullptr);
1297 pipe_resource_reference((struct pipe_resource **)&res, NULL);
1304 ptr = d3d12_bo_map(res->bo, nullptr);
1313 d3d12_bo_unmap(res->bo, nullptr);
1318 return res;
1322 return !res;
1325 struct d3d12_resource *res;
1336 struct d3d12_resource *res,
1341 int width = copy_whole_resource ? res->base.b.width0 : box->width;
1342 int height = copy_whole_resource ? res->base.b.height0 : box->height;
1344 trans->base.b.stride = align(util_format_get_stride(res->base.b.format, width),
1346 trans->base.b.layer_stride = util_format_get_2d_size(res->base.b.format,
1351 trans->zs_cpu_copy_stride = align(util_format_get_stride(res->base.b.format, box->width),
1353 trans->zs_cpu_copy_layer_stride = util_format_get_2d_size(res->base.b.format,
1363 read_zs_surface(struct d3d12_context *ctx, struct d3d12_resource *res,
1370 prepare_zs_layer_strides(screen, res, box, trans);
1390 if (!transfer_image_to_buf(ctx, res, depth_buffer, trans, 0))
1401 if (!transfer_image_to_buf(ctx, res, stencil_buffer, trans, 1))
1424 switch (res->base.b.format) {
1455 prepare_write_zs_surface(struct d3d12_resource *res,
1459 struct d3d12_screen *screen = d3d12_screen(res->base.b.screen);
1460 prepare_zs_layer_strides(screen, res, box, trans);
1470 write_zs_surface(struct pipe_context *pctx, struct d3d12_resource *res,
1473 struct d3d12_screen *screen = d3d12_screen(res->base.b.screen);
1510 switch (res->base.b.format) {
1542 transfer_buf_to_image(d3d12_context(pctx), res, depth_buffer, trans, 0);
1543 transfer_buf_to_image(d3d12_context(pctx), res, stencil_buffer, trans, 1);
1557 struct d3d12_resource *res = d3d12_resource(pres);
1560 if (usage & PIPE_MAP_DIRECTLY || !res->bo)
1578 if (can_map_directly(&res->base.b)) {
1590 if (!synchronize(ctx, res, usage, &range)) {
1594 ptr = d3d12_bo_map(res->bo, &range);
1598 ptr = read_zs_surface(ctx, res, box, trans);
1600 ptr = prepare_write_zs_surface(res, box, trans);
1604 } else if(util_format_is_yuv(res->overall_format)) {
1608 unsigned num_planes = util_format_get_num_planes(res->overall_format);
1644 d3d12_adjust_transfer_dimensions_for_plane(res,
1666 ptrans->stride = strides[res->plane_slice];
1667 ptrans->layer_stride = layer_strides[res->plane_slice];
1668 ptr = all_planes_map + offsets[res->plane_slice];
1677 if (res->base.b.target != PIPE_TEXTURE_3D)
1697 if (res->base.b.target == PIPE_BUFFER) {
1726 transfer_buf_to_buf(ctx, res, staging_res, src_offset, dst_offset, box->width);
1728 ret = transfer_image_to_buf(ctx, res, staging_res, trans, 0);
1749 struct d3d12_resource *res = d3d12_resource(ptrans->resource);
1755 write_zs_surface(pctx, res, trans);
1758 if(util_format_is_yuv(res->overall_format)) {
1761 unsigned num_planes = util_format_get_num_planes(res->overall_format);
1781 /* requested in res->plane_slice, but the VAAPI frontend has this*/
1790 range.Begin = res->base.b.target == PIPE_BUFFER ?
1798 d3d12_adjust_transfer_dimensions_for_plane(res,
1815 range.Begin = res->base.b.target == PIPE_BUFFER ?
1823 if (res->base.b.target == PIPE_BUFFER) {
1826 transfer_buf_to_buf(ctx, staging_res, res, src_offset, dst_offset, ptrans->box.width);
1828 transfer_buf_to_image(ctx, res, staging_res, trans, 0);
1838 d3d12_bo_unmap(res->bo, &range);