mirror of
https://github.com/mpv-player/mpv
synced 2025-01-10 00:49:32 +00:00
dbf0fd7d60
The VkDisplayKHR context type requires making calls against the physical device before the libplacebo context is initialised. That means we can't simply use the physical device object that libplacebo would create - instead we have to create a separate one, but make sure it's referring to the same physical device. To that end, we need the device name that the user may have requested so we can pass it on.
30 lines
1.0 KiB
C
30 lines
1.0 KiB
C
#pragma once
|
|
|
|
#include "video/out/gpu/context.h"
|
|
#include "common.h"
|
|
|
|
struct ra_vk_ctx_params {
|
|
// See ra_swapchain_fns.get_vsync.
|
|
void (*get_vsync)(struct ra_ctx *ctx, struct vo_vsync_info *info);
|
|
|
|
// In case something special needs to be done when starting a frame.
|
|
bool (*start_frame)(struct ra_ctx *ctx);
|
|
|
|
// In case something special needs to be done on the buffer swap.
|
|
void (*swap_buffers)(struct ra_ctx *ctx);
|
|
};
|
|
|
|
// Helpers for ra_ctx based on ra_vk. These initialize ctx->ra and ctx->swchain.
|
|
void ra_vk_ctx_uninit(struct ra_ctx *ctx);
|
|
bool ra_vk_ctx_init(struct ra_ctx *ctx, struct mpvk_ctx *vk,
|
|
struct ra_vk_ctx_params params,
|
|
VkPresentModeKHR preferred_mode);
|
|
|
|
// Handles a resize request, and updates ctx->vo->dwidth/dheight
|
|
bool ra_vk_ctx_resize(struct ra_ctx *ctx, int width, int height);
|
|
|
|
// May be called on a ra_ctx of any type.
|
|
struct mpvk_ctx *ra_vk_ctx_get(struct ra_ctx *ctx);
|
|
|
|
// Get the user requested Vulkan device name.
|
|
char *ra_vk_ctx_get_device_name(struct ra_ctx *ctx); |