1#!/bin/bash
2
3pushd $(dirname "$0") > /dev/null
4
5# Check for insertion of wrap-objects layer.
6output=$(VK_LAYER_PATH=$VK_LAYER_PATH:`pwd`/layers \
7   LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/layers \
8   VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_wrap_objects \
9   VK_LOADER_DEBUG=all \
10   GTEST_FILTER=WrapObjects.Insert \
11   ./vk_loader_validation_tests 2>&1)
12
13echo "$output" | grep -q "Insert instance layer VK_LAYER_LUNARG_wrap_objects"
14ec=$?
15
16if [ $ec -eq 1 ]
17then
18   echo "Insertion test FAILED - wrap-objects not detected in instance layers" >&2
19   exit 1
20fi
21
22echo "$output" | grep -q "Insert device layer VK_LAYER_LUNARG_wrap_objects"
23ec=$?
24
25if [ $ec -eq 1 ]
26then
27   echo "Insertion test FAILED - wrap-objects not detected in device layers" >&2
28   exit 1
29fi
30echo "Insertion test PASSED"
31
32# Check for insertion of wrap-objects layer in front.
33output=$(VK_LAYER_PATH=$VK_LAYER_PATH:`pwd`/layers \
34   LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/layers \
35   VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_parameter_validation:VK_LAYER_LUNARG_wrap_objects \
36   VK_LOADER_DEBUG=all \
37   GTEST_FILTER=WrapObjects.Insert \
38   ./vk_loader_validation_tests 2>&1)
39
40echo "$output" | grep -q "Insert instance layer VK_LAYER_LUNARG_wrap_objects"
41ec=$?
42
43if [ $ec -eq 1 ]
44then
45   echo "Front insertion test FAILED - wrap-objects not detected in instance layers" >&2
46   exit 1
47fi
48
49echo "$output" | grep -q "Insert device layer VK_LAYER_LUNARG_wrap_objects"
50ec=$?
51
52if [ $ec -eq 1 ]
53then
54   echo "Front insertion test FAILED - wrap-objects not detected in device layers" >&2
55   exit 1
56fi
57echo "Front insertion test PASSED"
58
59# Check for insertion of wrap-objects layer in back.
60output=$(VK_LAYER_PATH=$VK_LAYER_PATH:`pwd`/layers \
61   LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/layers \
62   VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_wrap_objects:VK_LAYER_LUNARG_parameter_validation \
63   VK_LOADER_DEBUG=all \
64   GTEST_FILTER=WrapObjects.Insert \
65   ./vk_loader_validation_tests 2>&1)
66
67echo "$output" | grep -q "Insert instance layer VK_LAYER_LUNARG_wrap_objects"
68ec=$?
69
70if [ $ec -eq 1 ]
71then
72   echo "Back insertion test FAILED - wrap-objects not detected in instance layers" >&2
73   exit 1
74fi
75
76echo "$output" | grep -q "Insert device layer VK_LAYER_LUNARG_wrap_objects"
77ec=$?
78
79if [ $ec -eq 1 ]
80then
81   echo "Back insertion test FAILED - wrap-objects not detected in device layers" >&2
82   exit 1
83fi
84echo "Back insertion test PASSED"
85
86# Check for insertion of wrap-objects layer in middle.
87output=$(VK_LAYER_PATH=$VK_LAYER_PATH:`pwd`/layers \
88   LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/layers \
89   VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_image:VK_LAYER_LUNARG_wrap_objects:VK_LAYER_LUNARG_parameter_validation \
90   VK_LOADER_DEBUG=all \
91   GTEST_FILTER=WrapObjects.Insert \
92   ./vk_loader_validation_tests 2>&1)
93
94echo "$output" | grep -q "Insert instance layer VK_LAYER_LUNARG_wrap_objects"
95ec=$?
96
97if [ $ec -eq 1 ]
98then
99   echo "Middle insertion test FAILED - wrap-objects not detected in instance layers" >&2
100   exit 1
101fi
102
103echo "$output" | grep -q "Insert device layer VK_LAYER_LUNARG_wrap_objects"
104ec=$?
105
106if [ $ec -eq 1 ]
107then
108   echo "Middle insertion test FAILED - wrap-objects not detected in device layers" >&2
109   exit 1
110fi
111echo "Middle insertion test PASSED"
112
113# Run the layer validation tests with and without the wrap-objects layer. Diff the results.
114# Filter out the "Unexpected:" lines because they contain varying object handles.
115GTEST_PRINT_TIME=0 \
116   ./vk_layer_validation_tests | grep -v "^Unexpected: " > unwrapped.out
117GTEST_PRINT_TIME=0 \
118   VK_LAYER_PATH=$VK_LAYER_PATH:`pwd`/layers \
119   LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/layers \
120   VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_wrap_objects \
121   ./vk_layer_validation_tests | grep -v "^Unexpected: " > wrapped.out
122diff unwrapped.out wrapped.out
123ec=$?
124
125if [ $ec -eq 1 ]
126then
127   echo "Wrap-objects layer validation tests FAILED - wrap-objects altered the results of the layer validation tests" >&2
128   exit 1
129fi
130echo "Wrap-objects layer validation tests PASSED"
131
132popd > /dev/null
133
134exit 0
135