[FFmpeg-devel] [PATCH 4/4] lavc/vulkan: add SPIR-V compilation support

Lynne dev at lynne.ee
Fri Oct 4 13:41:46 EEST 2024


On 04/10/2024 12:01, epirat07 at gmail.com wrote:
> On 4 Oct 2024, at 11:31, Lynne via ffmpeg-devel wrote:
> 
>> This is the same as with libavfilter.
>>
>> We will need SPIR-V compilation for at least three different things,
>> like the VC-2 encoder and decoder, AV1 film grain synthesis for
>> hardware with no support for it, and possibly other codecs.
>> ---
>>   libavcodec/Makefile         |  4 ++++
>>   libavcodec/vulkan_glslang.c | 19 +++++++++++++++++++
>>   libavcodec/vulkan_shaderc.c | 19 +++++++++++++++++++
>>   3 files changed, 42 insertions(+)
>>   create mode 100644 libavcodec/vulkan_glslang.c
>>   create mode 100644 libavcodec/vulkan_shaderc.c
>>
>> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
>> index a253a9b160..7147ed0360 100644
>> --- a/libavcodec/Makefile
>> +++ b/libavcodec/Makefile
>> @@ -1257,6 +1257,10 @@ OBJS-$(HAVE_THREADS)                   += pthread.o pthread_slice.o pthread_fram
>>
>>   OBJS-$(CONFIG_FRAME_THREAD_ENCODER)    += frame_thread_encoder.o
>>
>> +# vulkan libs
>> +OBJS-$(CONFIG_LIBGLSLANG)              += vulkan_glslang.o
>> +OBJS-$(CONFIG_LIBSHADERC)              += vulkan_shaderc.o
>> +
>>   # Windows resource file
>>   SHLIBOBJS-$(HAVE_GNU_WINDRES)           += avcodecres.o
>>
>> diff --git a/libavcodec/vulkan_glslang.c b/libavcodec/vulkan_glslang.c
>> new file mode 100644
>> index 0000000000..9aa41567a3
>> --- /dev/null
>> +++ b/libavcodec/vulkan_glslang.c
>> @@ -0,0 +1,19 @@
>> +/*
>> + * 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/libavcodec/vulkan_shaderc.c b/libavcodec/vulkan_shaderc.c
>> new file mode 100644
>> index 0000000000..9f60bf4dfd
>> --- /dev/null
>> +++ b/libavcodec/vulkan_shaderc.c
>> @@ -0,0 +1,19 @@
>> +/*
>> + * 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"
> 
> Wouldn’t this cause duplicate symbol issues with for example ff_vk_shaderc_init
> being in both libavfilter and libavcodec?

No. For completely identical objects like we have here, the linker 
deduplicates while linking.
This is how vulkan.c is also handled across libavutil, libavfilter and 
libavcodec. We also handle something else in the same way, but I don't 
remember what.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_0xA2FEA5F03F034464.asc
Type: application/pgp-keys
Size: 624 bytes
Desc: OpenPGP public key
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20241004/aff9662f/attachment.key>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 236 bytes
Desc: OpenPGP digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20241004/aff9662f/attachment.sig>


More information about the ffmpeg-devel mailing list