Opened 4 months ago
Closed 2 months ago
#20679 closed enhancement (fixed)
Vulkan-Headers and Vulkan-Loader 1.4.304.0
Reported by: | zeckma | Owned by: | Douglas R. Reno |
---|---|---|---|
Priority: | normal | Milestone: | 12.3 |
Component: | BOOK | Version: | git |
Severity: | normal | Keywords: | |
Cc: |
Description ¶
New point release.
Change History (13)
comment:1 by , 4 months ago
follow-up: 3 comment:2 by , 4 months ago
One way to approach updating is to follow the LunarG releases that come out about every three or four months. There are "vulkan-sdk" tags for these.
https://vulkan.lunarg.com/sdk/home#linux
Most of the time a tag comes out, there are only documentation errata or the standardization of a new extension that will only affect a few people because they aren't developing Vulkan applications, it applies to hardware they don't have, or isn't yet implemented for their hardware. In the case that they need a recent tag, I'd guess that BLFS user is experienced enough to upgrade their system with an easy adaptation of the book instructions.
Someone who is developing for Vulkan needs more parts of the toolchain in any case, to include SPIRV-Headers, SPIRV-Tools, Vulkan-Utility-Libraries, Vulkan-ValidationLayers and glslang or shaderc. I have found I need to use git master for the SPIRV parts because they only release on the LunarG schedule and it causes build problems in glslang.
comment:3 by , 4 months ago
Replying to martyj19:
One way to approach updating is to follow the LunarG releases that come out about every three or four months. There are "vulkan-sdk" tags for these.
https://vulkan.lunarg.com/sdk/home#linuxMost of the time a tag comes out, there are only documentation errata or the standardization of a new extension that will only affect a few people because they aren't developing Vulkan applications, it applies to hardware they don't have, or isn't yet implemented for their hardware. In the case that they need a recent tag, I'd guess that BLFS user is experienced enough to upgrade their system with an easy adaptation of the book instructions.
The page is quite unparseable. The version number is not is the original HTML (but filled with some JS magic) so we need to do poke it to see how it fetches the version, in order to reprogram our currency script.
comment:4 by , 4 months ago
Something like
curl https://vulkan.lunarg.com/doc/sdk.dhtml | grep -Eo '[0-9]+.[0-9]+.[0-9]+' | head -n1
comment:5 by , 4 months ago
Summary: | Vulkan-Headers and Vulkan-Loader 1.3.302 → Vulkan-Headers and Vulkan-Loader 1.3.302 (update currency to only pick "official" releases) |
---|
comment:6 by , 4 months ago
Milestone: | 12.3 → 99-Waiting |
---|---|
Summary: | Vulkan-Headers and Vulkan-Loader 1.3.302 (update currency to only pick "official" releases) → Vulkan-Headers and Vulkan-Loader 1.3.3??.? ( Wait for next "official" releasee) |
Changing the currency was a bit tricky. The latest "official" release is 1.3.296.0 which is several point versions earlier than what we have now. I don't see a need to revert, but we need to wait for the next "official" release.
comment:8 by , 2 months ago
Milestone: | 99-Waiting → 12.3 |
---|---|
Owner: | changed from | to
Status: | new → assigned |
comment:9 by , 2 months ago
Summary: | Vulkan-Headers and Vulkan-Loader 1.3.3??.? ( Wait for next "official" releasee) → Vulkan-Headers and Vulkan-Loader 1.4.304.0 ( Wait for next "official" releasee) |
---|
comment:10 by , 2 months ago
Summary: | Vulkan-Headers and Vulkan-Loader 1.4.304.0 ( Wait for next "official" releasee) → Vulkan-Headers and Vulkan-Loader 1.4.304.0 |
---|
comment:11 by , 2 months ago
Vulkan-Headers
build(deps): bump fsfe/reuse-action from 4 to 5 Update for Vulkan-Docs 1.3.302 Fix GN include checks Update for Vulkan-Docs 1.4.303 Add missing validusage.json and fix Makefile.release for new registry structure Update for Vulkan-Docs 1.4.304
comment:12 by , 2 months ago
Vulkan-Loader
ci: Build dependency for Github Actions scripts: Make generate_source.py look harder for vk.xml Allow the registry path argument to also be the base directory containing the Vulkan-Headers repo (eg. ./external) to save redundant typing. cjson: add NULL check prior to strcmp This fixes an issue found by OSS-Fuzz: https://issues.oss-fuzz.com/issues/42529964 build(deps): bump github/codeql-action from 3.27.0 to 3.27.1 Make tests respect VK_LOADER_DISABLE_DYNAMIC_LIBRARY_UNLOADING Add handle checking to test instance & device creation Fix VK_INSTANCE_LAYERS bug when using vk_loader_settings.json The issue was that copy of the VK_INSTANCE_LAYERS would be 'iterated' to find the next path, but wouldn't be reset back to the beginning of the stack allocation when going to the next iteration of the loop. By creating a separate char* to hold the "current path" pointer, the start of the allocation isn't lost. Expand loader settings tests Add explicit layer to SettingsFile ImplicitLayer env-var test This acts as filler and allows more code paths to be executed than before, which exposed a bug in vkEnumerateInstanceExtensionProperties returning VK_INCOMPLETE when it shouldn't have. Make vkEnumInstExtProps return VK_INCOMPLETE correctly The logic for whether to return VK_INCOMPLETE is straightforward - if not enough space was available to write out all available instance layers, write what there is space for and return VK_INCOMPLETE. The previous logic did not take into account the way the loader settings file affects which layers are available. The revised logic now correctly handles that situation. Expand SettingsFile test for VK_INSTANCE_LAYERS Adds another layer so that the correct behavior occurs even when more layers are present, testing the implementation more thoroughly. Intercept loader_log in testing framework Allows capturing the output of loader_log and comparing it with expected values using fputs/fputc on *nix, and OutputDebugString on Windows. This interception is necessary due to the differing behavior between the debug log (through debug utils messenger) and the actual stderr output. Re-add ReadDir interception on macOS This was disabled due to issues with address sanitizer, which appear to no longer exist. The effects of intercepting readdir are an important part of the test framework shim, so disabling that makes some tests unreliable. It would be better to disable address sanitizer in CI where it is found to be an issue rather than disable readdir interception. Add Implicit Layer Enable Env Var tessettings file test Use VK_LOADER_DEBUG if settings stderr_log is empty If a loader settings file was present, the logging settings of the file were used irregardless of whether the settings file actually specified. The loader will now check to see if the settings stderr_log value is at least non-zero before deciding to skip a message, allowing for the VK_LOADER_DEBUG filter to be applied in case if it is zero. Redo logic of check_if_layer_is_in_list() Adds important cases which were ignored before. * Layers set to "off" in the loader setttings file only check if their names match, as the layer entry is missing other info * Check that lib_path is not nullptr before strcmp * Make it clear that Meta layers only check if the name of the layers match Add settings test for layer control OFF & VK_INSTANCE_LAYERS Makes sure that layers set to "off" do not get enabled when VK_INSTANCE_LAYERS is set to activate them. Add ImplicitLayersNotAccidentallyEnabled test Checks that env-var enabled implicit layers aren't turned on by being in the settings layer by accident. Write the Enable Env Var in the loader log Log the following message for each enabled layer. "This layer was enabled because Env Var <name> was set to Value <value>" Reuse library loading code in pre-instance functions The functions vkEnumerateInstanceExtensionProperties, vkEnumerateInstanceVersion, and vkEnumerateInstanceLayerProperties have no strong reason for duplicating the the logic to load and unload libraries. This commit re-uses existing facilities to handle library loading, which has the side benefit of adding logging to the loading and unloading of layer libraries. Fix layers with pre-inst funcs from being loaded erroneously The loader_scan_for_implicit_layers function was not removing inactive layers from the list of layers gotten from the loader settings file. This caused layers with pre-instance functions to loaded and executed. For example, layers with an enable-environment field shouldn't be loaded unless their respective env-var was set. This lack of filtering didn't change the list of layers active during vkCreateInstance, but does cause adverse side effects during pre-instance API function calls. Fix CMake 3.31 builds for WIN32 A recent fix to CMake for ASM static libraries on Windows broke the existing build. Easiest solution I found is to remove the usage of ASM static libraries from the loader. This is already what the UNIX build does. This required using generator expressions to NOT pass along compiler options that aren't needed for assembly files. build(deps): bump github/codeql-action from 3.27.1 to 3.27.4 Log Settings file Stderr Log Filters This commit also pulls out the logic that loader_log uses to create the ERROR | WARNING | <etc> string so that it can be reused in the logging of the settings file stderr filters. To accomplish this, the logic was changed slightly to assume that all debug masks are possible. This also means adding an assert to make sure loader_log isn't called with multiple flags set, just as a heads up that it isn't desireable. The logging only occurs if any filters are set. The settings file also now includes the type of layer in the log, either explicit or implicit (based solely on the loader settings file value of treat_as_implicit_layer). Make Settings file "ON" take priority over disable env-var The VK_LOADER_LAYERS_DISABLE env-var was disabling layers even if the settings file was turning them on. The fix is a simple change in logic to only check for the layer disable if the layer wasn't set to "ON". Checking for "OFF" isn't needed since that happens above this check. Add test which enables most layer env-vars at once Makes sure the various combinations of environment variables and settings file interacts according to expectations. Only set global debug level from settings if above 0 This prevents VK_LOADER_DEBUG from being ignored when the settings file lacks stderr_log. Correctly check if settings file exists on windows While there was logic to check if the vk_loader_settings.json file existed, it was not being run at an appropriate time and with another expression that caused the check to never happen. This commit also logs that the loader fails to find the loader settings file, and if it finds a registry entry, if the file doesn't exist. Log what caused each layer to be enabled Adds information about how each layer was enabled, useful for debugging when you are not sure *what* caused a layer to be enabled (in-application API, different environment variables, vkconfig, implicit layer, etc). Log when Filter Env-Vars act when settings file is active The logging to indicate that VK_LOADER_LAYERS_ENABLE and VK_LOADER_LAYERS_DISABLE turned on/off layers was not occuring when the settings file was active. This is due to layer enablement being done in `enable_correct_layers_from_settings()`, a newer function. which lacked the log functions. This commit rectifies the lack of logging in the new function. Add more logging when the settings file has invalid members Logs cases which cause the vk_loader_settings.json to fail to parse. build: Update to header 1.3.302 build(deps): bump github/codeql-action from 3.27.4 to 3.27.5 Add bad json input tests found by OSS-Fuzz These test cases all crash with their corresponding tests, allowing easy reproduction and eventual fixing. Add loader_json.h/.c for custom loader code Several functions have been added to the cJSON.h/.c files. While these functions are important, they do not belong in the cJSON source code files, as it makes it difficult to update cJSON without stomping all over the added code. This does require re-adding cJSON_Parse to the cJSON.h header file, which was previously removed as it was only used internally to cJSON.c. Now that it isn't the case, it is needed again. Update cJSON to latest version Sets CJSON_HIDE_SYMBOLS since that is the default we want. Removed unused functions from cJSON Remove cJSON functions that aren't used Use snprintf in updated cJSON Modify cJSON to not surround strings with "" This is a modification the loader does to reduce the number of string copies that are required. Since the loader doesn't care about the quotes, they are simply omitted, making usage of the strings much easier. Note that this change was done to the previously checked in version of cJSON, so these changes are the same conceptual changes made to the newer version of the cJSON library. Remove cJSON escaping backslashes This brings cJSON back into its pre-update form, as well as documenting that it is an intentional change. Reimplement OOM and VkAllocationCallbacks in cJSON Also prepend loader_ to cJSON functions to reduce symbol collision. This was done before but removed while updating cJSON just to ensure that the code would still work (kinda, the tests failed but no catastrophic incompatibilities were introduced into cJSON). Pass error string using "%s" format specifier Passing the error string directly to loader_log() as the format argument can cause crashes since the string comes from JSON files on the system and may contain format specifiers which vsnprintf will try to use and subsequently fail. Add compiler checking to loader_log arguments By adding a per-compiler __attribute, we can tell compilers to check the variable arguments passed into loader_log using the format argument. This caught several instances of more parameters being passed in than were in the format string. Fix O(n^2) json parsing by not using cJSON_GetArrayItem The implementation of cJSON_GetArrayItem is very simple - it finds the node at an index by iterating the linked-list of child nodes index number of times. This is problematic because it means using cJSON_GetArrayItem(node, i) to iterate all elements becomes a O(n^2). The fix is to use the helper function cJSON_ArrayForEach which directly iterates on the linked list. This change takes time to refactor the get_loader_settings() logic that handles whether the file contains just the settings object or an array of settings objects, making the logic easier to follow. Detect when recursive meta-layer's are present If meta-layer A has meta-layer B in its component layer list, and meta-layer B has meta-layer A in its component layer list, this would cause a stack overflow in verify_meta_layer_component_layers() since it would recursively check the meta layer of the other layer. Fixing it means checking that the a component layer is a meta layer, and if so, checking the component layer's component layers for the meta layer being verified. Granted, this check is only 1 deep so more complex recursive checks may be needed. Log the layer name with manifest loading messages Fix tests not respecting dll unloading env-var Add assert for unknown free's in test's MemoryTracker Simplify json string copy routine loader_parse_json_string_to_existing_str() doesn't need to allocate any temporary memory, as cJSON_PrintPreallocated allows dumping directly to the char array that is the final destination. Refactor get_loader_settings to not allocate app_keys The cJSON_GetStringValue function allows us to read the contents of the cJSON string without printing, which requires a memory allocation. This simplifies the logic by not needing to free anything. Better error checking of loader_parse_json functions Fix append_str_to_string_list leaking during OOM Refactor manifest parsing to use less allocations By using cJSON_GetStringValue, many allocations can be avoided, which simplifies the logic by removing potential error paths. Add bounds check to memmove in loader_remove_layer_in_list Makes sure we are only moving valid elements around, and not iterating past the end of the allocation. Free ICD "library_path" when it contains an empty string If "library_path" contained nothing, loader_parse_json_string returns the string "", which still needs to be freed. Move narrow() & escape_backslashes_for_json() into common code Because these functions are requied on windows for paths to behave correct, it is good to put them in common code functions (like EnvVarWrapper) instead of requiring all code to remember to call them. Having JsonWriter handle the path fixup means less changes of double application occuring. Fix GN build In chromium official builds remove dev build marking from vulkan-1.dll build(deps): bump jidicula/clang-format-action from 4.13.0 to 4.14.0 Fix EnumPhysDevGroups log message Add 1.3 NULL dispatch table checking Update Vulkan-Loader to 1.4 Fix out-of-memory case in cJSON If the initial calloc failed then NULL was being returned but the out_of_memory flag was not being set, so callers did not understand the returned value correctly. Set the flag. Verify meta layers aren't recursive to any depth By keeping track of which layers have already been processed, the loader will now catch a recursive meta layers to any arbitrary depth. This prevents stack overflows in verify_meta_layer_component_layers due to the recurive nature of the function. Check enable_environment for NULL before copying The enable_environment was missing NULL pointer checks before trying to copy the string. This issue was found by fuzz testing, so the fuzz test has been included as a reproducible case. build(deps): bump github/codeql-action from 3.27.5 to 3.27.9 ci: Bump python version for CodeQL workflow build: Update to header 1.4.304 Remove false positive unknown chain member warnings These warnings would be printed when any struct not explicitely looked for appeared in the pNext chain of GetPhysicalDeviceSurfaceCapabilities2KHR's in the emulation of VK_EXT_surface_maintenance1, which only looked for a small subset of the possible structs that could be in the chain. Make Xrandr not implicitly required when x11 is used The previous logic made xrandr a required header whenever x11 was available which doesn't honestly convey build requirements to users. This commit add BUILD_WSI_XLIB_XRANDR_SUPPORT as a build option that defaults to ON (for platforms which support x11) so the xrandr requirement can be configured by users directly. Use 32 bit pkg-config in linux 32 bit CI jobs PKG_CONFIG_EXECTUABLE is a CMake variable that sets the pkg-config executable used, allowing the use of the 32 bit pkg-config when looking for pkg-config packages. The prior version of the 32 bit job actually used the 64 bit packages but that happened to work okay because the only things used from the 64 bit packages were header files, which are arch agnostic.
comment:13 by , 2 months ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
I checked upstream and there have been 27 tags this year for Headers this year. Same for Vulkan-Loader. That's slightly under 12 days per release, These are not what I call 'stable'. I suggest we wait for the first release in January.