Skip to content

Commit

Permalink
Added Get Acceleration structure function
Browse files Browse the repository at this point in the history
Simply added the vulkan function GetAccelerationStructureDeviceAddress, next I'll be adding 2 more copy commands.
  • Loading branch information
AntarticCoder committed Jul 14, 2023
1 parent 5a85fdd commit 8effe9a
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 9 deletions.
10 changes: 7 additions & 3 deletions MoltenVK/MoltenVK/GPUObjects/MVKAccelerationStructure.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
vkCreateAccelerationStructureKHR - DONE
vkDestroyAccelerationStructureKHR - DONE
vkGetAccelerationStructureBuildSizesKHR - DONE
vkGetAccelerationStructureDeviceAddressKHR
vkGetAccelerationStructureDeviceAddressKHR - DONE
vkGetDeviceAccelerationStructureCompatibilityKHR - DONE
vkWriteAccelerationStructuresPropertiesKHR
*/
Expand All @@ -40,6 +40,7 @@
#import <Metal/MTLAccelerationStructure.h>
#import <Metal/MTLAccelerationStructureTypes.h>

#pragma mark -
#pragma mark MVKAccelerationStructure

class MVKAccelerationStructure : public MVKVulkanAPIDeviceObject {
Expand All @@ -58,7 +59,9 @@ class MVKAccelerationStructure : public MVKVulkanAPIDeviceObject {

/** Gets the actual size of the acceleration structure*/
uint64_t getMTLSize();


#pragma mark -
#pragma mark Getters and Setters
/** Used when building the acceleration structure, to mark whether or not an acceleration structure can be updated*/
void setAllowUpdate(bool value) { _allowUpdate = value; }

Expand All @@ -76,6 +79,7 @@ class MVKAccelerationStructure : public MVKVulkanAPIDeviceObject {

/** Gets the address of the acceleration structure*/
uint64_t getDeviceAddress() { return _address; }
#pragma mark -
#pragma mark Construction
MVKAccelerationStructure(MVKDevice* device) : MVKVulkanAPIDeviceObject(device) {}

Expand All @@ -86,5 +90,5 @@ class MVKAccelerationStructure : public MVKVulkanAPIDeviceObject {
id<MTLAccelerationStructure> _accelerationStructure;
bool _allowUpdate = false;
bool _built = false;
uint64_t _address;
uint64_t _address = 0;
};
13 changes: 7 additions & 6 deletions MoltenVK/MoltenVK/Vulkan/vulkan.mm
Original file line number Diff line number Diff line change
Expand Up @@ -2639,16 +2639,17 @@ MVK_PUBLIC_VULKAN_SYMBOL VkResult vkCreateAccelerationStructureKHR(
return rslt;
}

MVK_PUBLIC_VULKAN_SYMBOL void vkDestroyAccelerationStructureKHR(
VkDevice device,
VkAccelerationStructureKHR accelerationStructure,
const VkAllocationCallbacks* pAllocator) {
MVK_PUBLIC_VULKAN_SYMBOL VkDeviceAddress vkGetAccelerationStructureDeviceAddressKHR(
VkDevice device,
const VkAccelerationStructureDeviceAddressInfoKHR* pInfo) {

MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKAccelerationStructure* mvkAccelerationStructure = (MVKAccelerationStructure*)accelerationStructure;
mvkDev->destroyAccelerationStructure(mvkAccelerationStructure, pAllocator);
MVKAccelerationStructure* mvkAccelerationStructure = (MVKAccelerationStructure*)pInfo->accelerationStructure;
uint64_t result = mvkAccelerationStructure->getDeviceAddress();
MVKTraceVulkanCallEnd();

return (VkDeviceAddress)result;
}

MVK_PUBLIC_VULKAN_SYMBOL void vkGetAccelerationStructureBuildSizesKHR(
Expand Down

0 comments on commit 8effe9a

Please sign in to comment.