MCPcopy Create free account
hub / github.com/KhronosGroup/Vulkan-ValidationLayers / GetSizeInfo

Method GetSizeInfo

tests/framework/ray_tracing_objects.cpp:1018–1062  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1016}
1017
1018VkAccelerationStructureBuildSizesInfoKHR BuildGeometryInfoKHR::GetSizeInfo(bool use_ppGeometries /*= true*/) {
1019 // Computer total primitives count, and get pointers to geometries
1020 std::vector<uint32_t> primitives_count(geometries_.size());
1021 std::vector<const VkAccelerationStructureGeometryKHR*> pGeometries;
1022 std::vector<VkAccelerationStructureGeometryKHR> geometries;
1023
1024 if (use_ppGeometries) {
1025 pGeometries.reserve(geometries_.size());
1026 } else {
1027 geometries.reserve(geometries_.size());
1028 }
1029
1030 for (const auto& [geometry_i, geometry] : vvl::enumerate(geometries_)) {
1031 primitives_count[geometry_i] = geometry.GetFullBuildRange().primitiveCount;
1032 if (use_ppGeometries) {
1033 pGeometries.emplace_back(&geometry.GetVkObj());
1034 } else {
1035 geometries.emplace_back(geometry.GetVkObj());
1036 }
1037 }
1038 vk_info_.geometryCount = static_cast<uint32_t>(geometries_.size());
1039 if (use_null_geometries_) {
1040 vk_info_.pGeometries = nullptr;
1041 vk_info_.ppGeometries = nullptr;
1042 } else if (use_ppGeometries) {
1043 vk_info_.ppGeometries = pGeometries.data();
1044 } else {
1045 vk_info_.pGeometries = geometries.data();
1046 }
1047
1048 // Get VkAccelerationStructureBuildSizesInfoKHR using this->vk_info_
1049 VkAccelerationStructureBuildSizesInfoKHR size_info = vku::InitStructHelper();
1050 if (vk_info_.type == VK_ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_KHR) {
1051 vk::GetAccelerationStructureBuildSizesKHR(device_->handle(), build_type_, &vk_info_, nullptr, &size_info);
1052 } else {
1053 vk::GetAccelerationStructureBuildSizesKHR(device_->handle(), build_type_, &vk_info_, primitives_count.data(), &size_info);
1054 }
1055
1056 // pGeometries and geometries are going to be destroyed
1057 vk_info_.geometryCount = 0;
1058 vk_info_.ppGeometries = nullptr;
1059 vk_info_.pGeometries = nullptr;
1060
1061 return size_info;
1062}
1063
1064std::vector<VkAccelerationStructureBuildRangeInfoKHR> BuildGeometryInfoKHR::GetBuildRangeInfosFromGeometries() {
1065 std::vector<VkAccelerationStructureBuildRangeInfoKHR> range_infos(geometries_.size());

Callers 11

CreateTLASFunction · 0.80
TEST_FFunction · 0.80
TEST_FFunction · 0.80
TEST_FFunction · 0.80
TEST_FFunction · 0.80

Calls 8

enumerateFunction · 0.85
GetFullBuildRangeMethod · 0.80
emplace_backMethod · 0.80
sizeMethod · 0.45
reserveMethod · 0.45
dataMethod · 0.45
handleMethod · 0.45

Tested by

no test coverage detected