Idk what is still missing

This commit is contained in:
Dynamitos
2024-10-21 11:13:26 +02:00
parent 17746f8d20
commit 07dad4641d
9 changed files with 909 additions and 157 deletions
+753
View File
@@ -0,0 +1,753 @@
#version 450
#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require
layout(row_major) uniform;
layout(row_major) buffer;
#line 8 0
struct GeometryCB_std140_0
{
uint totalNumElements_0;
uint baseDepth_0;
uint totalNumVertices_0;
};
#line 8
layout(binding = 0, set = 1)
layout(std140) uniform block_GeometryCB_std140_0
{
uint totalNumElements_0;
uint baseDepth_0;
uint totalNumVertices_0;
}pParams_geometry_0;
#line 1334 1
struct _MatrixStorage_float4x4_ColMajorstd140_0
{
vec4 data_0[4];
};
#line 27 0
struct UpdateCB_std140_0
{
_MatrixStorage_float4x4_ColMajorstd140_0 viewProjectionMatrix_0;
float triangleSize_0;
uint maxSubdivisionDepth_0;
float fov_0;
float farPlaneDistance_0;
};
#line 27
layout(binding = 1, set = 1)
layout(std140) uniform block_UpdateCB_std140_0
{
_MatrixStorage_float4x4_ColMajorstd140_0 viewProjectionMatrix_0;
float triangleSize_0;
uint maxSubdivisionDepth_0;
float fov_0;
float farPlaneDistance_0;
}pParams_update_0;
#line 40
layout(std430, binding = 2, set = 1) buffer StructuredBuffer_vectorx3Cfloatx2C4x3E_t_0 {
vec4 _data[];
} pParams_currentVertexBuffer_0;
#line 40
layout(std430, binding = 3, set = 1) readonly buffer StructuredBuffer_uint_t_0 {
uint _data[];
} pParams_indexedBisectorBuffer_0;
#line 40
layout(std430, binding = 4, set = 1) buffer StructuredBuffer_uint_t_1 {
uint _data[];
} pParams_indirectDrawBuffer_0;
#line 40
layout(std430, binding = 5, set = 1) buffer StructuredBuffer_uint64_t_0 {
uint64_t _data[];
} pParams_heapIDBuffer_0;
#line 20 2
struct _Array_std430_uint3_0
{
uint data_1[3];
};
#line 35
struct BisectorData_std430_0
{
_Array_std430_uint3_0 indices_0;
uint subdivisionPattern_0;
uint problematicNeighbor_0;
uint bisectorState_0;
uint flags_0;
uint propagationID_0;
};
#line 35
layout(std430, binding = 6, set = 1) buffer StructuredBuffer_BisectorData_std430_t_0 {
BisectorData_std430_0 _data[];
} pParams_bisectorDataBuffer_0;
#line 35
layout(std430, binding = 7, set = 1) buffer StructuredBuffer_uint_t_2 {
uint _data[];
} pParams_classificationBuffer_0;
#line 102 3
struct Plane_std140_0
{
vec3 n_0;
float d_0;
};
#line 102
struct _Array_std140_Plane4_0
{
Plane_std140_0 data_2[4];
};
#line 102
struct Frustum_std140_0
{
_Array_std140_Plane4_0 sides_0;
};
#line 19
struct ViewParameter_std140_0
{
Frustum_std140_0 viewFrustum_0;
_MatrixStorage_float4x4_ColMajorstd140_0 viewMatrix_0;
_MatrixStorage_float4x4_ColMajorstd140_0 inverseViewMatrix_0;
_MatrixStorage_float4x4_ColMajorstd140_0 projectionMatrix_0;
_MatrixStorage_float4x4_ColMajorstd140_0 inverseProjection_0;
vec4 cameraPosition_WS_0;
vec4 cameraForward_WS_0;
vec2 screenDimensions_0;
vec2 invScreenDimensions_0;
uint frameIndex_0;
float time_0;
};
#line 22
layout(binding = 0)
layout(std140) uniform block_ViewParameter_std140_0
{
Frustum_std140_0 viewFrustum_0;
_MatrixStorage_float4x4_ColMajorstd140_0 viewMatrix_0;
_MatrixStorage_float4x4_ColMajorstd140_0 inverseViewMatrix_0;
_MatrixStorage_float4x4_ColMajorstd140_0 projectionMatrix_0;
_MatrixStorage_float4x4_ColMajorstd140_0 inverseProjection_0;
vec4 cameraPosition_WS_0;
vec4 cameraForward_WS_0;
vec2 screenDimensions_0;
vec2 invScreenDimensions_0;
uint frameIndex_0;
float time_0;
}pViewParams_0;
#line 22
mat4x4 unpackStorage_0(_MatrixStorage_float4x4_ColMajorstd140_0 _S1)
{
#line 22
return mat4x4(_S1.data_0[0][0], _S1.data_0[1][0], _S1.data_0[2][0], _S1.data_0[3][0], _S1.data_0[0][1], _S1.data_0[1][1], _S1.data_0[2][1], _S1.data_0[3][1], _S1.data_0[0][2], _S1.data_0[1][2], _S1.data_0[2][2], _S1.data_0[3][2], _S1.data_0[0][3], _S1.data_0[1][3], _S1.data_0[2][3], _S1.data_0[3][3]);
}
#line 99
struct Plane_0
{
vec3 n_0;
float d_0;
};
#line 109
Plane_0 unpackStorage_1(Plane_std140_0 _S2)
{
#line 109
Plane_0 _S3 = { _S2.n_0, _S2.d_0 };
#line 109
return _S3;
}
#line 109
void unpackStorage_2(_Array_std140_Plane4_0 _S4, out Plane_0 _S5[4])
{
#line 109
Plane_0 _S6 = unpackStorage_1(_S4.data_2[1]);
#line 109
Plane_0 _S7 = unpackStorage_1(_S4.data_2[2]);
#line 109
Plane_0 _S8 = unpackStorage_1(_S4.data_2[3]);
#line 109
_S5[0] = unpackStorage_1(_S4.data_2[0]);
#line 109
_S5[1] = _S6;
#line 109
_S5[2] = _S7;
#line 109
_S5[3] = _S8;
#line 109
return;
}
#line 17 2
_Array_std430_uint3_0 packStorage_0(uint _S9[3])
{
#line 17
uint _S10[3] = { _S9[0], _S9[1], _S9[2] };
#line 17
_Array_std430_uint3_0 _S11 = { _S10 };
#line 17
return _S11;
}
#line 17
void unpackStorage_3(_Array_std430_uint3_0 _S12, out uint _S13[3])
{
#line 17
_S13[0] = _S12.data_1[0];
#line 17
_S13[1] = _S12.data_1[1];
#line 17
_S13[2] = _S12.data_1[2];
#line 17
return;
}
#line 17
struct BisectorData_0
{
uint indices_0[3];
uint subdivisionPattern_0;
uint problematicNeighbor_0;
uint bisectorState_0;
uint flags_0;
uint propagationID_0;
};
#line 17
BisectorData_0 unpackStorage_4(BisectorData_std430_0 _S14)
{
#line 17
uint _S15[3];
#line 17
unpackStorage_3(_S14.indices_0, _S15);
#line 17
BisectorData_0 _S16 = { _S15, _S14.subdivisionPattern_0, _S14.problematicNeighbor_0, _S14.bisectorState_0, _S14.flags_0, _S14.propagationID_0 };
#line 17
return _S16;
}
#line 17
BisectorData_std430_0 packStorage_1(BisectorData_0 _S17)
{
#line 17
BisectorData_std430_0 _S18 = { packStorage_0(_S17.indices_0), _S17.subdivisionPattern_0, _S17.problematicNeighbor_0, _S17.bisectorState_0, _S17.flags_0, _S17.propagationID_0 };
#line 17
return _S18;
}
#line 38
uint HeapIDDepth_0(uint64_t x_0)
{
#line 38
uint64_t _S19 = x_0;
#line 38
uint depth_0 = 0U;
for(;;)
{
#line 41
if(_S19 > 0UL)
{
}
else
{
#line 41
break;
}
#line 42
uint depth_1 = depth_0 + 1U;
#line 42
_S19 = _S19 >> 1U;
#line 42
depth_0 = depth_1;
#line 41
}
return depth_0;
}
#line 109 3
struct Frustum_0
{
Plane_0 sides_0[4];
};
#line 109
Frustum_0 unpackStorage_5(Frustum_std140_0 _S20)
{
#line 109
Plane_0 _S21[4];
#line 109
unpackStorage_2(_S20.sides_0, _S21);
#line 109
Frustum_0 _S22 = { _S21 };
#line 109
return _S22;
}
#line 26 4
bool FrustumAABBIntersect_0(Frustum_0 frustum_0, vec3 aabbMin_0, vec3 aabbMax_0)
{
vec3 _S23 = (aabbMax_0 + aabbMin_0) * 0.5;
vec3 _S24 = (aabbMax_0 - aabbMin_0) * 0.5;
#line 29
int i_0 = 0;
for(;;)
{
#line 30
if(i_0 < 4)
{
}
else
{
#line 30
break;
}
#line 37
if(dot(_S23 + _S24 * vec3((ivec3(sign((frustum_0.sides_0[i_0].n_0))))), frustum_0.sides_0[i_0].n_0) + frustum_0.sides_0[i_0].d_0 < 0.0)
{
#line 38
return false;
}
#line 30
i_0 = i_0 + 1;
#line 30
}
#line 40
return true;
}
#line 7
struct BisectorGeometry_0
{
vec3 p_0[4];
};
#line 43
int ClassifyBisector_0(BisectorGeometry_0 tri_0, uint depth_2)
{
vec3 viewDir_0 = normalize(- ((tri_0.p_0[0] + tri_0.p_0[1] + tri_0.p_0[2]) / 3.0));
float VdotN_0 = dot(viewDir_0, normalize(cross(tri_0.p_0[2] - tri_0.p_0[1], tri_0.p_0[0] - tri_0.p_0[1])));
#line 50
bool _S25;
if(dot(viewDir_0, pViewParams_0.cameraForward_WS_0.xyz) < 0.0)
{
#line 53
_S25 = VdotN_0 < -0.00100000004749745;
#line 53
}
else
{
#line 53
_S25 = false;
#line 53
}
#line 53
if(_S25)
{
#line 54
return -3;
}
float _S26 = tri_0.p_0[0].x;
#line 57
float _S27 = tri_0.p_0[1].x;
#line 57
float _S28 = tri_0.p_0[2].x;
#line 57
float _S29 = tri_0.p_0[0].y;
#line 57
float _S30 = tri_0.p_0[1].y;
#line 57
float _S31 = tri_0.p_0[2].y;
#line 57
float _S32 = tri_0.p_0[0].z;
#line 57
float _S33 = tri_0.p_0[1].z;
#line 57
float _S34 = tri_0.p_0[2].z;
if(!FrustumAABBIntersect_0(unpackStorage_5(pViewParams_0.viewFrustum_0), vec3(min(min(_S26, _S27), _S28), min(min(_S29, _S30), _S31), min(min(_S32, _S33), _S34)), vec3(max(max(_S26, _S27), _S28), max(max(_S29, _S30), _S31), max(max(_S32, _S33), _S34))))
{
#line 62
return -2;
}
#line 62
mat4x4 _S35 = unpackStorage_0(pParams_update_0.viewProjectionMatrix_0);
vec4 _S36 = (((vec4(tri_0.p_0[0], 1.0)) * (_S35)));
#line 66
vec4 p0P_0 = _S36;
p0P_0.xy = _S36.xy / _S36.w;
p0P_0.xy = p0P_0.xy * 0.5 + 0.5;
vec4 _S37 = (((vec4(tri_0.p_0[1], 1.0)) * (_S35)));
#line 70
vec4 p1P_0 = _S37;
p1P_0.xy = _S37.xy / _S37.w;
p1P_0.xy = p1P_0.xy * 0.5 + 0.5;
vec4 _S38 = (((vec4(tri_0.p_0[2], 1.0)) * (_S35)));
#line 74
vec4 p2P_0 = _S38;
p2P_0.xy = _S38.xy / _S38.w;
p2P_0.xy = p2P_0.xy * 0.5 + 0.5;
#line 85
float areaOverestimation_0 = mix(2.0, 1.0, pow(VdotN_0, 0.20000000298023224));
float area_0 = 0.5 * abs(p0P_0.x * (p2P_0.y - p1P_0.y) + p1P_0.x * (p0P_0.y - p2P_0.y) + p2P_0.x * (p1P_0.y - p0P_0.y)) * (pViewParams_0.screenDimensions_0.x * pViewParams_0.screenDimensions_0.y) * areaOverestimation_0;
if(pParams_update_0.triangleSize_0 < area_0)
{
#line 89
_S25 = depth_2 < pParams_update_0.maxSubdivisionDepth_0;
#line 89
}
else
{
#line 89
_S25 = false;
#line 89
}
#line 89
if(_S25)
{
return 1;
}
else
{
#line 94
if(pParams_update_0.triangleSize_0 * 0.5 > area_0)
{
#line 94
_S25 = true;
#line 94
}
else
{
#line 94
_S25 = depth_2 > pParams_update_0.maxSubdivisionDepth_0;
#line 94
}
#line 94
if(_S25)
{
vec4 _S39 = (((vec4(tri_0.p_0[3], 1.0)) * (_S35)));
#line 97
vec4 p3P_0 = _S39;
p3P_0.xy = _S39.xy / _S39.w;
p3P_0.xy = p3P_0.xy * 0.5 + 0.5;
#line 107
if(pParams_update_0.triangleSize_0 >= 0.5 * abs(p0P_0.x * (p2P_0.y - p3P_0.y) + p3P_0.x * (p0P_0.y - p2P_0.y) + p2P_0.x * (p3P_0.y - p0P_0.y)) * (pViewParams_0.screenDimensions_0.x * pViewParams_0.screenDimensions_0.y) * areaOverestimation_0)
{
#line 107
_S25 = true;
#line 107
}
else
{
#line 107
_S25 = depth_2 > pParams_update_0.maxSubdivisionDepth_0;
#line 107
}
#line 107
int _S40;
#line 107
if(_S25)
{
#line 107
_S40 = -1;
#line 107
}
else
{
#line 107
_S40 = 0;
#line 107
}
#line 107
return _S40;
}
#line 89
}
#line 109
return 0;
}
#line 140
void ClassifyElement_0(uint currentID_0, BisectorGeometry_0 bis_0, uint totalNumElements_1, uint baseDepth_1)
{
uint64_t heapID_0 = pParams_heapIDBuffer_0._data[uint(currentID_0)];
uint depth_3 = HeapIDDepth_0(pParams_heapIDBuffer_0._data[uint(currentID_0)]);
BisectorData_0 cbisectorData_0 = unpackStorage_4(pParams_bisectorDataBuffer_0._data[uint(currentID_0)]);
cbisectorData_0.subdivisionPattern_0 = 0U;
cbisectorData_0.bisectorState_0 = 0U;
cbisectorData_0.problematicNeighbor_0 = 4294967295U;
cbisectorData_0.flags_0 = 1U;
int currentValidity_0 = ClassifyBisector_0(bis_0, depth_3);
if(currentValidity_0 > 0)
{
cbisectorData_0.bisectorState_0 = 1U;
uint targetSlot_0 = atomicAdd(pParams_classificationBuffer_0._data[uint(0UL)], 1U);
pParams_classificationBuffer_0._data[uint(2UL + uint64_t(targetSlot_0))] = currentID_0;
#line 155
}
else
{
#line 155
int _S41;
#line 165
if(currentValidity_0 >= -1)
{
#line 165
_S41 = 1;
#line 165
}
else
{
#line 165
_S41 = 0;
#line 165
}
#line 165
cbisectorData_0.flags_0 = uint(_S41);
#line 155
}
#line 155
bool _S42;
#line 168
if(baseDepth_1 != depth_3)
{
#line 168
_S42 = currentValidity_0 < 0;
#line 168
}
else
{
#line 168
_S42 = false;
#line 168
}
#line 168
if(_S42)
{
cbisectorData_0.bisectorState_0 = 2U;
if(heapID_0 % 2UL == 0UL)
{
uint targetSlot_1 = atomicAdd(pParams_classificationBuffer_0._data[uint(1UL)], 1U);
pParams_classificationBuffer_0._data[uint(2UL + uint64_t(totalNumElements_1) + uint64_t(targetSlot_1))] = currentID_0;
#line 174
}
#line 168
}
#line 183
pParams_bisectorDataBuffer_0._data[uint(currentID_0)] = packStorage_1(cbisectorData_0);
return;
}
#line 14 5
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
void main()
{
#line 14
uint _S43 = gl_GlobalInvocationID.x;
if(_S43 >= pParams_indirectDrawBuffer_0._data[uint(9)])
{
#line 18
return;
}
uint _S44 = pParams_indexedBisectorBuffer_0._data[uint(_S43)];
BisectorGeometry_0 bis_1;
uint _S45 = 3U * _S44;
#line 25
bis_1.p_0[0] = pParams_currentVertexBuffer_0._data[uint(_S45)].xyz;
bis_1.p_0[1] = pParams_currentVertexBuffer_0._data[uint(_S45 + 1U)].xyz;
bis_1.p_0[2] = pParams_currentVertexBuffer_0._data[uint(_S45 + 2U)].xyz;
bis_1.p_0[3] = pParams_currentVertexBuffer_0._data[uint(3U * pParams_geometry_0.totalNumElements_0 + _S44)].xyz;
ClassifyElement_0(_S44, bis_1, pParams_geometry_0.totalNumElements_0, pParams_geometry_0.baseDepth_0);
return;
}