@@ -38,6 +38,16 @@ static const double PUSH_GARBAGE_COLLECTION_DELAY = 10.0;
3838VulkanPushPool::VulkanPushPool (VulkanContext *vulkan, const char *name, size_t originalBlockSize, VkBufferUsageFlags usage)
3939 : vulkan_(vulkan), name_(name), originalBlockSize_(originalBlockSize), usage_(usage) {
4040 RegisterGPUMemoryManager (this );
41+
42+ #if PPSSPP_PLATFORM(MAC) && PPSSPP_ARCH(AMD64)
43+ allocation_extra_flags_ = 0 ;
44+ if (vulkan_->GetPhysicalDeviceProperties ().properties .vendorID != VULKAN_VENDOR_INTEL) {
45+ // ref https://github.com/KhronosGroup/MoltenVK/issues/960
46+ INFO_LOG (Log::G3D, " MoltenVK with dedicated gpu, adding VK_MEMORY_PROPERTY_HOST_COHERENT_BIT" );
47+ allocation_extra_flags_ = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
48+ }
49+ #endif
50+
4151 for (int i = 0 ; i < VulkanContext::MAX_INFLIGHT_FRAMES; i++) {
4252 blocks_.push_back (CreateBlock (originalBlockSize));
4353 blocks_.back ().original = true ;
@@ -67,7 +77,11 @@ VulkanPushPool::Block VulkanPushPool::CreateBlock(size_t size) {
6777 b.usage = usage_;
6878 b.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
6979 VmaAllocationCreateInfo allocCreateInfo{};
80+
7081 allocCreateInfo.usage = VMA_MEMORY_USAGE_CPU_TO_GPU;
82+ #if PPSSPP_PLATFORM(MAC) && PPSSPP_ARCH(AMD64)
83+ allocCreateInfo.requiredFlags = allocation_extra_flags_;
84+ #endif
7185 VmaAllocationInfo allocInfo{};
7286
7387 VkResult result = vmaCreateBuffer (vulkan_->Allocator (), &b, &allocCreateInfo, &block.buffer , &block.allocation , &allocInfo);
0 commit comments