Lines Matching defs:const

47 static const deUint32 WATCHDOG_INTERVAL = 16384; // Touch watchDog every N iterations.
51 const DeviceInterface& vk;
63 bool pointInTriangle2D(const tcu::Vec3& p, const tcu::Vec3& p0, const tcu::Vec3& p1, const tcu::Vec3& p2)
100 void checkAccelerationStructureVertexBufferFormat (const vk::InstanceInterface &vki, vk::VkPhysicalDevice physicalDevice, vk::VkFormat format)
102 const vk::VkFormatProperties formatProperties = getPhysicalDeviceFormatProperties(vki, physicalDevice, format);
106 const std::string errorMsg = "Format not supported for acceleration structure vertex buffers";
155 RaytracedGeometryBase* buildRaytracedGeometry (const GeometryBuilderParams& params)
162 const GeometryBuilderParams builderParams { geometryType, padVertices };
292 VkDeviceAddress getBufferDeviceAddress ( const DeviceInterface& vk,
293 const VkDevice device,
294 const VkBuffer buffer,
304 DE_NULL, // const void* pNext
311 static inline Move<VkQueryPool> makeQueryPool (const DeviceInterface& vk,
312 const VkDevice device,
313 const VkQueryType queryType,
316 const VkQueryPoolCreateInfo queryPoolCreateInfo =
328 static inline VkAccelerationStructureGeometryDataKHR makeVkAccelerationStructureGeometryDataKHR (const VkAccelerationStructureGeometryTrianglesDataKHR& triangles)
339 static inline VkAccelerationStructureGeometryDataKHR makeVkAccelerationStructureGeometryDataKHR (const VkAccelerationStructureGeometryAabbsDataKHR& aabbs)
350 static inline VkAccelerationStructureGeometryDataKHR makeVkAccelerationStructureInstancesDataKHR (const VkAccelerationStructureGeometryInstancesDataKHR& instances)
361 static inline VkAccelerationStructureInstanceKHR makeVkAccelerationStructureInstanceKHR (const VkTransformMatrixKHR& transform,
376 VkResult getRayTracingShaderGroupHandlesKHR (const DeviceInterface& vk,
377 const VkDevice device,
378 const VkPipeline pipeline,
379 const deUint32 firstGroup,
380 const deUint32 groupCount,
381 const deUintptr dataSize,
387 VkResult getRayTracingShaderGroupHandles (const DeviceInterface& vk,
388 const VkDevice device,
389 const VkPipeline pipeline,
390 const deUint32 firstGroup,
391 const deUint32 groupCount,
392 const deUintptr dataSize,
398 VkResult getRayTracingCaptureReplayShaderGroupHandles (const DeviceInterface& vk,
399 const VkDevice device,
400 const VkPipeline pipeline,
401 const deUint32 firstGroup,
402 const deUint32 groupCount,
403 const deUintptr dataSize,
409 VkResult finishDeferredOperation (const DeviceInterface& vk,
460 void finishDeferredOperation (const DeviceInterface& vk,
463 const deUint32 workerThreadCount,
464 const bool operationNotDeferred)
485 const deUint32 maxThreadCountSupported = deMinu32(256u, vk.getDeferredOperationMaxConcurrencyKHR(device, deferredOperation));
486 const deUint32 requestedThreadCount = workerThreadCount;
487 const deUint32 testThreadCount = requestedThreadCount == std::numeric_limits<deUint32>::max() ? maxThreadCountSupported : requestedThreadCount;
492 const DeferredThreadParams deferredThreadParams =
494 vk, // const DeviceInterface& vk;
520 SerialStorage::SerialStorage (const DeviceInterface& vk,
521 const VkDevice device,
523 const VkAccelerationStructureBuildTypeKHR buildType,
524 const VkDeviceSize storageSize)
529 const VkBufferCreateInfo bufferCreateInfo = makeBufferCreateInfo(storageSize, VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
534 catch (const tcu::NotSupportedError&)
541 SerialStorage::SerialStorage (const DeviceInterface& vk,
542 const VkDevice device,
544 const VkAccelerationStructureBuildTypeKHR buildType,
545 const SerialInfo& serialInfo)
554 const VkBufferCreateInfo bufferCreateInfo = makeBufferCreateInfo(m_storageSize, VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
564 const deUint64& lookAddr = serialInfo.addresses()[i];
566 auto match = std::find_if(addrs.begin(), end, [&](const deUint64& item){ return item == lookAddr; });
576 VkDeviceOrHostAddressKHR SerialStorage::getAddress (const DeviceInterface& vk,
577 const VkDevice device,
578 const VkAccelerationStructureBuildTypeKHR buildType)
591 bool SerialStorage::hasDeepFormat () const
596 de::SharedPtr<SerialStorage> SerialStorage::getBottomStorage (deUint32 index) const
612 VkDeviceOrHostAddressConstKHR SerialStorage::getAddressConst (const DeviceInterface& vk,
613 const VkDevice device,
614 const VkAccelerationStructureBuildTypeKHR buildType)
622 inline VkDeviceSize SerialStorage::getStorageSize () const
627 inline const SerialInfo& SerialStorage::getSerialInfo () const
635 const deUint8* startPtr = static_cast<deUint8*>(m_buffer->getAllocation().getHostPtr());
655 void BottomLevelAccelerationStructure::setGeometryData (const std::vector<tcu::Vec3>& geometryData,
656 const bool triangles,
657 const VkGeometryFlagsKHR geometryFlags)
669 void BottomLevelAccelerationStructure::setDefaultGeometryData (const VkShaderStageFlagBits testStage,
670 const VkGeometryFlagsKHR geometryFlags)
711 void BottomLevelAccelerationStructure::setGeometryCount (const size_t geometryCount)
723 void BottomLevelAccelerationStructure::addGeometry (const std::vector<tcu::Vec3>& geometryData,
724 const bool triangles,
725 const VkGeometryFlagsKHR geometryFlags,
726 const VkAccelerationStructureTrianglesOpacityMicromapEXT* opacityGeometryMicromap)
749 VkAccelerationStructureBuildSizesInfoKHR BottomLevelAccelerationStructure::getStructureBuildSizes () const
754 DE_NULL, // const void* pNext;
761 VkDeviceSize getVertexBufferSize (const std::vector<de::SharedPtr<RaytracedGeometryBase>>& geometriesData)
770 BufferWithMemory* createVertexBuffer (const DeviceInterface& vk,
771 const VkDevice device,
773 const VkDeviceSize bufferSizeBytes)
775 const VkBufferCreateInfo bufferCreateInfo = makeBufferCreateInfo(bufferSizeBytes, VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
779 BufferWithMemory* createVertexBuffer (const DeviceInterface& vk,
780 const VkDevice device,
782 const std::vector<de::SharedPtr<RaytracedGeometryBase>>& geometriesData)
787 void updateVertexBuffer (const DeviceInterface& vk,
788 const VkDevice device,
789 const std::vector<de::SharedPtr<RaytracedGeometryBase>>& geometriesData,
793 const Allocation& geometryAlloc = vertexBuffer->getAllocation();
799 const void* geometryPtr = geometriesData[geometryNdx]->getVertexPointer();
800 const size_t geometryPtrSize = geometriesData[geometryNdx]->getVertexByteSize();
813 VkDeviceSize getIndexBufferSize (const std::vector<de::SharedPtr<RaytracedGeometryBase>>& geometriesData)
824 BufferWithMemory* createIndexBuffer (const DeviceInterface& vk,
825 const VkDevice device,
827 const VkDeviceSize bufferSizeBytes)
830 const VkBufferCreateInfo bufferCreateInfo = makeBufferCreateInfo(bufferSizeBytes, VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
834 BufferWithMemory* createIndexBuffer (const DeviceInterface& vk,
835 const VkDevice device,
837 const std::vector<de::SharedPtr<RaytracedGeometryBase>>& geometriesData)
839 const VkDeviceSize bufferSizeBytes = getIndexBufferSize(geometriesData);
843 void updateIndexBuffer (const DeviceInterface& vk,
844 const VkDevice device,
845 const std::vector<de::SharedPtr<RaytracedGeometryBase>>& geometriesData,
849 const Allocation& indexAlloc = indexBuffer->getAllocation();
857 const void* indexPtr = geometriesData[geometryNdx]->getIndexPointer();
858 const size_t indexPtrSize = geometriesData[geometryNdx]->getIndexByteSize();
878 BottomLevelAccelerationStructureKHR (const BottomLevelAccelerationStructureKHR& other) = delete;
881 void setBuildType (const VkAccelerationStructureBuildTypeKHR buildType) override;
882 VkAccelerationStructureBuildTypeKHR getBuildType () const override;
883 void setCreateFlags (const VkAccelerationStructureCreateFlagsKHR createFlags) override;
886 void setBuildFlags (const VkBuildAccelerationStructureFlagsKHR buildFlags) override;
889 void setDeferredOperation (const bool deferredOperation,
890 const deUint32 workerThreadCount) override;
891 void setUseArrayOfPointers (const bool useArrayOfPointers) override;
892 void setUseMaintenance5 (const bool useMaintenance5) override;
893 void setIndirectBuildParameters (const VkBuffer indirectBuffer,
894 const VkDeviceSize indirectBufferOffset,
895 const deUint32 indirectBufferStride) override;
896 VkBuildAccelerationStructureFlagsKHR getBuildFlags () const override;
898 void create (const DeviceInterface& vk,
899 const VkDevice device,
903 const void* pNext = DE_NULL,
904 const MemoryRequirement& addMemoryRequirement = MemoryRequirement::Any,
905 const VkBuffer creationBuffer = VK_NULL_HANDLE,
906 const VkDeviceSize creationBufferSize = 0u) override;
907 void build (const DeviceInterface& vk,
908 const VkDevice device,
909 const VkCommandBuffer cmdBuffer,
911 void copyFrom (const DeviceInterface& vk,
912 const VkDevice device,
913 const VkCommandBuffer cmdBuffer,
917 void serialize (const DeviceInterface& vk,
918 const VkDevice device,
919 const VkCommandBuffer cmdBuffer,
921 void deserialize (const DeviceInterface& vk,
922 const VkDevice device,
923 const VkCommandBuffer cmdBuffer,
926 const VkAccelerationStructureKHR* getPtr (void) const override;
952 void prepareGeometries (const DeviceInterface& vk,
953 const VkDevice device,
960 VkDeviceSize indexBufferOffset = 0) const;
962 virtual BufferWithMemory* getAccelerationStructureBuffer () const { return m_accelerationStructureBuffer.get(); }
963 virtual BufferWithMemory* getDeviceScratchBuffer () const { return m_deviceScratchBuffer.get(); }
964 virtual std::vector<deUint8>* getHostScratchBuffer () const { return m_hostScratchBuffer.get(); }
965 virtual BufferWithMemory* getVertexBuffer () const { return m_vertexBuffer.get(); }
966 virtual BufferWithMemory* getIndexBuffer () const { return m_indexBuffer.get(); }
968 virtual VkDeviceSize getAccelerationStructureBufferOffset () const { return 0; }
969 virtual VkDeviceSize getDeviceScratchBufferOffset () const { return 0; }
970 virtual VkDeviceSize getVertexBufferOffset () const { return 0; }
971 virtual VkDeviceSize getIndexBufferOffset () const { return 0; }
1012 void BottomLevelAccelerationStructureKHR::setBuildType (const VkAccelerationStructureBuildTypeKHR buildType)
1017 VkAccelerationStructureBuildTypeKHR BottomLevelAccelerationStructureKHR::getBuildType () const
1022 void BottomLevelAccelerationStructureKHR::setCreateFlags (const VkAccelerationStructureCreateFlagsKHR createFlags)
1037 void BottomLevelAccelerationStructureKHR::setBuildFlags (const VkBuildAccelerationStructureFlagsKHR buildFlags)
1052 void BottomLevelAccelerationStructureKHR::setDeferredOperation (const bool deferredOperation,
1053 const deUint32 workerThreadCount)
1059 void BottomLevelAccelerationStructureKHR::setUseArrayOfPointers (const bool useArrayOfPointers)
1064 void BottomLevelAccelerationStructureKHR::setUseMaintenance5(const bool useMaintenance5)
1069 void BottomLevelAccelerationStructureKHR::setIndirectBuildParameters (const VkBuffer indirectBuffer,
1070 const VkDeviceSize indirectBufferOffset,
1071 const deUint32 indirectBufferStride)
1078 VkBuildAccelerationStructureFlagsKHR BottomLevelAccelerationStructureKHR::getBuildFlags () const
1083 void BottomLevelAccelerationStructureKHR::create (const DeviceInterface& vk,
1084 const VkDevice device,
1088 const void* pNext,
1089 const MemoryRequirement& addMemoryRequirement,
1090 const VkBuffer creationBuffer,
1091 const VkDeviceSize creationBufferSize)
1106 const VkAccelerationStructureGeometryKHR* accelerationStructureGeometriesKHRPointer = accelerationStructureGeometriesKHR.data();
1107 const VkAccelerationStructureGeometryKHR* const* accelerationStructureGeometry = accelerationStructureGeometriesKHRPointers.data();
1109 const deUint32 geometryCount = (m_buildWithoutGeometries
1115 DE_NULL, // const void* pNext;
1122 m_useArrayOfPointers ? DE_NULL : accelerationStructureGeometriesKHRPointer, // const VkAccelerationStructureGeometryKHR* pGeometries;
1123 m_useArrayOfPointers ? accelerationStructureGeometry : DE_NULL, // const VkAccelerationStructureGeometryKHR* const* ppGeometries;
1129 DE_NULL, // const void* pNext;
1148 const bool externalCreationBuffer = (creationBuffer != VK_NULL_HANDLE);
1168 const MemoryRequirement memoryRequirement = addMemoryRequirement | MemoryRequirement::HostVisible | MemoryRequirement::Coherent | MemoryRequirement::DeviceAddress;
1169 const bool bindMemOnCreation = (!m_creationBufferUnbounded);
1175 catch (const tcu::NotSupportedError&)
1182 const auto createInfoBuffer = (externalCreationBuffer ? creationBuffer : getAccelerationStructureBuffer()->get());
1183 const auto createInfoOffset = (externalCreationBuffer ? static_cast<VkDeviceSize>(0) : getAccelerationStructureBufferOffset());
1185 const VkAccelerationStructureTypeKHR structureType = (m_createGeneric
1188 const VkAccelerationStructureCreateInfoKHR accelerationStructureCreateInfoKHR
1191 pNext, // const void* pNext;
1211 const VkBufferCreateInfo bufferCreateInfo = makeBufferCreateInfo(m_buildScratchSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
1232 const vk::MemoryRequirement memoryRequirement = MemoryRequirement::HostVisible | MemoryRequirement::Coherent | MemoryRequirement::DeviceAddress;
1243 void BottomLevelAccelerationStructureKHR::build (const DeviceInterface& vk,
1244 const VkDevice device,
1245 const VkCommandBuffer cmdBuffer,
1269 const VkAccelerationStructureGeometryKHR* accelerationStructureGeometriesKHRPointer = accelerationStructureGeometriesKHR.data();
1270 const VkAccelerationStructureGeometryKHR* const* accelerationStructureGeometry = accelerationStructureGeometriesKHRPointers.data();
1274 const deUint32 geometryCount = (m_buildWithoutGeometries
1284 DE_NULL, // const void* pNext;
1291 m_useArrayOfPointers ? DE_NULL : accelerationStructureGeometriesKHRPointer, // const VkAccelerationStructureGeometryKHR* pGeometries;
1292 m_useArrayOfPointers ? accelerationStructureGeometry : DE_NULL, // const VkAccelerationStructureGeometryKHR* const* ppGeometries;
1301 vk.cmdBuildAccelerationStructuresKHR(cmdBuffer, 1u, &accelerationStructureBuildGeometryInfoKHR, (const VkAccelerationStructureBuildRangeInfoKHR**)&accelerationStructureBuildRangeInfoKHRPtr);
1311 VK_CHECK(vk.buildAccelerationStructuresKHR(device, DE_NULL, 1u, &accelerationStructureBuildGeometryInfoKHR, (const VkAccelerationStructureBuildRangeInfoKHR**)&accelerationStructureBuildRangeInfoKHRPtr));
1315 const auto deferredOperationPtr = createDeferredOperationKHR(vk, device);
1316 const auto deferredOperation = deferredOperationPtr.get();
1318 VkResult result = vk.buildAccelerationStructuresKHR(device, deferredOperation, 1u, &accelerationStructureBuildGeometryInfoKHR, (const VkAccelerationStructureBuildRangeInfoKHR**)&accelerationStructureBuildRangeInfoKHRPtr);
1328 const VkAccessFlags accessMasks = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR | VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR;
1329 const VkMemoryBarrier memBarrier = makeMemoryBarrier(accessMasks, accessMasks);
1335 void BottomLevelAccelerationStructureKHR::copyFrom (const DeviceInterface& vk,
1336 const VkDevice device,
1337 const VkCommandBuffer cmdBuffer,
1347 DE_NULL, // const void* pNext;
1363 const auto deferredOperationPtr = createDeferredOperationKHR(vk, device);
1364 const auto deferredOperation = deferredOperationPtr.get();
1375 const VkAccessFlags accessMasks = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR | VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR;
1376 const VkMemoryBarrier memBarrier = makeMemoryBarrier(accessMasks, accessMasks);
1382 void BottomLevelAccelerationStructureKHR::serialize (const DeviceInterface& vk,
1383 const VkDevice device,
1384 const VkCommandBuffer cmdBuffer,
1390 const VkCopyAccelerationStructureToMemoryInfoKHR copyAccelerationStructureInfo =
1393 DE_NULL, // const void* pNext;
1409 const auto deferredOperationPtr = createDeferredOperationKHR(vk, device);
1410 const auto deferredOperation = deferredOperationPtr.get();
1412 const VkResult result = vk.copyAccelerationStructureToMemoryKHR(device, deferredOperation, &copyAccelerationStructureInfo);
1420 void BottomLevelAccelerationStructureKHR::deserialize (const DeviceInterface& vk,
1421 const VkDevice device,
1422 const VkCommandBuffer cmdBuffer,
1428 const VkCopyMemoryToAccelerationStructureInfoKHR copyAccelerationStructureInfo =
1431 DE_NULL, // const void* pNext;
1447 const auto deferredOperationPtr = createDeferredOperationKHR(vk, device);
1448 const auto deferredOperation = deferredOperationPtr.get();
1450 const VkResult result = vk.copyMemoryToAccelerationStructureKHR(device, deferredOperation, &copyAccelerationStructureInfo);
1459 const VkAccessFlags accessMasks = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR | VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR;
1460 const VkMemoryBarrier memBarrier = makeMemoryBarrier(accessMasks, accessMasks);
1466 const VkAccelerationStructureKHR* BottomLevelAccelerationStructureKHR::getPtr (void) const
1471 void BottomLevelAccelerationStructureKHR::prepareGeometries (const DeviceInterface& vk,
1472 const VkDevice device,
1479 VkDeviceSize indexBufferOffset) const
1489 const de::SharedPtr<RaytracedGeometryBase>& geometryData = m_geometriesData[geometryNdx];
1524 DE_NULL, // const void* pNext;
1537 const VkAccelerationStructureGeometryAabbsDataKHR accelerationStructureGeometryAabbsDataKHR =
1540 DE_NULL, // const void* pNext;
1544 const VkAccelerationStructureGeometryDataKHR geometry = (geometryData->isTrianglesType())
1547 const VkAccelerationStructureGeometryKHR accelerationStructureGeometryKHR =
1550 DE_NULL, // const void* pNext;
1556 const deUint32 primitiveCount = (m_buildWithoutPrimitives ? 0u : geometryData->getPrimitiveCount());
1558 const VkAccelerationStructureBuildRangeInfoKHR accelerationStructureBuildRangeInfosKHR =
1578 void BottomLevelAccelerationStructure::createAndBuild (const DeviceInterface& vk,
1579 const VkDevice device,
1580 const VkCommandBuffer cmdBuffer,
1588 void BottomLevelAccelerationStructure::createAndCopyFrom (const DeviceInterface& vk,
1589 const VkDevice device,
1590 const VkCommandBuffer cmdBuffer,
1604 void BottomLevelAccelerationStructure::createAndDeserializeFrom (const DeviceInterface& vk,
1605 const VkDevice device,
1606 const VkCommandBuffer cmdBuffer,
1638 BottomLevelAccelerationStructurePoolMember (const BottomLevelAccelerationStructurePoolMember&) = delete;
1642 virtual void create (const DeviceInterface&,
1643 const VkDevice,
1647 const void*,
1648 const MemoryRequirement&,
1649 const VkBuffer,
1650 const VkDeviceSize) override
1654 virtual auto computeBuildSize (const DeviceInterface& vk,
1655 const VkDevice device,
1656 const VkDeviceSize strSize) const
1661 virtual void preCreateSetSizesAndOffsets (const Info& info,
1662 const VkDeviceSize accStrSize,
1663 const VkDeviceSize updateScratchSize,
1664 const VkDeviceSize buildScratchSize);
1665 virtual void createAccellerationStructure (const DeviceInterface& vk,
1666 const VkDevice device,
1669 virtual BufferWithMemory* getAccelerationStructureBuffer () const override;
1670 virtual BufferWithMemory* getDeviceScratchBuffer () const override;
1671 virtual std::vector<deUint8>* getHostScratchBuffer () const override;
1672 virtual BufferWithMemory* getVertexBuffer () const override;
1673 virtual BufferWithMemory* getIndexBuffer () const override;
1675 virtual VkDeviceSize getAccelerationStructureBufferOffset () const override { return m_info.accStrOffset; }
1676 virtual VkDeviceSize getDeviceScratchBufferOffset () const override { return m_info.buildScratchBuffOffset; }
1677 virtual VkDeviceSize getVertexBufferOffset () const override { return m_info.vertBuffOffset; }
1678 virtual VkDeviceSize getIndexBufferOffset () const override { return m_info.indexBuffOffset; }
1695 template<class X> inline X negz (const X&)
1699 template<class X> inline bool isnegz (const X& x)
1703 template<class Y> inline auto make_unsigned(const Y& y) -> typename std::make_unsigned<Y>::type
1717 BottomLevelAccelerationStructurePoolImpl (const BottomLevelAccelerationStructurePoolImpl&) = delete;
1736 BufferWithMemory* BottomLevelAccelerationStructurePoolMember::getAccelerationStructureBuffer () const
1746 BufferWithMemory* BottomLevelAccelerationStructurePoolMember::getDeviceScratchBuffer () const
1751 std::vector<deUint8>* BottomLevelAccelerationStructurePoolMember::getHostScratchBuffer () const
1756 BufferWithMemory* BottomLevelAccelerationStructurePoolMember::getVertexBuffer () const
1766 BufferWithMemory* BottomLevelAccelerationStructurePoolMember::getIndexBuffer () const
1807 void BottomLevelAccelerationStructurePool::batchStructCount (const deUint32& value)
1824 void adjustBatchCount (const DeviceInterface& vkd,
1825 const VkDevice device,
1826 const std::vector<BottomLevelAccelerationStructurePool::BlasPtr>& structs,
1827 const std::vector<BottomLevelAccelerationStructurePool::BlasInfo>& infos,
1828 const VkDeviceSize maxBufferSize,
1854 const deUint32 maxIter = static_cast<deUint32>(structs.size());
1872 size_t BottomLevelAccelerationStructurePool::getAllocationCount () const
1880 size_t BottomLevelAccelerationStructurePool::getAllocationCount (const DeviceInterface& vk,
1881 const VkDevice device,
1882 const VkDeviceSize maxBufferSize) const
1891 const deUint32 allStructsCount = structCount();
1925 const VkDeviceSize alignedStrSize = deAlign64(strSize, 256);
1926 const deUint32 accStrIndex = (iStr / batchStructCount);
1932 const VkDeviceSize alignedBuilsScratchSize = deAlign64(buildScratchSize, 256);
1933 const deUint32 scratchBuffIndex = (iScratch/ batchScratchCount);
1940 const VkDeviceSize alignedVertBuffSize = deAlign64(vertexSize, 8);
1941 const deUint32 vertBuffIndex = (iVertex / batchVertexCount);
1948 const VkDeviceSize alignedIndexBuffSize = deAlign64(indexSize, 8);
1949 const deUint32 indexBuffIndex = (iIndex / batchIndexCount);
1961 tcu::Vector<VkDeviceSize, 4> BottomLevelAccelerationStructurePool::getAllocationSizes (const DeviceInterface& vk,
1962 const VkDevice device) const
1992 void BottomLevelAccelerationStructurePool::batchCreate (const DeviceInterface& vkd,
1993 const VkDevice device,
1999 void BottomLevelAccelerationStructurePool::batchCreateAdjust (const DeviceInterface& vkd,
2000 const VkDevice device,
2002 const VkDeviceSize maxBufferSize)
2013 const VkBufferCreateInfo bci = makeBufferCreateInfo(bufferSize, VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
2019 catch (const tcu::NotSupportedError&)
2031 const VkBufferCreateInfo bci = makeBufferCreateInfo(bufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
2040 const deUint32 allStructsCount = structCount();
2084 const VkDeviceSize alignedStrSize = deAlign64(strSize, 256);
2085 const deUint32 accStrIndex = (iStr / batchStructCount);
2108 const VkDeviceSize alignedVertBuffSize = deAlign64(vertexSize, 8);
2109 const deUint32 vertBuffIndex = (iVertex / batchVertexCount);
2125 const VkDeviceSize alignedIndexBuffSize = deAlign64(indexSize, 8);
2126 const deUint32 indexBuffIndex = (iIndex / batchIndexCount);
2171 void BottomLevelAccelerationStructurePool::batchBuild (const DeviceInterface& vk,
2172 const VkDevice device,
2175 for (const auto& str : m_structs)
2181 void BottomLevelAccelerationStructurePool::batchBuild (const DeviceInterface& vk,
2182 const VkDevice device,
2187 const deUint32 limit = 10000u;
2188 const deUint32 count = structCount();
2196 for (const auto& str : buildingOnDevice)
2225 auto BottomLevelAccelerationStructurePoolMember::computeBuildSize (const DeviceInterface& vk,
2226 const VkDevice device,
2227 const VkDeviceSize strSize) const
2244 const VkAccelerationStructureGeometryKHR* accelerationStructureGeometriesKHRPointer = accelerationStructureGeometriesKHR.data();
2245 const VkAccelerationStructureGeometryKHR* const* accelerationStructureGeometry = accelerationStructureGeometriesKHRPointers.data();
2250 DE_NULL, // const void* pNext;
2257 m_useArrayOfPointers ? DE_NULL : accelerationStructureGeometriesKHRPointer, // const VkAccelerationStructureGeometryKHR* pGeometries;
2258 m_useArrayOfPointers ? accelerationStructureGeometry : DE_NULL, // const VkAccelerationStructureGeometryKHR* const* ppGeometries;
2265 DE_NULL, // const void* pNext;
2283 void BottomLevelAccelerationStructurePoolMember::preCreateSetSizesAndOffsets (const Info& info,
2284 const VkDeviceSize accStrSize,
2285 const VkDeviceSize updateScratchSize,
2286 const VkDeviceSize buildScratchSize)
2294 void BottomLevelAccelerationStructurePoolMember::createAccellerationStructure (const DeviceInterface& vk,
2295 const VkDevice device,
2298 const VkAccelerationStructureTypeKHR structureType = (m_createGeneric
2301 const VkAccelerationStructureCreateInfoKHR accelerationStructureCreateInfoKHR
2304 DE_NULL, // const void* pNext;
2327 void TopLevelAccelerationStructure::setInstanceCount (const size_t instanceCount)
2334 const VkTransformMatrixKHR& matrix,
2344 VkAccelerationStructureBuildSizesInfoKHR TopLevelAccelerationStructure::getStructureBuildSizes () const
2349 DE_NULL, // const void* pNext;
2356 void TopLevelAccelerationStructure::createAndBuild (const DeviceInterface& vk,
2357 const VkDevice device,
2358 const VkCommandBuffer cmdBuffer,
2366 void TopLevelAccelerationStructure::createAndCopyFrom (const DeviceInterface& vk,
2367 const VkDevice device,
2368 const VkCommandBuffer cmdBuffer,
2382 void TopLevelAccelerationStructure::createAndDeserializeFrom (const DeviceInterface& vk,
2383 const VkDevice device,
2384 const VkCommandBuffer cmdBuffer,
2396 BufferWithMemory* createInstanceBuffer (const DeviceInterface& vk,
2397 const VkDevice device,
2401 const bool tryCachedMemory)
2408 const VkDeviceSize bufferSizeBytes = bottomLevelInstances.size() * sizeof(VkAccelerationStructureInstanceKHR);
2409 const VkBufferCreateInfo bufferCreateInfo = makeBufferCreateInfo(bufferSizeBytes, VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
2414 catch (const tcu::NotSupportedError&)
2423 void updateSingleInstance (const DeviceInterface& vk,
2424 const VkDevice device,
2425 const BottomLevelAccelerationStructure& bottomLevelAccelerationStructure,
2426 const InstanceData& instanceData,
2431 const VkAccelerationStructureKHR accelerationStructureKHR = *bottomLevelAccelerationStructure.getPtr();
2440 DE_NULL, // const void* pNext;
2472 void updateInstanceBuffer (const DeviceInterface& vk,
2473 const VkDevice device,
2474 const std::vector<de::SharedPtr<BottomLevelAccelerationStructure>>& bottomLevelInstances,
2475 const std::vector<InstanceData>& instanceData,
2476 const BufferWithMemory* instanceBuffer,
2489 const auto& blas = *bottomLevelInstances[instanceNdx];
2503 TopLevelAccelerationStructureKHR (const TopLevelAccelerationStructureKHR& other) = delete;
2506 void setBuildType (const VkAccelerationStructureBuildTypeKHR buildType) override;
2507 void setCreateFlags (const VkAccelerationStructureCreateFlagsKHR createFlags) override;
2510 void setBuildFlags (const VkBuildAccelerationStructureFlagsKHR buildFlags) override;
2513 void setDeferredOperation (const bool deferredOperation,
2514 const deUint32 workerThreadCount) override;
2515 void setUseArrayOfPointers (const bool useArrayOfPointers) override;
2516 void setIndirectBuildParameters (const VkBuffer indirectBuffer,
2517 const VkDeviceSize indirectBufferOffset,
2518 const deUint32 indirectBufferStride) override;
2519 void setUsePPGeometries (const bool usePPGeometries) override;
2520 void setTryCachedMemory (const bool tryCachedMemory) override;
2521 VkBuildAccelerationStructureFlagsKHR getBuildFlags () const override;
2523 void getCreationSizes (const DeviceInterface& vk,
2524 const VkDevice device,
2525 const VkDeviceSize structureSize,
2527 void create (const DeviceInterface& vk,
2528 const VkDevice device,
2532 const void* pNext = DE_NULL,
2533 const MemoryRequirement& addMemoryRequirement = MemoryRequirement::Any,
2534 const VkBuffer creationBuffer = VK_NULL_HANDLE,
2535 const VkDeviceSize creationBufferSize = 0u) override;
2536 void build (const DeviceInterface& vk,
2537 const VkDevice device,
2538 const VkCommandBuffer cmdBuffer,
2540 void copyFrom (const DeviceInterface& vk,
2541 const VkDevice device,
2542 const VkCommandBuffer cmdBuffer,
2545 void serialize (const DeviceInterface& vk,
2546 const VkDevice device,
2547 const VkCommandBuffer cmdBuffer,
2549 void deserialize (const DeviceInterface& vk,
2550 const VkDevice device,
2551 const VkCommandBuffer cmdBuffer,
2554 std::vector<VkDeviceSize> getSerializingSizes (const DeviceInterface& vk,
2555 const VkDevice device,
2556 const VkQueue queue,
2557 const deUint32 queueFamilyIndex) override;
2559 std::vector<deUint64> getSerializingAddresses (const DeviceInterface& vk,
2560 const VkDevice device) const override;
2563 const VkAccelerationStructureKHR* getPtr (void) const override;
2565 void updateInstanceMatrix (const DeviceInterface& vk,
2566 const VkDevice device,
2568 const VkTransformMatrixKHR& matrix) override;
2594 void prepareInstances (const DeviceInterface& vk,
2595 const VkDevice device,
2599 void serializeBottoms (const DeviceInterface& vk,
2600 const VkDevice device,
2601 const VkCommandBuffer cmdBuffer,
2605 void createAndDeserializeBottoms (const DeviceInterface& vk,
2606 const VkDevice device,
2607 const VkCommandBuffer cmdBuffer,
2651 void TopLevelAccelerationStructureKHR::setBuildType (const VkAccelerationStructureBuildTypeKHR buildType)
2656 void TopLevelAccelerationStructureKHR::setCreateFlags (const VkAccelerationStructureCreateFlagsKHR createFlags)
2676 void TopLevelAccelerationStructureKHR::setBuildFlags (const VkBuildAccelerationStructureFlagsKHR buildFlags)
2686 void TopLevelAccelerationStructureKHR::setDeferredOperation (const bool deferredOperation,
2687 const deUint32 workerThreadCount)
2693 void TopLevelAccelerationStructureKHR::setUseArrayOfPointers (const bool useArrayOfPointers)
2698 void TopLevelAccelerationStructureKHR::setUsePPGeometries (const bool usePPGeometries)
2703 void TopLevelAccelerationStructureKHR::setTryCachedMemory (const bool tryCachedMemory)
2708 void TopLevelAccelerationStructureKHR::setIndirectBuildParameters (const VkBuffer indirectBuffer,
2709 const VkDeviceSize indirectBufferOffset,
2710 const deUint32 indirectBufferStride)
2717 VkBuildAccelerationStructureFlagsKHR TopLevelAccelerationStructureKHR::getBuildFlags () const
2722 VkDeviceSize TopLevelAccelerationStructure::CreationSizes::sum () const
2727 void TopLevelAccelerationStructureKHR::getCreationSizes (const DeviceInterface& vk,
2728 const VkDevice device,
2729 const VkDeviceSize structureSize,
2739 const auto accelerationStructureGeometryKHRPtr = &accelerationStructureGeometryKHR;
2746 DE_NULL, // const void* pNext;
2753 (m_usePPGeometries ? nullptr : &accelerationStructureGeometryKHR), // const VkAccelerationStructureGeometryKHR* pGeometries;
2754 (m_usePPGeometries ? &accelerationStructureGeometryKHRPtr : nullptr), // const VkAccelerationStructureGeometryKHR* const* ppGeometries;
2761 DE_NULL, // const void* pNext;
2783 const size_t pointerSize = (m_buildType == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR) ? sizeof(VkDeviceOrHostAddressConstKHR::deviceAddress) : sizeof(VkDeviceOrHostAddressConstKHR::hostAddress);
2790 void TopLevelAccelerationStructureKHR::create (const DeviceInterface& vk,
2791 const VkDevice device,
2795 const void* pNext,
2796 const MemoryRequirement& addMemoryRequirement,
2797 const VkBuffer creationBuffer,
2798 const VkDeviceSize creationBufferSize)
2807 const auto accelerationStructureGeometryKHRPtr = &accelerationStructureGeometryKHR;
2814 DE_NULL, // const void* pNext;
2821 (m_usePPGeometries ? nullptr : &accelerationStructureGeometryKHR), // const VkAccelerationStructureGeometryKHR* pGeometries;
2822 (m_usePPGeometries ? &accelerationStructureGeometryKHRPtr : nullptr), // const VkAccelerationStructureGeometryKHR* const* ppGeometries;
2829 DE_NULL, // const void* pNext;
2848 const bool externalCreationBuffer = (creationBuffer != VK_NULL_HANDLE);
2858 const VkBufferCreateInfo bufferCreateInfo = makeBufferCreateInfo(m_structureSize, VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
2859 const MemoryRequirement memoryRequirement = addMemoryRequirement | MemoryRequirement::HostVisible | MemoryRequirement::Coherent | MemoryRequirement::DeviceAddress;
2860 const bool bindMemOnCreation = (!m_creationBufferUnbounded);
2866 catch (const tcu::NotSupportedError&)
2873 const auto createInfoBuffer = (externalCreationBuffer ? creationBuffer : m_accelerationStructureBuffer->get());
2875 const VkAccelerationStructureTypeKHR structureType = (m_createGeneric
2878 const VkAccelerationStructureCreateInfoKHR accelerationStructureCreateInfoKHR =
2881 pNext, // const void* pNext;
2901 const VkBufferCreateInfo bufferCreateInfo = makeBufferCreateInfo(m_buildScratchSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
2912 const size_t pointerSize = (m_buildType == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR) ? sizeof(VkDeviceOrHostAddressConstKHR::deviceAddress) : sizeof(VkDeviceOrHostAddressConstKHR::hostAddress);
2913 const VkBufferCreateInfo bufferCreateInfo = makeBufferCreateInfo(static_cast<VkDeviceSize>(m_bottomLevelInstances.size() * pointerSize), VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
2921 void TopLevelAccelerationStructureKHR::updateInstanceMatrix (const DeviceInterface& vk, const VkDevice device, size_t instanceIndex, const VkTransformMatrixKHR& matrix)
2926 const auto& blas = *m_bottomLevelInstances[instanceIndex];
2937 void TopLevelAccelerationStructureKHR::build (const DeviceInterface& vk,
2938 const VkDevice device,
2939 const VkCommandBuffer cmdBuffer,
2949 const auto accelerationStructureGeometryKHRPtr = &accelerationStructureGeometryKHR;
2963 DE_NULL, // const void* pNext;
2970 (m_usePPGeometries ? nullptr : &accelerationStructureGeometryKHR), // const VkAccelerationStructureGeometryKHR* pGeometries;
2971 (m_usePPGeometries ? &accelerationStructureGeometryKHRPtr : nullptr), // const VkAccelerationStructureGeometryKHR* const* ppGeometries;
2975 const deUint32 primitiveCount = (m_buildWithoutPrimitives ? 0u : static_cast<deUint32>(m_bottomLevelInstances.size()));
2989 vk.cmdBuildAccelerationStructuresKHR(cmdBuffer, 1u, &accelerationStructureBuildGeometryInfoKHR, (const VkAccelerationStructureBuildRangeInfoKHR**)&accelerationStructureBuildRangeInfoKHRPtr);
2999 VK_CHECK(vk.buildAccelerationStructuresKHR(device, DE_NULL, 1u, &accelerationStructureBuildGeometryInfoKHR, (const VkAccelerationStructureBuildRangeInfoKHR**)&accelerationStructureBuildRangeInfoKHRPtr));
3003 const auto deferredOperationPtr = createDeferredOperationKHR(vk, device);
3004 const auto deferredOperation = deferredOperationPtr.get();
3006 VkResult result = vk.buildAccelerationStructuresKHR(device, deferredOperation, 1u, &accelerationStructureBuildGeometryInfoKHR, (const VkAccelerationStructureBuildRangeInfoKHR**)&accelerationStructureBuildRangeInfoKHRPtr);
3017 const VkAccessFlags accessMasks = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR | VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR;
3018 const VkMemoryBarrier memBarrier = makeMemoryBarrier(accessMasks, accessMasks);
3024 void TopLevelAccelerationStructureKHR::copyFrom (const DeviceInterface& vk,
3025 const VkDevice device,
3026 const VkCommandBuffer cmdBuffer,
3036 DE_NULL, // const void* pNext;
3052 const auto deferredOperationPtr = createDeferredOperationKHR(vk, device);
3053 const auto deferredOperation = deferredOperationPtr.get();
3064 const VkAccessFlags accessMasks = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR | VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR;
3065 const VkMemoryBarrier memBarrier = makeMemoryBarrier(accessMasks, accessMasks);
3072 void TopLevelAccelerationStructureKHR::serialize (const DeviceInterface& vk,
3073 const VkDevice device,
3074 const VkCommandBuffer cmdBuffer,
3080 const VkCopyAccelerationStructureToMemoryInfoKHR copyAccelerationStructureInfo =
3083 DE_NULL, // const void* pNext;
3101 const auto deferredOperationPtr = createDeferredOperationKHR(vk, device);
3102 const auto deferredOperation = deferredOperationPtr.get();
3104 const VkResult result = vk.copyAccelerationStructureToMemoryKHR(device, deferredOperation, &copyAccelerationStructureInfo);
3113 void TopLevelAccelerationStructureKHR::deserialize (const DeviceInterface& vk,
3114 const VkDevice device,
3115 const VkCommandBuffer cmdBuffer,
3121 const VkCopyMemoryToAccelerationStructureInfoKHR copyAccelerationStructureInfo =
3124 DE_NULL, // const void* pNext;
3140 const auto deferredOperationPtr = createDeferredOperationKHR(vk, device);
3141 const auto deferredOperation = deferredOperationPtr.get();
3143 const VkResult result = vk.copyMemoryToAccelerationStructureKHR(device, deferredOperation, &copyAccelerationStructureInfo);
3152 const VkAccessFlags accessMasks = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR | VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR;
3153 const VkMemoryBarrier memBarrier = makeMemoryBarrier(accessMasks, accessMasks);
3159 void TopLevelAccelerationStructureKHR::serializeBottoms (const DeviceInterface& vk,
3160 const VkDevice device,
3161 const VkCommandBuffer cmdBuffer,
3168 const std::vector<deUint64>& addresses = storage->getSerialInfo().addresses();
3169 const std::size_t cbottoms = m_bottomLevelInstances.size();
3176 const deUint64& lookAddr = addresses[i+1];
3178 auto match = std::find_if(matches.begin(), end, [&](const deUint64& item){ return item == lookAddr; });
3188 void TopLevelAccelerationStructureKHR::createAndDeserializeBottoms (const DeviceInterface& vk,
3189 const VkDevice device,
3190 const VkCommandBuffer cmdBuffer,
3197 const std::vector<deUint64>& addresses = storage->getSerialInfo().addresses();
3198 const std::size_t cbottoms = addresses.size() - 1;
3204 const deUint64& lookAddr = addresses[i+1];
3206 auto match = std::find_if(matches.begin(), end, [&](const std::pair<deUint64, std::size_t>& item){ return item.first == lookAddr; });
3234 std::vector<VkDeviceSize> TopLevelAccelerationStructureKHR::getSerializingSizes (const DeviceInterface& vk,
3235 const VkDevice device,
3236 const VkQueue queue,
3237 const deUint32 queueFamilyIndex)
3239 const deUint32 queryCount(deUint32(m_bottomLevelInstances.size()) + 1);
3252 const Move<VkCommandPool> cmdPool = createCommandPool(vk, device, 0, queueFamilyIndex);
3253 const Move<VkCommandBuffer> cmdBuffer = allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
3254 const Move<VkQueryPool> queryPool = makeQueryPool(vk, device, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, queryCount);
3267 std::vector<deUint64> TopLevelAccelerationStructureKHR::getSerializingAddresses (const DeviceInterface& vk, const VkDevice device) const
3274 DE_NULL, // const void* pNext;
3290 const BottomLevelAccelerationStructure& bottomLevelAccelerationStructure = *m_bottomLevelInstances[instanceNdx];
3291 const VkAccelerationStructureKHR accelerationStructureKHR = *bottomLevelAccelerationStructure.getPtr();
3307 const VkAccelerationStructureKHR* TopLevelAccelerationStructureKHR::getPtr (void) const
3312 void TopLevelAccelerationStructureKHR::prepareInstances (const DeviceInterface& vk,
3313 const VkDevice device,
3376 DE_NULL, // const void* pNext;
3384 DE_NULL, // const void* pNext;
3401 bool queryAccelerationStructureSizeKHR (const DeviceInterface& vk,
3402 const VkDevice device,
3403 const VkCommandBuffer cmdBuffer,
3404 const std::vector<VkAccelerationStructureKHR>& accelerationStructureHandles,
3406 const VkQueryPool queryPool,
3430 bool queryAccelerationStructureSize (const DeviceInterface& vk,
3431 const VkDevice device,
3432 const VkCommandBuffer cmdBuffer,
3433 const std::vector<VkAccelerationStructureKHR>& accelerationStructureHandles,
3435 const VkQueryPool queryPool,
3471 const VkSpecializationInfo* specializationInfo,
3472 const VkPipelineShaderStageCreateFlags pipelineShaderStageCreateFlags,
3473 const void* pipelineShaderStageCreateInfopNext)
3481 const VkSpecializationInfo* specializationInfoPtr,
3482 const VkPipelineShaderStageCreateFlags pipelineShaderStageCreateFlags,
3483 const void* pipelineShaderStageCreateInfopNext)
3492 const VkSpecializationInfo* specializationInfoPtr,
3493 const VkPipelineShaderStageCreateFlags pipelineShaderStageCreateFlags,
3494 const void* pipelineShaderStageCreateInfopNext)
3503 DE_NULL, // const void* pNext;
3509 DE_NULL, // const void* pShaderGroupCaptureReplayHandle;
3516 const deUint32 shaderStageNdx = (deUint32)m_shaderCreateInfos.size();
3558 const VkPipelineShaderStageCreateInfo shaderCreateInfo =
3561 pipelineShaderStageCreateInfopNext, // const void* pNext;
3565 "main", // const char* pName;
3566 specializationInfoPtr, // const VkSpecializationInfo* pSpecializationInfo;
3573 void RayTracingPipeline::setGroupCaptureReplayHandle (uint32_t group, const void* pShaderGroupCaptureReplayHandle)
3593 for (const auto& lib : m_pipelineLibraries)
3599 Move<VkPipeline> RayTracingPipeline::createPipelineKHR (const DeviceInterface& vk,
3600 const VkDevice device,
3601 const VkPipelineLayout pipelineLayout,
3602 const std::vector<VkPipeline>& pipelineLibraries,
3603 const VkPipelineCache pipelineCache)
3611 DE_NULL, // const void* pNext;
3615 const VkRayTracingPipelineInterfaceCreateInfoKHR pipelineInterfaceCreateInfo =
3618 DE_NULL, // const void* pNext;
3622 const bool addPipelineInterfaceCreateInfo = m_maxPayloadSize != 0 || m_maxAttributeSize != 0;
3623 const VkRayTracingPipelineInterfaceCreateInfoKHR* pipelineInterfaceCreateInfoPtr = addPipelineInterfaceCreateInfo ? &pipelineInterfaceCreateInfo : DE_NULL;
3624 const VkPipelineLibraryCreateInfoKHR* librariesCreateInfoPtr = (pipelineLibraries.empty() ? nullptr : &librariesCreateInfo);
3633 DE_NULL, // const void* pNext;
3636 m_dynamicStates.data(), // const VkDynamicState* pDynamicStates;
3642 DE_NULL, // const void* pNext;
3645 de::dataOrNull(m_shaderCreateInfos), // const VkPipelineShaderStageCreateInfo* pStages;
3647 de::dataOrNull(m_shadersGroupCreateInfos), // const VkRayTracingShaderGroupCreateInfoKHR* pGroups;
3651 &dynamicStateCreateInfo, // const VkPipelineDynamicStateCreateInfo* pDynamicState;
3658 const bool allowCompileRequired = ((m_pipelineCreateFlags & VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT) != 0);
3682 Move<VkPipeline> RayTracingPipeline::createPipeline (const DeviceInterface& vk,
3683 const VkDevice device,
3684 const VkPipelineLayout pipelineLayout,
3685 const std::vector<de::SharedPtr<Move<VkPipeline>>>& pipelineLibraries)
3689 for (const auto& lib : pipelineLibraries)
3695 Move<VkPipeline> RayTracingPipeline::createPipeline (const DeviceInterface& vk,
3696 const VkDevice device,
3697 const VkPipelineLayout pipelineLayout,
3698 const std::vector<VkPipeline>& pipelineLibraries,
3699 const VkPipelineCache pipelineCache)
3704 std::vector<de::SharedPtr<Move<VkPipeline>>> RayTracingPipeline::createPipelineWithLibraries (const DeviceInterface& vk,
3705 const VkDevice device,
3706 const VkPipelineLayout pipelineLayout)
3727 std::vector<uint8_t> RayTracingPipeline::getShaderGroupHandles (const DeviceInterface& vk,
3728 const VkDevice device,
3729 const VkPipeline pipeline,
3730 const deUint32 shaderGroupHandleSize,
3731 const deUint32 firstGroup,
3732 const deUint32 groupCount) const
3734 const auto handleArraySizeBytes = groupCount * shaderGroupHandleSize;
3744 std::vector<uint8_t> RayTracingPipeline::getShaderGroupReplayHandles (const DeviceInterface &vk,
3745 const VkDevice device,
3746 const VkPipeline pipeline,
3747 const deUint32 shaderGroupHandleReplaySize,
3748 const deUint32 firstGroup,
3749 const deUint32 groupCount) const
3751 const auto handleArraySizeBytes = groupCount * shaderGroupHandleReplaySize;
3761 de::MovePtr<BufferWithMemory> RayTracingPipeline::createShaderBindingTable (const DeviceInterface& vk,
3762 const VkDevice device,
3763 const VkPipeline pipeline,
3765 const deUint32& shaderGroupHandleSize,
3766 const deUint32 shaderGroupBaseAlignment,
3767 const deUint32& firstGroup,
3768 const deUint32& groupCount,
3769 const VkBufferCreateFlags& additionalBufferCreateFlags,
3770 const VkBufferUsageFlags& additionalBufferUsageFlags,
3771 const MemoryRequirement& additionalMemoryRequirement,
3772 const VkDeviceAddress& opaqueCaptureAddress,
3773 const deUint32 shaderBindingTableOffset,
3774 const deUint32 shaderRecordSize,
3775 const void** shaderGroupDataPtrPerGroup,
3776 const bool autoAlignRecords)
3778 const auto shaderHandles = getShaderGroupHandles(vk, device, pipeline, shaderGroupHandleSize, firstGroup, groupCount);
3787 de::MovePtr<BufferWithMemory> RayTracingPipeline::createShaderBindingTable (const DeviceInterface& vk,
3788 const VkDevice device,
3790 const deUint32 shaderGroupHandleSize,
3791 const deUint32 shaderGroupBaseAlignment,
3792 const std::vector<uint8_t>& shaderHandles,
3793 const VkBufferCreateFlags additionalBufferCreateFlags,
3794 const VkBufferUsageFlags additionalBufferUsageFlags,
3795 const MemoryRequirement& additionalMemoryRequirement,
3796 const VkDeviceAddress opaqueCaptureAddress,
3797 const deUint32 shaderBindingTableOffset,
3798 const deUint32 shaderRecordSize,
3799 const void** shaderGroupDataPtrPerGroup,
3800 const bool autoAlignRecords)
3806 const auto groupCount = de::sizeU32(shaderHandles) / shaderGroupHandleSize;
3807 const auto totalEntrySize = (autoAlignRecords ? (deAlign32(shaderGroupHandleSize + shaderRecordSize, shaderGroupHandleSize)) : (shaderGroupHandleSize + shaderRecordSize));
3808 const deUint32 sbtSize = shaderBindingTableOffset + groupCount * totalEntrySize;
3809 const VkBufferUsageFlags sbtFlags = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | additionalBufferUsageFlags;
3816 DE_NULL, // const void* pNext;
3833 const MemoryRequirement sbtMemRequirements = MemoryRequirement::HostVisible | MemoryRequirement::Coherent | MemoryRequirement::DeviceAddress | additionalMemoryRequirement;
3841 const deUint8* shaderSrcPos = shaderHandles.data() + idx * shaderGroupHandleSize;
3861 void RayTracingPipeline::setCreateFlags (const VkPipelineCreateFlags& pipelineCreateFlags)
3866 void RayTracingPipeline::setCreateFlags2 (const VkPipelineCreateFlags2KHR& pipelineCreateFlags2)
3871 void RayTracingPipeline::setMaxRecursionDepth (const deUint32& maxRecursionDepth)
3876 void RayTracingPipeline::setMaxPayloadSize (const deUint32& maxPayloadSize)
3881 void RayTracingPipeline::setMaxAttributeSize (const deUint32& maxAttributeSize)
3886 void RayTracingPipeline::setDeferredOperation (const bool deferredOperation,
3887 const deUint32 workerThreadCount)
3893 void RayTracingPipeline::addDynamicState(const VkDynamicState& dynamicState)
3902 RayTracingPropertiesKHR (const InstanceInterface& vki,
3903 const VkPhysicalDevice physicalDevice);
3930 RayTracingPropertiesKHR::RayTracingPropertiesKHR (const InstanceInterface& vki,
3931 const VkPhysicalDevice physicalDevice)
3939 de::MovePtr<RayTracingProperties> makeRayTracingProperties (const InstanceInterface& vki,
3940 const VkPhysicalDevice physicalDevice)
3945 static inline void cmdTraceRaysKHR (const DeviceInterface& vk,
3947 const VkStridedDeviceAddressRegionKHR* raygenShaderBindingTableRegion,
3948 const VkStridedDeviceAddressRegionKHR* missShaderBindingTableRegion,
3949 const VkStridedDeviceAddressRegionKHR* hitShaderBindingTableRegion,
3950 const VkStridedDeviceAddressRegionKHR* callableShaderBindingTableRegion,
3966 void cmdTraceRays (const DeviceInterface& vk,
3968 const VkStridedDeviceAddressRegionKHR* raygenShaderBindingTableRegion,
3969 const VkStridedDeviceAddressRegionKHR* missShaderBindingTableRegion,
3970 const VkStridedDeviceAddressRegionKHR* hitShaderBindingTableRegion,
3971 const VkStridedDeviceAddressRegionKHR* callableShaderBindingTableRegion,
3992 static inline void cmdTraceRaysIndirectKHR (const DeviceInterface& vk,
3994 const VkStridedDeviceAddressRegionKHR* raygenShaderBindingTableRegion,
3995 const VkStridedDeviceAddressRegionKHR* missShaderBindingTableRegion,
3996 const VkStridedDeviceAddressRegionKHR* hitShaderBindingTableRegion,
3997 const VkStridedDeviceAddressRegionKHR* callableShaderBindingTableRegion,
4014 void cmdTraceRaysIndirect (const DeviceInterface& vk,
4016 const VkStridedDeviceAddressRegionKHR* raygenShaderBindingTableRegion,
4017 const VkStridedDeviceAddressRegionKHR* missShaderBindingTableRegion,
4018 const VkStridedDeviceAddressRegionKHR* hitShaderBindingTableRegion,
4019 const VkStridedDeviceAddressRegionKHR* callableShaderBindingTableRegion,
4031 static inline void cmdTraceRaysIndirect2KHR (const DeviceInterface& vk,
4040 void cmdTraceRaysIndirect2 (const DeviceInterface& vk,