I can't think of any complex game codebase I worked on that has shaders all in one file. They all need #include support. When I try to compile our GL shaders (really Vulkan), I get the following failures. Can I use this offline compiler on real .vert and .frag files? I'm trying to figure out why Mali driver puts out VK_DEVICE_LOST on our terrain shaders, and thought seeing the shader analysis might help.
malioc -c Mali-G76 --vulkan --vertex DebugMesh.vert
ERROR: 0X0000: SPIR-V require version 310 or higher. <- fixed below
ERROR: 0:4: X0000: '#include' : required extension not requested: GL_GOOGLE_include_directive
ERROR: 0:4: X0000: '#include' : must be followed by a header name
ERROR: 0ssing entry point: X0000: Each stage requires one entry point <- printing problem
After putting #version 310 es at the top of the file. We don't typically do this, since we need to compile the shaders using spriv-opt for many different versions. There also doesn't seem to be a compile option for this.
ERROR: 0ssing entry point: X0000: Each stage requires one entry point. <- how to specify this ?
Here are the reported extensions, but include support isn't in there.
Vulkan SPIR-V Extensions
========================
SPV_EXT_descriptor_indexing
SPV_EXT_fragment_invocation_density
SPV_EXT_physical_storage_buffer
SPV_EXT_shader_viewport_index_layer
SPV_KHR_16bit_storage
SPV_KHR_8bit_storage
SPV_KHR_device_group
SPV_KHR_float_controls
SPV_KHR_multiview
SPV_KHR_physical_storage_buffer
SPV_KHR_shader_ballot
SPV_KHR_shader_draw_parameters
SPV_KHR_storage_buffer_storage_class
SPV_KHR_subgroup_vote
SPV_KHR_variable_pointers
SPV_KHR_vulkan_memory_model
Okay so I added the following to the top of our .vert file. Typically shaderc adds these, so it would be nice if malioc did the same for the Vulkan case.
malioc -c Mali-G76 --vulkan --name main DebugMesh.vert
#version 310 es <- had to add
#extension GL_GOOGLE_include_directive: require <- had to add
#include "Shader.h"
void main()
{
code
}
But now I just get the following. Shader.h is in the same folder as the shader I'm compiling.
ERROR: 0:4: X0000: '#include' : Could not process include directive for header name: Shader.h. <- why ?
ERROR: 0ssing entry point: X0000: Each stage requires one entry point. <- I've got --name above, it's just stock GLSL void main()