MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/Blast / damageLeafSupportActors

Method damageLeafSupportActors

test/src/perf/SolverPerfTests.cpp:116–183  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

114{
115public:
116 void damageLeafSupportActors(const char* testName, uint32_t assetCount, uint32_t familyCount, uint32_t damageCount)
117 {
118 const float relativeDamageRadius = 0.2f;
119 const float compressiveDamage = 1.0f;
120 const uint32_t minChunkCount = 100;
121 const uint32_t maxChunkCount = 10000;
122
123 srand(0);
124
125 for (uint32_t assetNum = 0; assetNum < assetCount; ++assetNum)
126 {
127 GeneratorAsset cube;
128 NvBlastAssetDesc desc;
129 generateRandomCube(cube, desc, minChunkCount, maxChunkCount);
130
131 {
132 std::vector<char> scratch;
133 scratch.resize((size_t)NvBlastGetRequiredScratchForCreateAsset(&desc, messageLog));
134 void* mem = alignedZeroedAlloc(NvBlastGetAssetMemorySize(&desc, messageLog));
135 NvBlastAsset* asset = NvBlastCreateAsset(mem, &desc, scratch.data(), messageLog);
136 EXPECT_TRUE(asset != nullptr);
137
138 // Generate familes
139 for (uint32_t familyNum = 0; familyNum < familyCount; ++familyNum)
140 {
141 // create actor
142 NvBlastActorDesc actorDesc;
143 actorDesc.initialBondHealths = nullptr;
144 actorDesc.uniformInitialBondHealth = 1.0f;
145 actorDesc.initialSupportChunkHealths = nullptr;
146 actorDesc.uniformInitialLowerSupportChunkHealth = 1.0f;
147 void* mem = alignedZeroedAlloc(NvBlastAssetGetFamilyMemorySize(asset, messageLog));
148 NvBlastFamily* family = NvBlastAssetCreateFamily(mem, asset, messageLog);
149 scratch.resize((size_t)NvBlastFamilyGetRequiredScratchForCreateFirstActor(family, messageLog));
150 EXPECT_TRUE(family != nullptr);
151 NvBlastActor* actor = NvBlastFamilyCreateFirstActor(family, &actorDesc, scratch.data(), messageLog);
152 EXPECT_TRUE(actor != nullptr);
153
154 // Generate damage
155 std::set<NvBlastActor*> actors;
156 actors.insert(actor);
157 for (uint32_t damageNum = 0; damageNum < damageCount; ++damageNum)
158 {
159 GeneratorAsset::Vec3 localPos = cube.extents*GeneratorAsset::Vec3((float)rand() / RAND_MAX - 0.5f, (float)rand() / RAND_MAX - 0.5f, (float)rand() / RAND_MAX - 0.5f);
160
161 NvBlastTimers timers;
162 NvBlastTimersReset(&timers);
163 blast(actors, &cube, localPos, relativeDamageRadius, relativeDamageRadius*1.2f, compressiveDamage, timers);
164 const std::string timingName = std::string(testName) + " asset " + std::to_string(assetNum) + " family " + std::to_string(familyNum) + " damage " + std::to_string(damageNum);
165 BlastBasePerfTestStrict::reportData(timingName + " material", timers.material);
166 BlastBasePerfTestStrict::reportData(timingName + " fracture", timers.fracture);
167 BlastBasePerfTestStrict::reportData(timingName + " island", timers.island);
168 BlastBasePerfTestStrict::reportData(timingName + " partition", timers.partition);
169 BlastBasePerfTestStrict::reportData(timingName + " visibility", timers.visibility);
170 }
171
172 // Release remaining actors
173 std::for_each(actors.begin(), actors.end(), [](NvBlastActor* a){ NvBlastActorDeactivate(a, messageLog); });

Callers

nothing calls this directly

Calls 15

generateRandomCubeFunction · 0.85
NvBlastCreateAssetFunction · 0.85
NvBlastAssetCreateFamilyFunction · 0.85
NvBlastTimersResetFunction · 0.85
NvBlastActorDeactivateFunction · 0.85
resizeMethod · 0.80
blastFunction · 0.70

Tested by

no test coverage detected