Implement VK_LUNARG_direct_driver_loading
authorCharles Giessen <charles@lunarg.com>
Wed, 4 Jan 2023 22:05:02 +0000 (15:05 -0700)
committerCharles Giessen <46324611+charles-lunarg@users.noreply.github.com>
Mon, 30 Jan 2023 21:00:03 +0000 (14:00 -0700)
commit0c63db1aeda6916690b863688fa6cdf2ac1f790b
treeb04abc3a1a82b4b3548f809eb0d3a8c9b695f000
parent3a799ab00eb287376f5ac9f21f8ce2851c9e348e
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
22 files changed:
CMakeLists.txt
docs/LoaderApplicationInterface.md
docs/LoaderDebugging.md
docs/LoaderDriverInterface.md
docs/LoaderInterfaceArchitecture.md
docs/LoaderLayerInterface.md
loader/loader.c
loader/loader.h
loader/trampoline.c
tests/framework/README.md
tests/framework/icd/test_icd.cpp
tests/framework/icd/test_icd.h
tests/framework/test_environment.cpp
tests/framework/test_environment.h
tests/framework/test_util.cpp
tests/framework/test_util.h
tests/loader_alloc_callback_tests.cpp
tests/loader_envvar_tests.cpp
tests/loader_layer_tests.cpp
tests/loader_regression_tests.cpp
tests/loader_testing_main.cpp
tests/loader_version_tests.cpp