A thread in the Advanced OpenGL forum discusses two different errors in the AMD Catalyst driver version 10.11:
http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=287368
Further discussion of this issue belongs here in this forum.
To summarize:
david_f_knight:
I have discovered an AMD Catalyst driver bug (which I’ve reported to AMD each version beginning with version 10.7):
The vertex spacing qualifier of tessellation evaluation shaders is ignored when the primitive mode qualifier of tessellation evaluation shaders is isolines. The tessellation primitive generator incorrectly always uses equal_spacing when the primitive mode qualifier is isolines, whether the vertex spacing qualifier was specified as fractional_even_spacing, fractional_odd_spacing, or equal_spacing…
…(the Specification states that equal spacing is to be used for the spacing between the isolines (i.e., the v dimension), but that the vertex spacing qualifier must be used for the tessellation of each isoline (i.e., the u dimension)).
dave_xyzw:
I also ran some tests with quad tessellation. I found some very strange behavior. With ATI Catalyst 10.11, it appears that the indexes are ignored. For example,
gl_TessLevelOuter[0] = 16.0;
gl_TessLevelOuter[1] = 4.0;
gl_TessLevelOuter[2] = 4.0;
gl_TessLevelOuter[3] = 4.0;
A run with the above settings produced the same tessellation as a run with the following sequence of statements:
gl_TessLevelOuter[1] = 16.0;
gl_TessLevelOuter[0] = 4.0;
gl_TessLevelOuter[2] = 4.0;
gl_TessLevelOuter[3] = 4.0;
It seems like the first assignment determines the value of index zero regardless of the index used. This is quite strange.
Could you confirm this?
david_f_knight:
I just ran a test as you suggested (with Catalyst 10.11 drivers) and I confirm that the driver bug exists as you found it.
I then conducted a few other similar tests. This one worked properly:
int edge_ndx;
edge_ndx = 3;
gl_TessLevelOuter[edge_ndx] = 4.0;
gl_TessLevelOuter[1] = 16.0;
gl_TessLevelOuter[0] = 4.0;
gl_TessLevelOuter[2] = 4.0;
gl_TessLevelOuter[3] = 4.0;
But, this one did not work properly:
int edge_ndx;
edge_ndx = 3;
gl_TessLevelOuter[1] = 16.0;
gl_TessLevelOuter[0] = 4.0;
gl_TessLevelOuter[2] = 4.0;
gl_TessLevelOuter[3] = 4.0;
gl_TessLevelOuter[edge_ndx] = 4.0;
Something I meant to mention but left out of my last post in the thread in the advanced forum is that I haven’t had any problem with my tessellation shaders for quads previously, but I have always defined each gl_TessLevelOuter[] element using an index variable, such as edge_ndx, like this:
int edge_ndx;
for (edge_ndx = 0; edge_ndx < 4; edge_ndx++) {
//do determine curvature and length of each patch edge...
gl_TessLevelOuter[edge_ndx] = ????;
}
seague
December 11, 2010, 3:27am
3
could you send your test cases to me? I’m employer of AMD, and I can’t reproduce these issue with your describe. My email is seague.sheng@amd.com
I’ve sent you a test case for quad tessellation.
I’ve sent you a test case demonstrating that the vertex spacing qualifier of tessellation evaluation shaders is ignored when the primitive mode qualifier of tessellation evaluation shaders is isolines.
system
Closed
October 19, 2021, 5:40pm
6
This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.