Browse Source

Change the max primitive count for meshlets

Panagiotis Christopoulos Charitos 2 years ago
parent
commit
353d223c62
69 changed files with 14 additions and 11 deletions
  1. 2 5
      AnKi/Renderer/GBuffer.cpp
  2. 1 0
      AnKi/ShaderCompiler/Dxc.cpp
  3. 6 0
      AnKi/Shaders/Functions.hlsl
  4. 2 2
      AnKi/Shaders/GBufferGeneric.ankiprog
  5. 1 2
      AnKi/Shaders/Include/Common.h
  6. 2 2
      AnKi/Shaders/MaterialShadersCommon.hlsl
  7. BIN
      Samples/Sponza/Assets/arc_2_5fe181d03e97a985.ankimesh
  8. BIN
      Samples/Sponza/Assets/arch_a_2340d230b53e2a69.ankimesh
  9. BIN
      Samples/Sponza/Assets/arch_support_big_68d8367a811fb94b.ankimesh
  10. BIN
      Samples/Sponza/Assets/arch_support_med_f674c0ad36e855d5.ankimesh
  11. BIN
      Samples/Sponza/Assets/arch_support_tiny_6e5678a158e0a576.ankimesh
  12. BIN
      Samples/Sponza/Assets/carpet_9773eaac1e11dc54.ankimesh
  13. BIN
      Samples/Sponza/Assets/ceiling_3fd94cde277a48e1.ankimesh
  14. BIN
      Samples/Sponza/Assets/column_a.001_d7e2987db26e19ee.ankimesh
  15. BIN
      Samples/Sponza/Assets/column_a_1e1bacae3460b88.ankimesh
  16. BIN
      Samples/Sponza/Assets/column_b_c9391d56bff59fc3.ankimesh
  17. BIN
      Samples/Sponza/Assets/column_b_top_b71e6265349a8db8.ankimesh
  18. BIN
      Samples/Sponza/Assets/column_c_43f866fc7b9f0169.ankimesh
  19. BIN
      Samples/Sponza/Assets/column_c_small_a940cbc4b06b29e0.ankimesh
  20. BIN
      Samples/Sponza/Assets/column_c_small_top_ac474e000598477b.ankimesh
  21. BIN
      Samples/Sponza/Assets/column_c_square_34f84a5277d35506.ankimesh
  22. BIN
      Samples/Sponza/Assets/door_b_43d9d0f054a59e0d.ankimesh
  23. BIN
      Samples/Sponza/Assets/fabric_a_945c29fc221550fb.ankimesh
  24. BIN
      Samples/Sponza/Assets/fabric_b_e8dd2769dc642ab7.ankimesh
  25. BIN
      Samples/Sponza/Assets/flag_pole_b7fcab939d35270d.ankimesh
  26. BIN
      Samples/Sponza/Assets/hanging_vase_a37dedd7f8c3beeb.ankimesh
  27. BIN
      Samples/Sponza/Assets/leaf_3a245efd17475037.ankimesh
  28. BIN
      Samples/Sponza/Assets/leaf_b_686ab977af97774c.ankimesh
  29. BIN
      Samples/Sponza/Assets/lion_c45d3035db3bc17b.ankimesh
  30. BIN
      Samples/Sponza/Assets/lion_frame_c8b97a33096fbdb.ankimesh
  31. BIN
      Samples/Sponza/Assets/list_8b0526c84dd681e3.ankimesh
  32. BIN
      Samples/Sponza/Assets/list_b_457f406a16f12d4d.ankimesh
  33. BIN
      Samples/Sponza/Assets/marble_list_f312f13d76c75a21.ankimesh
  34. BIN
      Samples/Sponza/Assets/metal_rod_f68ba1d1e70f4801.ankimesh
  35. BIN
      Samples/Sponza/Assets/rod_end_e8bfe2abf71f7057.ankimesh
  36. BIN
      Samples/Sponza/Assets/round_window_e1fb3c1edc11246b.ankimesh
  37. BIN
      Samples/Sponza/Assets/small_window_inner_def811d202476946.ankimesh
  38. BIN
      Samples/Sponza/Assets/small_window_outter_9a4f8126fe7e5119.ankimesh
  39. BIN
      Samples/Sponza/Assets/sponza_00_ae01670872faa30.ankimesh
  40. BIN
      Samples/Sponza/Assets/sponza_05_e7b110614ca46ef3.ankimesh
  41. BIN
      Samples/Sponza/Assets/sponza_06_fd85d8293143f003.ankimesh
  42. BIN
      Samples/Sponza/Assets/sponza_117_9e80200db76c37cf.ankimesh
  43. BIN
      Samples/Sponza/Assets/sponza_122_a88206b9ae16e15.ankimesh
  44. BIN
      Samples/Sponza/Assets/sponza_17_95d7e6624ab3177.ankimesh
  45. BIN
      Samples/Sponza/Assets/sponza_18_8f59c6e13449896e.ankimesh
  46. BIN
      Samples/Sponza/Assets/sponza_257_8ac7b83ec0e64ca0.ankimesh
  47. BIN
      Samples/Sponza/Assets/sponza_258_9e5285ce7e2189af.ankimesh
  48. BIN
      Samples/Sponza/Assets/sponza_277_a862a3463155379b.ankimesh
  49. BIN
      Samples/Sponza/Assets/sponza_278_2814c1fc2c992170.ankimesh
  50. BIN
      Samples/Sponza/Assets/sponza_279_6912e5f5d4128531.ankimesh
  51. BIN
      Samples/Sponza/Assets/sponza_280_8dec8aa3e97a7a31.ankimesh
  52. BIN
      Samples/Sponza/Assets/sponza_281_12fa6f426dc4c559.ankimesh
  53. BIN
      Samples/Sponza/Assets/sponza_34_af76802cd75f239b.ankimesh
  54. BIN
      Samples/Sponza/Assets/sponza_35_587c5a72282a0812.ankimesh
  55. BIN
      Samples/Sponza/Assets/sponza_369.002_6ab77309e0c110ae.ankimesh
  56. BIN
      Samples/Sponza/Assets/sponza_36_df4619a2b83fb4bb.ankimesh
  57. BIN
      Samples/Sponza/Assets/sponza_379_4dc198ce421c90fd.ankimesh
  58. BIN
      Samples/Sponza/Assets/sponza_380_752dc70618c5bc97.ankimesh
  59. BIN
      Samples/Sponza/Assets/sponza_381_d80b7e06247cf847.ankimesh
  60. BIN
      Samples/Sponza/Assets/sponza_382_3f192ff09cad569.ankimesh
  61. BIN
      Samples/Sponza/Assets/sponza_66_5230eeae04fcd528.ankimesh
  62. BIN
      Samples/Sponza/Assets/sponza_68_921bc07f7acf667.ankimesh
  63. BIN
      Samples/Sponza/Assets/sponza_69_c96373f43f7e6566.ankimesh
  64. BIN
      Samples/Sponza/Assets/square_door_8fb9cf0d2c5f22c9.ankimesh
  65. BIN
      Samples/Sponza/Assets/vase_45c3983f6cc9c489.ankimesh
  66. BIN
      Samples/Sponza/Assets/vase_chains_359625e2a6d6ee0a.ankimesh
  67. BIN
      Samples/Sponza/Assets/vase_flowers_b4fdd6561a1a65fb.ankimesh
  68. BIN
      Samples/Sponza/Assets/vase_hanger_2a18d1de31dd5e0d.ankimesh
  69. BIN
      Samples/Sponza/Assets/window_4ac10331d32bff8d.ankimesh

+ 2 - 5
AnKi/Renderer/GBuffer.cpp

@@ -71,16 +71,13 @@ Error GBuffer::initInternal()
 	}
 
 	// FB descr
-	AttachmentLoadOperation loadop = AttachmentLoadOperation::kDontCare;
-#if ANKI_EXTRA_CHECKS
-	loadop = AttachmentLoadOperation::kClear;
-#endif
+	const AttachmentLoadOperation loadop = AttachmentLoadOperation::kClear;
 
 	m_fbDescr.m_colorAttachmentCount = kGBufferColorRenderTargetCount;
 	for(U i = 0; i < kGBufferColorRenderTargetCount; ++i)
 	{
 		m_fbDescr.m_colorAttachments[i].m_loadOperation = loadop;
-		m_fbDescr.m_colorAttachments[i].m_clearValue.m_colorf = {1.0f, 0.0f, 1.0f, 0.0f};
+		m_fbDescr.m_colorAttachments[i].m_clearValue.m_colorf = {0.0f, 0.0f, 0.0f, 0.0f};
 	}
 
 	m_fbDescr.m_colorAttachments[3].m_loadOperation = AttachmentLoadOperation::kClear;

+ 1 - 0
AnKi/ShaderCompiler/Dxc.cpp

@@ -89,6 +89,7 @@ Error compileHlslToSpirv(CString src, ShaderType shaderType, Bool compileWith16b
 	dxcArgs.emplaceBack("-Wfatal-errors");
 	dxcArgs.emplaceBack("-Wundef");
 	dxcArgs.emplaceBack("-Wno-unused-const-variable");
+	dxcArgs.emplaceBack("-Wno-unused-parameter");
 	dxcArgs.emplaceBack("-HV");
 	dxcArgs.emplaceBack("2021");
 	dxcArgs.emplaceBack("-E");

+ 6 - 0
AnKi/Shaders/Functions.hlsl

@@ -738,3 +738,9 @@ void projectSphereView(Vec3 sphereCenter, F32 sphereRadius, F32 P00, F32 P11, ou
 	aabbMin = Vec2(minx * P00, miny * P11);
 	aabbMax = Vec2(maxx * P00, maxy * P11);
 }
+
+template<typename T>
+T barycentricInterpolation(T a, T b, T c, Vec3 barycentrics)
+{
+	return a * barycentrics.x + b * barycentrics.y + c * barycentrics.z;
+}

+ 2 - 2
AnKi/Shaders/GBufferGeneric.ankiprog

@@ -408,7 +408,7 @@ main(U32 svGroupId : SV_GROUPID, U32 svGroupIndex : SV_GROUPINDEX, in payload Ta
 		{
 			MeshPerVertOut output;
 
-			UnpackedMeshVertex vert = loadVertex(meshlet, idx, ANKI_BONES, meshlet.m_positionScale, meshlet.m_positionTranslation);
+			UnpackedMeshVertex vert = loadVertex(meshlet, idx, ANKI_BONES);
 
 			const Mat3x4 worldTransform = g_gpuScene.Load<Mat3x4>(payload.m_worldTransformsOffset);
 			const Mat3x4 prevWorldTransform = g_gpuScene.Load<Mat3x4>(payload.m_worldTransformsOffset + sizeof(Mat3x4));
@@ -453,7 +453,7 @@ main(U32 svGroupId : SV_GROUPID, U32 svGroupIndex : SV_GROUPINDEX, in payload Ta
 #	endif
 
 	// Write the primitive data
-	const U32 primLoopCount = kMaxPrimitivesPerMeshlet / ANKI_MESH_SHADER_THREADGROUP_SIZE;
+	const U32 primLoopCount = (kMaxPrimitivesPerMeshlet + ANKI_MESH_SHADER_THREADGROUP_SIZE - 1u) / ANKI_MESH_SHADER_THREADGROUP_SIZE;
 	[unroll] for(U32 l = 0; l < primLoopCount; ++l)
 	{
 		const U32 idx = l * ANKI_MESH_SHADER_THREADGROUP_SIZE + svGroupIndex;

+ 1 - 2
AnKi/Shaders/Include/Common.h

@@ -786,13 +786,12 @@ constexpr F32 kShadowsPolygonOffsetUnits = 2.75f;
 
 constexpr U32 kMaxMipsSinglePassDownsamplerCanProduce = 12u;
 
-constexpr U32 kMaxPrimitivesPerMeshlet = 128;
+constexpr U32 kMaxPrimitivesPerMeshlet = 124; ///< nVidia prefers 126 but meshoptimizer choks with that value.
 constexpr U32 kMaxVerticesPerMeshlet = 128;
 #define ANKI_TASK_SHADER_THREADGROUP_SIZE 64u
 constexpr U32 kMeshletGroupSize = ANKI_TASK_SHADER_THREADGROUP_SIZE;
 
 #define ANKI_MESH_SHADER_THREADGROUP_SIZE 32u
-static_assert(kMaxPrimitivesPerMeshlet % ANKI_MESH_SHADER_THREADGROUP_SIZE == 0);
 static_assert(kMaxVerticesPerMeshlet % ANKI_MESH_SHADER_THREADGROUP_SIZE == 0);
 
 /// Assume that a render state bucket can't go beyond 100M triangles. This helps ground some memory allocations.

+ 2 - 2
AnKi/Shaders/MaterialShadersCommon.hlsl

@@ -66,11 +66,11 @@ UnpackedMeshVertex loadVertex(GpuSceneMeshLod mlod, U32 svVertexId, Bool bones)
 	return v;
 }
 
-UnpackedMeshVertex loadVertex(MeshletGeometryDescriptor meshlet, U32 vertexIndex, Bool bones, F32 positionScale, Vec3 positionTranslation)
+UnpackedMeshVertex loadVertex(MeshletGeometryDescriptor meshlet, U32 vertexIndex, Bool bones)
 {
 	UnpackedMeshVertex v;
 	v.m_position = g_unifiedGeom_R16G16B16A16_Unorm[meshlet.m_vertexOffsets[(U32)VertexStreamId::kPosition] + vertexIndex];
-	v.m_position = v.m_position * positionScale + positionTranslation;
+	v.m_position = v.m_position * meshlet.m_positionScale + meshlet.m_positionTranslation;
 
 	v.m_normal = g_unifiedGeom_R8G8B8A8_Snorm[meshlet.m_vertexOffsets[(U32)VertexStreamId::kNormal] + vertexIndex].xyz;
 	v.m_uv = g_unifiedGeom_R32G32_Sfloat[meshlet.m_vertexOffsets[(U32)VertexStreamId::kUv] + vertexIndex];

BIN
Samples/Sponza/Assets/arc_2_5fe181d03e97a985.ankimesh


BIN
Samples/Sponza/Assets/arch_a_2340d230b53e2a69.ankimesh


BIN
Samples/Sponza/Assets/arch_support_big_68d8367a811fb94b.ankimesh


BIN
Samples/Sponza/Assets/arch_support_med_f674c0ad36e855d5.ankimesh


BIN
Samples/Sponza/Assets/arch_support_tiny_6e5678a158e0a576.ankimesh


BIN
Samples/Sponza/Assets/carpet_9773eaac1e11dc54.ankimesh


BIN
Samples/Sponza/Assets/ceiling_3fd94cde277a48e1.ankimesh


BIN
Samples/Sponza/Assets/column_a.001_d7e2987db26e19ee.ankimesh


BIN
Samples/Sponza/Assets/column_a_1e1bacae3460b88.ankimesh


BIN
Samples/Sponza/Assets/column_b_c9391d56bff59fc3.ankimesh


BIN
Samples/Sponza/Assets/column_b_top_b71e6265349a8db8.ankimesh


BIN
Samples/Sponza/Assets/column_c_43f866fc7b9f0169.ankimesh


BIN
Samples/Sponza/Assets/column_c_small_a940cbc4b06b29e0.ankimesh


BIN
Samples/Sponza/Assets/column_c_small_top_ac474e000598477b.ankimesh


BIN
Samples/Sponza/Assets/column_c_square_34f84a5277d35506.ankimesh


BIN
Samples/Sponza/Assets/door_b_43d9d0f054a59e0d.ankimesh


BIN
Samples/Sponza/Assets/fabric_a_945c29fc221550fb.ankimesh


BIN
Samples/Sponza/Assets/fabric_b_e8dd2769dc642ab7.ankimesh


BIN
Samples/Sponza/Assets/flag_pole_b7fcab939d35270d.ankimesh


BIN
Samples/Sponza/Assets/hanging_vase_a37dedd7f8c3beeb.ankimesh


BIN
Samples/Sponza/Assets/leaf_3a245efd17475037.ankimesh


BIN
Samples/Sponza/Assets/leaf_b_686ab977af97774c.ankimesh


BIN
Samples/Sponza/Assets/lion_c45d3035db3bc17b.ankimesh


BIN
Samples/Sponza/Assets/lion_frame_c8b97a33096fbdb.ankimesh


BIN
Samples/Sponza/Assets/list_8b0526c84dd681e3.ankimesh


BIN
Samples/Sponza/Assets/list_b_457f406a16f12d4d.ankimesh


BIN
Samples/Sponza/Assets/marble_list_f312f13d76c75a21.ankimesh


BIN
Samples/Sponza/Assets/metal_rod_f68ba1d1e70f4801.ankimesh


BIN
Samples/Sponza/Assets/rod_end_e8bfe2abf71f7057.ankimesh


BIN
Samples/Sponza/Assets/round_window_e1fb3c1edc11246b.ankimesh


BIN
Samples/Sponza/Assets/small_window_inner_def811d202476946.ankimesh


BIN
Samples/Sponza/Assets/small_window_outter_9a4f8126fe7e5119.ankimesh


BIN
Samples/Sponza/Assets/sponza_00_ae01670872faa30.ankimesh


BIN
Samples/Sponza/Assets/sponza_05_e7b110614ca46ef3.ankimesh


BIN
Samples/Sponza/Assets/sponza_06_fd85d8293143f003.ankimesh


BIN
Samples/Sponza/Assets/sponza_117_9e80200db76c37cf.ankimesh


BIN
Samples/Sponza/Assets/sponza_122_a88206b9ae16e15.ankimesh


BIN
Samples/Sponza/Assets/sponza_17_95d7e6624ab3177.ankimesh


BIN
Samples/Sponza/Assets/sponza_18_8f59c6e13449896e.ankimesh


BIN
Samples/Sponza/Assets/sponza_257_8ac7b83ec0e64ca0.ankimesh


BIN
Samples/Sponza/Assets/sponza_258_9e5285ce7e2189af.ankimesh


BIN
Samples/Sponza/Assets/sponza_277_a862a3463155379b.ankimesh


BIN
Samples/Sponza/Assets/sponza_278_2814c1fc2c992170.ankimesh


BIN
Samples/Sponza/Assets/sponza_279_6912e5f5d4128531.ankimesh


BIN
Samples/Sponza/Assets/sponza_280_8dec8aa3e97a7a31.ankimesh


BIN
Samples/Sponza/Assets/sponza_281_12fa6f426dc4c559.ankimesh


BIN
Samples/Sponza/Assets/sponza_34_af76802cd75f239b.ankimesh


BIN
Samples/Sponza/Assets/sponza_35_587c5a72282a0812.ankimesh


BIN
Samples/Sponza/Assets/sponza_369.002_6ab77309e0c110ae.ankimesh


BIN
Samples/Sponza/Assets/sponza_36_df4619a2b83fb4bb.ankimesh


BIN
Samples/Sponza/Assets/sponza_379_4dc198ce421c90fd.ankimesh


BIN
Samples/Sponza/Assets/sponza_380_752dc70618c5bc97.ankimesh


BIN
Samples/Sponza/Assets/sponza_381_d80b7e06247cf847.ankimesh


BIN
Samples/Sponza/Assets/sponza_382_3f192ff09cad569.ankimesh


BIN
Samples/Sponza/Assets/sponza_66_5230eeae04fcd528.ankimesh


BIN
Samples/Sponza/Assets/sponza_68_921bc07f7acf667.ankimesh


BIN
Samples/Sponza/Assets/sponza_69_c96373f43f7e6566.ankimesh


BIN
Samples/Sponza/Assets/square_door_8fb9cf0d2c5f22c9.ankimesh


BIN
Samples/Sponza/Assets/vase_45c3983f6cc9c489.ankimesh


BIN
Samples/Sponza/Assets/vase_chains_359625e2a6d6ee0a.ankimesh


BIN
Samples/Sponza/Assets/vase_flowers_b4fdd6561a1a65fb.ankimesh


BIN
Samples/Sponza/Assets/vase_hanger_2a18d1de31dd5e0d.ankimesh


BIN
Samples/Sponza/Assets/window_4ac10331d32bff8d.ankimesh