[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Git][xorg-team/vulkan/vulkan-loader][upstream-unstable] 55 commits: Add Vulkan Loader and Driver Interface Version 7



Title: GitLab

Timo Aaltonen pushed to branch upstream-unstable at X Strike Force / vulkan / vulkan-loader

Commits:

  • 4b705abe
    by Charles Giessen at 2023-01-16T17:23:45-07:00
    Add Vulkan Loader and Driver Interface Version 7
    
    The changes made by Version 7 are as follows.
    If a Driver supports any of the following functions,
    they must be exposed by with vk_icdGetInstanceProcAddr:
     * vk_icdNegotiateLoaderICDInterfaceVersion
     * vk_icdGetPhysicalDeviceProcAddr
     * vk_icdEnumerateAdapterPhysicalDevices (Windows only)
    This makes it optional for a driver to export these functions. Drivers may still
    export them for compatibility with older loaders.
    
    Loader and Driver Interface Version 7 allows for drivers provided through the
    VK_LUNARG_direct_driver_loading extension to support the entire Loader and Driver
    Interface.
    
    This commit makes many small fixes to the documentation. Main changes are adding
    Version 7 of the Loader and Driver Interface, clarifies when the functions
    associated with this version must be exported, when they can be optionally exported
    and when they must be exposed through vk_icdGetInstanceProcAddr. This also
    clarifies LDP_DRIVER_10 to note the exact behavior of drivers that is disallowed.
    In the process of these documentation changes, the glossary was amended with
    definitions for Exported Functions, Exposed Functions, and Querying Functions.
    
  • c77aeff4
    by Mike Schuchardt at 2023-01-19T10:27:49-07:00
    build: Update to header 1.3.239
    
    - Update known-good
    - Generate source
    
  • 125b4f66
    by Juan Ramos at 2023-01-19T12:09:59-07:00
    docs: Notify users about upcoming master to main change
    
  • 0a2c1bec
    by Juan Ramos at 2023-01-23T12:45:23-07:00
    github: Use main instead of master
    
    closes #1107
    
  • ced1be17
    by Charles Giessen at 2023-01-24T11:26:02-07:00
    Log when VK_LAYER_PATH is ignored
    
    The current design of the loader make the Override Layer, with its override
    paths, take priority over VK_LAYER_PATH. This is fine, but if the override
    layer accidentally was left around, it can cause confusion as VK_LAYER_PATH
    suddenly stops working for no apparent reason. This commit adds a log message
    to indicate that it is being ignored.
    
  • 32a1a766
    by Charles Giessen at 2023-01-25T16:33:21-07:00
    Fix copyright in windows .rc file
    
    This commit makes the copyright date to be taken from the day of the build
    instead of it being hardcoded, which is liable to be out of date.
    
    This commit also makes the loader.rc be generated into the build directory
    rather than the source tree. Because this commit modifies the version info to
    include the current header version for debug builds, this prevents needing to
    update the file whenever the headers update.
    
  • f383fbb7
    by Juan Ramos at 2023-01-26T18:01:55-07:00
    ci: Fix CI warnings
    
  • 3948415e
    by Charles Giessen at 2023-01-26T20:47:06-07:00
    Re-checking loader.rc file
    
    The loader.rc file is now checked into the source, and is automatically updated
    by python whenever the headers are updated so that it contains the version used
    to build the loader.
    
    If BUILD_DLL_VERSIONINFO is set in the command line, then the loader will use
    that version to configure a new loader.rc and place it in the build directory.
    Then it will use that loader.rc rather than the checked in file. This allows
    Vulkan Runtimes to be built with an exact version.
    
    The file is checked in to allow builds without modifying the source directory
    and allowing GN builds to not need any additional configuration to work.
    
  • 62fd1a35
    by Mike Schuchardt at 2023-01-27T10:52:54-08:00
    build: Update to header 1.3.240
    
    - Update known-good
    - Generate source
    
  • 935faa68
    by Mike Schuchardt at 2023-01-27T10:52:54-08:00
    ci: Update GN toolchain
    
  • 3520c825
    by Juan Ramos at 2023-01-27T11:54:47-07:00
    cmake: Update minimum to 3.17.2
    
    Matches what VVL currently uses
    
  • 043d6702
    by Juan Ramos at 2023-01-27T12:00:12-07:00
    ci: Fix GitHub warnigs about setup-python@v2
    
  • 8eb7636a
    by Juan Ramos at 2023-01-27T17:19:54-07:00
    cmake: Add scripts/CMakeLists.txt
    
    - Abstracts update_deps code similar to VVL
    - Reduce(s) variable polution
    
  • 270c5451
    by Juan Ramos at 2023-01-27T17:19:54-07:00
    cmake: Cleanup BUILD_TESTS code
    
  • 38379d23
    by Juan Ramos at 2023-01-27T17:19:54-07:00
    cmake: Remove custom install code
    
  • 11883676
    by Mike Schuchardt at 2023-01-30T11:00:31-08:00
    gn: Add ninja to DEPS
    
    Instead of relying on the version in depot_tools
    
  • 3a799ab0
    by Charles Giessen at 2023-01-30T13:10:21-07:00
    Remove newlines in log messages
    
    The loader_log() function adds a new line at the end of every log message.
    Having the string contain an extra new line is redundant and makes the output
    inconsistent due to having random blank lines.
    
  • 0c63db1a
    by Charles Giessen at 2023-01-30T14:00:03-07:00
    Implement VK_LUNARG_direct_driver_loading
    
    VK_LUNARG_direct_driver_loading is an instance extension which allows
    applictations to include drivers directly to the loader, instead of relying
    on system installed drivers or environment variables specifying where the
    desired driver is located. This allows applications to 'ship' a driver with
    themselves and easily provide it to the system loader.
    
    Changes related to direct driver loading:
    * Source implementation
    * Documentation of new extension, interactions with existing driver discovery
    mechanism, and issues with implicit layers
    * Extensive tests covering many feature combinations.
    
    Changes also made in this commit:
    * Add EnvVarWrapper which more cleanly handles setting, modifying, and
    removing Environment Variables. This has the effect of allowing all tests to
    run from the test executable without leaking env-vars, which previously
    caused spurious test failure. Note - CTest runs each test in a separate
    process which hides this issue.
    * Adds -Wshadow=local for the gcc compiler (only for gcc 7 and up).
    The MSVC compiler already enables this check with W4 so it was added for consistency.
    * Add <!-- omit from toc --> to Documenation pages. This prevents the
    "Markdown all in one" extension from adding labels to the table of contents.
    * Add ManifestDiscoveryType::null_dir, to separate tests that want to write
    a manifest file to a place the loader normally does not search and tests which
    do not write any manifest file at all.
    * Updated copyright to 2023 for changed files
    
  • dda78723
    by Charles Giessen at 2023-01-30T14:42:20-07:00
    Ensure VkPhysicalDevice unwrapping in Device functions
    
    Certain functions, like vkSetDebugUtilsObjectNameEXT can take a physical device
    as a parameter. When this function is queried through vkGetInstanceProcAddr,
    the trampoline is returned, whereas when queried through vkGetDeviceProcAddr,
    the trampoline wasn't returned, allowing the physical device parameter to not
    get unwrapped before calling down the chain, causing a crash.
    
    This commit modifies the codegen to always use the trampoline for these
    functions, and adds tests for them. These changes require the the loader check
    that the appropriate extensions are enabled during the application's call to
    vkGetDeviceProcAddr, since it otherwise always return a non-null function
    pointer.
    
  • e90b9e01
    by Ludovico de Nittis at 2023-01-31T10:01:42-07:00
    Clarify the VK_LOADER_DRIVERS_SELECT example
    
    In the documentation examples, if we set
    `VK_LOADER_DRIVERS_SELECT=nvidia`, we are saying to the loader to select
    only the driver whose JSON manifest is called exactly `nvidia`.
    
    This is likely not what we want, because the Nvidia drivers are usually
    called something like `nvidia_icd.json`, and not just `nvidia` without a
    file extension.
    
    In the "Behavior" column it already states that:
    "Since drivers don’t have a name like layers, this glob is used to
    compare against the manifest filename."
    So, to avoid confusion, we just need to change the example to reflect
    how the loader glob works.
    
    This commit also adds an additional automated test to ensure that this
    full-name string glob actually works as described in the documentation.
    
    Signed-off-by: Ludovico de Nittis <ludovico.denittis@collabora.com>
    
  • 3bc9d7c0
    by Juan Ramos at 2023-01-31T21:54:48-07:00
    cmake: Remove pointless conditionals
    
    CMake min is now 3.17
    
  • ebb932a4
    by Juan Ramos at 2023-02-01T10:23:43-07:00
    ci: Test CMake min for Linux builds
    
  • f5fa389d
    by Juan Ramos at 2023-02-13T14:15:50-07:00
    cmake: Use PkgConfig to find XCB, X11, and DirectFB
    
  • e2a3fc1b
    by Juan Ramos at 2023-02-13T14:15:50-07:00
    cmake: Remove custom find_package code
    
  • 74221a9a
    by Juan Ramos at 2023-02-13T17:45:33-07:00
    cmake: Add VULKAN_LOADER_VERSION
    
  • 02ac9a77
    by Christophe at 2023-02-14T10:30:44-07:00
    Warn user when using device layers field #1086
    
    The device layer fields in VkDeviceCreateInfo are deprecated and have
    been for years. Users should not be adding anything to them (and if
    they do, it should match the layers added in VkInstanceCreateInfo).
    
    This would be a warning that 'device layers are deprecated, they do
    nothing' in case a user is trying to enable validation layers using
    them. Charles has seen multiple users not knowing that they are
    deprecated and get burned by the API due to not having validation
    layers enabled.
    
    Since there may be applications in the wild which currently do provide
    a list of layers to device create info, this warning should only be
    issued if the list differs from instance creation. That way no spurious
    warnings are created.
    
  • 189762fa
    by Christophe at 2023-02-14T10:30:44-07:00
    Testing C.I. memory leak hypothesis
    
  • d237b906
    by Christophe at 2023-02-14T10:30:44-07:00
    gni
    
  • 933f8694
    by Christophe at 2023-02-14T10:30:44-07:00
    Use calloc instead of alloc
    
  • dbad6e0d
    by Christophe at 2023-02-14T10:30:44-07:00
    A bit more safe string copy
    
  • 20154742
    by Christophe at 2023-02-14T10:30:44-07:00
    Only allocate layers if initialization succeed
    
  • 3ba0bf51
    by Charles Giessen at 2023-02-17T14:49:17-07:00
    Fix documentation to use the correct function name
    
    `vk_icdNegotiateLoaderICDInterfaceVersion` was intended but due to a copy paste error `vk_icdGetInstanceProcAddr`
    was used instead.
  • ba41638d
    by Mike Schuchardt at 2023-02-20T13:40:56-07:00
    build: Update to header 1.3.241
    
    - Update known-good
    - Use new 'depends' attribute for extension dependencies
    - Generate source
    
  • ebf8ae00
    by Mike Schuchardt at 2023-02-27T11:20:06-08:00
    build: Update to header 1.3.242
    
    - Update known-good
    - Generate source
    
  • 3db19f3e
    by Charles Giessen at 2023-02-27T13:41:16-07:00
    Call DestroyInstance on each driver in error path
    
    If CreateInstance successfully calls terminator_CreateInstance but subsequently fails on the way
    back up the chain, the loader should call DestroyInstance on each driver to give them a chance to
    clean up. This path is possible during CTS OOM tests which cause VVL to fail which then causes
    leaks to occur.
    
    Additionally, the layer name allocations needed to be cleaned up in this error
    path as well, since there is no chance for vkDestroyInstance to run.
    
  • e4895e86
    by Charles Giessen at 2023-03-07T16:39:27-07:00
    Allow the loader to enable ASAN outside of testing
    
    This commit promotes the build option TEST_USE_ADDRESS_SANITIZER and
    TEST_USE_THREAD_SANITIZER to not be behind BUILD_TESTS. This allows users
    of the loader to enable ASAN & TSAN support on the loader without enabling
    the loader's tests.
    
    The new options are called LOADER_ENABLE_ADDRESS_SANITIZER and
    LOADER_ENABLE_THREAD_SANITIZER.
    
    There is also a new build option: `LOADER_DISABLE_DYNAMIC_LIBRARY_UNLOADING`.
    This is to allow layers & drivers that use Address Sanitizer to get useful
    stack traces when running their code. Because vkDestroyInstance unloads all
    layer and driver dynamic libraries, leak sanitizer cannot create complete
    stack traces, making debugging the leaks much more difficult than necessary.
    This option is only available when LOADER_ENABLE_ADDRESS_SANITIZER is also
    enabled, due to that being the only reason to prevent the unloading of
    libraries.
    
  • dde24e46
    by Charles Giessen at 2023-03-09T11:36:49-07:00
    Set github actions to only have read only permissions
    
    Because the loader only uses github actions to perform CI runs, it is good to set
    the 'read-all' only, helping harden the github actions runners from potentially
    compromised access.
    
    For more context
    https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions
    
    Fixes #1148
    
  • 36e12d2d
    by Charles Giessen at 2023-03-09T13:43:51-07:00
    Add clang-format-diff.py
    
    Turns out this script was never checked in, causing the check_code_format.sh script to
    never run. This is due to python *not* returning an error when it fails to find the
    python script, which results in the shell script passing while never actually checking
    the formatting.
    
  • eb130942
    by Charles Giessen at 2023-03-09T13:43:51-07:00
    Make check_code_format.sh not care about includes
    
    The code being removed here was a fix for travis CI which is no longer in
    use. The git diff ignores files in the gitignore, so this workaround is no
    longer necessary.
    
  • dc32470f
    by Mike Schuchardt at 2023-03-13T12:18:04-07:00
    build: Update to header 1.3.243
    
    - Update known-good
    - Generate source
    - Add new return code to test_util.h
    
  • 22407d78
    by MeeSong at 2023-03-14T07:25:06-06:00
    Docs: Add missing ".md"
  • 011d7a4a
    by Charles Giessen at 2023-03-16T13:39:18-06:00
    Add missing backtick in LoaderInterfaceArchitecture.md
  • 53def698
    by Mike Schuchardt at 2023-05-16T16:32:09-06:00
    build: Update to header 1.3.244
    
    - Update known-good
    - Generate source
    
  • b56a115f
    by Mike Schuchardt at 2023-05-16T16:32:09-06:00
    build: Update to header 1.3.245
    
    - Update known-good
    - Generate source
    
  • c497e768
    by Charles Giessen at 2023-05-16T17:03:04-06:00
    Add 4th component to version in loader.rc
    
    FILVERSION is supposed to be a 4 component field. The previous commit to make loader.rc
    be generated did not account for that and so requires this fix to make sure it has four
    components. Thankfully, this issue is not present in SDK released loaders thanks to the
    SDK specifying its own version string that has 4 components.
    
  • 3ca6405f
    by Mike Schuchardt at 2023-05-16T17:03:27-06:00
    build: Update to header 1.3.246
    
    - Update known-good
    - Generate source
    
  • 9012d243
    by Charles Giessen at 2023-05-16T17:03:28-06:00
    Make correct layer be used when duplicates are present
    
    When there are multiple versions of the same layer found through environment variables
    or from implicit layer locations, the loader would use the *last* one that appeared rather
    than the first, causing surprising behavior. This commit fixes that by checking to make
    sure that layers do not already exist in the list of layers to be enabled before adding a
    layer to the list, preventing duplicates from appearing in the list.
    
    This commit adds a check in vkEnumerateInstanceLayerProperties to skip over layers that do
    wish to intercept the function. The missing check would only cause a spurious log message
    which said that the loader was unable to load a symbol names "" (as in an empty string)
    from the layer.
    
    This commit also amends the test framework with the following fixes:
    * Create Layer JSON manifests that contain multiple layers
    * Only add layers to the registry if they are generic (meant to simulate installed layers)
    * Allow layers to print messages during vkCreateInstance - a mechanism to double check that
    only the correct layer(s) are loaded
    * Fixes env-var added layers not using full paths
    * Only have 1 XDG env-var set, making all other XDG env-var have an empty string
    * Set the XDG env-vars even on macOS (github actions seems to have them set)
    
  • 87ce439f
    by Charles Giessen at 2023-05-16T17:03:28-06:00
    Fix ordering regression for VK_INSTANCE_LAYERS
    
    The commit to add VK_LOADER_LAYERS_ENABLE/DISABLE inadvertently broke the
    ordering guarantees of VK_INSTANCE_LAYERS. This commit restores that order.
    If both VK_INSTANCE_LAYERS and VK_LOADER_LAYERS_ENABLE add layers, the order
    will be VK_INSTANCE_LAYERS enabled layers, in the order specified by the
    env-var, followed by any layers enabled by VK_LOADER_LAYERS_ENABLED enabled in
    the order they are found on the system.
    
    In addition to this, the test framework receieved two changes:
    * Make env-var folders report their contents in a deterministic order (aka the
    order the items were added to the framework). This mirrors existing behavior
    for redirected folders.
    * Make platform shim resilient to shutdown ordering issues. Namely, set a flag
    during shutdown so that any interception functions go straight to the real
    version of the functoin. This works around an issue during the destruction of
    the FolderManagers for the environment variables, where the readdir shim
    function was trying to use the FolderManager's data but Address Sanitizer
    declared that such a use was 'heap use after free'.
    * Rename set_path to set_fake_path to better indicate its purpose
    
  • 6e3f4462
    by Charles Giessen at 2023-05-16T17:03:28-06:00
    Use Ubuntu 22 in github actions
    
    Remove the unneded pkg-config-i686-linux-gnu package since its gone in 22.
    
  • a2c5794e
    by Mike Schuchardt at 2023-05-16T17:03:28-06:00
    build: Update to header 1.3.247
    
    - Update known-good
    - Generate source
    
  • c1797475
    by Charles Giessen at 2023-05-16T17:03:28-06:00
    Log ERROR when layers in VK_INSTANCE_LAYERS are missing
    
    It is unhelpful to have zero diagnostics emitted when the layers listed in
    VK_INSTANCE_LAYERS are not found.
    
  • 87b0ee15
    by Mike Schuchardt at 2023-05-16T17:03:28-06:00
    build: Update to header 1.3.248
    
    - Update known-good
    - Generate source
    
  • 2b081647
    by Mike Schuchardt at 2023-05-16T17:03:28-06:00
    build: Update to header 1.3.249
    
    - Update known-good
    - Generate source
    
  • 5347d430
    by Mike Schuchardt at 2023-05-16T17:03:28-06:00
    build: Update to header 1.3.250
    
    - Update known-good
    - Generate source
    
  • f372068d
    by juan-lunarg at 2023-05-16T17:03:28-06:00
    docs: Update README.md
    

27 changed files:

The diff was not included because it is too large.

Reply to: