Lines Matching defs:res

463 kopper_acquire(struct zink_screen *screen, struct zink_resource *res, uint64_t timeout)
465 struct kopper_displaytarget *cdt = res->obj->dt;
474 if (!res->obj->new_dt && res->obj->dt_idx != UINT32_MAX &&
475 (cdt->swapchain->images[res->obj->dt_idx].acquire || cdt->swapchain->images[res->obj->dt_idx].acquired))
480 if (res->obj->new_dt) {
481 VkResult error = update_swapchain(screen, cdt, res->base.b.width0, res->base.b.height0);
485 res->obj->new_dt = false;
486 res->layout = VK_IMAGE_LAYOUT_UNDEFINED;
487 res->obj->access = 0;
488 res->obj->access_stage = 0;
506 ret = VKSCR(AcquireNextImageKHR)(screen->dev, cdt->swapchain->swapchain, timeout, acquire, VK_NULL_HANDLE, &res->obj->dt_idx);
509 res->obj->new_dt = true;
518 cdt->swapchain->images[res->obj->dt_idx].acquire = acquire;
519 res->obj->image = cdt->swapchain->images[res->obj->dt_idx].image;
520 cdt->swapchain->images[res->obj->dt_idx].acquired = false;
521 if (!cdt->swapchain->images[res->obj->dt_idx].init) {
523 res->layout = VK_IMAGE_LAYOUT_UNDEFINED;
524 cdt->swapchain->images[res->obj->dt_idx].init = true;
527 res->obj->indefinite_acquire = true;
530 cdt->swapchain->images[res->obj->dt_idx].dt_has_data = false;
535 kill_swapchain(struct zink_context *ctx, struct zink_resource *res)
539 mesa_loge("zink: swapchain killed %p\n", res);
540 zink_batch_reference_resource(&ctx->batch, res);
541 struct pipe_resource *pres = screen->base.resource_create(&screen->base, &res->base.b);
542 zink_resource_object_reference(screen, &res->obj, zink_resource(pres)->obj);
543 res->layout = VK_IMAGE_LAYOUT_UNDEFINED;
544 res->swapchain = false;
558 zink_kopper_acquire(struct zink_context *ctx, struct zink_resource *res, uint64_t timeout)
560 assert(zink_is_swapchain(res));
561 struct kopper_displaytarget *cdt = res->obj->dt;
566 kill_swapchain(ctx, res);
570 res->obj->new_dt |= res->base.b.width0 != cswap->scci.imageExtent.width ||
571 res->base.b.height0 != cswap->scci.imageExtent.height;
572 VkResult ret = kopper_acquire(zink_screen(ctx->base.screen), res, timeout);
576 res->base.b.width0 = ctx->swapchain_size.width;
577 res->base.b.height0 = ctx->swapchain_size.height;
580 kill_swapchain(ctx, res);
586 zink_kopper_acquire_submit(struct zink_screen *screen, struct zink_resource *res)
588 assert(res->obj->dt);
589 struct kopper_displaytarget *cdt = res->obj->dt;
590 assert(res->obj->dt_idx != UINT32_MAX);
591 if (cdt->swapchain->images[res->obj->dt_idx].dt_has_data)
593 assert(res->obj->dt_idx != UINT32_MAX);
594 if (cdt->swapchain->images[res->obj->dt_idx].acquired) {
595 assert(!cdt->swapchain->images[res->obj->dt_idx].acquire);
598 assert(cdt->swapchain->images[res->obj->dt_idx].acquire);
599 cdt->swapchain->images[res->obj->dt_idx].acquired = true;
601 VkSemaphore acquire = cdt->swapchain->images[res->obj->dt_idx].acquire;
602 cdt->swapchain->images[res->obj->dt_idx].acquire = VK_NULL_HANDLE;
603 cdt->swapchain->images[res->obj->dt_idx].dt_has_data = true;
608 zink_kopper_present(struct zink_screen *screen, struct zink_resource *res)
610 assert(res->obj->dt);
611 assert(!res->obj->present);
617 assert(zink_kopper_acquired(res->obj->dt, res->obj->dt_idx));
618 VkResult ret = VKSCR(CreateSemaphore)(screen->dev, &sci, NULL, &res->obj->present);
619 return zink_screen_handle_vkresult(screen, ret) ? res->obj->present : VK_NULL_HANDLE;
626 struct zink_resource *res;
635 struct kopper_displaytarget *cdt = cpi->res->obj->dt;
677 cpi->res->obj->new_dt = true;
722 zink_kopper_present_queue(struct zink_screen *screen, struct zink_resource *res)
724 assert(res->obj->dt);
725 struct kopper_displaytarget *cdt = res->obj->dt;
726 assert(zink_kopper_acquired(res->obj->dt, res->obj->dt_idx));
727 assert(res->obj->present);
729 cpi->sem = res->obj->present;
730 cpi->res = res;
732 cpi->indefinite_acquire = res->obj->indefinite_acquire;
733 res->obj->last_dt_idx = cpi->image = res->obj->dt_idx;
742 res->obj->present = VK_NULL_HANDLE;
754 if (i == res->obj->dt_idx)
766 res->obj->indefinite_acquire = false;
767 cdt->swapchain->images[res->obj->dt_idx].acquired = false;
768 res->obj->dt_idx = UINT32_MAX;
772 zink_kopper_acquire_readback(struct zink_context *ctx, struct zink_resource *res)
775 assert(res->obj->dt);
776 struct kopper_displaytarget *cdt = res->obj->dt;
778 uint32_t last_dt_idx = res->obj->last_dt_idx;
781 if (res->obj->last_dt_idx == UINT32_MAX ||
782 (zink_kopper_acquired(cdt, res->obj->dt_idx) && cdt->swapchain->images[res->obj->dt_idx].dt_has_data))
784 while (res->obj->dt_idx != last_dt_idx) {
785 if (res->obj->dt_idx != UINT32_MAX && !zink_kopper_present_readback(ctx, res))
788 ret = kopper_acquire(screen, res, 0);
791 kill_swapchain(ctx, res);
797 res->base.b.width0 = ctx->swapchain_size.width;
798 res->base.b.height0 = ctx->swapchain_size.height;
804 zink_kopper_present_readback(struct zink_context *ctx, struct zink_resource *res)
808 if (res->obj->last_dt_idx == UINT32_MAX)
810 if (res->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR) {
811 zink_resource_image_barrier(ctx, res, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, 0, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT);
818 VkSemaphore acquire = zink_kopper_acquire_submit(screen, res);
819 VkSemaphore present = res->obj->present ? res->obj->present : zink_kopper_present(screen, res);
829 zink_kopper_present_queue(screen, res);
837 struct zink_resource *res = zink_resource(pres);
840 if (!res->obj->dt)
842 struct kopper_displaytarget *cdt = res->obj->dt;
844 *w = res->base.b.width0;
845 *h = res->base.b.height0;
875 struct zink_resource *res = zink_resource(ctx->fb_state.zsbuf->texture);
887 zink_resource_object_reference(screen, &res->obj, z->obj);
888 res->base.b.width0 = ctx->fb_state.width;
889 res->base.b.height0 = ctx->fb_state.height;
894 struct pipe_surface *psurf = ctx->base.create_surface(&ctx->base, &res->base.b, ctx->fb_state.zsbuf);
905 struct zink_resource *res = zink_resource(pres);
907 if (!res->obj->dt)
909 struct kopper_displaytarget *cdt = res->obj->dt;
916 struct zink_resource *res = zink_resource(pres);
918 assert(res->obj->dt);
919 struct kopper_displaytarget *cdt = res->obj->dt;
932 struct zink_resource *res = zink_resource(pres);
933 assert(res->obj->dt);
934 struct kopper_displaytarget *cdt = res->obj->dt;
941 if (!zink_kopper_acquired(res->obj->dt, res->obj->dt_idx))
942 if (!zink_kopper_acquire(ctx, res, UINT64_MAX))
945 return cdt->swapchain->images[res->obj->dt_idx].age;