Remove them from the calling scripts where appropriate. Notably the 'get count
then run tests and pass in count' are now using the framework where that is
completely redundant.
Change-Id: I00d561a85047742a849df48818398b10c62d3b74
We've encountered situations where a layer removes physical devices
from the list which can cause issues on some systems if it's done
incorrectly. For now, simply throw a warning if the loader determines
that a layer has removed devices.
NOTE: In the long-run, I think we should define a policy which states
that layers can re-order devices, but not add or remove. If a layer
wants to add, it should become an ICD.
* `get_instance_func` needed to have __stdcall (VKAPI_ATTR) added
* Several .def files were incorrect
* vk_layer.h forward declares vkNegotiateLoaderLayerInterfaceVersion. This is
problomatic because it doesn't have __declspec(dllexport), a token added by
FRAMEWORK_EXPORT on windows. We have to special case the export macro here to
prevent that mismatched definition.
Functions needed in the various layer interface versions are now
exported as well as guarded behind macros configurable from CMake.
The export_definitions folder was populated as well.
Change-Id: Iebfdd8ae02062eb81b8aa9f705885c9384c95be9
This replaces instances of `#ifdef MACRO_NAME` with `#if MACRO_NAME` as now
MACRO_NAME will have a value of 0 or 1, instead of it being defined or not
defined.
Change-Id: I27a4330511a0f0d779f41851fe816fc79e868de2
During SDK testing we identified that the runtime copyrights
were out-of-date. The loader runtime includes two separate
MIT copyrights, each attributed to a pair of source files,
one initiated by Dave Gamble and one by joseph werle.
I examined these files to discover that the last LunarG change to
three out of the four was actually in 2017, not 2016. This
date should be attributed to Khronos, Valve, and LunarG.
By updating the copyright notice in these files, we ensure that
the license registry remains up-to-date.
Note that no real content changed (which is why the copyrights are not
being updated to 2021).
but it changed the import lib name (libvulkan.dll.a instead of libvulkan-1.dll.a) which in turns breaks cmake detection in FindVulkan
now we go back to using the default cmake prefix which is equivalent to what #595 wants, (prior to #523), but without the broken behavior
cc @Biswa96
Make sure the work space is clean before starting a test, this is mainly for developer builds, as CI
runs will generally wipe the entire build tree instead.
Main issue was getting function redireciton to work, dyld-interposer accomplishes that.
It required making the shim-library a dylib, but otherwise only required minor changes.
Change-Id: I7b7e2c86cc0c0b082f58241a7e146b74af72e792
ReadDataFilesInRegistry would return VK_ERROR_INITIALIZATION_FAILED in several cases
which could cause the loader to short cirtuit and return that value when no drivers were
found in the registry. This is inconsistent with the later check of the size of the list
of manifest, which if it is 0 returns VK_ERROR_INCOMPATABLE_DRIVER. This commit changes
the instances of INIT_FAILED into INCOMPATABLE_DRIVER where relevant.
Since the loader only uses environment variables if the process is
not running with elevated priviledges, the test harness needs to be
able to control that aspect to ensure consistency as CI systems may
run the tests in an 'elevated' context.
Change-Id: I8b15a1ecd4ab4960049ba198af8199943e872bba
Move windows specific error reporting to test_util.h
This allows for its use anywhere its required.
Change-Id: I14a0da85dc0d3f4e651b99aa005469b47d98d940
_stdcall in Windows x86 builds would mangle names even with `export "C"`
By adding .def files, the correct name is used in the .dll and the loader will
correctly load it.
Additionally, ShimEnumAdapters2 needs _stdcall for 32 bit mode
Change-Id: Ia60a5e2a9e4378dc3e09864648e04852b10fe524
When the override layer or an implicit meta layer is detected, the loader will
go and find all of the explicit layers because the override/meta layer might
require them. During that process `loaderAddLayerProperties` is called. It was
accidentally called with `is_implicit = true`, which causes the loader to interpret the manifest files as if they were implicit, generating
many erroneous warnings.
Change-Id: I8bc6bfa0d2a81159ebc33406e18ebf2099355768
`enable_testing()` was previously always enabled when configuring
the loader repository. This commit only does that when `BUILD_TESTS`
is true.
Change-Id: I75666088b84efc4613f72e6938da9ed88b54fb1f
The Detours library uses a make file to build it. Thus it needed
to be translated into CMake equivalent code to make a useable target.
Change-Id: Ibed33c962e522f44297c7fa9cbe3f62964503ceb
These files are the current 4 source code files used to create the
regression test suite
loader_regression_tests.cpp and loader_version_tests.cpp contain a
majority of the tests.
loader_wsi_test.cpp is all the tests pertaining to the WSI functions
in the loader.
loader_testing_main.cpp contains the `main()` which has windows CRT
specific calls to disable popups and debug aserts.
There are two executables created, test_regression and test_wsi.
test_regression is both regression_tests and version_tests. test_wsi
is the WSI tests. These tests are separate as they rely on linking
with platform specific windowing libraries which may not be present
on a CI system.
Change-Id: I1c02b0f82826d337599f4a9a7c02dde40ea5afa3
The test environment is the code which glues the platform shim,
TestICD, and TestLayers together so that test code can be easily
written. The main components tests use are the SingleICDShim and
MultipleICDShim classes. Both take care of copying the ICD binaries,
setting up the manifests, and redirecting the platform specific
systems to point at those manifests.
Change-Id: I7cbb76c9555fe13b323173c3838cbb3616b77a18
At the present moment, this change is to define simple layer
utilities that tests in the future may use.
Change-Id: I9ab5e1950da64061997891a0527d0f70a49e41e7
The loader queries various platform systems for info such as the
location of ICDs and layers. To isolate the loader during testing
from the system it is running on, the platform shim intercepts the
necessary functions so that the contents of the systems queried by
the loader can be configured by tests.
On windows this involves 2 aspects:
Detouring Win32 API functions and redirecting the registry.
The `Detours` library is used to easily capture Win32 API calls.
And the registry uses `RegOverridePredefKey` to redirect the registry
entries the loader accesses.
On linux this only involves intercepting 3 functions; `opendir`,
`access`, and `fopen`. This allows the framework to tell the loader
what to actuall open/access/fopen. These interceptions call the
underlying function but with altered arguments, specifically to
paths the tests set up.
Change-Id: I3531a1cb190c489ffd9f1f0549d0ebcacb3818c5
The TestICD is a configurable ICD which can recreate much of the
behavior the loader expects of an ICD. Combined with a direct line
of communication between the tests and TestICD, tests can setup
specific conditions that have a known response from the loader,
thus allowing proper regression testing.
Change-Id: I84303f0ddb6011fc1b76dad25fd249abb2da29c9