summaryrefslogtreecommitdiffstats
path: root/video/out/placebo
diff options
context:
space:
mode:
Diffstat (limited to 'video/out/placebo')
-rw-r--r--video/out/placebo/ra_pl.c85
-rw-r--r--video/out/placebo/utils.c114
-rw-r--r--video/out/placebo/utils.h13
3 files changed, 25 insertions, 187 deletions
diff --git a/video/out/placebo/ra_pl.c b/video/out/placebo/ra_pl.c
index d2590d35d3..14c9444fd3 100644
--- a/video/out/placebo/ra_pl.c
+++ b/video/out/placebo/ra_pl.c
@@ -45,13 +45,10 @@ struct ra *ra_create_pl(pl_gpu gpu, struct mp_log *log)
ra->caps |= RA_CAP_COMPUTE | RA_CAP_NUM_GROUPS;
if (gpu->limits.compute_queues > gpu->limits.fragment_queues)
ra->caps |= RA_CAP_PARALLEL_COMPUTE;
-#if PL_API_VER >= 180
if (gpu->limits.max_variable_comps)
ra->caps |= RA_CAP_GLOBAL_UNIFORM;
-#else
- if (gpu->limits.max_variables)
- ra->caps |= RA_CAP_GLOBAL_UNIFORM;
-#endif
+ if (!gpu->limits.host_cached)
+ ra->caps |= RA_CAP_SLOW_DR;
if (gpu->limits.max_tex_1d_dim)
ra->caps |= RA_CAP_TEX_1D;
@@ -220,36 +217,7 @@ static bool tex_upload_pl(struct ra *ra, const struct ra_tex_upload_params *para
};
}
-#if PL_API_VER >= 168
pl_params.row_pitch = params->stride;
-#else
- // Older libplacebo uses texel-sized strides, so we have to manually
- // compensate for possibly misaligned sources (typically rgb24).
- size_t texel_size = tex->params.format->texel_size;
- pl_params.stride_w = params->stride / texel_size;
- size_t stride = pl_params.stride_w * texel_size;
-
- if (stride != params->stride) {
- // Fall back to uploading via a staging buffer prepared in CPU
- int lines = params->rc ? pl_rect_h(pl_params.rc) : tex->params.h;
- staging = pl_buf_create(gpu, &(struct pl_buf_params) {
- .size = lines * stride,
- .memory_type = PL_BUF_MEM_HOST,
- .host_mapped = true,
- });
- if (!staging)
- return false;
-
- const uint8_t *src = params->buf ? params->buf->data : params->src;
- assert(src);
- for (int y = 0; y < lines; y++)
- memcpy(staging->data + y * stride, src + y * params->stride, stride);
-
- pl_params.ptr = NULL;
- pl_params.buf = staging;
- pl_params.buf_offset = 0;
- }
-#endif
}
bool ok = pl_tex_upload(gpu, &pl_params);
@@ -264,33 +232,10 @@ static bool tex_download_pl(struct ra *ra, struct ra_tex_download_params *params
.tex = tex,
.ptr = params->dst,
.timer = get_active_timer(ra),
+ .row_pitch = params->stride,
};
-#if PL_API_VER >= 168
- pl_params.row_pitch = params->stride;
return pl_tex_download(get_gpu(ra), &pl_params);
-#else
- size_t texel_size = tex->params.format->texel_size;
- pl_params.stride_w = params->stride / texel_size;
- size_t stride = pl_params.stride_w * texel_size;
- uint8_t *staging = NULL;
- if (stride != params->stride) {
- staging = talloc_size(NULL, tex->params.h * stride);
- pl_params.ptr = staging;
- }
-
- bool ok = pl_tex_download(get_gpu(ra), &pl_params);
- if (ok && staging) {
- for (int y = 0; y < tex->params.h; y++) {
- memcpy((uint8_t *) params->dst + y * params->stride,
- staging + y * stride,
- stride);
- }
- }
-
- talloc_free(staging);
- return ok;
-#endif
}
static struct ra_buf *buf_create_pl(struct ra *ra,
@@ -505,8 +450,6 @@ static struct ra_renderpass *renderpass_create_pl(struct ra *ra,
.glsl_shader = params->type == RA_RENDERPASS_TYPE_COMPUTE
? params->compute_shader
: params->frag_shader,
- .cached_program = params->cached_program.start,
- .cached_program_len = params->cached_program.len,
};
struct pl_blend_params blend_params;
@@ -516,21 +459,16 @@ static struct ra_renderpass *renderpass_create_pl(struct ra *ra,
pl_params.vertex_type = PL_PRIM_TRIANGLE_LIST;
pl_params.vertex_stride = params->vertex_stride;
pl_params.load_target = !params->invalidate_target;
-
-#if PL_API_VER >= 169
pl_params.target_format = params->target_format->priv;
-#else
- pl_params.target_dummy.params.format = params->target_format->priv;
-#endif
if (params->enable_blend) {
pl_params.blend_params = &blend_params;
blend_params = (struct pl_blend_params) {
// Same enum order as ra_blend
- .src_rgb = (enum ra_blend) params->blend_src_rgb,
- .dst_rgb = (enum ra_blend) params->blend_dst_rgb,
- .src_alpha = (enum ra_blend) params->blend_src_alpha,
- .dst_alpha = (enum ra_blend) params->blend_dst_alpha,
+ .src_rgb = (enum pl_blend_mode) params->blend_src_rgb,
+ .dst_rgb = (enum pl_blend_mode) params->blend_dst_rgb,
+ .src_alpha = (enum pl_blend_mode) params->blend_src_alpha,
+ .dst_alpha = (enum pl_blend_mode) params->blend_dst_alpha,
};
}
@@ -565,11 +503,6 @@ static struct ra_renderpass *renderpass_create_pl(struct ra *ra,
.priv = talloc_steal(pass, priv),
};
- pass->params.cached_program = (struct bstr) {
- .start = (void *) priv->pass->params.cached_program,
- .len = priv->pass->params.cached_program_len,
- };
-
// fall through
error:
talloc_free(tmp);
@@ -601,7 +534,7 @@ static void renderpass_run_pl(struct ra *ra,
.data = val->data,
});
} else {
- struct pl_desc_binding bind;
+ struct pl_desc_binding bind = {0};
switch (inp->type) {
case RA_VARTYPE_TEX:
case RA_VARTYPE_IMG_W: {
@@ -617,7 +550,7 @@ static void renderpass_run_pl(struct ra *ra,
case RA_VARTYPE_BUF_RW:
bind.object = (* (struct ra_buf **) val->data)->priv;
break;
- default: abort();
+ default: MP_ASSERT_UNREACHABLE();
};
p->binds[p->inp_index[val->index]] = bind;
diff --git a/video/out/placebo/utils.c b/video/out/placebo/utils.c
index a3d852fb14..dae9b14761 100644
--- a/video/out/placebo/utils.c
+++ b/video/out/placebo/utils.c
@@ -1,6 +1,8 @@
#include "common/common.h"
#include "utils.h"
+#include <libplacebo/utils/dolbyvision.h>
+
static const int pl_log_to_msg_lev[PL_LOG_ALL+1] = {
[PL_LOG_FATAL] = MSGL_FATAL,
[PL_LOG_ERR] = MSGL_ERR,
@@ -23,7 +25,7 @@ static const enum pl_log_level msg_lev_to_pl_log[MSGL_MAX+1] = {
};
// translates log levels while probing
-static const enum pl_log_level probing_map(enum pl_log_level level)
+static enum pl_log_level probing_map(enum pl_log_level level)
{
switch (level) {
case PL_LOG_FATAL:
@@ -42,6 +44,12 @@ static void log_cb(void *priv, enum pl_log_level level, const char *msg)
mp_msg(log, pl_log_to_msg_lev[level], "%s\n", msg);
}
+static int determine_pl_log_level(struct mp_log *log)
+{
+ int log_level = mp_msg_level(log);
+ return log_level == -1 ? PL_LOG_NONE : msg_lev_to_pl_log[log_level];
+}
+
static void log_cb_probing(void *priv, enum pl_log_level level, const char *msg)
{
struct mp_log *log = priv;
@@ -52,7 +60,7 @@ pl_log mppl_log_create(void *tactx, struct mp_log *log)
{
return pl_log_create(PL_API_VER, &(struct pl_log_params) {
.log_cb = log_cb,
- .log_level = msg_lev_to_pl_log[mp_msg_level(log)],
+ .log_level = determine_pl_log_level(log),
.log_priv = mp_log_new(tactx, log, "libplacebo"),
});
}
@@ -63,105 +71,3 @@ void mppl_log_set_probing(pl_log log, bool probing)
params.log_cb = probing ? log_cb_probing : log_cb;
pl_log_update(log, &params);
}
-
-enum pl_color_primaries mp_prim_to_pl(enum mp_csp_prim prim)
-{
- switch (prim) {
- case MP_CSP_PRIM_AUTO: return PL_COLOR_PRIM_UNKNOWN;
- case MP_CSP_PRIM_BT_601_525: return PL_COLOR_PRIM_BT_601_525;
- case MP_CSP_PRIM_BT_601_625: return PL_COLOR_PRIM_BT_601_625;
- case MP_CSP_PRIM_BT_709: return PL_COLOR_PRIM_BT_709;
- case MP_CSP_PRIM_BT_2020: return PL_COLOR_PRIM_BT_2020;
- case MP_CSP_PRIM_BT_470M: return PL_COLOR_PRIM_BT_470M;
- case MP_CSP_PRIM_APPLE: return PL_COLOR_PRIM_APPLE;
- case MP_CSP_PRIM_ADOBE: return PL_COLOR_PRIM_ADOBE;
- case MP_CSP_PRIM_PRO_PHOTO: return PL_COLOR_PRIM_PRO_PHOTO;
- case MP_CSP_PRIM_CIE_1931: return PL_COLOR_PRIM_CIE_1931;
- case MP_CSP_PRIM_DCI_P3: return PL_COLOR_PRIM_DCI_P3;
- case MP_CSP_PRIM_DISPLAY_P3: return PL_COLOR_PRIM_DISPLAY_P3;
- case MP_CSP_PRIM_V_GAMUT: return PL_COLOR_PRIM_V_GAMUT;
- case MP_CSP_PRIM_S_GAMUT: return PL_COLOR_PRIM_S_GAMUT;
- case MP_CSP_PRIM_COUNT: return PL_COLOR_PRIM_COUNT;
- }
-
- MP_ASSERT_UNREACHABLE();
-}
-
-enum pl_color_transfer mp_trc_to_pl(enum mp_csp_trc trc)
-{
- switch (trc) {
- case MP_CSP_TRC_AUTO: return PL_COLOR_TRC_UNKNOWN;
- case MP_CSP_TRC_BT_1886: return PL_COLOR_TRC_BT_1886;
- case MP_CSP_TRC_SRGB: return PL_COLOR_TRC_SRGB;
- case MP_CSP_TRC_LINEAR: return PL_COLOR_TRC_LINEAR;
- case MP_CSP_TRC_GAMMA18: return PL_COLOR_TRC_GAMMA18;
- case MP_CSP_TRC_GAMMA20: return PL_COLOR_TRC_GAMMA20;
- case MP_CSP_TRC_GAMMA22: return PL_COLOR_TRC_GAMMA22;
- case MP_CSP_TRC_GAMMA24: return PL_COLOR_TRC_GAMMA24;
- case MP_CSP_TRC_GAMMA26: return PL_COLOR_TRC_GAMMA26;
- case MP_CSP_TRC_GAMMA28: return PL_COLOR_TRC_GAMMA28;
- case MP_CSP_TRC_PRO_PHOTO: return PL_COLOR_TRC_PRO_PHOTO;
- case MP_CSP_TRC_PQ: return PL_COLOR_TRC_PQ;
- case MP_CSP_TRC_HLG: return PL_COLOR_TRC_HLG;
- case MP_CSP_TRC_V_LOG: return PL_COLOR_TRC_V_LOG;
- case MP_CSP_TRC_S_LOG1: return PL_COLOR_TRC_S_LOG1;
- case MP_CSP_TRC_S_LOG2: return PL_COLOR_TRC_S_LOG2;
- case MP_CSP_TRC_COUNT: return PL_COLOR_TRC_COUNT;
- }
-
- MP_ASSERT_UNREACHABLE();
-}
-
-enum pl_color_system mp_csp_to_pl(enum mp_csp csp)
-{
- switch (csp) {
- case MP_CSP_AUTO: return PL_COLOR_SYSTEM_UNKNOWN;
- case MP_CSP_BT_601: return PL_COLOR_SYSTEM_BT_601;
- case MP_CSP_BT_709: return PL_COLOR_SYSTEM_BT_709;
- case MP_CSP_SMPTE_240M: return PL_COLOR_SYSTEM_SMPTE_240M;
- case MP_CSP_BT_2020_NC: return PL_COLOR_SYSTEM_BT_2020_NC;
- case MP_CSP_BT_2020_C: return PL_COLOR_SYSTEM_BT_2020_C;
- case MP_CSP_RGB: return PL_COLOR_SYSTEM_RGB;
- case MP_CSP_XYZ: return PL_COLOR_SYSTEM_XYZ;
- case MP_CSP_YCGCO: return PL_COLOR_SYSTEM_YCGCO;
- case MP_CSP_COUNT: return PL_COLOR_SYSTEM_COUNT;
- }
-
- MP_ASSERT_UNREACHABLE();
-}
-
-enum pl_color_levels mp_levels_to_pl(enum mp_csp_levels levels)
-{
- switch (levels) {
- case MP_CSP_LEVELS_AUTO: return PL_COLOR_LEVELS_UNKNOWN;
- case MP_CSP_LEVELS_TV: return PL_COLOR_LEVELS_TV;
- case MP_CSP_LEVELS_PC: return PL_COLOR_LEVELS_PC;
- case MP_CSP_LEVELS_COUNT: return PL_COLOR_LEVELS_COUNT;
- }
-
- MP_ASSERT_UNREACHABLE();
-}
-
-enum pl_alpha_mode mp_alpha_to_pl(enum mp_alpha_type alpha)
-{
- switch (alpha) {
- case MP_ALPHA_AUTO: return PL_ALPHA_UNKNOWN;
- case MP_ALPHA_STRAIGHT: return PL_ALPHA_INDEPENDENT;
- case MP_ALPHA_PREMUL: return PL_ALPHA_PREMULTIPLIED;
- }
-
- MP_ASSERT_UNREACHABLE();
-}
-
-enum pl_chroma_location mp_chroma_to_pl(enum mp_chroma_location chroma)
-{
- switch (chroma) {
- case MP_CHROMA_AUTO: return PL_CHROMA_UNKNOWN;
- case MP_CHROMA_TOPLEFT: return PL_CHROMA_TOP_LEFT;
- case MP_CHROMA_LEFT: return PL_CHROMA_LEFT;
- case MP_CHROMA_CENTER: return PL_CHROMA_CENTER;
- case MP_CHROMA_COUNT: return PL_CHROMA_COUNT;
- }
-
- MP_ASSERT_UNREACHABLE();
-}
diff --git a/video/out/placebo/utils.h b/video/out/placebo/utils.h
index ca0f065a8c..3f61d8b504 100644
--- a/video/out/placebo/utils.h
+++ b/video/out/placebo/utils.h
@@ -1,12 +1,18 @@
#pragma once
+#include "config.h"
#include "common/common.h"
#include "common/msg.h"
#include "video/csputils.h"
+#include "video/mp_image.h"
+
+#include <libavutil/buffer.h>
#include <libplacebo/common.h>
#include <libplacebo/log.h>
#include <libplacebo/colorspace.h>
+#include <libplacebo/renderer.h>
+#include <libplacebo/utils/libav.h>
pl_log mppl_log_create(void *tactx, struct mp_log *log);
void mppl_log_set_probing(pl_log log, bool probing);
@@ -20,10 +26,3 @@ static inline struct pl_rect2d mp_rect2d_to_pl(struct mp_rect rc)
.y1 = rc.y1,
};
}
-
-enum pl_color_primaries mp_prim_to_pl(enum mp_csp_prim prim);
-enum pl_color_transfer mp_trc_to_pl(enum mp_csp_trc trc);
-enum pl_color_system mp_csp_to_pl(enum mp_csp csp);
-enum pl_color_levels mp_levels_to_pl(enum mp_csp_levels levels);
-enum pl_alpha_mode mp_alpha_to_pl(enum mp_alpha_type alpha);
-enum pl_chroma_location mp_chroma_to_pl(enum mp_chroma_location chroma);