commit 43434e55afa766c0198bc81d3423d0bf3375f830
Author: Leigh Scott <leigh123linux(a)gmail.com>
Date: Wed Jan 19 01:10:07 2022 +0000
fix
1244.patch | 259 +++++++++++++++++++++++++++++++++++++++++++++++
Remove_legacy_caca.patch | 98 ++++++++++++++++++
vlc.spec | 5 +
3 files changed, 362 insertions(+)
---
diff --git a/1244.patch b/1244.patch
new file mode 100644
index 0000000..f73550b
--- /dev/null
+++ b/1244.patch
@@ -0,0 +1,259 @@
+From 110d69c8245bb2bc1f0cf183dcdd6ba636973bfc Mon Sep 17 00:00:00 2001
+From: Niklas Haas <git(a)haasn.dev>
+Date: Tue, 18 Jan 2022 16:47:22 +0100
+Subject: [PATCH 1/4] Revert "opengl: vout_helper: use pl_gpu_dummy for
+ shaders"
+
+This reverts commit 2437484d7684a4661048df1e095484a276bbea0b.
+
+The referenced commit is not a good way of fixing the issue described in
+its commit message. Attaching a dummy GPU to the pl_shader makes the
+shader think a GPU is actually available, and can lead to e.g. the use
+of a dither texture (which VLC has no mapping code for, and would thus
+result in a shader compilation error).
+
+All of the queried limits are also irrelevant for the way we use shaders
+in this code, since they only affect GPU resources (which we can't use)
+or texture sampling (which we don't use).
+
+Fixes #26503 by removing the conflicting code
+---
+ modules/video_output/opengl/converter.h | 1 -
+ modules/video_output/opengl/vout_helper.c | 78 +----------------------
+ 2 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/modules/video_output/opengl/converter.h
b/modules/video_output/opengl/converter.h
+index f8f0c12024..b69807f8cd 100644
+--- a/modules/video_output/opengl/converter.h
++++ b/modules/video_output/opengl/converter.h
+@@ -340,7 +340,6 @@ struct opengl_tex_converter_t
+ bool yuv_color;
+ GLfloat yuv_coefficients[16];
+
+- const struct pl_gpu *pl_gpu;
+ struct pl_shader *pl_sh;
+ const struct pl_shader_res *pl_sh_res;
+
+diff --git a/modules/video_output/opengl/vout_helper.c
b/modules/video_output/opengl/vout_helper.c
+index bf07c1c03f..711a14b7ae 100644
+--- a/modules/video_output/opengl/vout_helper.c
++++ b/modules/video_output/opengl/vout_helper.c
+@@ -44,12 +44,6 @@
+ #include "vout_helper.h"
+ #include "internal.h"
+
+-#if HAVE_LIBPLACEBO
+-#if PL_API_VER >= 18
+-#include <libplacebo/dummy.h>
+-#endif
+-#endif
+-
+ #ifndef GL_CLAMP_TO_EDGE
+ # define GL_CLAMP_TO_EDGE 0x812F
+ #endif
+@@ -576,10 +570,6 @@ opengl_deinit_program(vout_display_opengl_t *vgl, struct prgm
*prgm)
+
+ #ifdef HAVE_LIBPLACEBO
+ FREENULL(tc->uloc.pl_vars);
+-#if PL_API_VER >= 18
+- if (tc->pl_gpu)
+- pl_gpu_dummy_destroy(&tc->pl_gpu);
+-#endif
+ if (tc->pl_ctx)
+ pl_context_destroy(&tc->pl_ctx);
+ #endif
+@@ -632,78 +622,14 @@ opengl_init_program(vout_display_opengl_t *vgl, struct prgm *prgm,
+ // create the main libplacebo context
+ if (!subpics)
+ {
+-#if PL_API_VER >= 18
+- struct pl_gpu_dummy_params gpu_dummy_params = {
+- .caps = PL_GPU_CAP_INPUT_VARIABLES,
+- .glsl = (struct pl_glsl_desc) {
+-#ifdef USE_OPENGL_ES2
+- .version = 100,
+- .gles = true,
+-#else
+- .version = 120,
+-#endif
+- .vulkan = false,
+- },
+- .limits = { 0 }
+- };
+-#endif
+-
+- const opengl_vtable_t *vt = tc->vt;
+-
+-#if PL_API_VER >= 18
+- vt->GetIntegerv(GL_MAX_TEXTURE_SIZE,
+- (GLint *)&gpu_dummy_params.limits.max_tex_1d_dim);
+- gpu_dummy_params.limits.max_tex_2d_dim =
gpu_dummy_params.limits.max_tex_1d_dim;
+-#ifndef USE_OPENGL_ES2
+- vt->GetIntegerv(GL_MAX_3D_TEXTURE_SIZE,
+- (GLint *)&gpu_dummy_params.limits.max_tex_3d_dim);
+- vt->GetIntegerv(GL_MAX_UNIFORM_BLOCK_SIZE,
+- (GLint *)&gpu_dummy_params.limits.max_ubo_size);
+- vt->GetIntegerv(GL_MAX_SHADER_STORAGE_BLOCK_SIZE,
+- (GLint *)&gpu_dummy_params.limits.max_ssbo_size);
+- vt->GetIntegerv(GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB,
+- (GLint *)&gpu_dummy_params.limits.min_gather_offset);
+- vt->GetIntegerv(GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB,
+- (GLint *)&gpu_dummy_params.limits.max_gather_offset);
+- vt->GetIntegerv(GL_MAX_COMPUTE_SHARED_MEMORY_SIZE,
+- (GLint *)&gpu_dummy_params.limits.max_shmem_size);
+- vt->GetIntegerv(GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS,
+- (GLint *)&gpu_dummy_params.limits.max_group_threads);
+- if (vt->GetIntegeri_v != NULL)
+- {
+- for (int i = 0; i < 3; i++)
+- {
+- vt->GetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, i,
+- (GLint
*)&gpu_dummy_params.limits.max_dispatch[i]);
+- vt->GetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_SIZE, i,
+- (GLint
*)&gpu_dummy_params.limits.max_group_size[i]);
+- }
+- }
+-#endif
+-#endif
+-
+- /* Drain potential errors, non-existing variables will be set to zero */
+- while (vt->GetError() != GL_NO_ERROR) {}
+-
+ tc->pl_ctx = pl_context_create(PL_API_VER, &(struct pl_context_params) {
+ .log_cb = log_cb,
+ .log_priv = tc,
+ .log_level = PL_LOG_INFO,
+ });
+-
+ if (tc->pl_ctx) {
+-#if PL_API_VER >= 18
+- /* pl_gpu = NULL is not fatal but might generate incorrect shaders
+- * depending or more recent GLSL version than VLC shaders. */
+- tc->pl_gpu = pl_gpu_dummy_create(tc->pl_ctx, &gpu_dummy_params);
+-
+- struct pl_shader_params shader_params = {
+- .gpu = tc->pl_gpu,
+- };
+-#endif
+-
+ # if PL_API_VER >= 20
+- tc->pl_sh = pl_shader_alloc(tc->pl_ctx, &shader_params);
++ tc->pl_sh = pl_shader_alloc(tc->pl_ctx, NULL);
+ # elif PL_API_VER >= 6
+ tc->pl_sh = pl_shader_alloc(tc->pl_ctx, NULL, 0);
+ # else
+@@ -861,7 +787,7 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt,
+ GET_PROC_ADDR_CORE(GetError);
+ GET_PROC_ADDR_CORE(GetIntegerv);
+ #ifndef USE_OPENGL_ES2
+- GET_PROC_ADDR_OPTIONAL(GetIntegeri_v);
++ GET_PROC_ADDR_CORE(GetIntegeri_v);
+ #endif
+ GET_PROC_ADDR_CORE(GetString);
+ GET_PROC_ADDR_CORE(PixelStorei);
+--
+GitLab
+
+
+From 6d145e38c03d4ffa5b6bff31e358a5ca6ceb3461 Mon Sep 17 00:00:00 2001
+From: Niklas Haas <git(a)haasn.dev>
+Date: Tue, 18 Jan 2022 17:07:25 +0100
+Subject: [PATCH 2/4] opengl: vout_helper: use pl_shader_params.glsl
+
+This is the proper way to limit the GLSL version when using standalone
+shaders without an associated GPU backend.
+---
+ modules/video_output/opengl/vout_helper.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/modules/video_output/opengl/vout_helper.c
b/modules/video_output/opengl/vout_helper.c
+index 711a14b7ae..a98621a859 100644
+--- a/modules/video_output/opengl/vout_helper.c
++++ b/modules/video_output/opengl/vout_helper.c
+@@ -629,7 +629,10 @@ opengl_init_program(vout_display_opengl_t *vgl, struct prgm *prgm,
+ });
+ if (tc->pl_ctx) {
+ # if PL_API_VER >= 20
+- tc->pl_sh = pl_shader_alloc(tc->pl_ctx, NULL);
++ tc->pl_sh = pl_shader_alloc(tc->pl_ctx, &(struct pl_shader_params)
{
++ .glsl.version = tc->glsl_version,
++ .glsl.gles = tc->is_gles,
++ });
+ # elif PL_API_VER >= 6
+ tc->pl_sh = pl_shader_alloc(tc->pl_ctx, NULL, 0);
+ # else
+--
+GitLab
+
+
+From 645cbd6fac5bd07d1c973be9fc048b0f329c087c Mon Sep 17 00:00:00 2001
+From: Niklas Haas <git(a)haasn.dev>
+Date: Tue, 18 Jan 2022 17:19:27 +0100
+Subject: [PATCH 3/4] opengl: don't error on no-op libplacebo shader
+
+See 6efc345d81a12
+---
+ modules/video_output/opengl/fragment_shaders.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/modules/video_output/opengl/fragment_shaders.c
b/modules/video_output/opengl/fragment_shaders.c
+index e0b98732ca..ecf7226f0e 100644
+--- a/modules/video_output/opengl/fragment_shaders.c
++++ b/modules/video_output/opengl/fragment_shaders.c
+@@ -765,8 +765,8 @@ opengl_fragment_shader_init_impl(opengl_tex_converter_t *tc, GLenum
tex_target,
+ }
+
+ #ifdef HAVE_LIBPLACEBO
+- if (tc->pl_sh_res) {
+- const struct pl_shader_res *res = tc->pl_sh_res;
++ const struct pl_shader_res *res = tc->pl_sh_res;
++ if (res && res->input != PL_SHADER_SIG_NONE) {
+ assert(res->input == PL_SHADER_SIG_COLOR);
+ assert(res->output == PL_SHADER_SIG_COLOR);
+ ADDF(" result = %s(result);\n", res->name);
+--
+GitLab
+
+
+From 37bf74e6645d3023c1ebcbd81ffae1e552d3a73e Mon Sep 17 00:00:00 2001
+From: Niklas Haas <git(a)haasn.dev>
+Date: Tue, 18 Jan 2022 18:03:48 +0100
+Subject: [PATCH 4/4] opengl: drop unneeded GetIntegeri_v
+
+This causes issues on some platforms, and we don't need it
+---
+ modules/video_output/opengl/converter.h | 3 ---
+ modules/video_output/opengl/vout_helper.c | 3 ---
+ 2 files changed, 6 deletions(-)
+
+diff --git a/modules/video_output/opengl/converter.h
b/modules/video_output/opengl/converter.h
+index b69807f8cd..7000e1f38e 100644
+--- a/modules/video_output/opengl/converter.h
++++ b/modules/video_output/opengl/converter.h
+@@ -167,9 +167,6 @@ typedef struct {
+ PFNGLGENTEXTURESPROC GenTextures;
+ PFNGLGETERRORPROC GetError;
+ PFNGLGETINTEGERVPROC GetIntegerv;
+-#ifndef USE_OPENGL_ES2
+- PFNGLGETINTEGERIVPROC GetIntegeri_v;
+-#endif
+ PFNGLGETSTRINGPROC GetString;
+ PFNGLPIXELSTOREIPROC PixelStorei;
+ PFNGLTEXIMAGE2DPROC TexImage2D;
+diff --git a/modules/video_output/opengl/vout_helper.c
b/modules/video_output/opengl/vout_helper.c
+index a98621a859..13d65e04c8 100644
+--- a/modules/video_output/opengl/vout_helper.c
++++ b/modules/video_output/opengl/vout_helper.c
+@@ -789,9 +789,6 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt,
+ GET_PROC_ADDR_CORE(GenTextures);
+ GET_PROC_ADDR_CORE(GetError);
+ GET_PROC_ADDR_CORE(GetIntegerv);
+-#ifndef USE_OPENGL_ES2
+- GET_PROC_ADDR_CORE(GetIntegeri_v);
+-#endif
+ GET_PROC_ADDR_CORE(GetString);
+ GET_PROC_ADDR_CORE(PixelStorei);
+ GET_PROC_ADDR_CORE(TexImage2D);
+--
+GitLab
+
diff --git a/Remove_legacy_caca.patch b/Remove_legacy_caca.patch
new file mode 100644
index 0000000..8374e71
--- /dev/null
+++ b/Remove_legacy_caca.patch
@@ -0,0 +1,98 @@
+diff -uNrp a/modules/video_output/caca.c b/modules/video_output/caca.c
+--- a/modules/video_output/caca.c 2022-01-14 06:09:28.000000000 +0000
++++ b/modules/video_output/caca.c 2022-01-18 23:09:44.979137301 +0000
+@@ -74,9 +74,9 @@ static void Place(vout_display_t *, vout
+
+ /* */
+ struct vout_display_sys_t {
+- cucul_canvas_t *cv;
++ caca_canvas_t *cv;
+ caca_display_t *dp;
+- cucul_dither_t *dither;
++ caca_dither_t *dither;
+
+ picture_pool_t *pool;
+ vout_display_event_thread_t *et;
+@@ -153,9 +153,9 @@ static int Open(vlc_object_t *object)
+ if (!sys)
+ goto error;
+
+- sys->cv = cucul_create_canvas(0, 0);
++ sys->cv = caca_create_canvas(0, 0);
+ if (!sys->cv) {
+- msg_Err(vd, "cannot initialize libcucul");
++ msg_Err(vd, "cannot initialize libcaca");
+ goto error;
+ }
+
+@@ -209,11 +209,11 @@ error:
+ if (sys->pool)
+ picture_pool_Release(sys->pool);
+ if (sys->dither)
+- cucul_free_dither(sys->dither);
++ caca_free_dither(sys->dither);
+ if (sys->dp)
+ caca_free_display(sys->dp);
+ if (sys->cv)
+- cucul_free_canvas(sys->cv);
++ caca_free_canvas(sys->cv);
+
+ free(sys);
+ }
+@@ -235,9 +235,9 @@ static void Close(vlc_object_t *object)
+ if (sys->pool)
+ picture_pool_Release(sys->pool);
+ if (sys->dither)
+- cucul_free_dither(sys->dither);
++ caca_free_dither(sys->dither);
+ caca_free_display(sys->dp);
+- cucul_free_canvas(sys->cv);
++ caca_free_canvas(sys->cv);
+
+ #if defined(_WIN32)
+ FreeConsole();
+@@ -266,7 +266,7 @@ static void Prepare(vout_display_t *vd,
+
+ if (!sys->dither) {
+ /* Create the libcaca dither object */
+- sys->dither = cucul_create_dither(32,
++ sys->dither = caca_create_dither(32,
+ vd->source.i_visible_width,
+ vd->source.i_visible_height,
+ picture->p[0].i_pitch,
+@@ -284,12 +284,12 @@ static void Prepare(vout_display_t *vd,
+ vout_display_place_t place;
+ Place(vd, &place);
+
+- cucul_set_color_ansi(sys->cv, CUCUL_COLOR_DEFAULT, CUCUL_COLOR_BLACK);
+- cucul_clear_canvas(sys->cv);
++ caca_set_color_ansi(sys->cv, CACA_DEFAULT, CACA_BLACK);
++ caca_clear_canvas(sys->cv);
+
+ const int crop_offset = vd->source.i_y_offset * picture->p->i_pitch +
+ vd->source.i_x_offset * picture->p->i_pixel_pitch;
+- cucul_dither_bitmap(sys->cv, place.x, place.y,
++ caca_dither_bitmap(sys->cv, place.x, place.y,
+ place.width, place.height,
+ sys->dither,
+ &picture->p->p_pixels[crop_offset]);
+@@ -328,7 +328,7 @@ static int Control(vout_display_t *vd, i
+
+ case VOUT_DISPLAY_CHANGE_SOURCE_CROP:
+ if (sys->dither)
+- cucul_free_dither(sys->dither);
++ caca_free_dither(sys->dither);
+ sys->dither = NULL;
+ return VLC_SUCCESS;
+
+@@ -366,8 +366,8 @@ static void Place(vout_display_t *vd, vo
+
+ vout_display_PlacePicture(place, &vd->source, vd->cfg, false);
+
+- const int canvas_width = cucul_get_canvas_width(sys->cv);
+- const int canvas_height = cucul_get_canvas_height(sys->cv);
++ const int canvas_width = caca_get_canvas_width(sys->cv);
++ const int canvas_height = caca_get_canvas_height(sys->cv);
+ const int display_width = caca_get_display_width(sys->dp);
+ const int display_height = caca_get_display_height(sys->dp);
+
diff --git a/vlc.spec b/vlc.spec
index ae97266..6241c57 100644
--- a/vlc.spec
+++ b/vlc.spec
@@ -79,6 +79,9 @@ Patch12:
0001-Revert-access-libdvdread-6.1.2-supports-UTF-8-paths-.patch
#
https://code.videolan.org/videolan/vlc/-/issues/25473#note_256576
Patch13: 0001-Get-addr-by-ref.-from-getConnectionEndpointAddress.patch
Patch14:
https://code.videolan.org/videolan/vlc/-/merge_requests/1245.patch
+#
https://code.videolan.org/videolan/vlc/-/merge_requests/889
+Patch15: Remove_legacy_caca.patch
+Patch16:
https://code.videolan.org/videolan/vlc/-/merge_requests/1244.patch
BuildRequires: desktop-file-utils
BuildRequires: libappstream-glib
@@ -360,6 +363,8 @@ sed -i -e 's/luac/luac-5.1/g' configure.ac
%if 0%{?fedora} > 35
%patch13 -p1
%patch14 -p1
+%patch15 -p1
+%patch16 -p1
%endif
%{?_with_bootstrap: