Switch to glslang fork;

The reason is that the glslang C API doesn't support the extra
overloads that let you provide multiple strings or the lengths for
strings.  In our case our shader blobs are not null terminated, so
sending them to glslang would overrun the buffer.  I forked glslang
and modified the C API to support a length parameter.
This commit is contained in:
bjorn 2022-05-22 14:58:07 -07:00
parent 4f568ed84d
commit 355b2bf85b
4 changed files with 18 additions and 4 deletions

2
.gitmodules vendored
View File

@ -21,4 +21,4 @@
url = https://github.com/lovr-org/ovr_openxr_mobile_sdk
[submodule "deps/glslang"]
path = deps/glslang
url = https://github.com/KhronosGroup/glslang
url = https://github.com/bjornbytes/glslang

View File

@ -180,9 +180,12 @@ if(LOVR_USE_GLSLANG)
set(ENABLE_OPT OFF CACHE BOOL "")
set(ENABLE_CTEST OFF CACHE BOOL "")
set(BUILD_EXTERNAL OFF CACHE BOOL "")
set(BUILD_SHARED_LIBS OFF)
include_directories(deps/glslang/glslang/Include deps/glslang/StandAlone)
add_subdirectory(deps/glslang glslang)
set_target_properties(SPIRV PROPERTIES EXCLUDE_FROM_ALL 1)
set(LOVR_GLSLANG glslang)
target_sources(glslang PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/deps/glslang/StandAlone/ResourceLimits.cpp")
target_sources(glslang PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/deps/glslang/StandAlone/resource_limits_c.cpp")
set(LOVR_GLSLANG glslang SPIRV)
endif()
# Vulkan
@ -443,6 +446,10 @@ if(LOVR_ENABLE_GRAPHICS)
src/api/l_graphics_pass.c
)
if(LOVR_USE_GLSLANG)
target_compile_definitions(lovr PRIVATE LOVR_USE_GLSLANG)
endif()
if(LOVR_USE_VULKAN)
target_compile_definitions(lovr PRIVATE LOVR_VK)
target_sources(lovr PRIVATE src/core/gpu_vk.c)

2
deps/glslang vendored

@ -1 +1 @@
Subproject commit 14f6e2730457bac14a64cb3d962d0a3da8c15ae4
Subproject commit fe9e73e9c818a9608b7d91fc701a4be4142f47b9

View File

@ -619,6 +619,12 @@ const SamplerInfo* lovrSamplerGetInfo(Sampler* sampler) {
// Shader
Blob* lovrGraphicsCompileShader(ShaderStage stage, Blob* source) {
uint32_t spirv = 0x07230203;
if (source->size % 4 == 0 && source->size >= 4 && !memcmp(source->data, &spirv, 4)) {
return lovrRetain(source), source;
}
#ifdef LOVR_USE_GLSLANG
const glslang_stage_t stages[] = {
[STAGE_VERTEX] = GLSLANG_STAGE_VERTEX,
@ -636,6 +642,7 @@ Blob* lovrGraphicsCompileShader(ShaderStage stage, Blob* source) {
.target_language = GLSLANG_TARGET_SPV,
.target_language_version = GLSLANG_TARGET_SPV_1_3,
.code = source->data,
.length = source->size,
.default_version = 460,
.default_profile = GLSLANG_NO_PROFILE,
.resource = resource