diff --git a/Cargo.lock b/Cargo.lock index abb1f9b6a283c527d6099518193bedebc0a718e1..b22a0bf35cb6adcf4acc9d17fd4b4fdf94f1c1e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -720,6 +720,7 @@ dependencies = [ "egui", "egui_winit_vulkano", "obj", + "rayon", "rodio", "serde", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index 06d14320bbe8ad9b3d6ed26242d53ff3d2a9ae85..23fd499ac1990a6728036ed557ca6f6ef0be3643 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,6 +38,8 @@ serde_json = "*" utf-8 = "*" +rayon = "*" + # using latest gits [patch.crates-io] vulkano = { path = "../vulkano/vulkano" } diff --git a/src/implicit.mesh.glsl b/src/implicit.mesh.glsl index c4b294c6d20123b90da3cfb76fa2f7687195998b..a6badef5b41913d9a22928c3593278079e8656e6 100644 --- a/src/implicit.mesh.glsl +++ b/src/implicit.mesh.glsl @@ -104,5 +104,22 @@ void main() gl_PrimitiveTriangleIndicesEXT[pindex+4]=uvec3(0,2,4)+uvec3(vindex); gl_PrimitiveTriangleIndicesEXT[pindex+5]=uvec3(2,4,6)+uvec3(vindex); } + } else + { + gl_MeshVerticesEXT[vindex+0].gl_Position=vec4(0,0,0,1); + gl_MeshVerticesEXT[vindex+1].gl_Position=vec4(0,0,0,1); + gl_MeshVerticesEXT[vindex+2].gl_Position=vec4(0,0,0,1); + gl_MeshVerticesEXT[vindex+3].gl_Position=vec4(0,0,0,1); + gl_MeshVerticesEXT[vindex+4].gl_Position=vec4(0,0,0,1); + gl_MeshVerticesEXT[vindex+5].gl_Position=vec4(0,0,0,1); + gl_MeshVerticesEXT[vindex+6].gl_Position=vec4(0,0,0,1); + gl_MeshVerticesEXT[vindex+7].gl_Position=vec4(0,0,0,1); + + gl_PrimitiveTriangleIndicesEXT[pindex+0]=uvec3(0,0,0); + gl_PrimitiveTriangleIndicesEXT[pindex+1]=uvec3(0,0,0); + gl_PrimitiveTriangleIndicesEXT[pindex+2]=uvec3(0,0,0); + gl_PrimitiveTriangleIndicesEXT[pindex+3]=uvec3(0,0,0); + gl_PrimitiveTriangleIndicesEXT[pindex+4]=uvec3(0,0,0); + gl_PrimitiveTriangleIndicesEXT[pindex+5]=uvec3(0,0,0); } } \ No newline at end of file diff --git a/src/instructionset.glsl b/src/instructionset.glsl index 025012ad2a5905bba93d30fdd2ba36bbd6591b05..007bb5892651b5e2d7c065fc1fa4b0610906e088 100644 --- a/src/instructionset.glsl +++ b/src/instructionset.glsl @@ -77,17 +77,10 @@ const uint OPMinMaterialFloat=__LINE__-1; const uint OPMaxMaterialFloat=__LINE__-1; const uint OPSmoothMinMaterialFloat=__LINE__-1; const uint OPSmoothMaxMaterialFloat=__LINE__-1; -const uint OPSwap2Float=__LINE__-1; -const uint OPSwap3Float=__LINE__-1; -const uint OPSwap4Float=__LINE__-1; const uint OPDupFloat=__LINE__-1; const uint OPDup2Float=__LINE__-1; const uint OPDup3Float=__LINE__-1; const uint OPDup4Float=__LINE__-1; -const uint OPDropFloat=__LINE__-1; -const uint OPDrop2Float=__LINE__-1; -const uint OPDrop3Float=__LINE__-1; -const uint OPDrop4Float=__LINE__-1; const uint OPAbsVec2=__LINE__-1; const uint OPSignVec2=__LINE__-1; const uint OPFloorVec2=__LINE__-1; @@ -107,17 +100,10 @@ const uint OPAcosVec2=__LINE__-1; const uint OPAtanVec2=__LINE__-1; const uint OPMinVec2=__LINE__-1; const uint OPMaxVec2=__LINE__-1; -const uint OPSwap2Vec2=__LINE__-1; -const uint OPSwap3Vec2=__LINE__-1; -const uint OPSwap4Vec2=__LINE__-1; const uint OPDupVec2=__LINE__-1; const uint OPDup2Vec2=__LINE__-1; const uint OPDup3Vec2=__LINE__-1; const uint OPDup4Vec2=__LINE__-1; -const uint OPDropVec2=__LINE__-1; -const uint OPDrop2Vec2=__LINE__-1; -const uint OPDrop3Vec2=__LINE__-1; -const uint OPDrop4Vec2=__LINE__-1; const uint OPAbsVec3=__LINE__-1; const uint OPSignVec3=__LINE__-1; const uint OPFloorVec3=__LINE__-1; @@ -137,17 +123,10 @@ const uint OPAcosVec3=__LINE__-1; const uint OPAtanVec3=__LINE__-1; const uint OPMinVec3=__LINE__-1; const uint OPMaxVec3=__LINE__-1; -const uint OPSwap2Vec3=__LINE__-1; -const uint OPSwap3Vec3=__LINE__-1; -const uint OPSwap4Vec3=__LINE__-1; const uint OPDupVec3=__LINE__-1; const uint OPDup2Vec3=__LINE__-1; const uint OPDup3Vec3=__LINE__-1; const uint OPDup4Vec3=__LINE__-1; -const uint OPDropVec3=__LINE__-1; -const uint OPDrop2Vec3=__LINE__-1; -const uint OPDrop3Vec3=__LINE__-1; -const uint OPDrop4Vec3=__LINE__-1; const uint OPAbsVec4=__LINE__-1; const uint OPSignVec4=__LINE__-1; const uint OPFloorVec4=__LINE__-1; @@ -167,17 +146,10 @@ const uint OPAcosVec4=__LINE__-1; const uint OPAtanVec4=__LINE__-1; const uint OPMinVec4=__LINE__-1; const uint OPMaxVec4=__LINE__-1; -const uint OPSwap2Vec4=__LINE__-1; -const uint OPSwap3Vec4=__LINE__-1; -const uint OPSwap4Vec4=__LINE__-1; const uint OPDupVec4=__LINE__-1; const uint OPDup2Vec4=__LINE__-1; const uint OPDup3Vec4=__LINE__-1; const uint OPDup4Vec4=__LINE__-1; -const uint OPDropVec4=__LINE__-1; -const uint OPDrop2Vec4=__LINE__-1; -const uint OPDrop3Vec4=__LINE__-1; -const uint OPDrop4Vec4=__LINE__-1; const uint OPPromoteFloatFloatVec2=__LINE__-1; const uint OPPromoteFloatFloatFloatVec3=__LINE__-1; const uint OPPromoteFloatFloatFloatFloatVec4=__LINE__-1; @@ -185,14 +157,6 @@ const uint OPPromoteVec2FloatVec3=__LINE__-1; const uint OPPromoteVec2FloatFloatVec4=__LINE__-1; const uint OPPromoteVec2Vec2Vec4=__LINE__-1; const uint OPPromoteVec3FloatVec4=__LINE__-1; -const uint OPDemoteVec2FloatFloat=__LINE__-1; -const uint OPDemoteVec3FloatFloatFloat=__LINE__-1; -const uint OPDemoteVec4FloatFloatFloatFloat=__LINE__-1; -const uint OPDemoteMat2Float=__LINE__-1; -const uint OPDemoteMat2Vec2=__LINE__-1; -const uint OPDemoteMat3Vec3=__LINE__-1; -const uint OPDemoteMat4Vec4=__LINE__-1; -const uint OPDemoteMat2Vec4=__LINE__-1; const uint OPAcoshFloat=__LINE__-1; const uint OPAcoshVec2=__LINE__-1; const uint OPAcoshVec3=__LINE__-1; diff --git a/src/intervals.glsl b/src/intervals.glsl index 49862f259ee4d0777c94fb11fe74aa5207aff598..1f1fad6209d9f2b8a6898a766ef0f3dd37931668 100644 --- a/src/intervals.glsl +++ b/src/intervals.glsl @@ -74,11 +74,11 @@ vec3 vec3_stack[8][2]; uint vec3_stack_head=0; vec4 vec4_stack[8][2]; uint vec4_stack_head=0; -mat2 mat2_stack[4][2]; +mat2 mat2_stack[1][2]; uint mat2_stack_head=0; -mat3 mat3_stack[4][2]; +mat3 mat3_stack[1][2]; uint mat3_stack_head=0; -mat4 mat4_stack[4][2]; +mat4 mat4_stack[1][2]; uint mat4_stack_head=0; uint float_const_head=0; @@ -233,7 +233,8 @@ void clear_stacks() mat4_const_head=0; } -uint8_t mask[29]; +const int masklen = 29; +uint8_t mask[masklen]; void default_mask() { @@ -554,58 +555,159 @@ void default_mask() } Description desc; +//0 - prune nothing +//1 - prune myself +//2 - prune myself and children +uint8_t pruneallchecks[(masklen*8)+1]; -void pruneall (uint8_t pos) { +void pruneall (int pos) { uint8_t[2] deps; - for (uint8_t i = uint8_t(0); i < pos; i++) + for (int i = pos-1; i >= 0; i--) { deps = depinfo.dependencies[desc.dependencies+i]; if (deps[1] != 255) { - if ((deps[0] == pos) || (deps[1] == pos)) + switch (int((pruneallchecks[deps[0]] << 4) | (pruneallchecks[deps[1]] << 2) | (pruneallchecks[i] << 0))) { - if ((mask[i>>3] & ~(1<<(i&7))) > 0) - { - mask[i>>3] &= uint8_t(~(1<<(i&7))); - } - else { - pruneall(i); - } + case ((2 << 4) | (2 << 2) | (2 << 0)): + case ((2 << 4) | (1 << 2) | (2 << 0)): + case ((2 << 4) | (0 << 2) | (2 << 0)): + case ((1 << 4) | (2 << 2) | (2 << 0)): + case ((1 << 4) | (1 << 2) | (2 << 0)): + case ((1 << 4) | (0 << 2) | (2 << 0)): + case ((0 << 4) | (2 << 2) | (2 << 0)): + case ((0 << 4) | (1 << 2) | (2 << 0)): + case ((0 << 4) | (0 << 2) | (2 << 0)): + + case ((2 << 4) | (2 << 2) | (1 << 0)): + case ((2 << 4) | (2 << 2) | (0 << 0)): + case ((2 << 4) | (1 << 2) | (1 << 0)): + case ((1 << 4) | (2 << 2) | (1 << 0)): + pruneallchecks[i]=uint8_t(2); + mask[i>>3] &= uint8_t(~(1<<(i&7))); + break; + + case ((2 << 4) | (1 << 2) | (0 << 0)): + case ((2 << 4) | (0 << 2) | (0 << 0)): + case ((1 << 4) | (2 << 2) | (0 << 0)): + case ((0 << 4) | (2 << 2) | (0 << 0)): + case ((0 << 4) | (0 << 2) | (1 << 0)): + case ((1 << 4) | (1 << 2) | (1 << 0)): + case ((2 << 4) | (0 << 2) | (1 << 0)): + case ((0 << 4) | (2 << 2) | (1 << 0)): + case ((0 << 4) | (1 << 2) | (1 << 0)): + case ((1 << 4) | (0 << 2) | (1 << 0)): + pruneallchecks[i]=uint8_t(1); + mask[i>>3] &= uint8_t(~(1<<(i&7))); + break; + + case ((1 << 4) | (1 << 2) | (0 << 0)): + case ((1 << 4) | (0 << 2) | (0 << 0)): + case ((0 << 4) | (1 << 2) | (0 << 0)): + case ((0 << 4) | (0 << 2) | (0 << 0)): + default: + break; } } - else if (deps[0] == pos) { - pruneall(i); + else if (pruneallchecks[i] > 0) + { + mask[i>>3] &= uint8_t(~(1<<(i&7))); + } + else if (pruneallchecks[deps[0]] > 1) { + pruneallchecks[i]=uint8_t(2); + mask[i>>3] &= uint8_t(~(1<<(i&7))); } } - mask[pos>>3] &= uint8_t(~(1<<(pos&7))); } -void prunesome (uint8_t pos, bool prunemask[6]) { +void prunesome (int pos, bool prunemask[6]) { uint8_t[2] deps; int maskindex = 0; - for (uint8_t i = uint8_t(0); i < pos; i++) + for (int i = 0; i < pos; i++) { deps = depinfo.dependencies[desc.dependencies+i]; if (deps[1] != 255) { - if ((deps[0] == pos) || (deps[1] == pos)) - { + if (deps[0] == pos) { if (prunemask[maskindex++]) { - if ((mask[i>>3] & ~(1<<(i&7))) > 0) - { - mask[i>>3] &= uint8_t(~(1<<(i&7))); - } - else { - pruneall(i); - } + pruneallchecks[i]++; } } + if (deps[1] == pos) { + if (prunemask[maskindex++]) { + pruneallchecks[i]++; + } + } + //pruneallchecks[i] = min(pruneallchecks[i],2); } else if (deps[0] == pos) { if (prunemask[maskindex++]) { - pruneall(i); + pruneallchecks[i]=uint8_t(2); } } } - mask[pos>>3] &= uint8_t(~(1<<(pos&7))); +} + +void passthroughself (int pos) { + pruneallchecks[pos]=uint8_t(1); +} +void pruneself (int pos) { + pruneallchecks[pos]=uint8_t(2); +} + +#define maskdefine (mask[major_position]&(1<<minor_position))==0 +#define inputmask1(m_in_1) if(maskdefine){\ + if(ifconst(0)) {m_in_1++;}\ + break;\ +} +#define inputmask2(m_in_1,m_in_2) if(maskdefine){\ + if(ifconst(0)) {m_in_1++;}\ + if(ifconst(1)) {m_in_2++;}\ + break;\ +} +#define inputmask3(m_in_1,m_in_2,m_in_3) if(maskdefine){\ + if(ifconst(0)) {m_in_1++;}\ + if(ifconst(1)) {m_in_2++;}\ + if(ifconst(2)) {m_in_3++;}\ + break;\ +} +#define inputmask4(m_in_1,m_in_2,m_in_3,m_in_4) if(maskdefine){\ + if(ifconst(0)) {m_in_1++;}\ + if(ifconst(1)) {m_in_2++;}\ + if(ifconst(2)) {m_in_3++;}\ + if(ifconst(3)) {m_in_4++;}\ + break;\ +} +#define inputmask5(m_in_1,m_in_2,m_in_3,m_in_4,m_in_5) if(maskdefine){\ + if(ifconst(0)) {m_in_1++;}\ + if(ifconst(1)) {m_in_2++;}\ + if(ifconst(2)) {m_in_3++;}\ + if(ifconst(3)) {m_in_4++;}\ + if(ifconst(4)) {m_in_5++;}\ + break;\ +} +#define inputmask6(m_in_1,m_in_2,m_in_3,m_in_4,m_in_5,m_in_6) if(maskdefine){\ + if(ifconst(0)) {m_in_1++;}\ + if(ifconst(1)) {m_in_2++;}\ + if(ifconst(2)) {m_in_3++;}\ + if(ifconst(3)) {m_in_4++;}\ + if(ifconst(4)) {m_in_5++;}\ + if(ifconst(5)) {m_in_6++;}\ + break;\ +} + +#define minpruning if (all(lessThan(in1[1],in2[0]))) {\ + prunesome(OPPos,bool[6](false,true,false,false,false,false));\ + passthroughself(OPPos);\ +} else if (all(lessThan(in2[1],in1[0]))) {\ + prunesome(OPPos,bool[6](true,false,false,false,false,false));\ + passthroughself(OPPos);\ +} + +#define maxpruning if (all(greaterThan(in1[0],in2[1]))) {\ + prunesome(OPPos,bool[6](false,true,false,false,false,false));\ + passthroughself(OPPos);\ +} else if (all(greaterThan(in2[0],in1[1]))) {\ + prunesome(OPPos,bool[6](true,false,false,false,false,false));\ + passthroughself(OPPos);\ } #ifdef debug @@ -640,12 +742,12 @@ float[2]scene(vec3 p[2], bool prune) return vec3(0.,1.,0.); #endif*/ - if((mask[major_position]&(1<<minor_position))>0) - { switch(minor_integer_cache[minor_position]&1023) { #define ifconst(pos) (minor_integer_cache[minor_position] & (1 << (15 - pos))) > 0 + #define OPPos int((major_position<<3)|minor_position) case OPAddFloatFloat:{ + inputmask2(float_const_head,float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]in2=pull_float(ifconst(1)); add; @@ -653,6 +755,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAddVec2Vec2:{ + inputmask2(vec2_const_head,vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); add; @@ -660,6 +763,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAddVec2Float:{ + inputmask2(vec2_const_head,float_const_head); vec2[2]in1=pull_vec2(ifconst(0)); float[2]in2=pull_float(ifconst(1)); add; @@ -667,6 +771,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAddVec3Vec3:{ + inputmask2(vec3_const_head,vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); add; @@ -674,6 +779,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAddVec3Float:{ + inputmask2(vec3_const_head,float_const_head); vec3[2]in1=pull_vec3(ifconst(0)); float[2]in2=pull_float(ifconst(1)); add; @@ -681,6 +787,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAddVec4Vec4:{ + inputmask2(vec4_const_head,vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); add; @@ -688,6 +795,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAddVec4Float:{ + inputmask2(vec4_const_head,float_const_head); vec4[2]in1=pull_vec4(ifconst(0)); float[2]in2=pull_float(ifconst(1)); add; @@ -696,6 +804,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPSubFloatFloat:{ + inputmask2(float_const_head,float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]in2=pull_float(ifconst(1)); subtract; @@ -703,6 +812,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSubVec2Vec2:{ + inputmask2(vec2_const_head,vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); subtract; @@ -710,6 +820,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSubVec2Float:{ + inputmask2(vec2_const_head,float_const_head); vec2[2]in1=pull_vec2(ifconst(0)); float[2]in2=pull_float(ifconst(1)); subtract; @@ -717,6 +828,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSubVec3Vec3:{ + inputmask2(vec3_const_head,vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); subtract; @@ -724,6 +836,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSubVec3Float:{ + inputmask2(vec3_const_head,float_const_head); vec3[2]in1=pull_vec3(ifconst(0)); float[2]in2=pull_float(ifconst(1)); subtract; @@ -731,6 +844,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSubVec4Vec4:{ + inputmask2(vec4_const_head,vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); subtract; @@ -738,6 +852,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSubVec4Float:{ + inputmask2(vec4_const_head,float_const_head); vec4[2]in1=pull_vec4(ifconst(0)); float[2]in2=pull_float(ifconst(1)); subtract; @@ -746,6 +861,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPMulFloatFloat:{ + inputmask2(float_const_head,float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]in2=pull_float(ifconst(1)); float[4]temp; @@ -754,6 +870,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMulVec2Vec2:{ + inputmask2(vec2_const_head,vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); vec2[4]temp; @@ -762,6 +879,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMulVec2Float:{ + inputmask2(vec2_const_head,float_const_head); vec2[2]in1=pull_vec2(ifconst(0)); float[2]in2=pull_float(ifconst(1)); vec2[4]temp; @@ -770,6 +888,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMulVec3Vec3:{ + inputmask2(vec3_const_head,vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); vec3[4]temp; @@ -778,6 +897,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMulVec3Float:{ + inputmask2(vec3_const_head,float_const_head); vec3[2]in1=pull_vec3(ifconst(0)); float[2]in2=pull_float(ifconst(1)); vec3[4]temp; @@ -786,6 +906,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMulVec4Vec4:{ + inputmask2(vec4_const_head,vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); vec4[4]temp; @@ -794,6 +915,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMulVec4Float:{ + inputmask2(vec4_const_head,float_const_head); vec4[2]in1=pull_vec4(ifconst(0)); float[2]in2=pull_float(ifconst(1)); vec4[4]temp; @@ -803,6 +925,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPDivFloatFloat:{ + inputmask2(float_const_head,float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]in2=pull_float(ifconst(1)); float[4]temp; @@ -811,6 +934,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPDivVec2Vec2:{ + inputmask2(vec2_const_head,vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); vec2[4]temp; @@ -819,6 +943,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPDivVec2Float:{ + inputmask2(vec2_const_head,float_const_head); vec2[2]in1=pull_vec2(ifconst(0)); float[2]in2=pull_float(ifconst(1)); vec2[4]temp; @@ -827,6 +952,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPDivVec3Vec3:{ + inputmask2(vec3_const_head,vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); vec3[4]temp; @@ -835,6 +961,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPDivVec3Float:{ + inputmask2(vec3_const_head,float_const_head); vec3[2]in1=pull_vec3(ifconst(0)); float[2]in2=pull_float(ifconst(1)); vec3[4]temp; @@ -843,6 +970,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPDivVec4Vec4:{ + inputmask2(vec4_const_head,vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); vec4[4]temp; @@ -851,6 +979,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPDivVec4Float:{ + inputmask2(vec4_const_head,float_const_head); vec4[2]in1=pull_vec4(ifconst(0)); float[2]in2=pull_float(ifconst(1)); vec4[4]temp; @@ -860,6 +989,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPPowFloatFloat:{ + inputmask2(float_const_head,float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]in2=pull_float(ifconst(1)); float[4]temp; @@ -868,6 +998,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPPowVec2Vec2:{ + inputmask2(vec2_const_head,vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); vec2[4]temp; @@ -876,6 +1007,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPPowVec3Vec3:{ + inputmask2(vec3_const_head,vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); vec3[4]temp; @@ -884,6 +1016,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPPowVec4Vec4:{ + inputmask2(vec4_const_head,vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); vec4[4]temp; @@ -893,6 +1026,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPModFloatFloat:{ + inputmask2(float_const_head,float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]in2=pull_float(ifconst(1)); float a=in1[0]/in2[0]; @@ -916,6 +1050,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPModVec2Vec2:{ + inputmask2(vec2_const_head,vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); vec2[4]temp; @@ -927,6 +1062,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPModVec2Float:{ + inputmask2(vec2_const_head,float_const_head); vec2[2]in1=pull_vec2(ifconst(0)); float[2]in2=pull_float(ifconst(1)); vec2[4]temp; @@ -938,6 +1074,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPModVec3Vec3:{ + inputmask2(vec3_const_head,vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); vec3[4]temp; @@ -949,6 +1086,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPModVec3Float:{ + inputmask2(vec3_const_head,float_const_head); vec3[2]in1=pull_vec3(ifconst(0)); float[2]in2=pull_float(ifconst(1)); vec3[4]temp; @@ -960,6 +1098,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPModVec4Vec4:{ + inputmask2(vec4_const_head,vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); vec4[4]temp; @@ -971,6 +1110,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPModVec4Float:{ + inputmask2(vec4_const_head,float_const_head); vec4[2]in1=pull_vec4(ifconst(0)); float[2]in2=pull_float(ifconst(1)); vec4[4]temp; @@ -984,6 +1124,7 @@ float[2]scene(vec3 p[2], bool prune) case OPCrossVec3:{ + inputmask2(vec3_const_head,vec3_const_head); /*#define getminmaxleft minleft = min(minleft, check); maxleft = max(maxleft, check); #define getminmaxright minright = min(minright, check); maxright = max(maxright, check); #define resetminmax minleft = 9999999999; minright = minleft; maxleft = -9999999999; maxright = maxleft; @@ -1051,6 +1192,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPDotVec2:{ + inputmask2(vec2_const_head,vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); float[2]out1; @@ -1059,6 +1201,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPDotVec3:{ + inputmask2(vec3_const_head,vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); float[2]out1; @@ -1067,6 +1210,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPDotVec4:{ + inputmask2(vec4_const_head,vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); float[2]out1; @@ -1076,6 +1220,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPLengthVec2:{ + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); bvec2 mixer = bvec2(false); vec2 zero = vec2(0); @@ -1085,6 +1230,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPLengthVec3:{ + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); bvec3 mixer = bvec3(false); vec3 zero = vec3(0); @@ -1094,6 +1240,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPLengthVec4:{ + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); bvec4 mixer = bvec4(false); vec4 zero = vec4(0); @@ -1104,6 +1251,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPDistanceVec2:{ + inputmask2(vec2_const_head,vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); bvec2 mixer = bvec2(false); @@ -1114,6 +1262,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPDistanceVec3:{ + inputmask2(vec3_const_head,vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); bvec3 mixer = bvec3(false); @@ -1124,6 +1273,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPDistanceVec4:{ + inputmask2(vec4_const_head,vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); bvec4 mixer = bvec4(false); @@ -1135,6 +1285,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPAbsFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float a=abs(in1[0]); float b=abs(in1[1]); @@ -1151,6 +1302,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSignFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; signof; @@ -1158,6 +1310,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPFloorFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; floorof; @@ -1165,6 +1318,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCeilFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; ceilingof; @@ -1172,6 +1326,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPFractFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; if (floor(in1[0]) == floor(in1[1])) { @@ -1186,6 +1341,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSqrtFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; squarerootof; @@ -1193,6 +1349,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPInverseSqrtFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; inversesquarerootof; @@ -1200,6 +1357,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPExpFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; exponentof; @@ -1207,6 +1365,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPExp2Float: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; exponent2of; @@ -1214,6 +1373,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPLogFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; logarithmof; @@ -1221,6 +1381,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPLog2Float: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; logarithm2of; @@ -1228,6 +1389,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSinFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float a=sin(in1[0]); float b=sin(in1[1]); @@ -1252,6 +1414,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCosFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float a=cos(in1[0]); float b=cos(in1[1]); @@ -1276,6 +1439,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPTanFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); if (floor((in1[0]/PI)) == floor((in1[1]/PI))) { @@ -1290,6 +1454,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAsinFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; arcsineof; @@ -1297,6 +1462,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAcosFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; arccosineof; @@ -1304,6 +1470,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAtanFloat: { + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; arctangentof; @@ -1311,6 +1478,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAcoshFloat:{ + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; hyperbolicarccosineof; @@ -1318,6 +1486,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAsinhFloat:{ + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; hyperbolicarcsineof; @@ -1325,6 +1494,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAtanhFloat:{ + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; hyperbolicarctangentof; @@ -1332,6 +1502,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCoshFloat:{ + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); if ((in1[1] > 0) && (in1[0] < 0)) { @@ -1345,6 +1516,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSinhFloat:{ + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; hyperbolicsineof; @@ -1352,6 +1524,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPTanhFloat:{ + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; hyperbolictangentof; @@ -1359,6 +1532,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPRoundFloat:{ + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; roundof; @@ -1366,6 +1540,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPTruncFloat:{ + inputmask1(float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]temp; truncof; @@ -1374,8 +1549,18 @@ float[2]scene(vec3 p[2], bool prune) break; case OPMinMaterialFloat: case OPMinFloat: { + inputmask2(float_const_head,float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]in2=pull_float(ifconst(1)); + if (in1[1] < in2[0]) + { + prunesome(OPPos,bool[6](false,true,false,false,false,false)); + passthroughself(OPPos); + } else if (in2[1] < in1[0]) + { + prunesome(OPPos,bool[6](true,false,false,false,false,false)); + passthroughself(OPPos); + } float[2]temp; minimum; push_float(in1); @@ -1383,14 +1568,25 @@ float[2]scene(vec3 p[2], bool prune) break; case OPMaxMaterialFloat: case OPMaxFloat: { + inputmask2(float_const_head,float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]in2=pull_float(ifconst(1)); + if (in1[0] > in2[1]) + { + prunesome(OPPos,bool[6](false,true,false,false,false,false)); + passthroughself(OPPos); + } else if (in2[0] > in1[1]) + { + prunesome(OPPos,bool[6](true,false,false,false,false,false)); + passthroughself(OPPos); + } float[2]temp; maximum; push_float(in1); } break; case OPFMAFloat: { + inputmask3(float_const_head,float_const_head,float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]in2=pull_float(ifconst(1)); float[2]in3=pull_float(ifconst(2)); @@ -1401,6 +1597,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPAbsVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; bvec2 mixer = bvec2(false); @@ -1410,6 +1607,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSignVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; signof; @@ -1417,6 +1615,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPFloorVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; floorof; @@ -1424,6 +1623,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCeilVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; ceilingof; @@ -1431,6 +1631,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPFractVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; bvec2 mixer = bvec2(false); @@ -1441,6 +1642,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSqrtVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; squarerootof; @@ -1448,6 +1650,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPInverseSqrtVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; inversesquarerootof; @@ -1455,6 +1658,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPExpVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; exponentof; @@ -1462,6 +1666,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPExp2Vec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; exponent2of; @@ -1469,6 +1674,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPLogVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; logarithmof; @@ -1476,6 +1682,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPLog2Vec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; logarithm2of; @@ -1483,6 +1690,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSinVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; bvec2 mixer1 = bvec2(false); @@ -1498,6 +1706,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCosVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; bvec2 mixer1 = bvec2(false); @@ -1513,6 +1722,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPTanVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; bvec2 mixer1 = bvec2(false); @@ -1522,6 +1732,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAsinVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; arcsineof; @@ -1529,6 +1740,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAcosVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; arccosineof; @@ -1536,6 +1748,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAtanVec2: { + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; arctangentof; @@ -1543,6 +1756,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAcoshVec2:{ + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; hyperbolicarccosineof; @@ -1550,6 +1764,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAsinhVec2:{ + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; hyperbolicarcsineof; @@ -1557,6 +1772,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAtanhVec2:{ + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; hyperbolicarctangentof; @@ -1564,6 +1780,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCoshVec2:{ + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; bvec2 mixer = bvec2(false); @@ -1575,6 +1792,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSinhVec2:{ + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; hyperbolicsineof; @@ -1582,6 +1800,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPTanhVec2:{ + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; hyperbolictangentof; @@ -1589,6 +1808,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPRoundVec2:{ + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; roundof; @@ -1596,6 +1816,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPTruncVec2:{ + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]temp; truncof; @@ -1603,22 +1824,27 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMinVec2: { + inputmask2(vec2_const_head,vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); + minpruning; vec2[2]temp; minimum; push_vec2(in1); } break; case OPMaxVec2: { + inputmask2(vec2_const_head,vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); + maxpruning; vec2[2]temp; maximum; push_vec2(in1); } break; case OPFMAVec2: { + inputmask3(vec2_const_head,vec2_const_head,vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); vec2[2]in3=pull_vec2(ifconst(2)); @@ -1629,6 +1855,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPAbsVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; bvec3 mixer = bvec3(false); @@ -1638,6 +1865,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSignVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; signof; @@ -1645,6 +1873,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPFloorVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; floorof; @@ -1652,6 +1881,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCeilVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; ceilingof; @@ -1659,6 +1889,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPFractVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; bvec3 mixer = bvec3(false); @@ -1669,6 +1900,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSqrtVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; squarerootof; @@ -1676,6 +1908,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPInverseSqrtVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; inversesquarerootof; @@ -1683,6 +1916,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPExpVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; exponentof; @@ -1690,6 +1924,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPExp2Vec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; exponent2of; @@ -1697,6 +1932,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPLogVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; logarithmof; @@ -1704,6 +1940,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPLog2Vec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; logarithm2of; @@ -1711,6 +1948,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSinVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; bvec3 mixer1 = bvec3(false); @@ -1726,6 +1964,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCosVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; bvec3 mixer1 = bvec3(false); @@ -1741,6 +1980,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPTanVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; bvec3 mixer1 = bvec3(false); @@ -1750,6 +1990,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAsinVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; arcsineof; @@ -1757,6 +1998,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAcosVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; arccosineof; @@ -1764,6 +2006,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAtanVec3: { + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; arctangentof; @@ -1771,6 +2014,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAcoshVec3:{ + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; hyperbolicarccosineof; @@ -1778,6 +2022,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAsinhVec3:{ + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; hyperbolicarcsineof; @@ -1785,6 +2030,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAtanhVec3:{ + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; hyperbolicarctangentof; @@ -1792,6 +2038,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCoshVec3:{ + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; bvec3 mixer = bvec3(false); @@ -1803,6 +2050,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSinhVec3:{ + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; hyperbolicsineof; @@ -1810,6 +2058,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPTanhVec3:{ + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; hyperbolictangentof; @@ -1817,6 +2066,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPRoundVec3:{ + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; roundof; @@ -1824,6 +2074,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPTruncVec3:{ + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]temp; truncof; @@ -1831,22 +2082,27 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMinVec3: { + inputmask2(vec3_const_head,vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); + minpruning; vec3[2]temp; minimum; push_vec3(in1); } break; case OPMaxVec3: { + inputmask2(vec3_const_head,vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); + maxpruning; vec3[2]temp; maximum; push_vec3(in1); } break; case OPFMAVec3: { + inputmask3(vec3_const_head,vec3_const_head,vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); vec3[2]in3=pull_vec3(ifconst(2)); @@ -1857,6 +2113,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPAbsVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; bvec4 mixer = bvec4(false); @@ -1866,6 +2123,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSignVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; signof; @@ -1873,6 +2131,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPFloorVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; floorof; @@ -1880,6 +2139,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCeilVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; ceilingof; @@ -1887,6 +2147,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPFractVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; bvec4 mixer = bvec4(false); @@ -1897,6 +2158,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSqrtVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; squarerootof; @@ -1904,6 +2166,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPInverseSqrtVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; inversesquarerootof; @@ -1911,6 +2174,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPExpVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; exponentof; @@ -1918,6 +2182,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPExp2Vec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; exponent2of; @@ -1925,6 +2190,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPLogVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; logarithmof; @@ -1932,6 +2198,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPLog2Vec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; logarithm2of; @@ -1939,6 +2206,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSinVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; bvec4 mixer1 = bvec4(false); @@ -1954,6 +2222,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCosVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; bvec4 mixer1 = bvec4(false); @@ -1969,6 +2238,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPTanVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; bvec4 mixer1 = bvec4(false); @@ -1978,6 +2248,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAsinVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; arcsineof; @@ -1985,6 +2256,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAcosVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; arccosineof; @@ -1992,6 +2264,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAtanVec4: { + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; arctangentof; @@ -1999,6 +2272,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAcoshVec4:{ + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; hyperbolicarccosineof; @@ -2006,6 +2280,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAsinhVec4:{ + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; hyperbolicarcsineof; @@ -2013,6 +2288,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPAtanhVec4:{ + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; hyperbolicarctangentof; @@ -2020,6 +2296,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCoshVec4:{ + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; bvec4 mixer = bvec4(false); @@ -2031,6 +2308,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSinhVec4:{ + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; hyperbolicsineof; @@ -2038,6 +2316,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPTanhVec4:{ + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; hyperbolictangentof; @@ -2045,6 +2324,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPRoundVec4:{ + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; roundof; @@ -2052,6 +2332,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPTruncVec4:{ + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]temp; truncof; @@ -2059,22 +2340,27 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMinVec4: { + inputmask2(vec4_const_head,vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); + minpruning; vec4[2]temp; minimum; push_vec4(in1); } break; case OPMaxVec4: { + inputmask2(vec4_const_head,vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); + maxpruning; vec4[2]temp; maximum; push_vec4(in1); } break; case OPFMAVec4: { + inputmask3(vec4_const_head,vec4_const_head,vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); vec4[2]in3=pull_vec4(ifconst(2)); @@ -2085,6 +2371,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPClampFloatFloat:{ + inputmask3(float_const_head,float_const_head,float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]in2=pull_float(ifconst(1)); float[2]in3=pull_float(ifconst(2)); @@ -2093,6 +2380,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMixFloatFloat:{ + inputmask3(float_const_head,float_const_head,float_const_head); float[2]in1=pull_float(ifconst(0)); float[2]in2=pull_float(ifconst(1)); float[2]in3=pull_float(ifconst(2)); @@ -2101,6 +2389,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPClampVec2Vec2:{ + inputmask3(vec2_const_head,vec2_const_head,vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); vec2[2]in3=pull_vec2(ifconst(2)); @@ -2109,6 +2398,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMixVec2Vec2:{ + inputmask3(vec2_const_head,vec2_const_head,vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); vec2[2]in3=pull_vec2(ifconst(2)); @@ -2117,6 +2407,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPClampVec2Float:{ + inputmask3(vec2_const_head,float_const_head,float_const_head); vec2[2]in1=pull_vec2(ifconst(0)); float[2]in2=pull_float(ifconst(1)); float[2]in3=pull_float(ifconst(2)); @@ -2125,6 +2416,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMixVec2Float:{ + inputmask3(vec2_const_head,vec2_const_head,float_const_head); vec2[2]in1=pull_vec2(ifconst(0)); vec2[2]in2=pull_vec2(ifconst(1)); float[2]in3=pull_float(ifconst(2)); @@ -2133,6 +2425,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPClampVec3Vec3:{ + inputmask3(vec3_const_head,vec3_const_head,vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); vec3[2]in3=pull_vec3(ifconst(2)); @@ -2141,6 +2434,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMixVec3Vec3:{ + inputmask3(vec3_const_head,vec3_const_head,vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); vec3[2]in3=pull_vec3(ifconst(2)); @@ -2149,6 +2443,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPClampVec3Float:{ + inputmask3(vec3_const_head,float_const_head,float_const_head); vec3[2]in1=pull_vec3(ifconst(0)); float[2]in2=pull_float(ifconst(1)); float[2]in3=pull_float(ifconst(2)); @@ -2157,6 +2452,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMixVec3Float:{ + inputmask3(vec3_const_head,vec3_const_head,float_const_head); vec3[2]in1=pull_vec3(ifconst(0)); vec3[2]in2=pull_vec3(ifconst(1)); float[2]in3=pull_float(ifconst(2)); @@ -2165,6 +2461,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPClampVec4Vec4:{ + inputmask3(vec4_const_head,vec4_const_head,vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); vec4[2]in3=pull_vec4(ifconst(2)); @@ -2173,6 +2470,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMixVec4Vec4:{ + inputmask3(vec4_const_head,vec4_const_head,vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); vec4[2]in3=pull_vec4(ifconst(2)); @@ -2181,6 +2479,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPClampVec4Float:{ + inputmask3(vec4_const_head,float_const_head,float_const_head); vec4[2]in1=pull_vec4(ifconst(0)); float[2]in2=pull_float(ifconst(1)); float[2]in3=pull_float(ifconst(2)); @@ -2189,6 +2488,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPMixVec4Float:{ + inputmask3(vec4_const_head,vec4_const_head,float_const_head); vec4[2]in1=pull_vec4(ifconst(0)); vec4[2]in2=pull_vec4(ifconst(1)); float[2]in3=pull_float(ifconst(2)); @@ -2198,6 +2498,7 @@ float[2]scene(vec3 p[2], bool prune) break; case OPNormalizeVec2:{ + inputmask1(vec2_const_head); vec2[2]in1=pull_vec2(ifconst(0)); bvec2 mixer=mix(bvec2(false),greaterThan(in1[1],vec2(0)),lessThan(in1[0],vec2(0))); vec2 smallest=mix(min(abs(in1[0]),abs(in1[1])),vec2(0),mixer); @@ -2224,6 +2525,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPNormalizeVec3:{ + inputmask1(vec3_const_head); vec3[2]in1=pull_vec3(ifconst(0)); bvec3 mixer=mix(bvec3(false),greaterThan(in1[1],vec3(0)),lessThan(in1[0],vec3(0))); vec3 smallest=mix(min(abs(in1[0]),abs(in1[1])),vec3(0),mixer); @@ -2254,6 +2556,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPNormalizeVec4:{ + inputmask1(vec4_const_head); vec4[2]in1=pull_vec4(ifconst(0)); bvec4 mixer=mix(bvec4(false),greaterThan(in1[1],vec4(0)),lessThan(in1[0],vec4(0))); vec4 smallest=mix(min(abs(in1[0]),abs(in1[1])),vec4(0),mixer); @@ -2289,12 +2592,14 @@ float[2]scene(vec3 p[2], bool prune) break; case OPPromoteFloatFloatVec2:{ + inputmask2(float_const_head,float_const_head); float[2] a = pull_float(ifconst(0)); float[2] b = pull_float(ifconst(1)); push_vec2(vec2[2](vec2(a[0],b[0]),vec2(a[1],b[1]))); } break; case OPPromoteFloatFloatFloatVec3:{ + inputmask3(float_const_head,float_const_head,float_const_head); float[2] a = pull_float(ifconst(0)); float[2] b = pull_float(ifconst(1)); float[2] c = pull_float(ifconst(2)); @@ -2302,12 +2607,14 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPPromoteVec2FloatVec3:{ + inputmask2(vec2_const_head,float_const_head); vec2[2] a = pull_vec2(ifconst(0)); float[2] b = pull_float(ifconst(1)); push_vec3(vec3[2](vec3(a[0],b[0]),vec3(a[1],b[1]))); } break; case OPPromoteFloatFloatFloatFloatVec4:{ + inputmask4(float_const_head,float_const_head,float_const_head,float_const_head); float[2] a = pull_float(ifconst(0)); float[2] b = pull_float(ifconst(1)); float[2] c = pull_float(ifconst(2)); @@ -2316,6 +2623,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPPromoteVec2FloatFloatVec4:{ + inputmask3(vec2_const_head,float_const_head,float_const_head); vec2[2] a = pull_vec2(ifconst(0)); float[2] b = pull_float(ifconst(1)); float[2] c = pull_float(ifconst(2)); @@ -2323,18 +2631,21 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPPromoteVec3FloatVec4:{ + inputmask2(vec3_const_head,float_const_head); vec3[2] a = pull_vec3(ifconst(0)); float[2] b = pull_float(ifconst(1)); push_vec4(vec4[2](vec4(a[0],b[0]),vec4(a[1],b[1]))); } break; case OPPromoteVec2Vec2Vec4:{ + inputmask2(vec2_const_head,vec2_const_head); vec2[2] a = pull_vec2(ifconst(0)); vec2[2] b = pull_vec2(ifconst(1)); push_vec4(vec4[2](vec4(a[0],b[0]),vec4(a[1],b[1]))); } break; + /* case OPDemoteMat2Float:{ mat2[2] mat2temp=pull_mat2(ifconst(0)); push_float(float[2](mat2temp[0][1].y,mat2temp[1][1].y)); @@ -2390,8 +2701,10 @@ float[2]scene(vec3 p[2], bool prune) push_float(float[2](vec4temp[0].x,vec4temp[1].x)); } break; + */ case OPSquareFloat:{ + inputmask1(float_const_head); float[2] in1 = pull_float(ifconst(0)); float[2] out1; if (in1[1] > 0 && in1[0] < 0) @@ -2406,6 +2719,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCubeFloat:{ + inputmask1(float_const_head); float[2] in1 = pull_float(ifconst(0)); float[2] out1; bool mixer = false; @@ -2415,6 +2729,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSquareVec2:{ + inputmask1(vec2_const_head); vec2[2] in1 = pull_vec2(ifconst(0)); vec2[2] out1; bvec2 mixer = bvec2(false); @@ -2424,6 +2739,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCubeVec2:{ + inputmask1(vec2_const_head); vec2[2] in1 = pull_vec2(ifconst(0)); vec2[2] out1; bvec2 mixer = bvec2(false); @@ -2433,6 +2749,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSquareVec3:{ + inputmask1(vec3_const_head); vec3[2] in1 = pull_vec3(ifconst(0)); vec3[2] out1; bvec3 mixer = bvec3(false); @@ -2442,6 +2759,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCubeVec3:{ + inputmask1(vec3_const_head); vec3[2] in1 = pull_vec3(ifconst(0)); vec3[2] out1; bvec3 mixer = bvec3(false); @@ -2451,6 +2769,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPSquareVec4:{ + inputmask1(vec4_const_head); vec4[2] in1 = pull_vec4(ifconst(0)); vec4[2] out1; bvec4 mixer = bvec4(false); @@ -2460,6 +2779,7 @@ float[2]scene(vec3 p[2], bool prune) } break; case OPCubeVec4:{ + inputmask1(vec4_const_head); vec4[2] in1 = pull_vec4(ifconst(0)); vec4[2] out1; bvec4 mixer = bvec4(false); @@ -2471,6 +2791,12 @@ float[2]scene(vec3 p[2], bool prune) case OPSmoothMinMaterialFloat: case OPSmoothMinFloat:{ + if(maskdefine){ + if(ifconst(0)) {float_const_head++;} + if(ifconst(1)) {float_const_head++;} + float_const_head++; + break; + } float k=cpull_float(); float[2] a=pull_float(ifconst(0)); float[2] b=pull_float(ifconst(1)); @@ -2483,6 +2809,12 @@ float[2]scene(vec3 p[2], bool prune) break; case OPSmoothMaxMaterialFloat: case OPSmoothMaxFloat:{ + if(maskdefine){ + if(ifconst(0)) {float_const_head++;} + if(ifconst(1)) {float_const_head++;} + float_const_head++; + break; + } float k=cpull_float(); float[2] a=pull_float(ifconst(0)); float[2] b=pull_float(ifconst(1)); @@ -2494,6 +2826,7 @@ float[2]scene(vec3 p[2], bool prune) } break; + /* case OPSwap2Float:{ float[2]floattemp=float_stack[float_stack_head-1]; float_stack[float_stack_head-1]=float_stack[float_stack_head-2]; @@ -2511,6 +2844,7 @@ float[2]scene(vec3 p[2], bool prune) float_stack[float_stack_head-1]=float_stack[float_stack_head-4]; float_stack[float_stack_head-4]=floattemp; } + */ break; case OPDupFloat:{ push_float(float_stack[float_stack_head-1]); @@ -2528,6 +2862,7 @@ float[2]scene(vec3 p[2], bool prune) push_float(float_stack[float_stack_head-4]); } break; + /* case OPDropFloat:{ float_stack_head--; } @@ -2550,6 +2885,8 @@ float[2]scene(vec3 p[2], bool prune) float_stack_head--; } break; + */ + /* case OPSwap2Vec2:{ vec2[2]vec2temp=vec2_stack[vec2_stack_head-1]; vec2_stack[vec2_stack_head-1]=vec2_stack[vec2_stack_head-2]; @@ -2568,6 +2905,7 @@ float[2]scene(vec3 p[2], bool prune) vec2_stack[vec2_stack_head-4]=vec2temp; } break; + */ case OPDupVec2:{ push_vec2(vec2_stack[vec2_stack_head-1]); } @@ -2584,6 +2922,7 @@ float[2]scene(vec3 p[2], bool prune) push_vec2(vec2_stack[vec2_stack_head-4]); } break; + /* case OPDropVec2:{ vec2_stack_head--; } @@ -2606,6 +2945,8 @@ float[2]scene(vec3 p[2], bool prune) vec2_stack_head--; } break; + */ + /* case OPSwap2Vec3:{ vec3[2]vec3temp=vec3_stack[vec3_stack_head-1]; vec3_stack[vec3_stack_head-1]=vec3_stack[vec3_stack_head-2]; @@ -2624,6 +2965,7 @@ float[2]scene(vec3 p[2], bool prune) vec3_stack[vec3_stack_head-4]=vec3temp; } break; + */ case OPDupVec3:{ push_vec3(vec3_stack[vec3_stack_head-1]); } @@ -2640,6 +2982,7 @@ float[2]scene(vec3 p[2], bool prune) push_vec3(vec3_stack[vec3_stack_head-4]); } break; + /* case OPDropVec3:{ vec3_stack_head--; } @@ -2662,6 +3005,8 @@ float[2]scene(vec3 p[2], bool prune) vec3_stack_head--; } break; + */ + /* case OPSwap2Vec4:{ vec4[2]vec4temp=vec4_stack[vec4_stack_head-1]; vec4_stack[vec4_stack_head-1]=vec4_stack[vec4_stack_head-2]; @@ -2680,6 +3025,7 @@ float[2]scene(vec3 p[2], bool prune) vec4_stack[vec4_stack_head-4]=vec4temp; } break; + */ case OPDupVec4:{ push_vec4(vec4_stack[vec4_stack_head-1]); } @@ -2696,6 +3042,7 @@ float[2]scene(vec3 p[2], bool prune) push_vec4(vec4_stack[vec4_stack_head-4]); } break; + /* case OPDropVec4:{ vec4_stack_head--; } @@ -2718,10 +3065,12 @@ float[2]scene(vec3 p[2], bool prune) vec4_stack_head--; } break; + */ case OPSDFSphere: { + inputmask2(float_const_head,vec3_const_head); float[2] in2=pull_float(ifconst(0)); /*#ifdef debug return vec3(in2[0],in2[1],0.); @@ -2747,6 +3096,7 @@ float[2]scene(vec3 p[2], bool prune) case OPNop: break; case OPStop: + pruneall(uint8_t((major_position<<3)|minor_position)); #ifdef debug return vec3(pull_float(ifconst(0))[0]); #else @@ -2760,22 +3110,19 @@ float[2]scene(vec3 p[2], bool prune) return float[2](0,0); #endif } - /*}else{ - //return vec3(float(minor_float_cache[minor_position])); - push_float(float[2](float(minor_float_cache[minor_position]),float(minor_float_cache[minor_position]))); - }*/ - } + minor_position++; if(minor_position==8) { minor_position=0; major_position++; - if(major_position==13) + if(major_position==masklen) { + pruneall(uint8_t((masklen*8))); #ifdef debug - return vec3(pull_float(ifconst(0))[0]); + return vec3(pull_float(false)[0]); #else - return pull_float(ifconst(0)); + return pull_float(false); #endif } } diff --git a/src/main.rs b/src/main.rs index e8ba4cd810f582b359f14b88f95be9a860123255..c71dcbadaacb084cc01ac492d08ed653f9a1878b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,6 +27,7 @@ use vulkano::VulkanLibrary; use winit::event::{DeviceEvent, ElementState, MouseButton, VirtualKeyCode}; use egui_winit_vulkano::Gui; +use rayon::prelude::*; use vulkano::pipeline::StateMode::Fixed; use vulkano::{ buffer::BufferUsage, @@ -151,6 +152,7 @@ fn main() { shader_float16: true, shader_int16: true, shader_int8: true, + storage_buffer8_bit_access: true, ..Features::empty() }, ..Default::default() @@ -231,9 +233,6 @@ fn main() { } } - let mesh_vs = mesh_vs::load(device.clone()).unwrap(); - let mesh_fs = mesh_fs::load(device.clone()).unwrap(); - mod implicit_ms { vulkano_shaders::shader! { ty: "mesh", @@ -263,8 +262,56 @@ fn main() { } } - let implicit_ms = implicit_ms::load(device.clone()).unwrap(); - let implicit_fs = implicit_fs::load(device.clone()).unwrap(); + let loaders: Vec< + fn( + ::std::sync::Arc<::vulkano::device::Device>, + ) -> Result< + ::std::sync::Arc<::vulkano::shader::ShaderModule>, + ::vulkano::shader::ShaderCreationError, + >, + > = vec![ + ((mesh_vs::load) + as fn( + ::std::sync::Arc<::vulkano::device::Device>, + ) -> Result< + ::std::sync::Arc<::vulkano::shader::ShaderModule>, + ::vulkano::shader::ShaderCreationError, + >), + ((mesh_fs::load) + as fn( + ::std::sync::Arc<::vulkano::device::Device>, + ) -> Result< + ::std::sync::Arc<::vulkano::shader::ShaderModule>, + ::vulkano::shader::ShaderCreationError, + >), + ((implicit_ms::load) + as fn( + ::std::sync::Arc<::vulkano::device::Device>, + ) -> Result< + ::std::sync::Arc<::vulkano::shader::ShaderModule>, + ::vulkano::shader::ShaderCreationError, + >), + ((implicit_fs::load) + as fn( + ::std::sync::Arc<::vulkano::device::Device>, + ) -> Result< + ::std::sync::Arc<::vulkano::shader::ShaderModule>, + ::vulkano::shader::ShaderCreationError, + >), + ]; + + let pariter = loaders + .par_iter() + .map(|load| load(device.clone()).unwrap()) + .collect::<Vec<_>>(); + + let mesh_vs = pariter[0].clone(); + let mesh_fs = pariter[1].clone(); + + let implicit_ms = pariter[2].clone(); + let implicit_fs = pariter[3].clone(); + + drop(pariter); let memory_allocator = Arc::new(MemoryAllocator::new_default(device.clone())); @@ -611,6 +658,8 @@ fn main() { CSGPart::opcode(InstructionSet::OPStop, 0b000000), ]; + let dependencies: Vec<[u8; 2]> = vec![[1, 255], [255, 255]]; + let floats: Vec<f32> = vec![0.2, 0.2, 0.05]; let vec2s: Vec<[f32; 2]> = vec![[0.; 2]]; @@ -657,6 +706,7 @@ fn main() { mat2s: 0, mat3s: 0, mat4s: 0, + dependencies: 0, }; let descvec = vec![desc]; @@ -707,6 +757,13 @@ fn main() { .allocate_slice((mats.len() as u64).max(1)) .unwrap(); csg_mats.write().unwrap().copy_from_slice(&mats[..]); + let csg_depends = uniform_buffer + .allocate_slice((dependencies.len() as u64).max(1)) + .unwrap(); + csg_depends + .write() + .unwrap() + .copy_from_slice(&dependencies[..]); let mesh_layout = mesh_pipeline.layout().set_layouts().get(0).unwrap(); let mesh_set = PersistentDescriptorSet::new( @@ -732,10 +789,11 @@ fn main() { WriteDescriptorSet::buffer(5, csg_vec2s.clone()), WriteDescriptorSet::buffer(6, csg_vec3s.clone()), WriteDescriptorSet::buffer(7, csg_vec4s.clone()), - WriteDescriptorSet::buffer(8, csg_mat2s.clone()), - WriteDescriptorSet::buffer(9, csg_mat3s.clone()), - WriteDescriptorSet::buffer(10, csg_mat4s.clone()), + //WriteDescriptorSet::buffer(8, csg_mat2s.clone()), + //WriteDescriptorSet::buffer(9, csg_mat3s.clone()), + //WriteDescriptorSet::buffer(10, csg_mat4s.clone()), //WriteDescriptorSet::buffer(11, csg_mats.clone()), + WriteDescriptorSet::buffer(12, csg_depends.clone()), ], ) .unwrap(); diff --git a/src/stupid.spv b/src/stupid.spv index 3b2bd2ce074e11278850543d1a8c066b08fa1c22..aaa7cec112b4f2394724431d7d3f8b9d399b4108 100644 Binary files a/src/stupid.spv and b/src/stupid.spv differ