| 235 | } |
| 236 | |
| 237 | TEST_P(GlslMapIOTest, FromFile) |
| 238 | { |
| 239 | const auto& fileNames = GetParam().fileNames; |
| 240 | Semantics semantics = GetParam().semantics; |
| 241 | const size_t fileCount = fileNames.size(); |
| 242 | const EShMessages controls = DeriveOptions(Source::GLSL, semantics, Target::BothASTAndSpv); |
| 243 | GlslangResult result; |
| 244 | |
| 245 | // Compile each input shader file. |
| 246 | bool success = true; |
| 247 | std::vector<std::unique_ptr<glslang::TShader>> shaders; |
| 248 | for (size_t i = 0; i < fileCount; ++i) { |
| 249 | std::string contents; |
| 250 | tryLoadFile(GlobalTestSettings.testRoot + "/" + fileNames[i], |
| 251 | "input", &contents); |
| 252 | shaders.emplace_back( |
| 253 | new glslang::TShader(GetShaderStage(GetSuffix(fileNames[i])))); |
| 254 | auto* shader = shaders.back().get(); |
| 255 | |
| 256 | shader->setAutoMapLocations(true); |
| 257 | shader->setAutoMapBindings(true); |
| 258 | |
| 259 | if (controls & EShMsgSpvRules) { |
| 260 | if (controls & EShMsgVulkanRules) { |
| 261 | shader->setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl |
| 262 | : glslang::EShSourceGlsl, |
| 263 | shader->getStage(), glslang::EShClientVulkan, 100); |
| 264 | shader->setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_1); |
| 265 | shader->setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_0); |
| 266 | } else { |
| 267 | shader->setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl |
| 268 | : glslang::EShSourceGlsl, |
| 269 | shader->getStage(), glslang::EShClientOpenGL, 100); |
| 270 | shader->setEnvClient(glslang::EShClientOpenGL, glslang::EShTargetOpenGL_450); |
| 271 | shader->setEnvTarget(glslang::EshTargetSpv, glslang::EShTargetSpv_1_0); |
| 272 | } |
| 273 | } |
| 274 | |
| 275 | success &= compile(shader, contents, "", controls); |
| 276 | |
| 277 | result.shaderResults.push_back( |
| 278 | { fileNames[i], shader->getInfoLog(), shader->getInfoDebugLog() }); |
| 279 | } |
| 280 | |
| 281 | // Link all of them. |
| 282 | glslang::TProgram program; |
| 283 | for (const auto& shader : shaders) program.addShader(shader.get()); |
| 284 | success &= program.link(controls); |
| 285 | result.linkingOutput = program.getInfoLog(); |
| 286 | result.linkingError = program.getInfoDebugLog(); |
| 287 | |
| 288 | glslang::TIoMapResolver *resolver; |
| 289 | for (unsigned stage = 0; stage < EShLangCount; stage++) { |
| 290 | resolver = program.getGlslIoResolver((EShLanguage)stage); |
| 291 | if (resolver) |
| 292 | break; |
| 293 | } |
| 294 | glslang::TIoMapper *ioMapper = glslang::GetGlslIoMapper(); |
nothing calls this directly
no test coverage detected