blob: 49088ce3ea83eaf44f98b1f25fe45a409df1bfed [file] [log] [blame]
Mark Lobodzinskif39d70c2015-08-14 14:24:50 -06001# Powershell script for running the vktrace trace/replay auto test
David Pinedo1405a432015-06-30 15:37:50 -06002# To run this test:
3# cd <this-dir>
Mark Lobodzinskif39d70c2015-08-14 14:24:50 -06004# powershell C:\src\LoaderAndTools\vktracereplay.ps1 [-Debug]
Cody Northropfb207af2015-08-31 11:33:35 -06005$exitstatus = 0
David Pinedo1405a432015-06-30 15:37:50 -06006
7if ($args[0] -eq "-Debug") {
8 $dPath = "Debug"
9} else {
10 $dPath = "Release"
11}
12
13write-host -background black -foreground green "[ RUN ] " -nonewline
Mark Lobodzinskif39d70c2015-08-14 14:24:50 -060014write-host "vktracereplay.ps1: Vktrace trace/replay"
David Pinedo1405a432015-06-30 15:37:50 -060015
David Pinedo1405a432015-06-30 15:37:50 -060016# Create a temp directory to run the test in
17rm -recurse -force vktracereplay_tmp > $null 2> $null
18new-item vktracereplay_tmp -itemtype directory > $null 2> $null
19
20# Copy everything we need into the temp directory, so we
21# can make sure we are using the correct dll and exe files
22cd vktracereplay_tmp
Cody Northropfb207af2015-08-31 11:33:35 -060023cp ..\..\vktrace\$dPath\vkreplay.exe .
24cp ..\..\vktrace\$dPath\vktrace.exe .
David Pinedo1405a432015-06-30 15:37:50 -060025cp ..\..\demos\$dPath\cube.exe .
26cp ..\..\demos\*.png .
Cody Northropfb207af2015-08-31 11:33:35 -060027cp ..\..\demos\*.spv .
Cody Northropb229f972015-09-09 13:01:34 -060028cp ..\..\loader\$dPath\vulkan-0.dll .
David Pinedo1405a432015-06-30 15:37:50 -060029cp ..\..\layers\$dPath\VKLayerScreenShot.dll .
Cody Northropfb207af2015-08-31 11:33:35 -060030cp ..\..\layers\$dPath\screenshot.json .
Cody Northrop3513c152015-09-18 10:52:42 -060031cp ..\..\layers\$dPath\vktrace_layer.dll .
32cp ..\..\layers\$dPath\vktrace_layer.json .
David Pinedo1405a432015-06-30 15:37:50 -060033
34# Change PATH to the temp directory
35$oldpath = $Env:PATH
36$Env:PATH = $pwd
Cody Northropfb207af2015-08-31 11:33:35 -060037
38# Set up some modified env vars
Cody Northropbc6ecfa2015-08-14 10:59:35 -060039$Env:VK_LAYER_PATH = $pwd
David Pinedo1405a432015-06-30 15:37:50 -060040
Cody Northropfb207af2015-08-31 11:33:35 -060041# Temporarily set ScreenShot layer by hand until these are worked out
42$Env:_VK_SCREENSHOT = 1
Jon Ashburn7d4cd762015-09-11 11:33:09 -060043$Env:VK_INSTANCE_LAYERS = "ScreenShot"
44$Env:VK_DEVICE_LAYERS = "ScreenShot"
Cody Northropfb207af2015-08-31 11:33:35 -060045
David Pinedo1405a432015-06-30 15:37:50 -060046# Do a trace and replay
Jon Ashburnb9470052015-09-21 14:01:41 -060047& vktrace -o c01.vktrace -s 1 -p cube -a "--c 10" > trace.sout 2> trace.serr
David Pinedo1405a432015-06-30 15:37:50 -060048rename-item -path 1.ppm -newname 1-trace.ppm
Cody Northropfb207af2015-08-31 11:33:35 -060049& vkreplay -s 1 -t c01.vktrace > replay.sout 2> replay.serr
David Pinedo1405a432015-06-30 15:37:50 -060050rename-item -path 1.ppm -newname 1-replay.ppm
51
52# Force a failure - for testing this script
53#cp vulkan.dll 1-replay.ppm
54#rm 1-trace.ppm
55#rm 1-replay.ppm
56
57# Restore PATH
58$Env:PATH = $oldpath
59
Cody Northropfb207af2015-08-31 11:33:35 -060060if ($exitstatus -eq 0) {
61 # Check that two screenshots were created
62 if (!(Test-Path 1-trace.ppm) -or !(Test-Path 1-replay.ppm)) {
63 echo 'Trace file does not exist'
64 write-host -background black -foreground red "[ FAILED ] " -nonewline;
65 $exitstatus = 1
66 }
67}
68
69if ($exitstatus -eq 0) {
70 # ensure the trace and replay snapshots are identical
David Pinedo1405a432015-06-30 15:37:50 -060071 fc.exe /b 1-trace.ppm 1-replay.ppm > $null
72 if (!(Test-Path 1-trace.ppm) -or !(Test-Path 1-replay.ppm) -or $LastExitCode -eq 1) {
Cody Northropfb207af2015-08-31 11:33:35 -060073 echo 'Trace files do not match'
74 write-host -background black -foreground red "[ FAILED ] " -nonewline;
75 $exitstatus = 1
David Pinedo1405a432015-06-30 15:37:50 -060076 }
77}
Cody Northropfb207af2015-08-31 11:33:35 -060078
79# check the average pixel value of each screenshot to ensure something plausible was written
80if ($exitstatus -eq 0) {
81 $trace_mean = (convert 1-trace.ppm -format "%[mean]" info:)
82 $replay_mean = (convert 1-replay.ppm -format "%[mean]" info:)
83 $version = (identify -version)
84
85 # normalize the values so we can support Q8 and Q16 imagemagick installations
86 if ($version -match "Q8") {
87 $trace_mean = $trace_mean / 255 # 2^8-1
88 $replay_mean = $replay_mean / 255 # 2^8-1
89 } else {
90 $trace_mean = $trace_mean / 65535 # 2^16-1
91 $replay_mean = $replay_mean / 65535 # 2^16-1
92 }
93
94 # if either screenshot is too bright or too dark, it either failed, or is a bad test
95 if (($trace_mean -lt 0.10) -or ($trace_mean -gt 0.90)){
96 echo ''
97 echo 'Trace screenshot failed mean check, must be in range [0.1, 0.9]'
98 write-host 'Detected mean:' $trace_mean
99 echo ''
100 write-host -background black -foreground red "[ FAILED ] " -nonewline;
101 $exitstatus = 1
102 }
103 if (($replay_mean -lt 0.10) -or ($replay_mean -gt 0.90)){
104 echo ''
105 echo 'Replay screenshot failed mean check, must be in range [0.1, 0.9]'
106 write-host 'Detected mean:' $replay_mean
107 echo ''
108 write-host -background black -foreground red "[ FAILED ] " -nonewline;
109 $exitstatus = 1
110 }
111}
112
113# if we passed all the checks, the test is good
114if ($exitstatus -eq 0) {
115 write-host -background black -foreground green "[ PASSED ] " -nonewline;
116}
117
Mark Lobodzinskif39d70c2015-08-14 14:24:50 -0600118write-host "vktracereplay.ps1: Vktrace trace/replay"
David Pinedo1405a432015-06-30 15:37:50 -0600119write-host
120if ($exitstatus) {
121 echo '1 FAILED TEST'
122}
123
Cody Northropfb207af2015-08-31 11:33:35 -0600124# cleanup
David Pinedo1405a432015-06-30 15:37:50 -0600125cd ..
126rm -recurse -force vktracereplay_tmp > $null 2> $null
Cody Northropfb207af2015-08-31 11:33:35 -0600127Remove-Item Env:\VK_LAYER_PATH
128Remove-Item Env:\_VK_SCREENSHOT
129Remove-Item Env:\VK_INSTANCE_LAYERS
130Remove-Item Env:\VK_DEVICE_LAYERS
David Pinedo1405a432015-06-30 15:37:50 -0600131exit $exitstatus