Add support for KHR_buffer_device_address
This commit is contained in:
parent
334e0cee69
commit
83c0ca60fb
@ -88,6 +88,10 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** Building with Xcode versions. */
|
/** 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
|
#ifndef MVK_XCODE_13
|
||||||
# define MVK_XCODE_13 ((__MAC_OS_X_VERSION_MAX_ALLOWED >= 120000) || \
|
# define MVK_XCODE_13 ((__MAC_OS_X_VERSION_MAX_ALLOWED >= 120000) || \
|
||||||
(__IPHONE_OS_VERSION_MAX_ALLOWED >= 150000)) // Also covers tvOS
|
(__IPHONE_OS_VERSION_MAX_ALLOWED >= 150000)) // Also covers tvOS
|
||||||
|
@ -80,6 +80,8 @@ public:
|
|||||||
/** Returns the Metal buffer used as a cache for host-coherent texel buffers. */
|
/** Returns the Metal buffer used as a cache for host-coherent texel buffers. */
|
||||||
id<MTLBuffer> getMTLBufferCache();
|
id<MTLBuffer> getMTLBufferCache();
|
||||||
|
|
||||||
|
/** Returns the GPU address for this MTLBuffer, respecting its offset. */
|
||||||
|
uint64_t getMTLBufferGPUAddress();
|
||||||
|
|
||||||
#pragma mark Construction
|
#pragma mark Construction
|
||||||
|
|
||||||
|
@ -212,6 +212,13 @@ id<MTLBuffer> MVKBuffer::getMTLBufferCache() {
|
|||||||
return _mtlBufferCache;
|
return _mtlBufferCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t MVKBuffer::getMTLBufferGPUAddress() {
|
||||||
|
#if MVK_XCODE_14
|
||||||
|
return [getMTLBuffer() gpuAddress] + getMTLBufferOffset();
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark Construction
|
#pragma mark Construction
|
||||||
|
|
||||||
MVKBuffer::MVKBuffer(MVKDevice* device, const VkBufferCreateInfo* pCreateInfo) : MVKResource(device), _usage(pCreateInfo->usage) {
|
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;
|
auto* barycentricProperties = (VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR*)next;
|
||||||
barycentricProperties->fragmentShaderBarycentric = true;
|
barycentricProperties->fragmentShaderBarycentric = true;
|
||||||
break;
|
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:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -626,6 +626,9 @@ void MVKInstance::initProcAddrs() {
|
|||||||
ADD_INST_EXT_ENTRY_POINT(vkGetMTLCommandQueueMVK, MVK_MOLTENVK);
|
ADD_INST_EXT_ENTRY_POINT(vkGetMTLCommandQueueMVK, MVK_MOLTENVK);
|
||||||
|
|
||||||
// Device extension functions:
|
// 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(vkCreateRenderPass2KHR, KHR_CREATE_RENDERPASS_2);
|
||||||
ADD_DVC_EXT_ENTRY_POINT(vkCmdBeginRenderPass2KHR, KHR_CREATE_RENDERPASS_2);
|
ADD_DVC_EXT_ENTRY_POINT(vkCmdBeginRenderPass2KHR, KHR_CREATE_RENDERPASS_2);
|
||||||
ADD_DVC_EXT_ENTRY_POINT(vkCmdNextSubpass2KHR, 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_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_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_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_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_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)
|
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);
|
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 -
|
||||||
#pragma mark VK_KHR_create_renderpass2 extension
|
#pragma mark VK_KHR_create_renderpass2 extension
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user