diff --git a/inc/hgl/graph/VKDeviceAttribute.h b/inc/hgl/graph/VKDeviceAttribute.h index 669d7f65..275fab31 100644 --- a/inc/hgl/graph/VKDeviceAttribute.h +++ b/inc/hgl/graph/VKDeviceAttribute.h @@ -53,7 +53,7 @@ public: GPUDeviceAttribute(VulkanInstance *inst,const GPUPhysicalDevice *pd,VkSurfaceKHR s); ~GPUDeviceAttribute(); - bool CheckMemoryType(uint32_t typeBits,VkMemoryPropertyFlags properties,uint32_t *typeIndex) const; + int GetMemoryType(uint32_t typeBits,VkMemoryPropertyFlags properties) const; void RefreshSurfaceCaps(); diff --git a/inc/hgl/graph/VKPhysicalDevice.h b/inc/hgl/graph/VKPhysicalDevice.h index e75f1279..702c0caf 100644 --- a/inc/hgl/graph/VKPhysicalDevice.h +++ b/inc/hgl/graph/VKPhysicalDevice.h @@ -31,7 +31,7 @@ public: operator VkPhysicalDevice(){return physical_device;} operator const VkPhysicalDevice()const{return physical_device;} - const bool CheckMemoryType(uint32_t,VkMemoryPropertyFlags,uint32_t *)const; + const int GetMemoryType(uint32_t,VkMemoryPropertyFlags)const; VkPhysicalDeviceType GetDeviceType()const{return properties.deviceType;} const char * GetDeviceName()const{return properties.deviceName;} diff --git a/src/SceneGraph/Vulkan/VKDeviceAttribute.cpp b/src/SceneGraph/Vulkan/VKDeviceAttribute.cpp index 4860f633..45a27aeb 100644 --- a/src/SceneGraph/Vulkan/VKDeviceAttribute.cpp +++ b/src/SceneGraph/Vulkan/VKDeviceAttribute.cpp @@ -40,9 +40,9 @@ GPUDeviceAttribute::~GPUDeviceAttribute() instance->DestroySurface(surface); } -bool GPUDeviceAttribute::CheckMemoryType(uint32_t typeBits,VkMemoryPropertyFlags properties,uint32_t *typeIndex) const +int GPUDeviceAttribute::GetMemoryType(uint32_t typeBits,VkMemoryPropertyFlags properties) const { - return physical_device->CheckMemoryType(typeBits,properties,typeIndex); + return physical_device->GetMemoryType(typeBits,properties); } void GPUDeviceAttribute::RefreshSurfaceCaps() diff --git a/src/SceneGraph/Vulkan/VKDeviceTexture.cpp b/src/SceneGraph/Vulkan/VKDeviceTexture.cpp index 9dc61f1d..0a520c59 100644 --- a/src/SceneGraph/Vulkan/VKDeviceTexture.cpp +++ b/src/SceneGraph/Vulkan/VKDeviceTexture.cpp @@ -246,7 +246,7 @@ bool GPUDevice::CommitTexture2D(Texture2D *tex,GPUBuffer *buf,const VkBufferImag VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, count, buffer_image_copy); - + if(destinationStage==VK_PIPELINE_STAGE_TRANSFER_BIT) //接下来还有,一般是给自动生成mipmaps { texture_cmd_buf->ImageMemoryBarrier(tex->GetImage(), diff --git a/src/SceneGraph/Vulkan/VKMemory.cpp b/src/SceneGraph/Vulkan/VKMemory.cpp index cfe975f8..aedc7ca9 100644 --- a/src/SceneGraph/Vulkan/VKMemory.cpp +++ b/src/SceneGraph/Vulkan/VKMemory.cpp @@ -4,9 +4,9 @@ VK_NAMESPACE_BEGIN GPUMemory *GPUDevice::CreateMemory(const VkMemoryRequirements &req,uint32_t properties) { - uint32_t index; + const int index=attr->physical_device->GetMemoryType(req.memoryTypeBits,properties); - if(!attr->physical_device->CheckMemoryType(req.memoryTypeBits,properties,&index)) + if(index<0) return(nullptr); MemoryAllocateInfo alloc_info(index,req.size); diff --git a/src/SceneGraph/Vulkan/VKPhysicalDevice.cpp b/src/SceneGraph/Vulkan/VKPhysicalDevice.cpp index b30e867a..f2fda25b 100644 --- a/src/SceneGraph/Vulkan/VKPhysicalDevice.cpp +++ b/src/SceneGraph/Vulkan/VKPhysicalDevice.cpp @@ -193,24 +193,20 @@ const bool GPUPhysicalDevice::CheckExtensionSupport(const AnsiString &name)const return(false); } -const bool GPUPhysicalDevice::CheckMemoryType(uint32_t typeBits,VkMemoryPropertyFlags properties,uint32_t *typeIndex)const +const int GPUPhysicalDevice::GetMemoryType(uint32_t typeBits,VkMemoryPropertyFlags properties)const { // Search memtypes to find first index with those properties - for(uint32_t i=0; i>=1; } + // No memory types matched, return failure - return false; + return -1; } VkFormat GPUPhysicalDevice::GetDepthFormat(bool lower_to_high)const