#!/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