I am able to create SPIR-V shaders that I can apply to our application. I use the glslang compiler that will generate SPIR-V calling
GlslangToSpv(...). I have converted several test GLSL shaders and have been successful using them in place of the original GLSL shaders.
Currently, during development with our GLSL shaders, we are able to reload, recompile and relink the shaders when they are modified during run-time. Modifying
gl_Pointsize in a vertex shader, as a simple example, will immediately show the change to the rendered scene.
I am trying to get this to work with the binary SPIR-V data. If a GLSL shader is modified, it is reloaded, re-parsed and regenerated to SPIR-V (calling
GlslangToSpv). The data is then reloaded with
glSpecializeShader is called. It’s at this point I get an
According to the spec:
Once specialized, a shader may not be specialized again without first re-associating the original SPIR-V module with it, through
That’s a little vague to me and I was hoping that perhaps maybe someone here has had experience with this and can point me in the right direction.
I am going through
ShaderBinary again with the new binary data. I understand that SPIRV shaders are exported as binary with releases, but during development, it makes it exponentially easier to debug with reloading.