From 43434e55afa766c0198bc81d3423d0bf3375f830 Mon Sep 17 00:00:00 2001 From: Leigh Scott Date: Wed, 19 Jan 2022 01:10:07 +0000 Subject: [PATCH] fix --- 1244.patch | 259 +++++++++++++++++++++++++++++++++++++++ Remove_legacy_caca.patch | 98 +++++++++++++++ vlc.spec | 5 + 3 files changed, 362 insertions(+) create mode 100644 1244.patch create mode 100644 Remove_legacy_caca.patch 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 +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 +-#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 +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 +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 +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: