From 00226df891dcbf28526410018440e0bf1a3f51ac Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 26 Jan 2015 19:10:00 +0000 Subject: [PATCH] Fix making TCS/TES/GS shaders separable by inserting gl_PerVertex --- renderdoc/driver/gl/gl_shader_refl.cpp | 31 +++++++++++++++++++------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/renderdoc/driver/gl/gl_shader_refl.cpp b/renderdoc/driver/gl/gl_shader_refl.cpp index a82868bcf..ba1fabfe5 100644 --- a/renderdoc/driver/gl/gl_shader_refl.cpp +++ b/renderdoc/driver/gl/gl_shader_refl.cpp @@ -200,7 +200,16 @@ static GLuint CreateSepProgram(const GLHookSet &gl, GLenum type, GLsizei numSour GLuint MakeSeparableShaderProgram(const GLHookSet &gl, GLenum type, vector sources, vector *includepaths) { - const string block = "\nout gl_PerVertex { vec4 gl_Position; float gl_PointSize; float gl_ClipDistance[]; };"; + string block = ""; + + if(type == eGL_VERTEX_SHADER) + block = "\nout gl_PerVertex { vec4 gl_Position; float gl_PointSize; float gl_ClipDistance[]; };"; + else if(type == eGL_TESS_CONTROL_SHADER) + block = "\nin gl_PerVertex { vec4 gl_Position; float gl_PointSize; float gl_ClipDistance[]; } gl_in[];" \ + "\nout gl_PerVertex { vec4 gl_Position; float gl_PointSize; float gl_ClipDistance[]; } gl_out[];"; + else + block = "\nin gl_PerVertex { vec4 gl_Position; float gl_PointSize; float gl_ClipDistance[]; } gl_in[];" \ + "\nout gl_PerVertex { vec4 gl_Position; float gl_PointSize; float gl_ClipDistance[]; };"; const char **strings = new const char*[sources.size()]; for(size_t i=0; i < sources.size(); i++) @@ -222,7 +231,8 @@ GLuint MakeSeparableShaderProgram(const GLHookSet &gl, GLenum type, vector