mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-19 06:09:01 +00:00
* Shader -> SPIR-V at CTS build time (#1849) Instead of relying on prebuilt checked-in SPIR-V files, compile available shaders at CTS build time. * Add dependency on glslc (available as part of VULKAN_SDK). * Add optional build flag BUILD_GLSL_SHADERS, OFF by default. * Remove pre-built SPIR-V files * Compile Shader -> SPIR-V at CTS build time * Use glslangValidator for shader -> spirv * Add glslangValidator tool for shader -> spirv * Refactor glslangValidator tool retrieval * Address review comments * Use add_subdirectory() instead of include() * Use glslang instead of glslangValidator * Update Github actions CI to install Vulkan SDK
45 lines
2.1 KiB
CMake
45 lines
2.1 KiB
CMake
# CMP0007:NEW - Don't ignore empty elements in a list
|
|
cmake_policy(SET CMP0007 NEW)
|
|
find_program(
|
|
Vulkan_glslang_binary
|
|
NAMES glslang
|
|
HINTS $ENV{VULKAN_SDK})
|
|
|
|
if(${Vulkan_glslang_binary} STREQUAL "Vulkan_glslang_binary-NOTFOUND")
|
|
message(FATAL_ERROR "glslang tool (part of Vulkan SDK) is a prerequisite to compile shaders to spir-v")
|
|
else()
|
|
message(STATUS "Found glslang: ${Vulkan_glslang_binary}")
|
|
|
|
set(IMAGE2D_SHADER_IN_FILE "image2D.comp")
|
|
set(IMAGE2D_SHADER_TMP_OUT_FILE "tmp_image2D.comp")
|
|
set(BUFFER_SHADER_IN_FILE "buffer")
|
|
set(IMAGE2D_FORMATS_LIST_IN_FILE "image2D_test_formats.txt")
|
|
|
|
file(READ ${IMAGE2D_SHADER_IN_FILE} IMAGE2D_SHADER_UNFORMAT_CONTENT)
|
|
file(STRINGS ${IMAGE2D_FORMATS_LIST_IN_FILE} IMAGE2D_FORMATS_LIST)
|
|
|
|
foreach(IMAGE2D_FORMAT ${IMAGE2D_FORMATS_LIST})
|
|
list(GET IMAGE2D_FORMAT 1 GLSL_FORMAT)
|
|
list(GET IMAGE2D_FORMAT 2 GLSL_TYPE_PREFIX)
|
|
string(REPLACE "GLSL_FORMAT" "${GLSL_FORMAT}" IMAGE2D_SHADER_CONTENT "${IMAGE2D_SHADER_UNFORMAT_CONTENT}")
|
|
string(REPLACE "GLSL_TYPE_PREFIX" "${GLSL_TYPE_PREFIX}" IMAGE2D_SHADER_CONTENT "${IMAGE2D_SHADER_CONTENT}")
|
|
file(WRITE ${IMAGE2D_SHADER_TMP_OUT_FILE} "${IMAGE2D_SHADER_CONTENT}")
|
|
execute_process(
|
|
COMMAND ${Vulkan_glslang_binary} --target-env vulkan1.0 -o image2D_${GLSL_FORMAT}.spv ${IMAGE2D_SHADER_TMP_OUT_FILE}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
RESULT_VARIABLE commandStatus
|
|
OUTPUT_QUIET)
|
|
if(commandStatus AND NOT commandStatus EQUAL 0)
|
|
message(FATAL_ERROR "shader -> spir-v compilation failed")
|
|
endif()
|
|
endforeach(IMAGE2D_FORMAT)
|
|
execute_process(
|
|
COMMAND ${Vulkan_glslang_binary} --target-env vulkan1.0 -o ${BUFFER_SHADER_IN_FILE}.spv ${BUFFER_SHADER_IN_FILE}.comp
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
RESULT_VARIABLE commandStatus
|
|
OUTPUT_QUIET)
|
|
if(commandStatus AND NOT commandStatus EQUAL 0)
|
|
message(FATAL_ERROR "shader -> spir-v compilation failed")
|
|
endif()
|
|
file(REMOVE ${IMAGE2D_SHADER_TMP_OUT_FILE})
|
|
endif() |