Add support for KHR_buffer_device_address
This commit is contained in:
parent
334e0cee69
commit
83c0ca60fb
@ -88,6 +88,10 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/** Building with Xcode versions. */
|
||||
#ifndef MVK_XCODE_14
|
||||
# define MVK_XCODE_14 ((__MAC_OS_X_VERSION_MAX_ALLOWED >= 130000) || \
|
||||
(__IPHONE_OS_VERSION_MAX_ALLOWED >= 160000)) // Also covers tvOS
|
||||
#endif
|
||||
#ifndef MVK_XCODE_13
|
||||
# define MVK_XCODE_13 ((__MAC_OS_X_VERSION_MAX_ALLOWED >= 120000) || \
|
||||
(__IPHONE_OS_VERSION_MAX_ALLOWED >= 150000)) // Also covers tvOS
|
||||
|
@ -79,7 +79,9 @@ public:
|
||||
|
||||
/** Returns the Metal buffer used as a cache for host-coherent texel buffers. */
|
||||
id<MTLBuffer> getMTLBufferCache();
|
||||
|
||||
|
||||
/** Returns the GPU address for this MTLBuffer, respecting its offset. */
|
||||
uint64_t getMTLBufferGPUAddress();
|
||||
|
||||
#pragma mark Construction
|
||||
|
||||
|
@ -212,6 +212,13 @@ id<MTLBuffer> MVKBuffer::getMTLBufferCache() {
|
||||
return _mtlBufferCache;
|
||||
}
|
||||
|
||||
uint64_t MVKBuffer::getMTLBufferGPUAddress() {
|
||||
#if MVK_XCODE_14
|
||||
return [getMTLBuffer() gpuAddress] + getMTLBufferOffset();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
#pragma mark Construction
|
||||
|
||||
MVKBuffer::MVKBuffer(MVKDevice* device, const VkBufferCreateInfo* pCreateInfo) : MVKResource(device), _usage(pCreateInfo->usage) {
|
||||
|
@ -291,6 +291,12 @@ void MVKPhysicalDevice::getFeatures(VkPhysicalDeviceFeatures2* features) {
|
||||
auto* barycentricProperties = (VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR*)next;
|
||||
barycentricProperties->fragmentShaderBarycentric = true;
|
||||
break;
|
||||
}
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: {
|
||||
auto* bufferDeviceAddressFeatures = (VkPhysicalDeviceBufferDeviceAddressFeatures*)next;
|
||||
bufferDeviceAddressFeatures->bufferDeviceAddress = true;
|
||||
bufferDeviceAddressFeatures->bufferDeviceAddressCaptureReplay = false;
|
||||
bufferDeviceAddressFeatures->bufferDeviceAddressMultiDevice = false;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
|
@ -626,6 +626,9 @@ void MVKInstance::initProcAddrs() {
|
||||
ADD_INST_EXT_ENTRY_POINT(vkGetMTLCommandQueueMVK, MVK_MOLTENVK);
|
||||
|
||||
// Device extension functions:
|
||||
ADD_DVC_EXT_ENTRY_POINT(vkGetBufferDeviceAddressKHR, KHR_BUFFER_DEVICE_ADDRESS);
|
||||
ADD_DVC_EXT_ENTRY_POINT(vkGetBufferOpaqueCaptureAddressKHR, KHR_BUFFER_DEVICE_ADDRESS);
|
||||
ADD_DVC_EXT_ENTRY_POINT(vkGetDeviceMemoryOpaqueCaptureAddressKHR, KHR_BUFFER_DEVICE_ADDRESS);
|
||||
ADD_DVC_EXT_ENTRY_POINT(vkCreateRenderPass2KHR, KHR_CREATE_RENDERPASS_2);
|
||||
ADD_DVC_EXT_ENTRY_POINT(vkCmdBeginRenderPass2KHR, KHR_CREATE_RENDERPASS_2);
|
||||
ADD_DVC_EXT_ENTRY_POINT(vkCmdNextSubpass2KHR, KHR_CREATE_RENDERPASS_2);
|
||||
|
@ -44,6 +44,7 @@
|
||||
MVK_EXTENSION(KHR_16bit_storage, KHR_16BIT_STORAGE, DEVICE, 10.11, 8.0)
|
||||
MVK_EXTENSION(KHR_8bit_storage, KHR_8BIT_STORAGE, DEVICE, 10.11, 8.0)
|
||||
MVK_EXTENSION(KHR_bind_memory2, KHR_BIND_MEMORY_2, DEVICE, 10.11, 8.0)
|
||||
MVK_EXTENSION(KHR_buffer_device_address, KHR_BUFFER_DEVICE_ADDRESS, DEVICE, 13.0, 16.0)
|
||||
MVK_EXTENSION(KHR_create_renderpass2, KHR_CREATE_RENDERPASS_2, DEVICE, 10.11, 8.0)
|
||||
MVK_EXTENSION(KHR_dedicated_allocation, KHR_DEDICATED_ALLOCATION, DEVICE, 10.11, 8.0)
|
||||
MVK_EXTENSION(KHR_depth_stencil_resolve, KHR_DEPTH_STENCIL_RESOLVE, DEVICE, 10.11, 8.0)
|
||||
|
@ -2325,6 +2325,33 @@ MVK_PUBLIC_VULKAN_CORE_ALIAS(vkBindBufferMemory2);
|
||||
MVK_PUBLIC_VULKAN_CORE_ALIAS(vkBindImageMemory2);
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark VK_KHR_buffer_device_address
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL VkDeviceAddress vkGetBufferDeviceAddressKHR(
|
||||
VkDevice device,
|
||||
const VkBufferDeviceAddressInfo* pInfo) {
|
||||
|
||||
MVKTraceVulkanCallStart();
|
||||
uint64_t result = ((MVKBuffer*)pInfo->buffer)->getMTLBufferGPUAddress();
|
||||
MVKTraceVulkanCallEnd();
|
||||
return (VkDeviceAddress)result;
|
||||
}
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL uint64_t vkGetBufferOpaqueCaptureAddressKHR(
|
||||
VkDevice device,
|
||||
const VkBufferDeviceAddressInfo* pInfo) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL uint64_t vkGetDeviceMemoryOpaqueCaptureAddressKHR(
|
||||
VkDevice device,
|
||||
const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark VK_KHR_create_renderpass2 extension
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user