Geometry Shader problems
Hi everyone!
My first post here on gamedev^^
I have a problem with my shader which I will try and explain.
Would appreciate some help, since I can't figure out this problem.
Quite recently I updated my DirectX SDK to Aug 2009. When I did that, a project I had stoped working (it was working with the SDK I had before).
Some of the shader code:
struct GS_OUTPUT
{
float4 Position : SV_POSITION; // vertex position
float4 Color : COLOR0; // color
};
int the Geometry shader:
{
.
.
.
GS_OUTPUT output;
output.Color = float4(vertlist[triTable[cubeindex][i+2]].Normal, 1.0);
output.Position = vertlist[vertlist[triTable[cubeindex][i+2]].Position;
//Gives error X4580: emitting a system-interpreted value which is not written in every execution path of the shader
Stream.Append( output );
.
.
.
}
while this works:
{
.
.
.
GS_OUTPUT output;
output.Color = float4(vertlist[triTable[cubeindex][i+2]].Normal, 1.0);
//instead of cubeindex, I for example put 1 and instead of i+2 I put 3, then it works.
output.Position = vertlist[vertlist[triTable[1][3]].Position;
Stream.Append( output );
.
.
.
}
Does it have something to do with SV_POSITION since it works for Color? I have tried to google the problem, but can't find anything helpful :/
Thanks a lot in advance!
It would help to have your whole shader so that we can try out a few things and narrow down your problem.
Several questions come to mind such as how many components in vertlist[vertlist[triTable[cubeindex][i+2]].Position and what is your [maxvertexcount()] attribute for the geometry shader. Also, providing the whole thing might let us help suggest a work around if there is a real issue.
Several questions come to mind such as how many components in vertlist[vertlist[triTable[cubeindex][i+2]].Position and what is your [maxvertexcount()] attribute for the geometry shader. Also, providing the whole thing might let us help suggest a work around if there is a real issue.
Here is the entire shader code. Hope this helps better to solve it. The shader is for the Marching Cubes algorithm.
I have not come up with this code myself, so I will not take "credit" for it. I've looked at Nvidias Metaballs sample, and at this http://brugevin.boris.free.fr/phpBB2/viewtopic.php?t=52 example since I wanted to learn about this algorithm. I understand almost everything of this algorithm, so I will try and code my own soon.
[Edited by - noxic on November 8, 2009 10:01:35 AM]
I have not come up with this code myself, so I will not take "credit" for it. I've looked at Nvidias Metaballs sample, and at this http://brugevin.boris.free.fr/phpBB2/viewtopic.php?t=52 example since I wanted to learn about this algorithm. I understand almost everything of this algorithm, so I will try and code my own soon.
cbuffer cb0 : register(b0){ float isolevel; };Buffer<float4> VertexBuffer : register(t0);cbuffer cb1 : register(b1){ static const int edgeTable[256]= {0x0 , 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c, 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00, 0x190, 0x99 , 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c, 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90, 0x230, 0x339, 0x33 , 0x13a, 0x636, 0x73f, 0x435, 0x53c, 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30, 0x3a0, 0x2a9, 0x1a3, 0xaa , 0x7a6, 0x6af, 0x5a5, 0x4ac, 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0, 0x460, 0x569, 0x663, 0x76a, 0x66 , 0x16f, 0x265, 0x36c, 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60, 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff , 0x3f5, 0x2fc, 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0, 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55 , 0x15c, 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950, 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc , 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0, 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc, 0xcc , 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0, 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c, 0x15c, 0x55 , 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650, 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc, 0x2fc, 0x3f5, 0xff , 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0, 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c, 0x36c, 0x265, 0x16f, 0x66 , 0x76a, 0x663, 0x569, 0x460, 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac, 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa , 0x1a3, 0x2a9, 0x3a0, 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c, 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33 , 0x339, 0x230, 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c, 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99 , 0x190, 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c, 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0};};cbuffer cb2 : register(b2){ static const int triTable[256][16] = {{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1}, {3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1}, {3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1}, {3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1}, {9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1}, {9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1}, {2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1}, {8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1}, {9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1}, {4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1}, {3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1}, {1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1}, {4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1}, {4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1}, {9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1}, {5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1}, {2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1}, {9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1}, {0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1}, {2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1}, {10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1}, {4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1}, {5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1}, {5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1}, {9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1}, {0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1}, {1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1}, {10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1}, {8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1}, {2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1}, {7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1}, {9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1}, {2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1}, {11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1}, {9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1}, {5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1}, {11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1}, {11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1}, {1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1}, {9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1}, {5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1}, {2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1}, {0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1}, {5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1}, {6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1}, {3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1}, {6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1}, {5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1}, {1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1}, {10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1}, {6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1}, {8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1}, {7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1}, {3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1}, {5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1}, {0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1}, {9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1}, {8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1}, {5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1}, {0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1}, {6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1}, {10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1}, {10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1}, {8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1}, {1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1}, {3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1}, {0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1}, {10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1}, {3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1}, {6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1}, {9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1}, {8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1}, {3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1}, {6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1}, {0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1}, {10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1}, {10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1}, {2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1}, {7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1}, {7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1}, {2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1}, {1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1}, {11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1}, {8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1}, {0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1}, {7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1}, {10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1}, {2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1}, {6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1}, {7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1}, {2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1}, {1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1}, {10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1}, {10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1}, {0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1}, {7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1}, {6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1}, {8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1}, {9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1}, {6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1}, {4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1}, {10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1}, {8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1}, {0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1}, {1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1}, {8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1}, {10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1}, {4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1}, {10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1}, {5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1}, {11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1}, {9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1}, {6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1}, {7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1}, {3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1}, {7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1}, {9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1}, {3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1}, {6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1}, {9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1}, {1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1}, {4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1}, {7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1}, {6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1}, {3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1}, {0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1}, {6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1}, {0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1}, {11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1}, {6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1}, {5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1}, {9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1}, {1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1}, {1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1}, {10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1}, {0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1}, {5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1}, {10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1}, {11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1}, {9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1}, {7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1}, {2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1}, {8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1}, {9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1}, {9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1}, {1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1}, {9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1}, {9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1}, {5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1}, {0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1}, {10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1}, {2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1}, {0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1}, {0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1}, {9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1}, {5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1}, {3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1}, {5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1}, {8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1}, {0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1}, {9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1}, {1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1}, {3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1}, {4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1}, {9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1}, {11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1}, {11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1}, {2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1}, {9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1}, {3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1}, {1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1}, {4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1}, {4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1}, {0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1}, {3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1}, {3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1}, {0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1}, {9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1}, {1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}};};struct VS_INPUT{ float4 Index1 : POSITION; float4 Index2 : COLOR; };struct VS_OUPUT{ float VertexIndex[8] : INDEX; // cube index};struct GS_OUTPUT{ float4 Position : SV_POSITION; // vertex position float4 Color : COLOR0; // color};struct SurfaceVertex{ float4 Position; float3 Normal;};//Estimate where isosurface intersects grid edge with endpoints v0, v1SurfaceVertex CalcIntersection(float4 v0, float4 nf0, float4 v1, float4 nf1){ SurfaceVertex p; float t = (isolevel - nf0.w) / (nf1.w - nf0.w); p.Position = lerp(v0, v1, t); p.Normal = lerp(nf0.xyz, nf1.xyz, t); return p;}VS_OUPUT VSmain( VS_INPUT input ){ VS_OUPUT output = (VS_OUPUT)0; [unroll] for(int i=0;i<4;i++) { output.VertexIndex = input.Index1; output.VertexIndex[i+4] = input.Index2; } return output;}//15 vertices are the maximum number that needs to be created, since it can be at most 5 triangles (5*3 = 15).[maxvertexcount(15)]void GSmain( point VS_OUPUT input[1], inout TriangleStream<GS_OUTPUT> Stream ){ uint cubeindex = 0; [unroll] //Avoids flow-control constructs. for(int i = 7; i > -1; i--) { //construct bit field with a bit set for every vertex inside surfaceindex //for example 1111 1111 = 255 etc. cubeindex |= (uint(VertexBuffer.Load( input[0].VertexIndex*2+1 ).w < isolevel) << i); } SurfaceVertex vertlist[12]; if(edgeTable[cubeindex] != 0x0) { //12-bits number, where 1-bit equals an edge. //THIS Stopped working when I downloaded the new SDK /*if (edgeTable[cubeindex] & 1) vertlist[0] = CalcIntersection(VertexBuffer.Load( input[0].VertexIndex[0]*2 ), VertexBuffer.Load( input[0].VertexIndex[0]*2+1 ), VertexBuffer.Load( input[0].VertexIndex[1]*2 ), VertexBuffer.Load( input[0].VertexIndex[1]*2+1 )); if (edgeTable[cubeindex] & 2) vertlist[1] = CalcIntersection(VertexBuffer.Load( input[0].VertexIndex[1]*2 ), VertexBuffer.Load( input[0].VertexIndex[1]*2+1 ), VertexBuffer.Load( input[0].VertexIndex[2]*2 ), VertexBuffer.Load( input[0].VertexIndex[2]*2+1 )); if (edgeTable[cubeindex] & 4) vertlist[2] = CalcIntersection(VertexBuffer.Load( input[0].VertexIndex[2]*2 ), VertexBuffer.Load( input[0].VertexIndex[2]*2+1 ), VertexBuffer.Load( input[0].VertexIndex[3]*2 ), VertexBuffer.Load( input[0].VertexIndex[3]*2+1 )); if (edgeTable[cubeindex] & 8) vertlist[3] = CalcIntersection(VertexBuffer.Load( input[0].VertexIndex[3]*2 ), VertexBuffer.Load( input[0].VertexIndex[3]*2+1 ), VertexBuffer.Load( input[0].VertexIndex[0]*2 ), VertexBuffer.Load( input[0].VertexIndex[0]*2+1 )); if (edgeTable[cubeindex] & 16) vertlist[4] = CalcIntersection(VertexBuffer.Load( input[0].VertexIndex[4]*2 ), VertexBuffer.Load( input[0].VertexIndex[4]*2+1 ), VertexBuffer.Load( input[0].VertexIndex[5]*2 ), VertexBuffer.Load( input[0].VertexIndex[5]*2+1 )); if (edgeTable[cubeindex] & 32) vertlist[5] = CalcIntersection(VertexBuffer.Load( input[0].VertexIndex[5]*2 ), VertexBuffer.Load( input[0].VertexIndex[5]*2+1 ), VertexBuffer.Load( input[0].VertexIndex[6]*2 ), VertexBuffer.Load( input[0].VertexIndex[6]*2+1 )); if (edgeTable[cubeindex] & 64) vertlist[6] = CalcIntersection(VertexBuffer.Load( input[0].VertexIndex[6]*2 ), VertexBuffer.Load( input[0].VertexIndex[6]*2+1 ), VertexBuffer.Load( input[0].VertexIndex[7]*2 ), VertexBuffer.Load( input[0].VertexIndex[7]*2+1 )); if (edgeTable[cubeindex] & 128) vertlist[7] = CalcIntersection(VertexBuffer.Load( input[0].VertexIndex[7]*2 ), VertexBuffer.Load( input[0].VertexIndex[7]*2+1 ), VertexBuffer.Load( input[0].VertexIndex[4]*2 ), VertexBuffer.Load( input[0].VertexIndex[4]*2+1 )); if (edgeTable[cubeindex] & 256) vertlist[8] = CalcIntersection(VertexBuffer.Load( input[0].VertexIndex[0]*2 ), VertexBuffer.Load( input[0].VertexIndex[0]*2+1 ), VertexBuffer.Load( input[0].VertexIndex[4]*2 ), VertexBuffer.Load( input[0].VertexIndex[4]*2+1 )); if (edgeTable[cubeindex] & 512) vertlist[9] = CalcIntersection(VertexBuffer.Load( input[0].VertexIndex[1]*2 ), VertexBuffer.Load( input[0].VertexIndex[1]*2+1 ), VertexBuffer.Load( input[0].VertexIndex[5]*2 ), VertexBuffer.Load( input[0].VertexIndex[5]*2+1 )); if (edgeTable[cubeindex] & 1024) vertlist[10] = CalcIntersection(VertexBuffer.Load( input[0].VertexIndex[2]*2 ), VertexBuffer.Load( input[0].VertexIndex[2]*2+1 ), VertexBuffer.Load( input[0].VertexIndex[6]*2 ), VertexBuffer.Load( input[0].VertexIndex[6]*2+1 )); if (edgeTable[cubeindex] & 2048) vertlist[11] = CalcIntersection(VertexBuffer.Load( input[0].VertexIndex[3]*2 ), VertexBuffer.Load( input[0].VertexIndex[3]*2+1 ), VertexBuffer.Load( input[0].VertexIndex[7]*2 ), VertexBuffer.Load( input[0].VertexIndex[7]*2+1 )); */ //THIS WORKS after I downloaded the new SDK float4 buffer1 = VertexBuffer.Load( input[0].VertexIndex[0]*2); float4 buffer2 = VertexBuffer.Load( input[0].VertexIndex[0]*2+1); float4 buffer3 = VertexBuffer.Load( input[0].VertexIndex[1]*2); float4 buffer4 = VertexBuffer.Load(input[0].VertexIndex[1]*2+1); if (edgeTable[cubeindex] & 1) vertlist[0] = CalcIntersection(buffer1, buffer2, buffer3, buffer4); buffer1 = VertexBuffer.Load( input[0].VertexIndex[1]*2); buffer2 = VertexBuffer.Load( input[0].VertexIndex[1]*2+1 ); buffer3 = VertexBuffer.Load( input[0].VertexIndex[2]*2 ); buffer4 = VertexBuffer.Load( input[0].VertexIndex[2]*2+1 ); if (edgeTable[cubeindex] & 2) vertlist[1] = CalcIntersection(buffer1, buffer2, buffer3, buffer4); buffer1 = VertexBuffer.Load( input[0].VertexIndex[2]*2 ); buffer2 = VertexBuffer.Load( input[0].VertexIndex[2]*2+1 ); buffer3 = VertexBuffer.Load( input[0].VertexIndex[3]*2 ); buffer4 = VertexBuffer.Load( input[0].VertexIndex[3]*2+1 ); if (edgeTable[cubeindex] & 4) vertlist[2] = CalcIntersection(buffer1, buffer2, buffer3, buffer4); buffer1 = VertexBuffer.Load( input[0].VertexIndex[3]*2 ); buffer2 = VertexBuffer.Load( input[0].VertexIndex[3]*2+1 ); buffer3 = VertexBuffer.Load( input[0].VertexIndex[0]*2 ); buffer4 = VertexBuffer.Load( input[0].VertexIndex[0]*2+1 ); if (edgeTable[cubeindex] & 8) vertlist[3] = CalcIntersection(buffer1, buffer2, buffer3, buffer4); buffer1 = VertexBuffer.Load( input[0].VertexIndex[4]*2 ); buffer2 = VertexBuffer.Load( input[0].VertexIndex[4]*2+1 ); buffer3 = VertexBuffer.Load( input[0].VertexIndex[5]*2 ); buffer4 = VertexBuffer.Load( input[0].VertexIndex[5]*2+1 ); if (edgeTable[cubeindex] & 16) vertlist[4] = CalcIntersection(buffer1, buffer2, buffer3, buffer4); buffer1 = VertexBuffer.Load( input[0].VertexIndex[5]*2 ); buffer2 = VertexBuffer.Load( input[0].VertexIndex[5]*2+1 ); buffer3 = VertexBuffer.Load( input[0].VertexIndex[6]*2 ); buffer4 = VertexBuffer.Load( input[0].VertexIndex[6]*2+1 ); if (edgeTable[cubeindex] & 32) vertlist[5] = CalcIntersection(buffer1, buffer2, buffer3, buffer4); buffer1 = VertexBuffer.Load( input[0].VertexIndex[6]*2 ); buffer2 = VertexBuffer.Load( input[0].VertexIndex[6]*2+1 ); buffer3 = VertexBuffer.Load( input[0].VertexIndex[7]*2 ); buffer4 = VertexBuffer.Load( input[0].VertexIndex[7]*2+1 ); if (edgeTable[cubeindex] & 64) vertlist[6] = CalcIntersection(buffer1, buffer2, buffer3, buffer4); buffer1 = VertexBuffer.Load( input[0].VertexIndex[7]*2 ); buffer2 = VertexBuffer.Load( input[0].VertexIndex[7]*2+1 ); buffer3 = VertexBuffer.Load( input[0].VertexIndex[4]*2 ); buffer4 = VertexBuffer.Load( input[0].VertexIndex[4]*2+1 ); if (edgeTable[cubeindex] & 128) vertlist[7] = CalcIntersection(buffer1, buffer2, buffer3, buffer4); buffer1 = VertexBuffer.Load( input[0].VertexIndex[0]*2 ); buffer2 = VertexBuffer.Load( input[0].VertexIndex[0]*2+1 ); buffer3 = VertexBuffer.Load( input[0].VertexIndex[4]*2 ); buffer4 = VertexBuffer.Load( input[0].VertexIndex[4]*2+1 ); if (edgeTable[cubeindex] & 256) vertlist[8] = CalcIntersection(buffer1, buffer2, buffer3, buffer4); buffer1 = VertexBuffer.Load( input[0].VertexIndex[1]*2 ); buffer2 = VertexBuffer.Load( input[0].VertexIndex[1]*2+1 ); buffer3 = VertexBuffer.Load( input[0].VertexIndex[5]*2 ); buffer4 = VertexBuffer.Load( input[0].VertexIndex[5]*2+1 ); if (edgeTable[cubeindex] & 512) vertlist[9] = CalcIntersection(buffer1, buffer2, buffer3, buffer4); buffer1 = VertexBuffer.Load( input[0].VertexIndex[2]*2 ); buffer2 = VertexBuffer.Load( input[0].VertexIndex[2]*2+1 ); buffer3 = VertexBuffer.Load( input[0].VertexIndex[6]*2 ); buffer4 = VertexBuffer.Load( input[0].VertexIndex[6]*2+1 ); if (edgeTable[cubeindex] & 1024) vertlist[10] = CalcIntersection(buffer1, buffer2, buffer3, buffer4); buffer1 = VertexBuffer.Load( input[0].VertexIndex[3]*2 ); buffer2 = VertexBuffer.Load( input[0].VertexIndex[3]*2+1 ); buffer3 = VertexBuffer.Load( input[0].VertexIndex[7]*2 ); buffer4 = VertexBuffer.Load( input[0].VertexIndex[7]*2+1 ); if (edgeTable[cubeindex] & 2048) vertlist[11] = CalcIntersection(buffer1, buffer2, buffer3, buffer4); GS_OUTPUT output; for(int i = 0; triTable[cubeindex] != -1; i += 3) { output.Color = float4(vertlist[triTable[cubeindex][i+2]].Normal, 1.0); output.Position = vertlist[triTable[cubeindex][i+2]].Position; Stream.Append( output ); //error X4580: emitting a system-interpreted value which is not written in every execution path of the shader output.Color = float4(vertlist[triTable[cubeindex][i+1]].Normal, 1.0); output.Position = vertlist[triTable[cubeindex][i+1]].Position; Stream.Append( output ); output.Color = float4(vertlist[triTable[cubeindex]].Normal, 1.0); output.Position = vertlist[triTable[cubeindex]].Position; Stream.Append( output ); Stream.RestartStrip(); } } }float4 PSmain(GS_OUTPUT input) : SV_TARGET{ return input.Color;}
[Edited by - noxic on November 8, 2009 10:01:35 AM]
vertlist is only written inside conditional statements so I think you need to initialize it at the beginning to all zeros or something to make the compiler happy. I knows that it could happen where all conditionals are false (though I understand that in your algorithm, that should never happen, it however doesn't know that). Vertlist ultimately is written to the SV_Position output, so you'll always need to ensure that all 4 components are initialized.
You're right DieterVW. Thank you for your advice! I now initialize both vertlist and all four buffer variables outside the conditional statement.
Now it looks like this.
However, that doesn't help to solve the problem.
What I think is wired, is that I don't get the error if I have it like this.
The index numbers are just random (though of course only numbers that are valid for the vertlist array)
Example that works (Not acceptable though, but I doesn't get the error):
I can't use neither "cubeindex" or "i" in verlist[triTable[cubeindex]].Position.
Tried to do it like this:
int temp = triTable[cubeindex];
output.Position = vertlist[temp].Position;
and a lot more. Haven't come up with anything that works though.
This is how I wanna have it, but that gives "error X4580: emitting a system-interpreted value which is not written in every execution path of the shader":
"output.Color = float4(vertlist[triTable[cubeindex]].Normal" works whether I use "cubeindex" and "i" or for example "3" as index. Since the error message says "system-interpreted value", it's obviously something wrong with "SV_POSITION" i.e. vertlist[...].Position.
I hope someone will be able to help me with this problem.
Now it looks like this.
SurfaceVertex vertlist[12]; for(int i = 0; i <= 11; i++){ vertlist.Normal = float3(0.0f, 0.0f, 0.0f); vertlist.Position = float4(0.0f, 0.0f, 0.0f, 0.0f);}float4 buffer1 = float4(0.0f, 0.0f, 0.0f, 0.0f);float4 buffer2 = float4(0.0f, 0.0f, 0.0f, 0.0f);float4 buffer3 = float4(0.0f, 0.0f, 0.0f, 0.0f);float4 buffer4 = float4(0.0f, 0.0f, 0.0f, 0.0f); if(edgeTable[cubeindex] != 0x0){ . . .}
However, that doesn't help to solve the problem.
What I think is wired, is that I don't get the error if I have it like this.
The index numbers are just random (though of course only numbers that are valid for the vertlist array)
Example that works (Not acceptable though, but I doesn't get the error):
GS_OUTPUT output; for(int i = 0; triTable[cubeindex] != -1; i += 3){ output.Color = float4(vertlist[triTable[cubeindex][i+2]].Normal, 1.0); output.Position = vertlist[1].Position; //index 1 Stream.Append( output ); output.Color = float4(vertlist[triTable[cubeindex][i+1]].Normal, 1.0); output.Position = vertlist[1].Position; //index 1 Stream.Append( output ); output.Color = float4(vertlist[triTable[cubeindex]].Normal, 1.0); output.Position = vertlist[1].Position; //index 1 Stream.Append( output ); Stream.RestartStrip();}
I can't use neither "cubeindex" or "i" in verlist[triTable[cubeindex]].Position.
Tried to do it like this:
int temp = triTable[cubeindex];
output.Position = vertlist[temp].Position;
and a lot more. Haven't come up with anything that works though.
This is how I wanna have it, but that gives "error X4580: emitting a system-interpreted value which is not written in every execution path of the shader":
GS_OUTPUT output; for(int i = 0; triTable[cubeindex] != -1; i += 3){ output.Color = float4(vertlist[triTable[cubeindex][i+2]].Normal, 1.0); output.Position = vertlist[triTable[cubeindex][i+2]].Position;//error Stream.Append( output ); output.Color = float4(vertlist[triTable[cubeindex][i+1]].Normal, 1.0); output.Position = vertlist[triTable[cubeindex][i+1]].Position;//error Stream.Append( output ); output.Color = float4(vertlist[triTable[cubeindex]].Normal, 1.0); output.Position = vertlist[triTable[cubeindex]].Position;//error Stream.Append( output ); Stream.RestartStrip();}
"output.Color = float4(vertlist[triTable[cubeindex]].Normal" works whether I use "cubeindex" and "i" or for example "3" as index. Since the error message says "system-interpreted value", it's obviously something wrong with "SV_POSITION" i.e. vertlist[...].Position.
I hope someone will be able to help me with this problem.
I still haven't figure the problem out, so I'm trying again. If you need more info, I'll fix that.
This works:
This doesn't work:
This works:
for(int j = 0; j <= 11; j++){ . . . output.Position = vertlist[j].Position; //using j as index. Stream.Append( output ); . . .}
This doesn't work:
for(int k = 0; triTable[cubeindex][k] != -1; k += 3) { . . . output.Position = vertlist[triTable[cubeindex][k]].Position; Stream.Append( output ); //error X4580: emitting a system-interpreted value which is not written in every execution path of the shader . . .} The for-loops are different, yes, but I don't get it. triTable[cubeindex][k] will return an int from -1 to 11, so shouldn't be a problem. I can't come up with any solution really :/Thanks a lot in advance! Any help will be appreciated!
I don't have any experience in this field, but try >= 0 instead of != -1 or something, that will make the compiler know that it will always be a valid index in the correct range.
Thanks Erik Rufelt! That's better than ' != -1 '. It doesn't help me to solve the problem though.
I think it's something with cubeindex, since I can now use 'k' as an index.
I can for example have it like this:
This doesn't work:
Must be something wrong when I construct the bit field that the compiler doesn't like, or something else :/ Atleast it seems I can't use it as an array index. Since I can't use 'cubeindex' as an array index, it might be somethiing with this code I think.
cubeindex code:
Feels like I've tried so many things though, but nothing helps. Will continue testing ;>
I think it's something with cubeindex, since I can now use 'k' as an index.
I can for example have it like this:
GS_OUTPUT output; for(int k = 0; triTable[cubeindex][k] >= 0; k += 3) { uint temp = 1; output.Position = vertlist[triTable[temp][k+2]].Position; //this works, and I can remove temp and put for example '1' directly. Stream.Append( output );}
This doesn't work:
GS_OUTPUT output; for(int k = 0; triTable[cubeindex][k] >= 0; k += 3) { int temp = 1; output.Position = vertlist[triTable[cubeindex][k+2]].Position; //with cubeindex, it doesn't work. Stream.Append( output );}
Must be something wrong when I construct the bit field that the compiler doesn't like, or something else :/ Atleast it seems I can't use it as an array index. Since I can't use 'cubeindex' as an array index, it might be somethiing with this code I think.
cubeindex code:
uint cubeindex = 0; [unroll] //Avoids flow-control constructs. for(int i = 7; i > -1; i--){ //construct bit field with a bit set for every vertex inside surfaceindex //for example 1111 1111 = 255 etc. cubeindex |= (uint(VertexBuffer.Load( input[0].VertexIndex*2+1 ).w < isolevel) << i);}
Feels like I've tried so many things though, but nothing helps. Will continue testing ;>
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement