Jump to content
  • Advertisement
Sign in to follow this  
noxic

Geometry Shader problems

This topic is 3172 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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!

Share this post


Link to post
Share on other sites
Advertisement
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.

Share this post


Link to post
Share on other sites
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.



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, v1
SurfaceVertex 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]

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.


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.

Share this post


Link to post
Share on other sites
I still haven't figure the problem out, so I'm trying again. If you need more info, I'll fix that.

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!

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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:


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 ;>

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!