No Recursion?
This commit is contained in:
@@ -62,6 +62,9 @@ void main()
|
|||||||
positions[i].z += (bounds[2]-bounds[5])*0.25 * (floor(gl_LocalInvocationID.x/16.)-1.5+gl_WorkGroupID.z*2.);
|
positions[i].z += (bounds[2]-bounds[5])*0.25 * (floor(gl_LocalInvocationID.x/16.)-1.5+gl_WorkGroupID.z*2.);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float[2] check = scene(vec3[2](vec3(positions[0].xyz),vec3(positions[7].xyz)), true);
|
||||||
|
if ((check[0] < 0) && (check[1] > 0))
|
||||||
|
{
|
||||||
//mat4 sw=pc.world;
|
//mat4 sw=pc.world;
|
||||||
gl_MeshVerticesEXT[vindex+0].gl_Position=mvp*(positions[0]);
|
gl_MeshVerticesEXT[vindex+0].gl_Position=mvp*(positions[0]);
|
||||||
gl_MeshVerticesEXT[vindex+1].gl_Position=mvp*(positions[1]);
|
gl_MeshVerticesEXT[vindex+1].gl_Position=mvp*(positions[1]);
|
||||||
@@ -101,4 +104,5 @@ void main()
|
|||||||
gl_PrimitiveTriangleIndicesEXT[pindex+4]=uvec3(0,2,4)+uvec3(vindex);
|
gl_PrimitiveTriangleIndicesEXT[pindex+4]=uvec3(0,2,4)+uvec3(vindex);
|
||||||
gl_PrimitiveTriangleIndicesEXT[pindex+5]=uvec3(2,4,6)+uvec3(vindex);
|
gl_PrimitiveTriangleIndicesEXT[pindex+5]=uvec3(2,4,6)+uvec3(vindex);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+44
-7
@@ -52,7 +52,7 @@ layout(set=0,binding=11)restrict readonly buffer MatConst{
|
|||||||
mat4 mats[];
|
mat4 mats[];
|
||||||
}matconst;
|
}matconst;
|
||||||
layout(set=0,binding=12)restrict readonly buffer DepInfo{
|
layout(set=0,binding=12)restrict readonly buffer DepInfo{
|
||||||
uint8_t dependencies[2][];
|
uint8_t dependencies[][2];
|
||||||
}depinfo;
|
}depinfo;
|
||||||
|
|
||||||
// unpack integers
|
// unpack integers
|
||||||
@@ -557,18 +557,55 @@ Description desc;
|
|||||||
|
|
||||||
void pruneall (uint8_t pos) {
|
void pruneall (uint8_t pos) {
|
||||||
uint8_t[2] deps;
|
uint8_t[2] deps;
|
||||||
for (int i = 0; i < pos; i++)
|
for (uint8_t i = uint8_t(0); i < pos; i++)
|
||||||
{
|
{
|
||||||
deps = depinfo.dependencies[desc.dependencies+i];
|
deps = depinfo.dependencies[desc.dependencies+i];
|
||||||
if (deps[1] != 255) {
|
if (deps[1] != 255) {
|
||||||
//this is a dual output function (dup)
|
if ((deps[0] == pos) || (deps[1] == pos))
|
||||||
//todo
|
{
|
||||||
|
if ((mask[i>>3] & ~(1<<(i&7))) > 0)
|
||||||
|
{
|
||||||
|
mask[i>>3] &= uint8_t(~(1<<(i&7)));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pruneall(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (deps[0] == pos) {
|
else if (deps[0] == pos) {
|
||||||
pruneall(i);
|
pruneall(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mask[pos>>3] &= ~(1<<(pos&7));
|
mask[pos>>3] &= uint8_t(~(1<<(pos&7)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void prunesome (uint8_t pos, bool prunemask[6]) {
|
||||||
|
uint8_t[2] deps;
|
||||||
|
int maskindex = 0;
|
||||||
|
for (uint8_t i = uint8_t(0); i < pos; i++)
|
||||||
|
{
|
||||||
|
deps = depinfo.dependencies[desc.dependencies+i];
|
||||||
|
if (deps[1] != 255) {
|
||||||
|
if ((deps[0] == pos) || (deps[1] == pos))
|
||||||
|
{
|
||||||
|
if (prunemask[maskindex++]) {
|
||||||
|
if ((mask[i>>3] & ~(1<<(i&7))) > 0)
|
||||||
|
{
|
||||||
|
mask[i>>3] &= uint8_t(~(1<<(i&7)));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pruneall(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (deps[0] == pos) {
|
||||||
|
if (prunemask[maskindex++]) {
|
||||||
|
pruneall(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mask[pos>>3] &= uint8_t(~(1<<(pos&7)));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef debug
|
#ifdef debug
|
||||||
@@ -2748,12 +2785,12 @@ float[2]scene(vec3 p[2], bool prune)
|
|||||||
#ifdef debug
|
#ifdef debug
|
||||||
vec3 sceneoverride(vec3 p, bool m)
|
vec3 sceneoverride(vec3 p, bool m)
|
||||||
{
|
{
|
||||||
return scene(vec3[2](p,p));
|
return scene(vec3[2](p,p), false);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
float sceneoverride(vec3 p, bool m)
|
float sceneoverride(vec3 p, bool m)
|
||||||
{
|
{
|
||||||
return scene(vec3[2](p,p))[0];
|
return scene(vec3[2](p,p), false)[0];
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user