Hello,
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 glShaderBinary
. Afterward, glSpecializeShader
is called. It’s at this point I get an INVALID_OPERATION
.
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 ShaderBinary
.
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.
Thanks,
DC