| 114 | { |
| 115 | public: |
| 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); }); |
nothing calls this directly
no test coverage detected