#!/bin/bash pushd $(dirname "$0") > /dev/null RunEnvironmentVariablePathsTest() { # Check for proper handling of paths specified via environment variables. # Set up a layer path that includes default and user-specified locations, # so that the test app can find them. Include some badly specified elements as well. vk_layer_path="$VK_LAYER_PATH" vk_layer_path+=":/usr/local/etc/vulkan/implicit_layer.d:/usr/local/share/vulkan/implicit_layer.d" vk_layer_path+=":/tmp/carol:::" vk_layer_path+=":/etc/vulkan/implicit_layer.d:/usr/share/vulkan/implicit_layer.d:$HOME/.local/share/vulkan/implicit_layer.d" vk_layer_path+=":::::/tandy:" # Set vars to include some "challenging" paths and run the test. output=$(VK_LOADER_DEBUG=all \ XDG_CONFIG_DIRS=":/tmp/goober:::::/tmp/goober2/:/tmp/goober3/with spaces:::" \ XDG_DATA_DIRS="::::/tmp/goober4:::::/tmp/goober5:/tmp/goober6/with spaces::::/tmp/goober7:" \ VK_LAYER_PATH=${vk_layer_path} \ GTEST_FILTER=CreateInstance.LayerPresent \ ./vk_loader_validation_tests 2>&1) # Here is a path we expect to find. The loader constructs these from the XDG* env vars. right_path="/tmp/goober/vulkan/icd.d:/tmp/goober2//vulkan/icd.d:/tmp/goober3/with spaces/vulkan/icd.d" # There are other paths that come from SYSCONFIG settings established at build time. # So we can't really guess at what those are here. right_path+=".*" # Also expect to find these, since we added them. right_path+="/tmp/goober4/vulkan/icd.d:/tmp/goober5/vulkan/icd.d:/tmp/goober6/with spaces/vulkan/icd.d:/tmp/goober7/vulkan/icd.d" echo "$output" | grep -q "$right_path" ec=$? if [ $ec -eq 1 ] then echo "Environment Variable Path test FAILED - ICD path incorrect" >&2 exit 1 fi # Change the string to implicit layers. right_path=${right_path//icd.d/implicit_layer.d} echo "$output" | grep -q "$right_path" ec=$? if [ $ec -eq 1 ] then echo "Environment Variable Path test FAILED - Implicit layer path incorrect" >&2 exit 1 fi # Sadly, the loader does not clean up this path and just stumbles through it. # So just make sure it is the same. right_path="${vk_layer_path}" echo "$output" | grep -q "$right_path" ec=$? if [ $ec -eq 1 ] then echo "Environment Variable Path test FAILED - VK_LAYER_PATH incorrect" >&2 exit 1 fi echo "Environment Variable Path test PASSED" } RunCreateInstanceTest() { # Check for layer insertion via CreateInstance. output=$(VK_LOADER_DEBUG=all \ GTEST_FILTER=CreateInstance.LayerPresent \ ./vk_loader_validation_tests 2>&1) echo "$output" | grep -q "Insert instance layer VK_LAYER_LUNARG_parameter_validation" ec=$? if [ $ec -eq 1 ] then echo "CreateInstance insertion test FAILED - parameter-validation not detected in instance layers" >&2 exit 1 fi echo "CreateInstance Insertion test PASSED" } RunEnumerateInstanceLayerPropertiesTest() { count=$(GTEST_FILTER=EnumerateInstanceLayerProperties.Count \ ./vk_loader_validation_tests count 2>&1 | grep -o 'count=[0-9]\+' | sed 's/^.*=//') if [ "$count" -gt 1 ] then diff \ <(GTEST_PRINT_TIME=0 \ GTEST_FILTER=EnumerateInstanceLayerProperties.OnePass \ ./vk_loader_validation_tests count "$count" properties 2>&1 | grep 'properties') \ <(GTEST_PRINT_TIME=0 \ GTEST_FILTER=EnumerateInstanceLayerProperties.TwoPass \ ./vk_loader_validation_tests properties 2>&1 | grep 'properties') fi ec=$? if [ $ec -eq 1 ] then echo "EnumerateInstanceLayerProperties OnePass vs TwoPass test FAILED - properties do not match" >&2 exit 1 fi echo "EnumerateInstanceLayerProperties OnePass vs TwoPass test PASSED" } RunEnumerateInstanceExtensionPropertiesTest() { count=$(GTEST_FILTER=EnumerateInstanceExtensionProperties.Count \ ./vk_loader_validation_tests count 2>&1 | grep -o 'count=[0-9]\+' | sed 's/^.*=//') if [ "$count" -gt 1 ] then diff \ <(GTEST_PRINT_TIME=0 \ GTEST_FILTER=EnumerateInstanceExtensionProperties.OnePass \ ./vk_loader_validation_tests count "$count" properties 2>&1 | grep 'properties') \ <(GTEST_PRINT_TIME=0 \ GTEST_FILTER=EnumerateInstanceExtensionProperties.TwoPass \ ./vk_loader_validation_tests properties 2>&1 | grep 'properties') fi ec=$? if [ $ec -eq 1 ] then echo "EnumerateInstanceExtensionProperties OnePass vs TwoPass test FAILED - properties do not match" >&2 exit 1 fi echo "EnumerateInstanceExtensionProperties OnePass vs TwoPass test PASSED" } ./vk_loader_validation_tests RunEnvironmentVariablePathsTest RunCreateInstanceTest RunEnumerateInstanceLayerPropertiesTest RunEnumerateInstanceExtensionPropertiesTest # Test the wrap objects layer. ./run_wrap_objects_tests.sh || exit 1 popd > /dev/null