platform/upstream/Vulkan-Loader.git
2 years agoFix CMake code for getting Git Version information
Charles Giessen [Tue, 3 May 2022 19:53:07 +0000 (13:53 -0600)]
Fix CMake code for getting Git Version information

The ${CMAKE_SOURCE_DIR} uses the wrong directory when the loader is included as a
subproject. By using ${CMAKE_CURRENT_LIST_DIR}, the CMake code to find the git
commit and branch name will use the correct directory.

Additionally, the logic was ammended to curtail this issue in the future. Quotes are
included in the string to allow it to be used as a string literal, instead of
needing a const char[] variable and macros. Also, the CMake code was restructured
to always define GIT_BRANCH_NAME and GIT_TAG_INFO.

2 years agoImplement unknown function intercept in layers
Charles Giessen [Tue, 29 Mar 2022 07:00:20 +0000 (01:00 -0600)]
Implement unknown function intercept in layers

Make it possible for layers to declare that they support unknown functions
and set up the layer dispatch table appropriately. A very niche use case
but helpful when developing validation for functions not yet out in the
public headers.

2 years agoCorrectly check for NULL in loader_get_dispatch
Charles Giessen [Tue, 3 May 2022 19:28:57 +0000 (13:28 -0600)]
Correctly check for NULL in loader_get_dispatch

2 years agoFix typo
Sein Lee [Fri, 29 Apr 2022 20:53:17 +0000 (05:53 +0900)]
Fix typo

2 years agoci: Remove fbactions/setup-winsdk
Mike Schuchardt [Thu, 21 Apr 2022 17:02:52 +0000 (10:02 -0700)]
ci: Remove fbactions/setup-winsdk

The default version 18362 started 404'ing and a new enough version is
present in the base image.

2 years agobuild: Update to header 1.3.212
Mike Schuchardt [Thu, 21 Apr 2022 16:12:12 +0000 (09:12 -0700)]
build: Update to header 1.3.212

- Update known-good
- Generate source

2 years agoAdd app_key OverrideMetaLayer tests
Charles Giessen [Thu, 14 Apr 2022 17:33:06 +0000 (11:33 -0600)]
Add app_key OverrideMetaLayer tests

2 years agoUpdate LoaderDriverInterface.md
Erik Faye-Lund [Wed, 13 Apr 2022 07:21:52 +0000 (09:21 +0200)]
Update LoaderDriverInterface.md

Fix link-syntax.

2 years agoRefactor FrameworkEnvironment API a bit
Charles Giessen [Wed, 6 Apr 2022 04:51:04 +0000 (22:51 -0600)]
Refactor FrameworkEnvironment API a bit

Redo some of API's for adding layers and ICD's to the test framework.

2 years agoDocument VK_KHR_portability_enumeration support
Charles Giessen [Thu, 7 Apr 2022 17:39:01 +0000 (11:39 -0600)]
Document VK_KHR_portability_enumeration support

2 years agoWarn if portability_enumeration extension should be enabled
Charles Giessen [Tue, 5 Apr 2022 06:14:49 +0000 (00:14 -0600)]
Warn if portability_enumeration extension should be enabled

Log an error if an application creates a VkDevice from a physical device which
was enumerated from a driver that is a portability driver but the application
didn't correctly enable the portability enumeration flag & extension.

2 years agoIncrease discovery timeout for Gtest test to 100 seconds
Charles Giessen [Wed, 6 Apr 2022 22:04:29 +0000 (16:04 -0600)]
Increase discovery timeout for Gtest test to 100 seconds

2 years agoRevert 32bit linux unknown ext chain change
Charles Giessen [Wed, 6 Apr 2022 21:29:47 +0000 (15:29 -0600)]
Revert 32bit linux unknown ext chain change

Fix breaking of builds due to the dropping of GOT addressing mode.

2 years agobuild: Update to header 1.3.211
Mike Schuchardt [Tue, 5 Apr 2022 16:51:59 +0000 (09:51 -0700)]
build: Update to header 1.3.211

- Update known-good
- Generate source

2 years agoAllow meta layers to have newer component layers
Charles Giessen [Wed, 30 Mar 2022 21:02:30 +0000 (15:02 -0600)]
Allow meta layers to have newer component layers

Relax the requirement that all component layers in a meta layer must equal the version of the meta layer.
This allows enabling layers that do not have the same API version as the meta layer.

2 years agoClean up version checking logic
Charles Giessen [Fri, 25 Mar 2022 23:08:57 +0000 (17:08 -0600)]
Clean up version checking logic

Add a few helper functions to simplify checking that a X.Y.Z version is sufficient.

2 years agoFix 32 bit linux unknown function handling
Charles Giessen [Mon, 4 Apr 2022 23:47:47 +0000 (17:47 -0600)]
Fix 32 bit linux unknown function handling

Building and running the regression tests reveals that the 32 bit unknown function
handling on linux is broken. It required the same fixes as did windows 32 bit, since
the code is almost identical.

wsi.c also would not compile in 32 bit linux due to the warnings-as-errors being enabled,
which has also been fixed.

2 years agoFix missed Physical Devices in Windows
Charles Giessen [Fri, 1 Apr 2022 09:09:35 +0000 (03:09 -0600)]
Fix missed Physical Devices in Windows

The previous logic would cause any non-sorted physical devices to be missed
when aggregating the final list. This caused crashes due to the phys_dev
value not being initialized. The fix is to make sure both sorted and non
sorted physical devices are included in the final output of
setup_loader_term_phys_devs().

2 years agoUse correct TestICD in tests
Charles Giessen [Fri, 1 Apr 2022 09:03:24 +0000 (03:03 -0600)]
Use correct TestICD in tests

Many tests were using the V6 TestICD, which means that it exports the
EnumerateAdapterPhysicalDevices. The loader then only looks for devices
using that functionality and if the test didn't set it up, the driver
won't have its devices found.

Also:
* Cleaned up handle_validation_tests
* Added WSI setup helpers, which put all the setup code for WSI in one place
* Created a to/from_nondispatch_handle function for TestICD, probably should
be in a more general location

2 years agoAdd test for different ICD interface versions
Charles Giessen [Thu, 3 Mar 2022 18:44:49 +0000 (11:44 -0700)]
Add test for different ICD interface versions

Fix Test Framework not skipping Drivers which have a different LUID.

2 years agobuild: Update to header 1.3.210
Mike Schuchardt [Fri, 1 Apr 2022 17:18:57 +0000 (10:18 -0700)]
build: Update to header 1.3.210

- Update known-good
- Generate source

2 years agoDont emit warnings on unknown manifest file versions
Charles Giessen [Thu, 31 Mar 2022 17:32:05 +0000 (11:32 -0600)]
Dont emit warnings on unknown manifest file versions

Since the loader is meant to be forward compatible, it makes little sense to emit
a warning when an ICD or Layer manifest is found with a version that it doesn't
understand. Thus they now are INFO level.

2 years agocmake: Add ENABLE_WERROR option
Biswapriyo Nath [Wed, 30 Mar 2022 16:25:58 +0000 (21:55 +0530)]
cmake: Add ENABLE_WERROR option

This adds a choice for the user whether to treat warnings as errors.
The remaining compiler options are moved where it was before.

2 years agoFixup several small issues found by Visual Studio
unknown [Tue, 15 Mar 2022 04:13:10 +0000 (22:13 -0600)]
Fixup several small issues found by Visual Studio

The VS Analyzer went through the codebase and pointed out a dozen warnings and
one possible crash.

2 years agoEnable /W4 errors and support clang-cl
Charles Giessen [Tue, 29 Mar 2022 05:50:33 +0000 (23:50 -0600)]
Enable /W4 errors and support clang-cl

Enable /W4 errors on MSVC and fix all corresponding errors.

Refactor the CMakeLists.txt to allow for compiling with clang-cl. This required
figuring out that -Wall -Wextra mangle the set of warnings used. The solution
is to use /W4 instead when compiling with clang-cl on Windows.

2 years agoReplace TEST_F with TEST in most tests
Charles Giessen [Tue, 29 Mar 2022 05:12:49 +0000 (23:12 -0600)]
Replace TEST_F with TEST in most tests

Test fixturing (TEST_F) is useful when there is a lot of common code that needs
to be run for a suite of tests. However, the FrameworkEnvironment encapsulates
almost all of the setup work all tests needs, and so doesn't need to be in a
fixture. Making the add_icd call inside the tests makes it clear which binary
is being used.

This commit also uses the corrent signed/unsigned constants in tests, as was
warned by compilers when enhanced warnings were enabled (/W4 in msvc).

2 years agoUpdate issue templates
Mark Young [Tue, 29 Mar 2022 02:32:25 +0000 (20:32 -0600)]
Update issue templates

Expand Bug report and add Feature Request template.

2 years agoAdd Bug Reporting Template
Mark Young [Tue, 29 Mar 2022 02:23:07 +0000 (20:23 -0600)]
Add Bug Reporting Template

Add initial bug reporting template with requested fields.

2 years agoApply code review comments from @charles-lunarg
Mark Young [Fri, 25 Mar 2022 20:56:25 +0000 (14:56 -0600)]
Apply code review comments from @charles-lunarg

2 years agoFix #888 crash in Lutris with Linux sorting
Mark Young [Fri, 25 Mar 2022 14:42:44 +0000 (08:42 -0600)]
Fix #888 crash in Lutris with Linux sorting

The sorting algorithm needed to take into account both the application
API version as well as the driver API version.

This required additional changes to the sorting algorithm for the fallback
since even if the instance supports the extension or Vulkan 1.1, the individual
drivers may not.

Also, add supporting tests which would catch these cases in the future.
In the process, I realized we assumed that the presence of an extension in the
test_icd indicated "enablement" which was incorrect.  So I separated out
that into a set of "enabled instance extensions"

2 years agoRemove LDP_DRIVER_6
Charles Giessen [Thu, 24 Mar 2022 22:44:14 +0000 (16:44 -0600)]
Remove LDP_DRIVER_6

The cause for this policy was due to dynamic linker behavior which could have
resulted in the wrong symbols being used. However, this didn't occur in
practical usage of the dynamic linker. Also drivers exporting Vulkan
entrypoints was a useful behavior to enable testing and more flexible usage
that this policy actively interfered with.

2 years agoFixup windows test infrastructure
Charles Giessen [Thu, 24 Mar 2022 23:22:16 +0000 (17:22 -0600)]
Fixup windows test infrastructure

Cleaned up several bugs in the testing framework in the windows shim.
Rewrote the tests that exercise DXGI/D3DKMT functionality.

2 years agoFix non-sorted surface indexing
Mark Young [Thu, 24 Mar 2022 19:52:47 +0000 (13:52 -0600)]
Fix non-sorted surface indexing

The physical device terminator was missing the ICD index in the
non-sorted path.  This caused crashes in Angle before it was realized
that the sorting code was unintentionally disabled in that build
path.

Also, add tests to catch this case in the future in the WSI code, but
this required converting all the TEST_F tests to TEST since Gtest
didn't like mixing the 2 on my system.

Finally, fix a few WSI error messages in the loader which were
missing spaces.

Fixes #863 for non-sorting paths

2 years agoUpdate BUILD.gn
Peng Huang [Thu, 24 Mar 2022 16:08:15 +0000 (12:08 -0400)]
Update BUILD.gn

Add  LOADER_ENABLE_LINUX_SORT to workaround ANGLE crashes on Linux

2 years agobuild: Update to header 1.3.209
Mike Schuchardt [Wed, 23 Mar 2022 17:14:51 +0000 (10:14 -0700)]
build: Update to header 1.3.209

- Update known-good
- Generate source

2 years agoLog when core GetToolingProperties is NULL.
Charles Giessen [Mon, 21 Mar 2022 18:07:39 +0000 (12:07 -0600)]
Log when core GetToolingProperties is NULL.

The core entrypoint for vkGetPhysicalDeviceToolingProperties didn't log if the function in the
terminator was NULL. This makes it easier for implementations to know when they aren't
exporting the symbol.

2 years agoMore clean up to make sure we have enough space
Mark Young [Thu, 17 Mar 2022 18:08:49 +0000 (12:08 -0600)]
More clean up to make sure we have enough space

2 years agoModify logging text output
Mark Young [Thu, 17 Mar 2022 17:52:00 +0000 (11:52 -0600)]
Modify logging text output

Modify text output for logs so that we only flag types of messages
we're interested in and also try to add spacing so items line up
cleaner.

2 years agoAdd device log info on vkCreateDevice
Mark Young [Wed, 16 Mar 2022 21:23:06 +0000 (15:23 -0600)]
Add device log info on vkCreateDevice

To make things clearer on output, log the device information for
the physical device being used on vkCreateDevice if either the
layer or the driver log bits are set.

2 years agobuild: Update to header 1.3.208 upstream/1.3.208
Mike Schuchardt [Tue, 15 Mar 2022 15:58:42 +0000 (08:58 -0700)]
build: Update to header 1.3.208

- Update known-good
- Generate source

2 years agoTests close layer handles when necessary
Charles Giessen [Tue, 15 Mar 2022 05:19:13 +0000 (23:19 -0600)]
Tests close layer handles when necessary

The fs::FolderManager can't close objects that are in use, thus if the tests
keep open a binary then the destructor will fail to delete the file. This
commit manually cleans out the FrameworkEnvironment's loaded layers to prevent
this from happening.

2 years agoTest framework now shims registry functions
Charles Giessen [Tue, 15 Mar 2022 03:57:55 +0000 (21:57 -0600)]
Test framework now shims registry functions

Previously the way the test framework worked was to fake the registry using a
special windows API call. However this led to brittle tests and was incompatible
with googletest's death test capabilities.

These death tests highlighted that the current set of them didn't use the built in
matcher to verify a correct crash/abort. This commit also amends all uses of
ASSERT_DEATH to provide the relevant death message.

If a driver reports an interface version greater than 0 but doesn't export
vk_icdGetInstanceProcAddr, the loader will now skip the driver.

2 years agoRemove hasing of unknown functions
Charles Giessen [Thu, 10 Mar 2022 23:48:14 +0000 (16:48 -0700)]
Remove hasing of unknown functions

Use a simple linear search instead. This greatly simplifies the logic and
reduces the places for the logic to go awry.

2 years agoMove unknown function logic into dedicated file
Charles Giessen [Wed, 9 Mar 2022 23:28:04 +0000 (16:28 -0700)]
Move unknown function logic into dedicated file

unknown_function_handling.c now holds all of the unknown function handling
logic.

2 years agoRevamp unknown function tests
Charles Giessen [Tue, 8 Mar 2022 23:38:30 +0000 (16:38 -0700)]
Revamp unknown function tests

Make use of multiple different functions that are used so that its more
obvious when a test is actually calling the right function.

2 years agoUse no-chromium-code in GN build.
Jamie Madill [Mon, 14 Mar 2022 15:12:49 +0000 (11:12 -0400)]
Use no-chromium-code in GN build.

Aligns the configs so that new warnings turned on in Chromium
Clang don't show up in the loader project.

Fixes #878

2 years agoModify loader VK_ADD_DRIVER_FILES behavior
Mark Young [Wed, 9 Mar 2022 21:25:32 +0000 (14:25 -0700)]
Modify loader VK_ADD_DRIVER_FILES behavior

Modify the loader to only use VK_ADD_DRIVER_FILES if
VK_DRIVER_FILES or VK_ICD_FILENAMES is not used.
This could have caused weird issues with systems where VK_DRIVER_FILES
was used to force drivers in a specific order/location for testing.

Resolves issue #871

2 years agoRemove VK_NO_PROTOTYPES from test_util.h
Charles Giessen [Wed, 9 Mar 2022 22:52:04 +0000 (15:52 -0700)]
Remove VK_NO_PROTOTYPES from test_util.h

2 years agomake secure_getenv discovery project wide
Charles Giessen [Wed, 9 Mar 2022 21:54:58 +0000 (14:54 -0700)]
make secure_getenv discovery project wide

Since the tests need to know if secure_getenv exists or not, the detection and
setup logic is now in the top level CMakeLists.txt.

2 years agoSet VK_NO_PROTOTYPES on test targets
Charles Giessen [Wed, 9 Mar 2022 21:48:50 +0000 (14:48 -0700)]
Set VK_NO_PROTOTYPES on test targets

Moves the definition of VK_NO_PROTOTYPES out of a header and into cmake so that
so that libraries and executables can set or not set it if they so desire. This
allows binaries to link directly to the loader if need be.

2 years agoFix tests compiler warnings from bool conversions
Charles Giessen [Sat, 19 Feb 2022 20:47:32 +0000 (13:47 -0700)]
Fix tests compiler warnings from bool conversions

While set_env_var did return a boolean, this caused odd performance warnings
on old compilers and wasn't being used by the tests.

2 years agoUse target_link_options if available in CMake
Charles Giessen [Sat, 19 Feb 2022 20:36:58 +0000 (13:36 -0700)]
Use target_link_options if available in CMake

2 years agoRefactor CMake to user correct C/C++ Standard
Charles Giessen [Fri, 18 Feb 2022 23:45:04 +0000 (16:45 -0700)]
Refactor CMake to user correct C/C++ Standard

Make sure the correct C++ version but also refactor the tests CMake code
to clean it up.

2 years agoFix macOS CMake errors
Charles Giessen [Thu, 17 Feb 2022 22:25:49 +0000 (15:25 -0700)]
Fix macOS CMake errors

Used incorrect syntax for CONFIGURE_DEPENDS.

2 years agoSet CMake C & C++ standard per target
Charles Giessen [Thu, 17 Feb 2022 05:01:44 +0000 (22:01 -0700)]
Set CMake C & C++ standard per target

2 years agoMake _GNU_SOURCE a common target property
Charles Giessen [Thu, 17 Feb 2022 23:15:05 +0000 (16:15 -0700)]
Make _GNU_SOURCE a common target property

Rather than set it per target that needs it, make it available on the
loader_specific_options target for consistency.

2 years agoSpecify wrap_objects.cpp in CMake code
Charles Giessen [Thu, 17 Feb 2022 04:57:01 +0000 (21:57 -0700)]
Specify wrap_objects.cpp in CMake code

While CMake will append appropriate file extensions when the full name isn't
given, such as "wrap_objects", it is best to specify the file with its
extension for explicitness.

2 years agoUse targets CMake logic instead of directories
Charles Giessen [Thu, 17 Feb 2022 04:44:09 +0000 (21:44 -0700)]
Use targets CMake logic instead of directories

Replace the last usages of CMake logic that applied compiler definitions and
options to the folder with usage of a target.

2 years agoCleanup MSVC CMake code
Charles Giessen [Wed, 16 Feb 2022 20:24:26 +0000 (13:24 -0700)]
Cleanup MSVC CMake code

* Googletest has been updated to 1.11 which means the TR1 deprecation notice is
unecessary.

* The `/permissive-` flag has been moved to loader_common_options so it doesn't
have to be repeated over and over.

* Since we do not support VS 2013 and early, use /guard:cf everywhere

* Remove MSVC_LOADER_COMPILE_OPTIONS in favor of loader_common_options

* Remove reduntant compile options and include directories

2 years agoFix compiler warnings in tests on MSVC
Charles Giessen [Wed, 16 Feb 2022 19:59:10 +0000 (12:59 -0700)]
Fix compiler warnings in tests on MSVC

2 years agoReport secure_getenv missing when not using MSVC
Charles Giessen [Wed, 16 Feb 2022 19:35:17 +0000 (12:35 -0700)]
Report secure_getenv missing when not using MSVC

2 years agoFormat unix fallback paths in CMakeLists.txt
Charles Giessen [Wed, 16 Feb 2022 19:27:13 +0000 (12:27 -0700)]
Format unix fallback paths in CMakeLists.txt

2 years agoRemove BUILD_LOADER build option
Charles Giessen [Wed, 16 Feb 2022 19:26:07 +0000 (12:26 -0700)]
Remove BUILD_LOADER build option

No reason to have this since the tests depend on the loader being built to function.

2 years agoUse CMake provided library names on macOS
Charles Giessen [Wed, 3 Nov 2021 21:09:32 +0000 (15:09 -0600)]
Use CMake provided library names on macOS

The ${CMAKE_DL_LIBS} and Threads::Threads provides generic mechanisms to
use the dynamic linker and threading libraries on the system. In addition,
this commit replaces Vulkan::Headers with loader_specific_commits for the
vulkan-framework target. Note that this commit is in a series of commits and
not intended to work standalone.

2 years agoUse GLOBs to get macOS vulkan framework headers
Charles Giessen [Wed, 3 Nov 2021 21:04:48 +0000 (15:04 -0600)]
Use GLOBs to get macOS vulkan framework headers

This commit recitfies the situation that this list of header files is out of
date with the upstream Vulkan-Headers repo. It uses GLOB_RECURSE to find all
the files and subdirectories in the vulkan headers include directory.
In a perfect world, the list of headers would be removed because users should
be using the Vulkan-Headers for that purpose. But to maintain any existing
users it will be retained.

CMake 3.12 added CONFIGURE_DEPENDS to globs to better support changes in the
list being caught by CMake. Since this repo uses 3.11 as the minimum, it will
not be added unless supported by the currently installed CMake version. While
better, it is not perfect at catching all changing file lists, and thus it
may still be necessary to re-run CMake manually to get an updated list of
headers files.

Note that this commit is a part of a series of commits and not intended to
work standalone.

2 years agoRefactor Windows specific loader CMake code
Charles Giessen [Wed, 3 Nov 2021 20:38:54 +0000 (14:38 -0600)]
Refactor Windows specific loader CMake code

Merged the loader-norm and vulkan libraries and moved the dirent_on_windows.c
into the same block that adds loader_windows.c to the list of sources. This
commit is a part of a series of commits and not intended to work standalone.

2 years agoUse the CMake Threads package
Charles Giessen [Wed, 3 Nov 2021 20:28:03 +0000 (14:28 -0600)]
Use the CMake Threads package

Instead of manually linking to pthreads, use find_package(Threads) to get the
platform specific name for the threading library and link to it. Use the
THREADS_PREFER_PTHREAD_FLAG to ensure we prefer pthreads before anything
else. Note that this commit is a part of a series of commits and not
intended to work by itself.

2 years agoReplace loader_cmake_config.h with definitions
Charles Giessen [Wed, 3 Nov 2021 20:25:29 +0000 (14:25 -0600)]
Replace loader_cmake_config.h with definitions

Use CMakes built in ability to define compiler definitions to targets so that
the loader_cmake_config.h file is made redundant. This simplifies the build
process by removing the configure_file and including it. Note that this
commit is a part of a series of commits and not intended to work by itself.

2 years agoRefactor loader specific CMake options
Charles Giessen [Wed, 3 Nov 2021 20:14:17 +0000 (14:14 -0600)]
Refactor loader specific CMake options

Create a new target loader_specific_options that contains the specific flags
and definitions which apply only to the loader. This target links to the
loader_common_options and is used to store various macro defines which
only are relevant to the loader, like the specific language standard to use.
The target also links to the vulkan headers.
Note that this commit is in a series of commits and is not meant to work
by itself.

2 years agoMove git info in CMake to loader_common_options
Charles Giessen [Wed, 3 Nov 2021 20:09:50 +0000 (14:09 -0600)]
Move git info in CMake to loader_common_options

Make the GIT_BRANCH_NAME and GIT_TAG_INFO apart of the loader_common_options
target so it doesn't apply globally to the C_FLAGS and CXX_FLAGS.
Note that this commit is a part of a series of commits and is not meant to
work by itself.

2 years agoRefactor CMake compiler options
Charles Giessen [Wed, 3 Nov 2021 19:55:29 +0000 (13:55 -0600)]
Refactor CMake compiler options

Create the target loader_common_options which will contain the compiler
commands, options, and definitions that is shared across the code base.
This includes linking to platform_wsi_defines and moving many of the defines
found in the loader/CMakelists.txt up to this location.

Setting the language standard through an interface target is not possible, so
to avoid using the global state modifiers, each target needing to be on a
specific language standard must specify it for themselves.

Note that this commit is in a series and is not intended to work by itself.

2 years agoRefactor CMake WSI platform defines
Charles Giessen [Wed, 3 Nov 2021 19:51:03 +0000 (13:51 -0600)]
Refactor CMake WSI platform defines

Move the WSI macro defines into their own target such that it can be shared
with the loader and test code. Note that this commit is a part of a series
and not intended to work standalone.

2 years agoRemove RELEASE_BUILD cmake option
Charles Giessen [Mon, 1 Nov 2021 21:33:49 +0000 (15:33 -0600)]
Remove RELEASE_BUILD cmake option

Turned out to be not useful and as such should be removed.

2 years agobuild: Update to header 1.3.207 upstream/v1.3.207
Mike Schuchardt [Tue, 8 Mar 2022 17:39:36 +0000 (09:39 -0800)]
build: Update to header 1.3.207

- Update known-good
- Generate source

2 years agoAdd live tests for OS dynamic loader behavior
Charles Giessen [Fri, 4 Mar 2022 17:21:10 +0000 (10:21 -0700)]
Add live tests for OS dynamic loader behavior

Executes various combinations of loading and linking to libraries which
export the same symbols.

2 years agoChanges to additive env var based on code review
Mark Young [Tue, 22 Feb 2022 17:27:18 +0000 (10:27 -0700)]
Changes to additive env var based on code review

2 years agoFix WIndows elevation
Mark Young [Thu, 17 Feb 2022 20:53:04 +0000 (13:53 -0700)]
Fix WIndows elevation

2 years agoAdd "additive" environment variables
Mark Young [Tue, 4 Jan 2022 18:45:18 +0000 (11:45 -0700)]
Add "additive" environment variables

Add "additive" environment variables for adding additional layer
paths or driver JSON files instead of replacing default ones.

Also, rename VK_ICD_FILENAMES to VK_DRIVER_FILES since we're trying
to remove references to ICDs because software driver implementations
of Vulkan aren't ICDs (but continue to support the old name as well).

Added documentation around these changes to reflect the new name and
the new variables.

2 years agoloader: Fix wayland copy paste error
sfricke-samsung [Tue, 1 Mar 2022 05:44:05 +0000 (23:44 -0600)]
loader: Fix wayland copy paste error

2 years agoResolve Angle failure because it breaks with is_high_integrity
Mark Young [Mon, 28 Feb 2022 18:15:46 +0000 (11:15 -0700)]
Resolve Angle failure because it breaks with is_high_integrity

Angle drops the security enforcement of the loader on environment
variables and the additional "is_high_integrity" checks on my
previous loader change caused failures in the Angle run.
Revert the high-integrity checks and update the layer test to
work properly.

2 years agodocs: Fix typo
Matt Turner [Wed, 23 Feb 2022 00:54:26 +0000 (16:54 -0800)]
docs: Fix typo

The behavior change to physical device ordering happened in v1.3.204.

2 years agoFix compiler warnings in regression_tests
Charles Giessen [Mon, 21 Feb 2022 18:31:57 +0000 (11:31 -0700)]
Fix compiler warnings in regression_tests

2 years agoAdd consecutive create instance and device tests
Charles Giessen [Mon, 21 Feb 2022 18:31:27 +0000 (11:31 -0700)]
Add consecutive create instance and device tests

2 years agobuild: Update to header 1.3.206
Mike Schuchardt [Fri, 18 Feb 2022 16:58:37 +0000 (08:58 -0800)]
build: Update to header 1.3.206

- Update known-good
- Generate source

2 years agoFix vk_icdGetPhysicalDeviceProcAddr docs
Mark Young [Thu, 17 Feb 2022 21:25:29 +0000 (14:25 -0700)]
Fix vk_icdGetPhysicalDeviceProcAddr docs

The language was not normative and also made clearer.

2 years agoEnable testing of high-integrity in the loader
Mark Young [Thu, 17 Feb 2022 16:44:49 +0000 (09:44 -0700)]
Enable testing of high-integrity in the loader

Enable testing to check if the loader is running with elevated
privileges.  This is to make sure we're ignoring the appropriate
environment variables in those scenarios to potentially avoid
escalation exploits.

2 years agoUpdate Contributing.md file
Mark Young [Wed, 16 Feb 2022 17:40:28 +0000 (10:40 -0700)]
Update Contributing.md file

Add more detail on running and writing tests.

2 years agoClean up layer test
Mark Young [Wed, 16 Feb 2022 16:09:16 +0000 (09:09 -0700)]
Clean up layer test

My previous commit to enable physical device modifications in a layer
required new compiled layers to do the work.  Since this can more
cleanly be done by setting layer flags (as suggested by @charles-lunarg)
I have gone back and done that.

2 years agoFix Windows build and add proper phys dev group sorting
Mark Young [Tue, 8 Feb 2022 23:58:47 +0000 (16:58 -0700)]
Fix Windows build and add proper phys dev group sorting

2 years agoCode review comment fixes.
Mark Young [Tue, 8 Feb 2022 15:58:14 +0000 (08:58 -0700)]
Code review comment fixes.

Also, cleaned up Linux vs Windows code so that there was less duplication and
complexity.

2 years agoLoader single EnumPhysDev call through layers
Mark Young [Thu, 2 Dec 2021 23:55:13 +0000 (16:55 -0700)]
Loader single EnumPhysDev call through layers

The loader trampoline previously would query all devices every time
vkEnumeratePhysicalDevices was called.
To do this, it would make two calls every time:
  - First, it would ignore the passed in user values
  - Second, it would query the total number of available devices.
  - Third, it would query the values for every available device

This resulted in layers reporting 2 vkEnumeratePhysicalDevices call for
every 1 the application made which could get very polluted in output.
It didn't break any functionality, just made things messy.

This change removes that behavior and adds a bunch of test cases to verify
nothing broke in the move.

2 years agoAdd debug messages for unknown physical device extensions
Mark Young [Tue, 15 Feb 2022 18:37:58 +0000 (11:37 -0700)]
Add debug messages for unknown physical device extensions

Add debug messages to the loader so we can identify when an unknown
physical device extension's entrypoints are queried.

2 years agoUpdate build.md and README.md for the tests
Charles Giessen [Tue, 15 Feb 2022 22:04:15 +0000 (15:04 -0700)]
Update build.md and README.md for the tests

2 years agoGuard building of live_verification tests
Charles Giessen [Tue, 15 Feb 2022 22:03:25 +0000 (15:03 -0700)]
Guard building of live_verification tests

Don't build live verification tests by default. These are meant as manual tests for
developers to run to diagnose issues or verify correctness on a real system.

2 years agoSwitch ASSERT_EQ(false,true) for FAIL() in tests
Mark Young [Tue, 15 Feb 2022 21:47:29 +0000 (14:47 -0700)]
Switch ASSERT_EQ(false,true) for FAIL() in tests

2 years agoAdd explicit layer invalid variant number test
Mark Young [Tue, 15 Feb 2022 20:13:28 +0000 (13:13 -0700)]
Add explicit layer invalid variant number test

2 years agoAdd a few device layer tests
Mark Young [Tue, 15 Feb 2022 20:04:02 +0000 (13:04 -0700)]
Add a few device layer tests

Since device layers are pretty much ignored, make sure that they don't
change any behavior.
Also add a few "load" entrypoint helper routines based on what was already
done elsewhere in the test system.

2 years agoAdd live_verification tests for runnign with real drivers
Charles Giessen [Tue, 15 Feb 2022 20:56:21 +0000 (13:56 -0700)]
Add live_verification tests for runnign with real drivers

Some things need to be verified against real drivers. The supporting code in test_util and
test_environment make it easy to write application code which works against real drivers and
layers. This allows quickly verifying loader behavior out in the wild.

2 years agoAdd a test to verify that VK_INSTANCE_LAYERS behaves properly
Mark Young [Tue, 15 Feb 2022 17:42:06 +0000 (10:42 -0700)]
Add a test to verify that VK_INSTANCE_LAYERS behaves properly

2 years agoExpand unknown function handling tests
Charles Giessen [Mon, 14 Feb 2022 23:03:40 +0000 (16:03 -0700)]
Expand unknown function handling tests

Add tests for unknown device functions queried with both vkGetDeviceProcAddr
and vkGetInstanceProcAddr. Also loops enough times to exhaust the available
unknown function supply.

Had to fix the vk_layerGetPhysicalDeviceProcAddr in TestLayer to make the tests
pass.

MacOS currently skips tests which use vkGetInstanceProcAddr. This is due to the
need for unknown functions being lower priority and so do not warrent the time
needed to write the assembly necessary to resolve the issue fully.