This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 92f2e6374dfbe9bf1c8e4d879f8810deafff3710 Author: Lynne <[email protected]> AuthorDate: Sun Jul 12 14:11:59 2026 +0900 Commit: Lynne <[email protected]> CommitDate: Mon Jul 13 18:57:38 2026 +0900 configure: remove libshaderc and libglslang support All of it is now gone. --- .forgejo/workflows/test.yml | 2 +- configure | 36 +---- doc/filters.texi | 3 +- libavfilter/Makefile | 4 - libavfilter/vulkan_glslang.c | 19 --- libavfilter/vulkan_shaderc.c | 19 --- libavutil/Makefile | 2 - libavutil/vulkan_glslang.c | 307 ------------------------------------------- libavutil/vulkan_shaderc.c | 144 -------------------- libavutil/vulkan_spirv.h | 44 ------- 10 files changed, 7 insertions(+), 573 deletions(-) diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml index c8ce77b8b5..dbcc89b981 100644 --- a/.forgejo/workflows/test.yml +++ b/.forgejo/workflows/test.yml @@ -95,7 +95,7 @@ jobs: - name: Configure run: | mkdir build && cd build - ../ffmpeg/configure --pkg-config-flags="--static" $FFBUILD_TARGET_FLAGS $FF_CONFIGURE \ + ../ffmpeg/configure --pkg-config-flags="--static" $FFBUILD_TARGET_FLAGS ${FF_CONFIGURE/--enable-libshaderc/} \ --cc="$CC" --cxx="$CXX" --ar="$AR" --ranlib="$RANLIB" --nm="$NM" \ --extra-cflags="$FF_CFLAGS" --extra-cxxflags="$FF_CXXFLAGS" \ --extra-libs="$FF_LIBS" --extra-ldflags="$FF_LDFLAGS" --extra-ldexeflags="$FF_LDEXEFLAGS" \ diff --git a/configure b/configure index 80954aa826..862822752e 100755 --- a/configure +++ b/configure @@ -237,7 +237,6 @@ External library support: --enable-libfreetype enable libfreetype, needed for drawtext filter [no] --enable-libfribidi enable libfribidi, improves drawtext filter [no] --enable-libharfbuzz enable libharfbuzz, needed for drawtext filter [no] - --enable-libglslang enable runtime GLSL->SPIRV compilation via libglslang [no] --enable-libgme enable Game Music Emu via libgme [no] --enable-libgsm enable GSM de/encoding via libgsm [no] --enable-libiec61883 enable iec61883 via libiec61883 [no] @@ -274,7 +273,6 @@ External library support: --enable-librsvg enable SVG rasterization via librsvg [no] --enable-librubberband enable rubberband needed for rubberband filter [no] --enable-librtmp enable RTMP[E] support via librtmp [no] - --enable-libshaderc enable runtime GLSL->SPIRV compilation via libshaderc [no] --enable-libshine enable fixed-point MP3 encoding via libshine [no] --enable-libsmbclient enable Samba protocol via libsmbclient [no] --enable-libsnappy enable Snappy compression, needed for hap encoding [no] @@ -2091,7 +2089,6 @@ EXTERNAL_LIBRARY_LIST=" libfreetype libfribidi libharfbuzz - libglslang libgme libgsm libiec61883 @@ -2123,7 +2120,6 @@ EXTERNAL_LIBRARY_LIST=" librist librsvg librtmp - libshaderc libshine libsmbclient libsnappy @@ -4306,7 +4302,7 @@ zoompan_filter_deps="swscale" zscale_filter_deps="libzimg const_nan" scale_vaapi_filter_deps="vaapi" scale_vt_filter_deps="videotoolbox VTPixelTransferSessionCreate" -scale_vulkan_filter_deps="vulkan spirv_compiler spirv_library" +scale_vulkan_filter_deps="vulkan spirv_compiler swscale" vpp_qsv_filter_deps="libmfx" vpp_qsv_filter_select="qsvvpp" xfade_opencl_filter_deps="opencl" @@ -4364,14 +4360,14 @@ avcodec_suggest="libm stdatomic zlib" avdevice_deps="avformat avcodec avutil" avdevice_suggest="libm stdatomic" avfilter_deps="avutil" -avfilter_suggest="libm stdatomic zlib spirv_library" +avfilter_suggest="libm stdatomic zlib" avformat_deps="avcodec avutil" avformat_suggest="libm network zlib stdatomic" avutil_suggest="amf clock_gettime ffnvcodec gcrypt libm zlib libdrm libmfx opencl openssl user32 vaapi vulkan videotoolbox corefoundation corevideo coremedia bcrypt stdatomic" swresample_deps="avutil" swresample_suggest="libm libsoxr stdatomic" swscale_deps="avutil" -swscale_suggest="libm stdatomic spirv_library" +swscale_suggest="libm stdatomic" shader_compression_suggest="zlib" avcodec_extralibs="pthreads_extralibs iconv_extralibs dxva2_extralibs liblcevc_dec_extralibs lcms2_extralibs" @@ -6988,15 +6984,6 @@ if test -n "$custom_allocator"; then add_extralibs "$custom_allocator_extralibs" fi -# Unlike other feature flags or libraries, spirv_library is not defined -# within any of our predefined categories of components. -# It gets defined if either libshaderc or libglslang check succeeds. -# As such, its in a state of neither being explicitly enabled, nor -# explicitly disabled, but even in this state, being mentioned in -# _deps results in it always passing. -# Disable it explicitly to fix this. -disable spirv_library - check_func_headers malloc.h _aligned_malloc && enable aligned_malloc check_func ${malloc_prefix}memalign && enable memalign check_func ${malloc_prefix}posix_memalign && enable posix_memalign @@ -7230,10 +7217,6 @@ if ! disabled ffnvcodec; then check_pkg_config ffnvcodec "ffnvcodec >= 11.1.5.3 ffnvcodec < 12.0" "$ffnv_hdr_list" "" fi -if enabled_all libglslang libshaderc; then - die "ERROR: libshaderc and libglslang are mutually exclusive, if in doubt, disable libglslang" -fi - check_cpp_condition winrt windows.h "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)" if ! disabled w32threads && ! enabled pthreads; then @@ -7365,16 +7348,6 @@ enabled libfontconfig && require_pkg_config libfontconfig fontconfig "fontco enabled libfreetype && require_pkg_config libfreetype freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType enabled libfribidi && require_pkg_config libfribidi fribidi fribidi.h fribidi_version_info enabled libharfbuzz && require_pkg_config libharfbuzz harfbuzz hb.h hb_buffer_create -if enabled libglslang; then - spvremap="-lSPVRemapper" - require_headers "glslang/build_info.h" && { test_cpp_condition glslang/build_info.h "GLSLANG_VERSION_MAJOR >= 16" && spvremap="" ; } - check_lib spirv_library glslang/Include/glslang_c_interface.h glslang_initialize_process \ - -lglslang -lMachineIndependent -lGenericCodeGen \ - ${spvremap} -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lstdc++ $libm_extralibs $pthreads_extralibs || - require spirv_library glslang/Include/glslang_c_interface.h glslang_initialize_process \ - -lglslang -lMachineIndependent -lOSDependent -lHLSL -lOGLCompiler -lGenericCodeGen \ - ${spvremap} -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lstdc++ $libm_extralibs $pthreads_extralibs ; -fi enabled libgme && { check_pkg_config libgme libgme gme/gme.h gme_new_emu || require libgme gme/gme.h gme_new_emu -lgme -lstdc++; } enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do @@ -7460,7 +7433,6 @@ enabled librist && require_pkg_config librist "librist >= 0.2.7" libri enabled librsvg && require_pkg_config librsvg librsvg-2.0 librsvg-2.0/librsvg/rsvg.h rsvg_handle_new_from_data enabled librtmp && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket enabled librubberband && require_pkg_config librubberband "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new -lstdc++ && append librubberband_extralibs "-lstdc++" -enabled libshaderc && require_pkg_config spirv_library "shaderc >= 2019.1" shaderc/shaderc.h shaderc_compiler_initialize enabled libshine && require_pkg_config libshine shine shine/layer3.h shine_encode_buffer enabled libsmbclient && { check_pkg_config libsmbclient smbclient libsmbclient.h smbc_init || require libsmbclient libsmbclient.h smbc_init -lsmbclient; } @@ -7881,7 +7853,7 @@ if enabled vulkan; then probe_glslc $program && break done else - disable libglslang libshaderc spirv_library spirv_compiler + disable spirv_compiler fi if enabled vulkan; then diff --git a/doc/filters.texi b/doc/filters.texi index 34219890d4..70a7975b57 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -29200,7 +29200,8 @@ Preserve landscape geometry (when @var{width} >= @var{height}). Below is a description of the currently available Vulkan video filters. To enable compilation of these filters you need to configure FFmpeg with -@code{--enable-vulkan} and either @code{--enable-libglslang} or @code{--enable-libshaderc}. +@code{--enable-vulkan}, and have a SPIR-V compiler (@code{glslc} or +@code{glslangValidator}) available at build time. Running Vulkan filters requires you to initialize a hardware device and to pass that device to all filters in any filter graph. @table @option diff --git a/libavfilter/Makefile b/libavfilter/Makefile index cbae5f4ffd..ce40cf3e65 100644 --- a/libavfilter/Makefile +++ b/libavfilter/Makefile @@ -665,10 +665,6 @@ OBJS-$(CONFIG_AVSYNCTEST_FILTER) += src_avsynctest.o OBJS-$(CONFIG_AMOVIE_FILTER) += src_movie.o OBJS-$(CONFIG_MOVIE_FILTER) += src_movie.o -# vulkan libs -OBJS-$(CONFIG_LIBGLSLANG) += vulkan_glslang.o vulkan.o -OBJS-$(CONFIG_LIBSHADERC) += vulkan_shaderc.o vulkan.o - # Objects duplicated from other libraries for shared builds SHLIBOBJS += log2_tab.o diff --git a/libavfilter/vulkan_glslang.c b/libavfilter/vulkan_glslang.c deleted file mode 100644 index 9aa41567a3..0000000000 --- a/libavfilter/vulkan_glslang.c +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "libavutil/vulkan_glslang.c" diff --git a/libavfilter/vulkan_shaderc.c b/libavfilter/vulkan_shaderc.c deleted file mode 100644 index 9f60bf4dfd..0000000000 --- a/libavfilter/vulkan_shaderc.c +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "libavutil/vulkan_shaderc.c" diff --git a/libavutil/Makefile b/libavutil/Makefile index 90a42fbb06..c3cadf5c2f 100644 --- a/libavutil/Makefile +++ b/libavutil/Makefile @@ -253,8 +253,6 @@ SKIPHEADERS-$(CONFIG_VDPAU) += hwcontext_vdpau.h SKIPHEADERS-$(CONFIG_VULKAN) += hwcontext_vulkan.h vulkan.h \ vulkan_functions.h \ vulkan_loader.h -SKIPHEADERS-$(CONFIG_LIBSHADERC) += vulkan_spirv.h -SKIPHEADERS-$(CONFIG_LIBGLSLANG) += vulkan_spirv.h SKIPHEADERS-$(CONFIG_SHADER_COMPRESSION) += zlib_utils.h TESTPROGS = adler32 \ diff --git a/libavutil/vulkan_glslang.c b/libavutil/vulkan_glslang.c deleted file mode 100644 index aebb52dd44..0000000000 --- a/libavutil/vulkan_glslang.c +++ /dev/null @@ -1,307 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <glslang/build_info.h> -#include <glslang/Include/glslang_c_interface.h> - -#include "vulkan_spirv.h" -#include "libavutil/mem.h" -#include "libavutil/avassert.h" -#include "libavutil/thread.h" - -static AVMutex glslc_mutex = AV_MUTEX_INITIALIZER; -static int glslc_refcount = 0; - -static const glslang_resource_t glslc_resource_limits = { - .max_lights = 32, - .max_clip_planes = 6, - .max_texture_units = 32, - .max_texture_coords = 32, - .max_vertex_attribs = 64, - .max_vertex_uniform_components = 4096, - .max_varying_floats = 64, - .max_vertex_texture_image_units = 32, - .max_combined_texture_image_units = 80, - .max_texture_image_units = 32, - .max_fragment_uniform_components = 4096, - .max_draw_buffers = 32, - .max_vertex_uniform_vectors = 128, - .max_varying_vectors = 8, - .max_fragment_uniform_vectors = 16, - .max_vertex_output_vectors = 16, - .max_fragment_input_vectors = 15, - .min_program_texel_offset = -8, - .max_program_texel_offset = 7, - .max_clip_distances = 8, - .max_compute_work_group_count_x = 65535, - .max_compute_work_group_count_y = 65535, - .max_compute_work_group_count_z = 65535, - .max_compute_work_group_size_x = 1024, - .max_compute_work_group_size_y = 1024, - .max_compute_work_group_size_z = 64, - .max_compute_uniform_components = 1024, - .max_compute_texture_image_units = 16, - .max_compute_image_uniforms = 8, - .max_compute_atomic_counters = 8, - .max_compute_atomic_counter_buffers = 1, - .max_varying_components = 60, - .max_vertex_output_components = 64, - .max_geometry_input_components = 64, - .max_geometry_output_components = 128, - .max_fragment_input_components = 128, - .max_image_units = 8, - .max_combined_image_units_and_fragment_outputs = 8, - .max_combined_shader_output_resources = 8, - .max_image_samples = 0, - .max_vertex_image_uniforms = 0, - .max_tess_control_image_uniforms = 0, - .max_tess_evaluation_image_uniforms = 0, - .max_geometry_image_uniforms = 0, - .max_fragment_image_uniforms = 8, - .max_combined_image_uniforms = 8, - .max_geometry_texture_image_units = 16, - .max_geometry_output_vertices = 256, - .max_geometry_total_output_components = 1024, - .max_geometry_uniform_components = 1024, - .max_geometry_varying_components = 64, - .max_tess_control_input_components = 128, - .max_tess_control_output_components = 128, - .max_tess_control_texture_image_units = 16, - .max_tess_control_uniform_components = 1024, - .max_tess_control_total_output_components = 4096, - .max_tess_evaluation_input_components = 128, - .max_tess_evaluation_output_components = 128, - .max_tess_evaluation_texture_image_units = 16, - .max_tess_evaluation_uniform_components = 1024, - .max_tess_patch_components = 120, - .max_patch_vertices = 32, - .max_tess_gen_level = 64, - .max_viewports = 16, - .max_vertex_atomic_counters = 0, - .max_tess_control_atomic_counters = 0, - .max_tess_evaluation_atomic_counters = 0, - .max_geometry_atomic_counters = 0, - .max_fragment_atomic_counters = 8, - .max_combined_atomic_counters = 8, - .max_atomic_counter_bindings = 1, - .max_vertex_atomic_counter_buffers = 0, - .max_tess_control_atomic_counter_buffers = 0, - .max_tess_evaluation_atomic_counter_buffers = 0, - .max_geometry_atomic_counter_buffers = 0, - .max_fragment_atomic_counter_buffers = 1, - .max_combined_atomic_counter_buffers = 1, - .max_atomic_counter_buffer_size = 16384, - .max_transform_feedback_buffers = 4, - .max_transform_feedback_interleaved_components = 64, - .max_cull_distances = 8, - .max_combined_clip_and_cull_distances = 8, - .max_samples = 4, - .max_mesh_output_vertices_nv = 256, - .max_mesh_output_primitives_nv = 512, - .max_mesh_work_group_size_x_nv = 32, - .max_mesh_work_group_size_y_nv = 1, - .max_mesh_work_group_size_z_nv = 1, - .max_task_work_group_size_x_nv = 32, - .max_task_work_group_size_y_nv = 1, - .max_task_work_group_size_z_nv = 1, - .max_mesh_view_count_nv = 4, - .maxDualSourceDrawBuffersEXT = 1, - - .limits = { - .non_inductive_for_loops = 1, - .while_loops = 1, - .do_while_loops = 1, - .general_uniform_indexing = 1, - .general_attribute_matrix_vector_indexing = 1, - .general_varying_indexing = 1, - .general_sampler_indexing = 1, - .general_variable_indexing = 1, - .general_constant_matrix_vector_indexing = 1, - } -}; - -static int glslc_shader_compile(FFVulkanContext *s, FFVkSPIRVCompiler *ctx, - FFVulkanShader *shd, uint8_t **data, - size_t *size, const char *entrypoint, - void **opaque) -{ - const char *messages; - glslang_shader_t *glslc_shader; - glslang_program_t *glslc_program; - - static const glslang_stage_t glslc_stage[] = { - [VK_SHADER_STAGE_VERTEX_BIT] = GLSLANG_STAGE_VERTEX, - [VK_SHADER_STAGE_FRAGMENT_BIT] = GLSLANG_STAGE_FRAGMENT, - [VK_SHADER_STAGE_COMPUTE_BIT] = GLSLANG_STAGE_COMPUTE, -#if ((GLSLANG_VERSION_MAJOR) > 12) - [VK_SHADER_STAGE_TASK_BIT_EXT] = GLSLANG_STAGE_TASK, - [VK_SHADER_STAGE_MESH_BIT_EXT] = GLSLANG_STAGE_MESH, - [VK_SHADER_STAGE_RAYGEN_BIT_KHR] = GLSLANG_STAGE_RAYGEN, - [VK_SHADER_STAGE_INTERSECTION_BIT_KHR] = GLSLANG_STAGE_INTERSECT, - [VK_SHADER_STAGE_ANY_HIT_BIT_KHR] = GLSLANG_STAGE_ANYHIT, - [VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR] = GLSLANG_STAGE_CLOSESTHIT, - [VK_SHADER_STAGE_MISS_BIT_KHR] = GLSLANG_STAGE_MISS, - [VK_SHADER_STAGE_CALLABLE_BIT_KHR] = GLSLANG_STAGE_CALLABLE, -#endif - }; - - const glslang_input_t glslc_input = { - .language = GLSLANG_SOURCE_GLSL, - .stage = glslc_stage[shd->stage], - .client = GLSLANG_CLIENT_VULKAN, -#if ((GLSLANG_VERSION_MAJOR) >= 12) - .client_version = GLSLANG_TARGET_VULKAN_1_3, - .target_language_version = GLSLANG_TARGET_SPV_1_6, -#else - .client_version = GLSLANG_TARGET_VULKAN_1_2, - .target_language_version = GLSLANG_TARGET_SPV_1_5, -#endif - .target_language = GLSLANG_TARGET_SPV, - .code = shd->src.str, - .default_version = 460, - .default_profile = GLSLANG_NO_PROFILE, - .force_default_version_and_profile = false, - .forward_compatible = false, - .messages = GLSLANG_MSG_DEFAULT_BIT, - .resource = &glslc_resource_limits, - }; - -#if ((GLSLANG_VERSION_MAJOR) >= 12) - glslang_spv_options_t glslc_opts = { - .generate_debug_info = !!(s->extensions & (FF_VK_EXT_DEBUG_UTILS | FF_VK_EXT_RELAXED_EXTENDED_INSTR)), - .emit_nonsemantic_shader_debug_info = !!(s->extensions & FF_VK_EXT_RELAXED_EXTENDED_INSTR), - .emit_nonsemantic_shader_debug_source = !!(s->extensions & FF_VK_EXT_RELAXED_EXTENDED_INSTR), - .disable_optimizer = !!(s->extensions & FF_VK_EXT_DEBUG_UTILS), - .strip_debug_info = !(s->extensions & (FF_VK_EXT_DEBUG_UTILS | FF_VK_EXT_RELAXED_EXTENDED_INSTR)), - .optimize_size = 0, - .disassemble = 0, - .validate = 1, - /* .compile_only = 0, */ - }; -#endif - - av_assert0(glslc_refcount); - - *opaque = NULL; - - if (!(glslc_shader = glslang_shader_create(&glslc_input))) - return AVERROR(ENOMEM); - - if (!glslang_shader_preprocess(glslc_shader, &glslc_input)) { - ff_vk_shader_print(s, shd, AV_LOG_WARNING); - av_log(s, AV_LOG_ERROR, "Unable to preprocess shader: %s (%s)!\n", - glslang_shader_get_info_log(glslc_shader), - glslang_shader_get_info_debug_log(glslc_shader)); - glslang_shader_delete(glslc_shader); - return AVERROR(EINVAL); - } - - if (!glslang_shader_parse(glslc_shader, &glslc_input)) { - ff_vk_shader_print(s, shd, AV_LOG_WARNING); - av_log(s, AV_LOG_ERROR, "Unable to parse shader: %s (%s)!\n", - glslang_shader_get_info_log(glslc_shader), - glslang_shader_get_info_debug_log(glslc_shader)); - glslang_shader_delete(glslc_shader); - return AVERROR(EINVAL); - } - - if (!(glslc_program = glslang_program_create())) { - glslang_shader_delete(glslc_shader); - return AVERROR(EINVAL); - } - - glslang_program_add_shader(glslc_program, glslc_shader); - - if (!glslang_program_link(glslc_program, GLSLANG_MSG_SPV_RULES_BIT | - GLSLANG_MSG_VULKAN_RULES_BIT)) { - ff_vk_shader_print(s, shd, AV_LOG_WARNING); - av_log(s, AV_LOG_ERROR, "Unable to link shader: %s (%s)!\n", - glslang_program_get_info_log(glslc_program), - glslang_program_get_info_debug_log(glslc_program)); - glslang_program_delete(glslc_program); - glslang_shader_delete(glslc_shader); - return AVERROR(EINVAL); - } - -#if ((GLSLANG_VERSION_MAJOR) >= 12) - glslang_program_SPIRV_generate_with_options(glslc_program, glslc_input.stage, &glslc_opts); -#else - glslang_program_SPIRV_generate(glslc_program, glslc_input.stage); -#endif - - messages = glslang_program_SPIRV_get_messages(glslc_program); - if (messages) { - ff_vk_shader_print(s, shd, AV_LOG_WARNING); - av_log(s, AV_LOG_WARNING, "%s\n", messages); - } else { - ff_vk_shader_print(s, shd, AV_LOG_DEBUG); - } - - glslang_shader_delete(glslc_shader); - - *size = glslang_program_SPIRV_get_size(glslc_program) * sizeof(unsigned int); - *data = (void *)glslang_program_SPIRV_get_ptr(glslc_program); - *opaque = glslc_program; - - return 0; -} - -static void glslc_shader_free(FFVkSPIRVCompiler *ctx, void **opaque) -{ - if (!opaque || !*opaque) - return; - - av_assert0(glslc_refcount); - glslang_program_delete(*opaque); - *opaque = NULL; -} - -static void glslc_uninit(FFVkSPIRVCompiler **ctx) -{ - if (!ctx || !*ctx) - return; - - ff_mutex_lock(&glslc_mutex); - if (glslc_refcount && (--glslc_refcount == 0)) - glslang_finalize_process(); - ff_mutex_unlock(&glslc_mutex); - - av_freep(ctx); -} - -FFVkSPIRVCompiler *ff_vk_glslang_init(void) -{ - FFVkSPIRVCompiler *ret = av_mallocz(sizeof(*ret)); - if (!ret) - return NULL; - - ret->compile_shader = glslc_shader_compile; - ret->free_shader = glslc_shader_free; - ret->uninit = glslc_uninit; - - ff_mutex_lock(&glslc_mutex); - if (!glslc_refcount++) { - if (!glslang_initialize_process()) { - av_freep(&ret); - glslc_refcount--; - } - } - ff_mutex_unlock(&glslc_mutex); - - return ret; -} diff --git a/libavutil/vulkan_shaderc.c b/libavutil/vulkan_shaderc.c deleted file mode 100644 index 3f7d52743c..0000000000 --- a/libavutil/vulkan_shaderc.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <shaderc/shaderc.h> - -#include "libavutil/mem.h" -#include "vulkan_spirv.h" - -static int shdc_shader_compile(FFVulkanContext *s, FFVkSPIRVCompiler *ctx, - FFVulkanShader *shd, uint8_t **data, - size_t *size, const char *entrypoint, - void **opaque) -{ - int loglevel, err, warn, ret; - const char *status, *message; - shaderc_compilation_result_t res; - static const char *shdc_result[] = { - [shaderc_compilation_status_success] = "success", - [shaderc_compilation_status_invalid_stage] = "invalid stage", - [shaderc_compilation_status_compilation_error] = "error", - [shaderc_compilation_status_internal_error] = "internal error", - [shaderc_compilation_status_null_result_object] = "no result", - [shaderc_compilation_status_invalid_assembly] = "invalid assembly", - }; - static const shaderc_shader_kind shdc_kind[] = { - [VK_SHADER_STAGE_VERTEX_BIT] = shaderc_glsl_vertex_shader, - [VK_SHADER_STAGE_FRAGMENT_BIT] = shaderc_glsl_fragment_shader, - [VK_SHADER_STAGE_COMPUTE_BIT] = shaderc_glsl_compute_shader, - [VK_SHADER_STAGE_MESH_BIT_EXT] = shaderc_mesh_shader, - [VK_SHADER_STAGE_TASK_BIT_EXT] = shaderc_task_shader, - [VK_SHADER_STAGE_RAYGEN_BIT_KHR] = shaderc_raygen_shader, - [VK_SHADER_STAGE_ANY_HIT_BIT_KHR] = shaderc_anyhit_shader, - [VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR] = shaderc_closesthit_shader, - [VK_SHADER_STAGE_MISS_BIT_KHR] = shaderc_miss_shader, - [VK_SHADER_STAGE_INTERSECTION_BIT_KHR] = shaderc_intersection_shader, - [VK_SHADER_STAGE_CALLABLE_BIT_KHR] = shaderc_callable_shader, - }; - - shaderc_compile_options_t opts = shaderc_compile_options_initialize(); - *opaque = NULL; - if (!opts) - return AVERROR(ENOMEM); - - shaderc_compile_options_set_target_env(opts, shaderc_target_env_vulkan, - shaderc_env_version_vulkan_1_3); - shaderc_compile_options_set_target_spirv(opts, shaderc_spirv_version_1_6); - - /* If either extension is set, turn on debug info */ - if (s->extensions & (FF_VK_EXT_DEBUG_UTILS | FF_VK_EXT_RELAXED_EXTENDED_INSTR)) - shaderc_compile_options_set_generate_debug_info(opts); - - if (s->extensions & FF_VK_EXT_DEBUG_UTILS) - shaderc_compile_options_set_optimization_level(opts, - shaderc_optimization_level_zero); - else - shaderc_compile_options_set_optimization_level(opts, - shaderc_optimization_level_performance); - - res = shaderc_compile_into_spv((shaderc_compiler_t)ctx->priv, - shd->src.str, strlen(shd->src.str), - shdc_kind[shd->stage], - shd->name, entrypoint, opts); - shaderc_compile_options_release(opts); - - ret = shaderc_result_get_compilation_status(res); - err = shaderc_result_get_num_errors(res); - warn = shaderc_result_get_num_warnings(res); - message = shaderc_result_get_error_message(res); - - if (ret != shaderc_compilation_status_success && !err) - err = 1; - - loglevel = err ? AV_LOG_ERROR : warn ? AV_LOG_WARNING : AV_LOG_DEBUG; - - ff_vk_shader_print(s, shd, loglevel); - if (message && (err || warn)) - av_log(s, loglevel, "%s\n", message); - status = ret < FF_ARRAY_ELEMS(shdc_result) ? shdc_result[ret] : "unknown"; - av_log(s, loglevel, "shaderc compile status '%s' (%d errors, %d warnings)\n", - status, err, warn); - - if (err > 0) - return AVERROR(EINVAL); - - *data = (uint8_t *)shaderc_result_get_bytes(res); - *size = shaderc_result_get_length(res); - *opaque = res; - - return 0; -} - -static void shdc_shader_free(FFVkSPIRVCompiler *ctx, void **opaque) -{ - if (!opaque || !*opaque) - return; - - shaderc_result_release((shaderc_compilation_result_t)*opaque); - *opaque = NULL; -} - -static void shdc_uninit(FFVkSPIRVCompiler **ctx) -{ - FFVkSPIRVCompiler *s; - - if (!ctx || !*ctx) - return; - - s = *ctx; - - shaderc_compiler_release((shaderc_compiler_t)s->priv); - av_freep(ctx); -} - -FFVkSPIRVCompiler *ff_vk_shaderc_init(void) -{ - FFVkSPIRVCompiler *ret = av_mallocz(sizeof(*ret)); - if (!ret) - return NULL; - - ret->compile_shader = shdc_shader_compile; - ret->free_shader = shdc_shader_free; - ret->uninit = shdc_uninit; - - ret->priv = (void *)shaderc_compiler_initialize(); - if (!ret->priv) - av_freep(&ret); - - return ret; -} diff --git a/libavutil/vulkan_spirv.h b/libavutil/vulkan_spirv.h deleted file mode 100644 index c13b50f8e7..0000000000 --- a/libavutil/vulkan_spirv.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_VULKAN_SPIRV_H -#define AVUTIL_VULKAN_SPIRV_H - -#include "vulkan.h" - -#include "config.h" - -typedef struct FFVkSPIRVCompiler { - void *priv; - int (*compile_shader)(FFVulkanContext *s, struct FFVkSPIRVCompiler *ctx, - FFVulkanShader *shd, uint8_t **data, - size_t *size, const char *entrypoint, void **opaque); - void (*free_shader)(struct FFVkSPIRVCompiler *ctx, void **opaque); - void (*uninit)(struct FFVkSPIRVCompiler **ctx); -} FFVkSPIRVCompiler; - -#if CONFIG_LIBGLSLANG -FFVkSPIRVCompiler *ff_vk_glslang_init(void); -#define ff_vk_spirv_init ff_vk_glslang_init -#endif -#if CONFIG_LIBSHADERC -FFVkSPIRVCompiler *ff_vk_shaderc_init(void); -#define ff_vk_spirv_init ff_vk_shaderc_init -#endif - -#endif /* AVUTIL_VULKAN_H */ _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
