Fix shaderc linking and crlf shader errors in linux

This commit is contained in:
Bailey Harrison 2022-11-14 23:11:49 +00:00
parent d71254985b
commit ecab0acbf4
4 changed files with 24 additions and 17 deletions

4
.gitignore vendored
View File

@ -8,3 +8,7 @@ Release/
MinSizeRel/
CMakeSettings.json
compile_commands.json
runme
res
*.log

View File

@ -146,10 +146,6 @@ if(ENGINE_BUILD_OPENGL)
endif()
if(ENGINE_BUILD_VULKAN)
include(FindVulkan)
find_package(Vulkan COMPONENTS shaderc_combined)
# Volk
set(VOLK_STATIC_DEFINES "")
set(VOLK_PULL_IN_VULKAN ON)
@ -163,7 +159,13 @@ if(ENGINE_BUILD_VULKAN)
# shaderc
target_link_libraries(${PROJECT_NAME} PRIVATE Vulkan::shaderc_combined)
if (MSVC)
include(FindVulkan)
find_package(Vulkan COMPONENTS shaderc_combined)
target_link_libraries(${PROJECT_NAME} PRIVATE Vulkan::shaderc_combined)
else()
target_link_libraries(${PROJECT_NAME} PRIVATE shaderc_shared)
endif()
endif()
@ -207,4 +209,4 @@ target_link_libraries(${PROJECT_NAME} PRIVATE freetype)
target_include_directories(${PROJECT_NAME} PRIVATE dependencies/freetype/include)
# stb
target_include_directories(${PROJECT_NAME} PRIVATE dependencies/stb)
target_include_directories(${PROJECT_NAME} PRIVATE dependencies/stb)

View File

@ -166,7 +166,7 @@ namespace engine {
options.SetSourceLanguage(shaderc_source_language_glsl);
options.SetTargetEnvironment(shaderc_target_env_vulkan, shaderc_env_version_vulkan_1_3);
options.SetOptimizationLevel(shaderc_optimization_level_size);
options.SetOptimizationLevel(shaderc_optimization_level_zero);
options.SetTargetSpirv(shaderc_spirv_version_1_6);
options.SetAutoBindUniforms(false);
@ -175,27 +175,26 @@ namespace engine {
if (preprocessed.GetCompilationStatus() != shaderc_compilation_status_success)
{
throw std::runtime_error(preprocessed.GetErrorMessage());
throw std::runtime_error("PREPROCESS ERR " + preprocessed.GetErrorMessage());
}
std::string shaderStr = { preprocessed.cbegin(), preprocessed.cend() };
std::string shaderStr{preprocessed.cbegin(), preprocessed.cend()};
// compile
shaderc::SpvCompilationResult module = compiler.CompileGlslToSpv(shaderStr.data(), kind, filename, options);
shaderc::SpvCompilationResult compiledShader = compiler.CompileGlslToSpv(shaderStr.c_str(), kind, filename, options);
if (module.GetCompilationStatus() != shaderc_compilation_status_success)
if (compiledShader.GetCompilationStatus() != shaderc_compilation_status_success)
{
throw std::runtime_error(module.GetErrorMessage());
throw std::runtime_error("COMPILE ERR " + compiledShader.GetErrorMessage());
}
std::vector<uint32_t> shaderBytecode = { module.cbegin(), module.cend() };// not sure why sample code copy vector like this
std::vector<uint32_t> shaderBytecode = { compiledShader.cbegin(), compiledShader.cend() };// not sure why sample code copy vector like this
VkShaderModuleCreateInfo createInfo{};
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
createInfo.codeSize = shaderBytecode.size() * sizeof(uint32_t);
createInfo.pCode = module.cbegin();
createInfo.pCode = compiledShader.cbegin();
VkShaderModule shaderModule;
if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) {
@ -216,6 +215,7 @@ namespace engine {
file.seekg(0);
file.read(buffer.data(), buffer.size());
file.close();
return buffer;
}

View File

@ -35,4 +35,5 @@ void main() {
vec3 lighting = min(diffuse + ambient + specular, 1.0);
outColor = min( ( vec4(baseColor, 1.0) ) * vec4(lighting + emission, 1.0), vec4(1.0));
}
}