[2.1] No Geometry Shader output in Renderdoc Topic is solved
-
- Halfling
- Posts: 65
- Joined: Wed Aug 08, 2018 9:03 am
- x 13
[2.1] No Geometry Shader output in Renderdoc
Hello!
I'm debugging an issue I'm having with sending data between shaders.
I have implemented a way to do "pie clipping", simply put taking the max clip distance of two planes.
To achieve this i calculate two clip distances in the vertex shader and send them to the pixel shader, where i check which is max and then discard if that value is less than zero.
Everything works fine with my "custom" PBS, even when using its geometry shader, but for my custom Unlit i get the error message:
"... variable not written by geometry shader".
The message is clear and I when to check my compiled shaders to see if a property was off or something like that.
I can't find any reason why it shouldn't work, I've made sure that the in-out interface is the same as the vertex shader and I write the to the attributes for each emitted vertex.
Next I figured I'd check Renderdoc to see what the output it is and its entirely blank, says I have no GS output.
But the geometry is showing, its just not clipped... which is why I am posting here. I am confused what to do next.
The Unlit geometry shader has a few different cases, lines turned into thicker quads to emulate thickness and triangles into lines to make wireframes.
For lines it seems to work fine, I can see the GS output, but for wireframe I can't see the output, but it does turn the triangles into lines.
So if anyone has any idea what to debug next or even better a solution let me know!
I realize more info is probably needed. I'll happily share the code etc. if needed. Just figured I'd keep the post "short" for now.
Cheers!
I'm debugging an issue I'm having with sending data between shaders.
I have implemented a way to do "pie clipping", simply put taking the max clip distance of two planes.
To achieve this i calculate two clip distances in the vertex shader and send them to the pixel shader, where i check which is max and then discard if that value is less than zero.
Everything works fine with my "custom" PBS, even when using its geometry shader, but for my custom Unlit i get the error message:
"... variable not written by geometry shader".
The message is clear and I when to check my compiled shaders to see if a property was off or something like that.
I can't find any reason why it shouldn't work, I've made sure that the in-out interface is the same as the vertex shader and I write the to the attributes for each emitted vertex.
Next I figured I'd check Renderdoc to see what the output it is and its entirely blank, says I have no GS output.
But the geometry is showing, its just not clipped... which is why I am posting here. I am confused what to do next.
The Unlit geometry shader has a few different cases, lines turned into thicker quads to emulate thickness and triangles into lines to make wireframes.
For lines it seems to work fine, I can see the GS output, but for wireframe I can't see the output, but it does turn the triangles into lines.
So if anyone has any idea what to debug next or even better a solution let me know!
I realize more info is probably needed. I'll happily share the code etc. if needed. Just figured I'd keep the post "short" for now.
Cheers!
- dark_sylinc
- OGRE Team Member
- Posts: 5296
- Joined: Sat Jul 21, 2007 4:55 pm
- Location: Buenos Aires, Argentina
- x 1278
- Contact:
Re: [2.1] No Geometry Shader output in Renderdoc
Check that the generated shaders (the ones we dump on disk) have matching signatures.
It's possible one of your shaders is creating a struct that is missing member variables. Something like e.g. your VS declares:
But your GS declares:
It's possible one of your shaders is creating a struct that is missing member variables. Something like e.g. your VS declares:
Code: Select all
struct MyConstBuffer
{
int a;
int b;
};
out
{
float c;
float d;
}
Code: Select all
struct MyConstBuffer
{
int b;
};
out
{
float d;
}
-
- Halfling
- Posts: 65
- Joined: Wed Aug 08, 2018 9:03 am
- x 13
Re: [2.1] No Geometry Shader output in Renderdoc
This was the first thing I thought to check and I can't see whats wrong, but I'm still understanding shaders so I'm sure I've missed something.dark_sylinc wrote: ↑Mon Jul 08, 2019 4:17 pm Check that the generated shaders (the ones we dump on disk) have matching signatures.
It's possible one of your shaders is creating a struct that is missing member variables. Something like e.g. your VS declares:
But your GS declares:Code: Select all
struct MyConstBuffer { int a; int b; }; out { float c; float d; }
Code: Select all
struct MyConstBuffer { int b; }; out { float d; }
In your example you have struct MyConstBuffer without in/out, I was not aware that was part of the signature?
I'll go back and check again.
When I created the GeometryShader I started from a copy of the VertexShader to make sure I got "everything", and removed stuff later.
How about the Uniform declaration stuff, is that part of the signature?
EDIT:
I found the issue. It was just as you said, I missed assigning half of my pie clip planes.
Thanks! Guess I'm never really as thorough as I think I am.
- dark_sylinc
- OGRE Team Member
- Posts: 5296
- Joined: Sat Jul 21, 2007 4:55 pm
- Location: Buenos Aires, Argentina
- x 1278
- Contact:
Re: [2.1] No Geometry Shader output in Renderdoc
Strictly speaking IIRC I think they're not when it comes to GLSL (HLSL and Metal are different), however several drivers may barf if you use exactly the same name or slots for a uniform struct declaration with a different signature (so... to stay on the safe side... never do it, on any platform).