vo_gpu_next/vulkan: add mechanism to retrieve color depth in gpu context

This commit is contained in:
der richter 2024-10-18 20:21:16 +02:00
parent 3d443cb267
commit 3c76afa05b
3 changed files with 14 additions and 1 deletions

View File

@ -842,7 +842,7 @@ static void apply_target_options(struct priv *p, struct pl_frame *target)
int dither_depth = opts->dither_depth; int dither_depth = opts->dither_depth;
if (dither_depth == 0) { if (dither_depth == 0) {
struct ra_swapchain *sw = p->ra_ctx->swapchain; struct ra_swapchain *sw = p->ra_ctx->swapchain;
if (sw->fns->color_depth) { if (sw->fns->color_depth && sw->fns->color_depth(sw) != -1) {
dither_depth = sw->fns->color_depth(sw); dither_depth = sw->fns->color_depth(sw);
} else if (!pl_color_transfer_is_hdr(target->color.transfer)) { } else if (!pl_color_transfer_is_hdr(target->color.transfer)) {
dither_depth = 8; dither_depth = 8;

View File

@ -314,6 +314,15 @@ char *ra_vk_ctx_get_device_name(struct ra_ctx *ctx)
return device_name; return device_name;
} }
static int color_depth(struct ra_swapchain *sw)
{
struct priv *p = sw->priv;
if (p->params.color_depth)
return p->params.color_depth(sw->ctx);
return -1;
}
static bool start_frame(struct ra_swapchain *sw, struct ra_fbo *out_fbo) static bool start_frame(struct ra_swapchain *sw, struct ra_fbo *out_fbo)
{ {
struct priv *p = sw->priv; struct priv *p = sw->priv;
@ -363,6 +372,7 @@ static void get_vsync(struct ra_swapchain *sw,
} }
static const struct ra_swapchain_fns vulkan_swapchain = { static const struct ra_swapchain_fns vulkan_swapchain = {
.color_depth = color_depth,
.start_frame = start_frame, .start_frame = start_frame,
.submit_frame = submit_frame, .submit_frame = submit_frame,
.swap_buffers = swap_buffers, .swap_buffers = swap_buffers,

View File

@ -13,6 +13,9 @@ struct ra_vk_ctx_params {
// In case something special needs to be done on the buffer swap. // In case something special needs to be done on the buffer swap.
void (*swap_buffers)(struct ra_ctx *ctx); void (*swap_buffers)(struct ra_ctx *ctx);
// See ra_swapchain_fns.color_depth.
int (*color_depth)(struct ra_ctx *ctx);
}; };
// Helpers for ra_ctx based on ra_vk. These initialize ctx->ra and ctx->swchain. // Helpers for ra_ctx based on ra_vk. These initialize ctx->ra and ctx->swchain.