Skip to content

Commit

Permalink
Add Windows support in Travis CI.
Browse files Browse the repository at this point in the history
- Add new Windows support
- Use CMake/CTest instead of Make + shell scripts
- Use --parallel in CTest
- Fix CTest on Windows
- Cleanups in test_shaders.py
- Force specific commit for SPIRV-Headers
- Fix Inf/NaN odd-ball case by moving to ASM
  • Loading branch information
HansKristian-Work committed Oct 26, 2018
1 parent bfeb388 commit 6157bf3
Show file tree
Hide file tree
Showing 24 changed files with 244 additions and 116 deletions.
57 changes: 46 additions & 11 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,52 @@
language: cpp
os:
- linux
- osx
osx_image: xcode10
language:
- cpp
- python

# Use Ubuntu 14.04 LTS (Trusty) as the Linux testing environment.
sudo: required
dist: trusty
python: 3.7

matrix:
include:
- os: linux
dist: trusty
compiler: gcc
env:
- GENERATOR="Unix Makefiles"
- os: linux
dist: trusty
compiler: clang
env:
- GENERATOR="Unix Makefiles"
- os: osx
compiler: clang
osx_image: xcode10
env:
- GENERATOR="Unix Makefiles"
- os: windows
before_install:
- choco install python3
- choco install python2
- export PATH="/c/Python27:/c/Python27/Scripts:$PATH"
- export PATH="/c/Python37:/c/Python37/Scripts:$PATH"
env:
- GENERATOR="Visual Studio 15 2017"
- os: windows
before_install:
- choco install python3
- choco install python2
- export PATH="/c/Python27:/c/Python27/Scripts:$PATH"
- export PATH="/c/Python37:/c/Python37/Scripts:$PATH"
env:
- GENERATOR="Visual Studio 15 2017 Win64"

before_script:
- ./checkout_glslang_spirv_tools.sh

script:
- ./build_glslang_spirv_tools.sh Debug 2
- make -j2
- ./test_shaders.sh
- if [[ "$TRAVIS_OS_NAME" == "windows" ]]; then PYTHON3=$(which python); fi
- if [[ "$TRAVIS_OS_NAME" != "windows" ]]; then PYTHON3=$(which python3); fi
- ./build_glslang_spirv_tools.sh Release
- mkdir build
- cd build
- cmake .. -DCMAKE_BUILD_TYPE=Debug -G "${GENERATOR}" -DPYTHON_EXECUTABLE:FILEPATH="${PYTHON3}"
- cmake --build .
- PATH="../external/glslang-build/output/bin:../external/spirv-tools-build/output/bin:$PATH" ctest --verbose -C Debug
49 changes: 31 additions & 18 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -134,32 +134,45 @@ find_package(PythonInterp)
if (${PYTHONINTERP_FOUND})
if (${PYTHON_VERSION_MAJOR} GREATER 2)
add_test(NAME spirv-cross-test
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py
${CMAKE_CURRENT_SOURCE_DIR}/shaders)
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --parallel
${CMAKE_CURRENT_SOURCE_DIR}/shaders
WORKING_DIRECTORY $<TARGET_FILE_DIR:spirv-cross>)
add_test(NAME spirv-cross-test-no-opt
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py
${CMAKE_CURRENT_SOURCE_DIR}/shaders-no-opt)
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --parallel
${CMAKE_CURRENT_SOURCE_DIR}/shaders-no-opt
WORKING_DIRECTORY $<TARGET_FILE_DIR:spirv-cross>)
add_test(NAME spirv-cross-test-metal
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --metal
${CMAKE_CURRENT_SOURCE_DIR}/shaders-msl)
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --metal --parallel
${CMAKE_CURRENT_SOURCE_DIR}/shaders-msl
WORKING_DIRECTORY $<TARGET_FILE_DIR:spirv-cross>)
add_test(NAME spirv-cross-test-metal-no-opt
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --metal
${CMAKE_CURRENT_SOURCE_DIR}/shaders-msl-no-opt)
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --metal --parallel
${CMAKE_CURRENT_SOURCE_DIR}/shaders-msl-no-opt
WORKING_DIRECTORY $<TARGET_FILE_DIR:spirv-cross>)
add_test(NAME spirv-cross-test-hlsl
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --hlsl
${CMAKE_CURRENT_SOURCE_DIR}/shaders-hlsl)
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --hlsl --parallel
${CMAKE_CURRENT_SOURCE_DIR}/shaders-hlsl
WORKING_DIRECTORY $<TARGET_FILE_DIR:spirv-cross>)
add_test(NAME spirv-cross-test-hlsl-no-opt
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --hlsl
${CMAKE_CURRENT_SOURCE_DIR}/shaders-hlsl-no-opt)
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --hlsl --parallel
${CMAKE_CURRENT_SOURCE_DIR}/shaders-hlsl-no-opt
WORKING_DIRECTORY $<TARGET_FILE_DIR:spirv-cross>)
add_test(NAME spirv-cross-test-opt
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --opt
${CMAKE_CURRENT_SOURCE_DIR}/shaders)
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --opt --parallel
${CMAKE_CURRENT_SOURCE_DIR}/shaders
WORKING_DIRECTORY $<TARGET_FILE_DIR:spirv-cross>)
add_test(NAME spirv-cross-test-metal-opt
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --metal --opt
${CMAKE_CURRENT_SOURCE_DIR}/shaders-msl)
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --metal --opt --parallel
${CMAKE_CURRENT_SOURCE_DIR}/shaders-msl
WORKING_DIRECTORY $<TARGET_FILE_DIR:spirv-cross>)
add_test(NAME spirv-cross-test-hlsl-opt
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --hlsl --opt
${CMAKE_CURRENT_SOURCE_DIR}/shaders-hlsl)
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --hlsl --opt --parallel
${CMAKE_CURRENT_SOURCE_DIR}/shaders-hlsl
WORKING_DIRECTORY $<TARGET_FILE_DIR:spirv-cross>)
add_test(NAME spirv-cross-test-reflection
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_shaders.py --reflect --parallel
${CMAKE_CURRENT_SOURCE_DIR}/shaders-reflection
WORKING_DIRECTORY $<TARGET_FILE_DIR:spirv-cross>)
endif()
else()
message(WARNING "Testing disabled. Could not find python3. If you have python3 installed try running "
Expand Down
11 changes: 5 additions & 6 deletions build_glslang_spirv_tools.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,21 @@ if [ ! -z $1 ]; then
PROFILE=$1
fi

NPROC=$(nproc)
if [ ! -z $2 ]; then
NPROC=$2
NPROC="--parallel $2"
fi

echo "Building glslang."
mkdir -p external/glslang-build
cd external/glslang-build
cmake ../glslang -DCMAKE_BUILD_TYPE=$PROFILE -G"Unix Makefiles"
make -j$NPROC
cmake ../glslang -DCMAKE_BUILD_TYPE=$PROFILE -DCMAKE_INSTALL_PREFIX=output
cmake --build . --target install ${NPROC}
cd ../..

echo "Building SPIRV-Tools."
mkdir -p external/spirv-tools-build
cd external/spirv-tools-build
cmake ../spirv-tools -DCMAKE_BUILD_TYPE=$PROFILE -G"Unix Makefiles" -DSPIRV_WERROR=OFF
make -j$NPROC
cmake ../spirv-tools -DCMAKE_BUILD_TYPE=$PROFILE -DSPIRV_WERROR=OFF -DCMAKE_INSTALL_PREFIX=output
cmake --build . --target install ${NPROC}
cd ../..

5 changes: 5 additions & 0 deletions checkout_glslang_spirv_tools.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

GLSLANG_REV=91ac4290bcf2cb930b4fb0981f09c00c0b6797e1
SPIRV_TOOLS_REV=9bfe0eb25e3dfdf4f3fd86ab6c0cda009c9bd661
SPIRV_HEADERS_REV=d5b2e1255f706ce1f88812217e9a554f299848af

if [ -d external/glslang ]; then
echo "Updating glslang to revision $GLSLANG_REV."
Expand Down Expand Up @@ -35,9 +36,13 @@ fi
if [ -d external/spirv-headers ]; then
cd external/spirv-headers
git pull origin master
git checkout $SPIRV_HEADERS_REV
cd ../..
else
git clone git://github.com/KhronosGroup/SPIRV-Headers.git external/spirv-headers
cd external/spirv-headers
git checkout $SPIRV_HEADERS_REV
cd ../..
fi

cd ../..
Expand Down
29 changes: 29 additions & 0 deletions shaders-hlsl/asm/frag/inf-nan-constant.asm.frag
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 7
; Bound: 14
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %FragColor
OpExecutionMode %main OriginUpperLeft
OpSource ESSL 310
OpName %main "main"
OpName %FragColor "FragColor"
OpDecorate %FragColor Location 0
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%v3float = OpTypeVector %float 3
%_ptr_Output_v3float = OpTypePointer Output %v3float
%FragColor = OpVariable %_ptr_Output_v3float Output
%float_0x1p_128 = OpConstant %float 0x1p+128
%float_n0x1p_128 = OpConstant %float -0x1p+128
%float_0x1_8p_128 = OpConstant %float 0x1.8p+128
%13 = OpConstantComposite %v3float %float_0x1p_128 %float_n0x1p_128 %float_0x1_8p_128
%main = OpFunction %void None %3
%5 = OpLabel
OpStore %FragColor %13
OpReturn
OpFunctionEnd
14 changes: 0 additions & 14 deletions shaders-hlsl/frag/inf-nan-constant.frag

This file was deleted.

29 changes: 29 additions & 0 deletions shaders-msl/asm/frag/inf-nan-constant.asm.frag
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 7
; Bound: 14
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %FragColor
OpExecutionMode %main OriginUpperLeft
OpSource ESSL 310
OpName %main "main"
OpName %FragColor "FragColor"
OpDecorate %FragColor Location 0
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%v3float = OpTypeVector %float 3
%_ptr_Output_v3float = OpTypePointer Output %v3float
%FragColor = OpVariable %_ptr_Output_v3float Output
%float_0x1p_128 = OpConstant %float 0x1p+128
%float_n0x1p_128 = OpConstant %float -0x1p+128
%float_0x1_8p_128 = OpConstant %float 0x1.8p+128
%13 = OpConstantComposite %v3float %float_0x1p_128 %float_n0x1p_128 %float_0x1_8p_128
%main = OpFunction %void None %3
%5 = OpLabel
OpStore %FragColor %13
OpReturn
OpFunctionEnd
14 changes: 0 additions & 14 deletions shaders-msl/frag/inf-nan-constant.frag

This file was deleted.

41 changes: 41 additions & 0 deletions shaders/asm/frag/inf-nan-constant-double.asm.frag
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 7
; Bound: 22
; Schema: 0
OpCapability Shader
OpCapability Float64
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %FragColor %vTmp
OpExecutionMode %main OriginUpperLeft
OpSource GLSL 450
OpName %main "main"
OpName %FragColor "FragColor"
OpName %vTmp "vTmp"
OpDecorate %FragColor Location 0
OpDecorate %vTmp Flat
OpDecorate %vTmp Location 0
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%v3float = OpTypeVector %float 3
%_ptr_Output_v3float = OpTypePointer Output %v3float
%FragColor = OpVariable %_ptr_Output_v3float Output
%double = OpTypeFloat 64
%v3double = OpTypeVector %double 3
%double_0x1p_1024 = OpConstant %double 0x1p+1024
%double_n0x1p_1024 = OpConstant %double -0x1p+1024
%double_0x1_8p_1024 = OpConstant %double 0x1.8p+1024
%15 = OpConstantComposite %v3double %double_0x1p_1024 %double_n0x1p_1024 %double_0x1_8p_1024
%_ptr_Input_double = OpTypePointer Input %double
%vTmp = OpVariable %_ptr_Input_double Input
%main = OpFunction %void None %3
%5 = OpLabel
%18 = OpLoad %double %vTmp
%19 = OpCompositeConstruct %v3double %18 %18 %18
%20 = OpFAdd %v3double %15 %19
%21 = OpFConvert %v3float %20
OpStore %FragColor %21
OpReturn
OpFunctionEnd
29 changes: 29 additions & 0 deletions shaders/asm/frag/inf-nan-constant.asm.frag
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 7
; Bound: 14
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %FragColor
OpExecutionMode %main OriginUpperLeft
OpSource ESSL 310
OpName %main "main"
OpName %FragColor "FragColor"
OpDecorate %FragColor Location 0
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%v3float = OpTypeVector %float 3
%_ptr_Output_v3float = OpTypePointer Output %v3float
%FragColor = OpVariable %_ptr_Output_v3float Output
%float_0x1p_128 = OpConstant %float 0x1p+128
%float_n0x1p_128 = OpConstant %float -0x1p+128
%float_0x1_8p_128 = OpConstant %float 0x1.8p+128
%13 = OpConstantComposite %v3float %float_0x1p_128 %float_n0x1p_128 %float_0x1_8p_128
%main = OpFunction %void None %3
%5 = OpLabel
OpStore %FragColor %13
OpReturn
OpFunctionEnd
13 changes: 0 additions & 13 deletions shaders/desktop-only/frag/inf-nan-constant-double.desktop.frag

This file was deleted.

14 changes: 0 additions & 14 deletions shaders/frag/inf-nan-constant.frag

This file was deleted.

2 changes: 1 addition & 1 deletion spirv_glsl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9283,7 +9283,7 @@ void CompilerGLSL::branch(uint32_t from, uint32_t to)
// Only sensible solution is to make a ladder variable, which we declare at the top of the switch block,
// write to the ladder here, and defer the break.
// The loop we're breaking out of must dominate the switch block, or there is no ladder breaking case.
if (current_emitting_switch && is_loop_break(to) && current_emitting_switch->loop_dominator != -1u &&
if (current_emitting_switch && is_loop_break(to) && current_emitting_switch->loop_dominator != ~0u &&
get<SPIRBlock>(current_emitting_switch->loop_dominator).merge_block == to)
{
if (!current_emitting_switch->need_ladder_break)
Expand Down
Loading

0 comments on commit 6157bf3

Please sign in to comment.