I’m now a new Vulkan user.
The api is the best step towards the future.
Moving forward, I hit something.
I am using Android NDK, and I’m at the stage of compiling shaders.
I’ve successfully built the shaderc-lib compiler for GLSL->SPIR-V, but there appears to be a bug in something…
#include <shaderc/shaderc.hpp>
int main(void){
shaderc::Compiler compiler;
shaderc::CompileOptions options;
const char* text = "#version 450\nlayout (local_size_x=1024) in;\nvoid main(){\n}";
const char* file = "TestShader";
shaderc::SpvCompilationResult module = compiler.CompileGlslToSpv(text, 58, shaderc_compute_shader, file, options);
if (module.GetCompilationStatus() != shaderc_compilation_status_success)
LOGI("ERROR");
else
LOGI("SUCCESS");
std::vector<uint32_t> result(module.cbegin(),module.cbegin());
std::ostringstream stringBuilder;
stringBuilder << "WORD LIMIT :: " << result.size();
const char * msg = stringBuilder.str().c_str();
((void)__android_log_print(ANDROID_LOG_DEBUG, "MESSAGE :: ", "%s", msg));
}
The problem is that result returns a size limit @0. But the compilation status checks @SUCCESS.
No errors are generated. But no SPIR-V code is generated either.
The shaderc build appears to be an accurate implementation of the standard as it is able to detect explicit bugs I place in the GLSL code.
Any ideas?