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 Bruce Dubbs, 4 months ago

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.

comment:2 by martyj19, 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.

Last edited 4 months ago by martyj19 (previous) (diff)

in reply to:  2 comment:3 by Xi Ruoyao, 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#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.

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.

Last edited 4 months ago by Xi Ruoyao (previous) (diff)

comment:4 by Xi Ruoyao, 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 Xi Ruoyao, 4 months ago

Summary: Vulkan-Headers and Vulkan-Loader 1.3.302Vulkan-Headers and Vulkan-Loader 1.3.302 (update currency to only pick "official" releases)

comment:6 by Bruce Dubbs, 4 months ago

Milestone: 12.399-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:7 by Rahul Chandra, 4 months ago

Vulkan 1.4.303 released

comment:8 by Douglas R. Reno, 2 months ago

Milestone: 99-Waiting12.3
Owner: changed from blfs-book to Douglas R. Reno
Status: newassigned

comment:9 by Douglas R. Reno, 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 Douglas R. Reno, 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 Douglas R. Reno, 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 Douglas R. Reno, 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 Douglas R. Reno, 2 months ago

Resolution: fixed
Status: assignedclosed
Note: See TracTickets for help on using tickets.