Chromium Code Reviews| Index: src/gpu/vk/GrVkImage.cpp |
| diff --git a/src/gpu/vk/GrVkImage.cpp b/src/gpu/vk/GrVkImage.cpp |
| index 49adc574ae6a58153dbbb54087f98118a5f5c9d8..7a72b7098d3243a0c387cf11f1892bbc2da1ce27 100644 |
| --- a/src/gpu/vk/GrVkImage.cpp |
| +++ b/src/gpu/vk/GrVkImage.cpp |
| @@ -31,36 +31,36 @@ void GrVkImage::setImageLayout(const GrVkGpu* gpu, VkImageLayout newLayout, |
| bool byRegion) { |
| SkASSERT(VK_IMAGE_LAYOUT_UNDEFINED != newLayout && |
| VK_IMAGE_LAYOUT_PREINITIALIZED != newLayout); |
| + VkImageLayout currentLayout = this->currentLayout(); |
| // Is this reasonable? Could someone want to keep the same layout but use the masks to force |
| // a barrier on certain things? |
| - if (newLayout == fCurrentLayout) { |
| + if (newLayout == currentLayout) { |
| return; |
| } |
| - VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(fCurrentLayout); |
| - VkPipelineStageFlags srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(fCurrentLayout); |
| + VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(currentLayout); |
| + VkPipelineStageFlags srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(currentLayout); |
| - VkImageAspectFlags aspectFlags = vk_format_to_aspect_flags(fResource->fFormat); |
| + VkImageAspectFlags aspectFlags = vk_format_to_aspect_flags(fInfo.fFormat); |
| VkImageMemoryBarrier imageMemoryBarrier = { |
| VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType |
| NULL, // pNext |
| srcAccessMask, // outputMask |
| dstAccessMask, // inputMask |
| - fCurrentLayout, // oldLayout |
| + currentLayout, // oldLayout |
| newLayout, // newLayout |
| VK_QUEUE_FAMILY_IGNORED, // srcQueueFamilyIndex |
| VK_QUEUE_FAMILY_IGNORED, // dstQueueFamilyIndex |
| - fResource->fImage, // image |
| - { aspectFlags, 0, fResource->fLevelCount, 0, 1 } // subresourceRange |
| + fInfo.fImage, // image |
| + { aspectFlags, 0, fInfo.fLevelCount, 0, 1 } // subresourceRange |
| }; |
| gpu->addImageMemoryBarrier(srcStageMask, dstStageMask, byRegion, &imageMemoryBarrier); |
| - fCurrentLayout = newLayout; |
| + fInfo.fImageLayout = newLayout; |
| } |
| -const GrVkImage::Resource* GrVkImage::CreateResource(const GrVkGpu* gpu, |
| - const ImageDesc& imageDesc) { |
| +bool GrVkImage::GetImageInfo(const GrVkGpu* gpu, const ImageDesc& imageDesc, GrVkImageInfo* info) { |
|
jvanverth1
2016/05/13 16:14:40
'Get' seems like the wrong verb here -- it implies
egdaniel
2016/05/13 18:00:05
Done.
|
| VkImage image = 0; |
| VkDeviceMemory alloc; |
| @@ -71,7 +71,7 @@ const GrVkImage::Resource* GrVkImage::CreateResource(const GrVkGpu* gpu, |
| // Create Image |
| VkSampleCountFlagBits vkSamples; |
| if (!GrSampleCountToVkSampleCount(imageDesc.fSamples, &vkSamples)) { |
| - return nullptr; |
| + return false; |
| } |
| SkASSERT(VK_IMAGE_TILING_OPTIMAL == imageDesc.fImageTiling || |
| @@ -95,18 +95,25 @@ const GrVkImage::Resource* GrVkImage::CreateResource(const GrVkGpu* gpu, |
| initialLayout // initialLayout |
| }; |
| - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), CreateImage(gpu->device(), &imageCreateInfo, nullptr, &image)); |
| + GR_VK_CALL_ERRCHECK(gpu->vkInterface(), CreateImage(gpu->device(), &imageCreateInfo, nullptr, |
| + &image)); |
| if (!GrVkMemory::AllocAndBindImageMemory(gpu, image, imageDesc.fMemProps, &alloc)) { |
| VK_CALL(gpu, DestroyImage(gpu->device(), image, nullptr)); |
| - return nullptr; |
| + return false; |
| } |
| - GrVkImage::Resource::Flags flags = |
| - (VK_IMAGE_TILING_LINEAR == imageDesc.fImageTiling) ? Resource::kLinearTiling_Flag |
| - : Resource::kNo_Flags; |
| + info->fImage = image; |
| + info->fAlloc = alloc; |
| + info->fImageTiling = imageDesc.fImageTiling; |
| + info->fImageLayout = initialLayout; |
| + info->fFormat = imageDesc.fFormat; |
| + info->fLevelCount = imageDesc.fLevels; |
| + return true; |
| +} |
| - return (new GrVkImage::Resource(image, alloc, imageDesc.fFormat, imageDesc.fLevels, flags)); |
| +void GrVkImage::setNewResource(VkImage image, VkDeviceMemory alloc) { |
| + fResource = new Resource(image, alloc); |
| } |
| GrVkImage::~GrVkImage() { |