Skip to content

[BUG] Codec (Vulkan): build failure on Vulkan headers 1.3.275 due to unguarded AV1 codec operation macros #2367

@lilnynho

Description

@lilnynho

Read the FAQ first

  • I have checked the FAQ but the issue is not covered

Description

Codec (Vulkan): build failure on Vulkan headers 1.3.275 due to unguarded AV1 codec operation macros

Environment

  • OS: Ubuntu 24.04 LTS (WSL2)
  • Fastfetch branch: dev
  • Fastfetch commit: 8aeb7c2f
  • Vulkan development package: libvulkan-dev 1.3.275.0-1build1

Description

Fastfetch fails to compile on Ubuntu 24.04 with Vulkan headers 1.3.275.

The Vulkan headers provide:

  • VK_KHR_video_decode_queue
  • VK_KHR_video_encode_queue

However, they do not provide:

  • VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR
  • VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR

codec_vulkan.c enters the Vulkan codec implementation block because the queue extension macros are present, but later references the AV1 codec operation macros without guarding them.

As a result, compilation fails.

Steps to Reproduce

Clone Fastfetch and switch to the current dev branch:

git clone https://github.com/fastfetch-cli/fastfetch.git
cd fastfetch
git checkout dev

Create a clean build directory:

rm -rf build
mkdir build
cd build

Configure and build:

cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
make -j$(nproc)

Actual Result

Compilation fails with:

/home/user/fastfetch/src/detection/codec/codec_vulkan.c:23:22: error:
‘VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR’ undeclared

/home/user/fastfetch/src/detection/codec/codec_vulkan.c:42:22: error:
‘VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR’ undeclared

Verification

The AV1 codec operation macros are not present in the installed Vulkan headers:

grep -R "VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR" /usr/include/vulkan
grep -R "VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR" /usr/include/vulkan

Both commands return no results.

The queue extension macros are present:

grep -R "VK_KHR_video_decode_queue" /usr/include/vulkan
grep -R "VK_KHR_video_encode_queue" /usr/include/vulkan

These return multiple matches, including:

#define VK_KHR_video_decode_queue 1

Relevant Source

Current code:

#if VK_KHR_video_decode_queue && VK_KHR_video_encode_queue

Later references:

VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR
VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR

without checking whether those AV1-specific macros exist.

Expected Result

Either:

  1. Guard AV1-specific code with preprocessor checks such as:
#ifdef VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR
...
#endif

and

#ifdef VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR
...
#endif

or

  1. Expand the Vulkan header version/feature checks so that the implementation is not compiled when those symbols are unavailable.

Additional Notes

This does not appear to be a local configuration issue.

The installed Vulkan headers are internally consistent and expose the video queue extensions, but not the AV1 codec operation macros referenced by Fastfetch.

The issue seems to be a compatibility problem between the current Vulkan codec implementation and Vulkan headers 1.3.275.

Version used

Built from source (dev branch) Commit: 8aeb7c2 Attempted build from current dev branch. Compilation fails before a binary can be produced due to: VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR undeclared VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR undeclared

Bug prevalence

Always

Regression

Not sure

Installation

Built from source

Package manager

No response

Screenshots

No response

Configuration

System information

OS: Ubuntu 24.04.4 LTS (WSL2)
Kernel: 6.6.114.1-microsoft-standard-WSL2
Fastfetch: 2.63.1
Branch: dev
Commit: 8aeb7c2f
Compiler: gcc 13.3.0
libvulkan-dev: 1.3.275.0-1build1
Mesa: 25.2.8
======••••••••••
lilnynho in fastfetch on  dev took 20.5s
✦5 ❯grep -R "VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR" /usr/include/vulkan

grep -R "VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR" /usr/include/vulkan

grep -R "VK_KHR_video_decode_queue" /usr/include/vulkan

grep -R "VK_KHR_video_encode_queue" /usr/include/vulkan
/usr/include/vulkan/vulkan_handles.hpp:  //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan_handles.hpp:    //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan_to_string.hpp:  //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan_to_string.hpp:  //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan.cppm:  //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan.cppm:  //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan.cppm:  //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan_enums.hpp:  //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan.hpp:    //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan.hpp:  //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan.hpp:  //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan.hpp:    //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan.hpp:      //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan.hpp:      //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:        //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:      //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:      //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:    //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:      VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDecodeVideoKHR && "Function <vkCmdDe;
/usr/include/vulkan/vulkan_core.h:// VK_KHR_video_decode_queue is a preprocessor guard. Do not pass it to API calls.
/usr/include/vulkan/vulkan_core.h:#define VK_KHR_video_decode_queue 1
/usr/include/vulkan/vulkan_core.h:#define VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME "VK_KHR_video_decode_queue"
/usr/include/vulkan/vulkan_static_assertions.hpp://=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan_extension_inspection.hpp:      "VK_KHR_video_decode_queue",
/usr/include/vulkan/vulkan_extension_inspection.hpp:      { "VK_KHR_video_decode_queue",
/usr/include/vulkan/vulkan_extension_inspection.hpp:              "VK_KHR_video_decode_queue",
/usr/include/vulkan/vulkan_extension_inspection.hpp:              "VK_KHR_video_decode_queue",
/usr/include/vulkan/vulkan_extension_inspection.hpp:           ( extension == "VK_KHR_video_decode_queue" ) || ( extens|
/usr/include/vulkan/vulkan_funcs.hpp:  //=== VK_KHR_video_decode_queue ===
/usr/include/vulkan/vulkan_handles.hpp:  //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_handles.hpp:    //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_handles.hpp:    //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_handles.hpp:    //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_to_string.hpp:  //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_to_string.hpp:  //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan.cppm:  //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan.cppm:  //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan.cppm:  //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_enums.hpp:  //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan.hpp:    //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan.hpp:  //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan.hpp:  //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan.hpp:    //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan.hpp:      //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan.hpp:      //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:        //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:      //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:        //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:      //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:      //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:      //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:      //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:    //=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_raii.hpp:                         "Function <vkGetPhysicalDeviceVideoEncodeQualityLevelPrope;
/usr/include/vulkan/vulkan_raii.hpp:                         "Function <vkGetPhysicalDeviceVideoEncodeQualityLevelPrope;
/usr/include/vulkan/vulkan_raii.hpp:                         "Function <vkGetEncodedVideoSessionParametersKHR> requires;
/usr/include/vulkan/vulkan_raii.hpp:                         "Function <vkGetEncodedVideoSessionParametersKHR> requires;
/usr/include/vulkan/vulkan_raii.hpp:      VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEncodeVideoKHR && "Function <vkCmdEn;
/usr/include/vulkan/vulkan_core.h:// VK_KHR_video_encode_queue is a preprocessor guard. Do not pass it to API calls.
/usr/include/vulkan/vulkan_core.h:#define VK_KHR_video_encode_queue 1
/usr/include/vulkan/vulkan_core.h:#define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue"
/usr/include/vulkan/vulkan_static_assertions.hpp://=== VK_KHR_video_encode_queue ===
/usr/include/vulkan/vulkan_extension_inspection.hpp:      "VK_KHR_video_encode_queue",
/usr/include/vulkan/vulkan_extension_inspection.hpp:              "VK_KHR_video_encode_queue",
/usr/include/vulkan/vulkan_extension_inspection.hpp:              "VK_KHR_video_encode_queue",
/usr/include/vulkan/vulkan_extension_inspection.hpp:      { "VK_KHR_video_encode_queue",
/usr/include/vulkan/vulkan_extension_inspection.hpp:           ( extension == "VK_KHR_video_encode_queue" ) || ( extens|
/usr/include/vulkan/vulkan_funcs.hpp:  //=== VK_KHR_video_encode_queue ===

Features built-in

lilnynho in fastfetch on  dev
✦5 ❯fastfetch --list-features
threads
vulkan
wayland
xcb-randr
xrandr
drm
drm_amdgpu
dbus
zlib
sqlite3
egl
glx
opencl
libddcutil
libelf
libzfs
linux/videodev2

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions