Graceful exit
This commit is contained in:
@@ -51,7 +51,7 @@ void taskMain(
|
||||
{
|
||||
uint m = mesh.meshletOffset + i;
|
||||
MeshletDescription meshlet = pScene.meshletInfos[m];
|
||||
if(meshlet.boundingBox.insideFrustum(localToClip, viewFrustum))
|
||||
//if(meshlet.boundingBox.insideFrustum(localToClip, viewFrustum))
|
||||
{
|
||||
uint index;
|
||||
InterlockedAdd(head, 1, index);
|
||||
|
||||
@@ -5,7 +5,7 @@ struct AABB
|
||||
float3 min;
|
||||
float pad0;
|
||||
float3 max;
|
||||
float3 pad1;
|
||||
float pad1;
|
||||
bool insideFrustum(float4x4 transform, Frustum frustum)
|
||||
{
|
||||
float3 corners[8];
|
||||
|
||||
@@ -2,7 +2,6 @@ import AABB;
|
||||
|
||||
struct MeshletDescription
|
||||
{
|
||||
AABB boundingBox;
|
||||
uint32_t vertexCount;
|
||||
uint32_t primitiveCount;
|
||||
uint32_t vertexOffset;
|
||||
@@ -11,12 +10,11 @@ struct MeshletDescription
|
||||
|
||||
struct MeshData
|
||||
{
|
||||
AABB boundingBox;
|
||||
uint numMeshlets;
|
||||
uint meshletOffset;
|
||||
uint firstIndex;
|
||||
uint numIndices;
|
||||
uint indicesOffset;
|
||||
uint32_t meshletOffset = 0;
|
||||
uint16_t numMeshlets = 0;
|
||||
uint16_t indicesOffset = 0;
|
||||
uint32_t firstIndex = 0;
|
||||
uint32_t numIndices = 0;
|
||||
};
|
||||
|
||||
static const uint MAX_VERTICES = 64;
|
||||
|
||||
+8
-167
@@ -1,178 +1,19 @@
|
||||
#version 450
|
||||
#extension GL_EXT_mesh_shader : require
|
||||
layout(row_major) uniform;
|
||||
layout(row_major) buffer;
|
||||
|
||||
#line 5 0
|
||||
struct InstanceData_0
|
||||
{
|
||||
mat4x4 transformMatrix_0;
|
||||
};
|
||||
|
||||
|
||||
#line 22
|
||||
layout(std430, binding = 0) readonly buffer StructuredBuffer_InstanceData_t_0 {
|
||||
InstanceData_0 _data[];
|
||||
} pScene_instances_0;
|
||||
|
||||
#line 5 1
|
||||
layout(std430, binding = 0, set = 2) readonly buffer StructuredBuffer_float3_t_0 {
|
||||
vec3 _data[];
|
||||
} pVertexData_positions_0;
|
||||
|
||||
#line 5
|
||||
layout(std430, binding = 1, set = 2) readonly buffer StructuredBuffer_float2_t_0 {
|
||||
vec2 _data[];
|
||||
} pVertexData_texCoords_0;
|
||||
|
||||
#line 5
|
||||
layout(std430, binding = 2, set = 2) readonly buffer StructuredBuffer_float3_t_1 {
|
||||
vec3 _data[];
|
||||
} pVertexData_normals_0;
|
||||
|
||||
#line 5
|
||||
layout(std430, binding = 3, set = 2) readonly buffer StructuredBuffer_float3_t_2 {
|
||||
vec3 _data[];
|
||||
} pVertexData_tangents_0;
|
||||
|
||||
#line 5
|
||||
layout(std430, binding = 4, set = 2) readonly buffer StructuredBuffer_float3_t_3 {
|
||||
vec3 _data[];
|
||||
} pVertexData_biTangents_0;
|
||||
|
||||
#line 5 2
|
||||
struct ViewParameter_0
|
||||
{
|
||||
mat4x4 viewMatrix_0;
|
||||
mat4x4 projectionMatrix_0;
|
||||
vec4 cameraPos_WS_0;
|
||||
vec2 screenDimensions_0;
|
||||
};
|
||||
|
||||
|
||||
#line 12
|
||||
layout(binding = 0, set = 1)
|
||||
layout(std140) uniform _S1
|
||||
{
|
||||
mat4x4 viewMatrix_0;
|
||||
mat4x4 projectionMatrix_0;
|
||||
vec4 cameraPos_WS_0;
|
||||
vec2 screenDimensions_0;
|
||||
}pViewParams_0;
|
||||
|
||||
#line 4206 3
|
||||
layout(location = 0)
|
||||
out vec3 _S2;
|
||||
|
||||
|
||||
#line 4206
|
||||
layout(location = 1)
|
||||
out vec3 _S3;
|
||||
|
||||
|
||||
#line 4206
|
||||
layout(location = 2)
|
||||
out vec2 _S4;
|
||||
|
||||
|
||||
#line 4206
|
||||
layout(location = 3)
|
||||
out vec3 _S5;
|
||||
|
||||
|
||||
#line 4206
|
||||
layout(location = 4)
|
||||
out vec3 _S6;
|
||||
|
||||
|
||||
#line 4206
|
||||
layout(location = 5)
|
||||
out vec3 _S7;
|
||||
|
||||
|
||||
#line 4206
|
||||
layout(location = 6)
|
||||
out vec3 _S8;
|
||||
|
||||
|
||||
#line 1 4
|
||||
struct MaterialParameter_0
|
||||
{
|
||||
vec3 position_TS_0;
|
||||
vec3 worldPosition_0;
|
||||
vec2 texCoords_0;
|
||||
vec3 normal_0;
|
||||
vec3 tangent_0;
|
||||
vec3 biTangent_0;
|
||||
vec3 viewDir_TS_0;
|
||||
};
|
||||
|
||||
struct VertexAttributes_0
|
||||
{
|
||||
MaterialParameter_0 parameter_0;
|
||||
vec4 clipPosition_0;
|
||||
};
|
||||
|
||||
|
||||
#line 9 1
|
||||
VertexAttributes_0 StaticMeshVertexData_getAttributes_0(uint _S9, mat4x4 _S10)
|
||||
{
|
||||
|
||||
vec4 worldPos_0 = (((vec4(pVertexData_positions_0._data[_S9], 1.0)) * (_S10)));
|
||||
|
||||
vec4 clipPos_0 = ((((((worldPos_0) * (pViewParams_0.viewMatrix_0)))) * (pViewParams_0.projectionMatrix_0)));
|
||||
|
||||
#line 10
|
||||
MaterialParameter_0 params_0;
|
||||
|
||||
#line 15
|
||||
params_0.worldPosition_0 = worldPos_0.xyz;
|
||||
params_0.texCoords_0 = pVertexData_texCoords_0._data[_S9];
|
||||
params_0.normal_0 = pVertexData_normals_0._data[_S9];
|
||||
params_0.tangent_0 = pVertexData_tangents_0._data[_S9];
|
||||
params_0.biTangent_0 = pVertexData_biTangents_0._data[_S9];
|
||||
|
||||
#line 9
|
||||
VertexAttributes_0 attributes_0;
|
||||
|
||||
#line 20
|
||||
attributes_0.parameter_0 = params_0;
|
||||
attributes_0.clipPosition_0 = clipPos_0;
|
||||
return attributes_0;
|
||||
}
|
||||
|
||||
|
||||
#line 18 0
|
||||
#line 27 0
|
||||
layout(local_size_x = 3, local_size_y = 1, local_size_z = 1) in;
|
||||
layout(max_vertices = 12) out;
|
||||
layout(max_primitives = 4) out;
|
||||
layout(triangles) out;
|
||||
void main()
|
||||
{
|
||||
|
||||
#line 18
|
||||
VertexAttributes_0 _S11 = StaticMeshVertexData_getAttributes_0(uint(gl_VertexIndex), pScene_instances_0._data[uint(gl_InstanceIndex)].transformMatrix_0);
|
||||
SetMeshOutputsEXT(12U, 4U);
|
||||
|
||||
#line 18
|
||||
_S2 = _S11.parameter_0.position_TS_0;
|
||||
|
||||
#line 18
|
||||
_S3 = _S11.parameter_0.worldPosition_0;
|
||||
|
||||
#line 18
|
||||
_S4 = _S11.parameter_0.texCoords_0;
|
||||
|
||||
#line 18
|
||||
_S5 = _S11.parameter_0.normal_0;
|
||||
|
||||
#line 18
|
||||
_S6 = _S11.parameter_0.tangent_0;
|
||||
|
||||
#line 18
|
||||
_S7 = _S11.parameter_0.biTangent_0;
|
||||
|
||||
#line 18
|
||||
_S8 = _S11.parameter_0.viewDir_TS_0;
|
||||
|
||||
#line 18
|
||||
gl_Position = _S11.clipPosition_0;
|
||||
|
||||
#line 18
|
||||
#line 46
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
+41
-60
@@ -1,63 +1,44 @@
|
||||
const static float2 positions[3] = {
|
||||
float2(0.0, -0.5),
|
||||
float2(0.5, 0.5),
|
||||
float2(-0.5, 0.5)
|
||||
};
|
||||
|
||||
struct MeshPayload
|
||||
{
|
||||
int exponent;
|
||||
};
|
||||
|
||||
groupshared MeshPayload payload;
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
[outputtopology("triangle")]
|
||||
void taskMain(
|
||||
uint3 threadID: SV_GroupIndex,
|
||||
uint3 groupID: SV_GroupID
|
||||
){
|
||||
DispatchMesh(1,1,1,payload);
|
||||
}
|
||||
|
||||
|
||||
|
||||
const static float2 positions[3] = {
|
||||
float2(0.0, -0.5),
|
||||
float2(0.5, 0.5),
|
||||
float2(-0.5, 0.5)
|
||||
};
|
||||
|
||||
const static float3 colors[3] = {
|
||||
float3(1.0, 1.0, 0.0),
|
||||
float3(0.0, 1.0, 1.0),
|
||||
float3(1.0, 0.0, 1.0)
|
||||
};
|
||||
struct Vertex
|
||||
{
|
||||
float4 pos : SV_Position;
|
||||
float3 color : Color;
|
||||
int index : Index;
|
||||
int value : Value;
|
||||
};
|
||||
|
||||
const static uint MAX_VERTS = 12;
|
||||
const static uint MAX_PRIMS = 4;
|
||||
|
||||
[outputtopology("triangle")]
|
||||
[shader("mesh")]
|
||||
[numthreads(12, 1, 1)]
|
||||
void meshMain(
|
||||
in uint tig : SV_GroupIndex,
|
||||
in payload MeshPayload meshPayload,
|
||||
out Vertices<Vertex, MAX_VERTS> verts,
|
||||
out Indices<uint3, MAX_PRIMS> triangles)
|
||||
{
|
||||
const uint numVertices = 12;
|
||||
const uint numPrimitives = 4;
|
||||
SetMeshOutputCounts(numVertices, numPrimitives);
|
||||
|
||||
if(tig < numVertices)
|
||||
const static float3 colors[3] = {
|
||||
float3(1.0, 1.0, 0.0),
|
||||
float3(0.0, 1.0, 1.0),
|
||||
float3(1.0, 0.0, 1.0)
|
||||
};
|
||||
struct Vertex
|
||||
{
|
||||
const int tri = tig / 3;
|
||||
verts[tig] = {float4(positions[tig % 3], 0, 1), colors[tig % 3], tri, int(pow(tri, meshPayload.exponent))};
|
||||
}
|
||||
float4 pos : SV_Position;
|
||||
float3 color : Color;
|
||||
int index : Index;
|
||||
};
|
||||
|
||||
if(tig < numPrimitives)
|
||||
triangles[tig] = tig * 3 + uint3(0,1,2);
|
||||
}
|
||||
const static uint MAX_VERTS = 12;
|
||||
const static uint MAX_PRIMS = 4;
|
||||
|
||||
[outputtopology("triangle")]
|
||||
[shader("mesh")]
|
||||
[numthreads(3, 1, 1)]
|
||||
void meshMain(
|
||||
in uint tig : SV_GroupIndex,
|
||||
out Vertices<Vertex, MAX_VERTS> verts,
|
||||
out Indices<uint3, MAX_PRIMS> triangles)
|
||||
{
|
||||
const uint numVertices = 12;
|
||||
const uint numPrimitives = 4;
|
||||
SetMeshOutputCounts(numVertices, numPrimitives);
|
||||
|
||||
for(uint i = tig; i < numVertices; ++i)
|
||||
{
|
||||
const int tri = i / 3;
|
||||
verts[i] = {float4(positions[i % 3], 0, 1), colors[i % 3], tri};
|
||||
}
|
||||
|
||||
for(uint i = tig; i < numPrimitives; ++i)
|
||||
{
|
||||
triangles[i] = i * 3 + uint3(0,1,2);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user