diff --git a/test/TestUtils.cpp b/test/TestUtils.cpp index 8d8d8b6..488d3ea 100644 --- a/test/TestUtils.cpp +++ b/test/TestUtils.cpp @@ -6,7 +6,8 @@ #include #include -static std::vector spirv_from_string(const std::string& source, +static std::vector spirv_from_sources(const std::vector& sources, + const std::vector& files = {}, const std::string& entryPoint = "main", std::vector> definitions = {}) { @@ -16,9 +17,19 @@ static std::vector spirv_from_string(const std::string& source, const EShLanguage language = EShLangCompute; glslang::TShader shader(language); - const char *file_name_list[1] = {""}; - const char *shader_source = reinterpret_cast(source.data()); - shader.setStringsWithLengthsAndNames(&shader_source, nullptr, file_name_list, 1); + std::vector filesCStr(files.size()), sourcesCStr(sources.size()); + for (size_t i = 0; i < sources.size(); i++) sourcesCStr[i] = sources[i].c_str(); + + if (files.size() > 1) { + assert(files.size() == sources.size()); + for (size_t i = 0; i < files.size(); i++) filesCStr[i] = files[i].c_str(); + shader.setStringsWithLengthsAndNames(sourcesCStr.data(), nullptr, filesCStr.data(), filesCStr.size()); + } + else { + filesCStr = {""}; + shader.setStringsWithLengthsAndNames(sourcesCStr.data(), nullptr, filesCStr.data(), sourcesCStr.size()); + } + shader.setEntryPoint(entryPoint.c_str()); shader.setSourceEntryPoint(entryPoint.c_str()); @@ -70,3 +81,8 @@ static std::vector spirv_from_string(const std::string& source, return std::vector((char*)spirv.data(), (char*)(spirv.data()+spirv.size()) ); } + +static std::vector spirv_from_string(const std::string& source) { + return spirv_from_sources({source}); +} +