diff options
-rw-r--r-- | gm/imagefromyuvtextures.cpp | 6 | ||||
-rw-r--r-- | include/gpu/vk/GrVkTypes.h | 14 | ||||
-rw-r--r-- | src/gpu/vk/GrVkCommandBuffer.cpp | 26 | ||||
-rw-r--r-- | src/gpu/vk/GrVkCommandBuffer.h | 24 | ||||
-rw-r--r-- | src/gpu/vk/GrVkGpu.cpp | 57 | ||||
-rw-r--r-- | src/gpu/vk/GrVkImage.cpp | 46 | ||||
-rw-r--r-- | src/gpu/vk/GrVkImage.h | 118 | ||||
-rw-r--r-- | src/gpu/vk/GrVkPipelineState.cpp | 2 | ||||
-rw-r--r-- | src/gpu/vk/GrVkPipelineState.h | 2 | ||||
-rw-r--r-- | src/gpu/vk/GrVkRenderTarget.cpp | 131 | ||||
-rw-r--r-- | src/gpu/vk/GrVkRenderTarget.h | 61 | ||||
-rw-r--r-- | src/gpu/vk/GrVkStencilAttachment.cpp | 16 | ||||
-rw-r--r-- | src/gpu/vk/GrVkStencilAttachment.h | 4 | ||||
-rw-r--r-- | src/gpu/vk/GrVkTexture.cpp | 118 | ||||
-rw-r--r-- | src/gpu/vk/GrVkTexture.h | 17 | ||||
-rw-r--r-- | src/gpu/vk/GrVkTextureRenderTarget.cpp | 104 | ||||
-rw-r--r-- | src/gpu/vk/GrVkTextureRenderTarget.h | 61 | ||||
-rw-r--r-- | tests/VkWrapTests.cpp | 12 | ||||
-rw-r--r-- | tools/viewer/sk_app/VulkanWindowContext.cpp | 2 |
19 files changed, 401 insertions, 420 deletions
diff --git a/gm/imagefromyuvtextures.cpp b/gm/imagefromyuvtextures.cpp index a34ec6e513..5fa55da388 100644 --- a/gm/imagefromyuvtextures.cpp +++ b/gm/imagefromyuvtextures.cpp @@ -129,8 +129,6 @@ protected: return; } - GrBackendObject yuvHandles[3]; - this->createYUVTextures(context, yuvHandles); static const SkScalar kPad = 10.f; @@ -142,12 +140,14 @@ protected: SkTArray<sk_sp<SkImage>> images; images.push_back(fRGBImage); for (int space = kJPEG_SkYUVColorSpace; space <= kLastEnum_SkYUVColorSpace; ++space) { + GrBackendObject yuvHandles[3]; + this->createYUVTextures(context, yuvHandles); images.push_back(SkImage::MakeFromYUVTexturesCopy(context, static_cast<SkYUVColorSpace>(space), yuvHandles, sizes, kTopLeft_GrSurfaceOrigin)); + this->deleteYUVTextures(context, yuvHandles); } - this->deleteYUVTextures(context, yuvHandles); for (int i = 0; i < images.count(); ++ i) { SkScalar y = (i + 1) * kPad + i * fYUVBmps[0].height(); SkScalar x = kPad; diff --git a/include/gpu/vk/GrVkTypes.h b/include/gpu/vk/GrVkTypes.h index 2e6a255630..deee409e6f 100644 --- a/include/gpu/vk/GrVkTypes.h +++ b/include/gpu/vk/GrVkTypes.h @@ -27,18 +27,22 @@ /////////////////////////////////////////////////////////////////////////////// /** * Types for interacting with Vulkan resources created externally to Skia. GrBackendObjects for - * Vulkan textures are really const GrVkTextureInfo* + * Vulkan textures are really const GrVkImageInfo* */ - -struct GrVkTextureInfo { +struct GrVkImageInfo { VkImage fImage; - VkDeviceMemory fAlloc; // this may be null iff the texture is an RT and uses borrow semantics + VkDeviceMemory fAlloc; // can be VK_NULL_HANDLE iff Tex is an RT and uses borrow semantics VkImageTiling fImageTiling; VkImageLayout fImageLayout; VkFormat fFormat; uint32_t fLevelCount; + + // This gives a way for a client to update the layout of the Image if they change the layout + // while we're still holding onto the wrapped texture. They will first need to get a handle + // to our internal GrVkImageInfo by calling getTextureHandle on a GrVkTexture. + void updateImageLayout(VkImageLayout layout) { fImageLayout = layout; } }; -GR_STATIC_ASSERT(sizeof(GrBackendObject) >= sizeof(const GrVkTextureInfo*)); +GR_STATIC_ASSERT(sizeof(GrBackendObject) >= sizeof(const GrVkImageInfo*)); #endif diff --git a/src/gpu/vk/GrVkCommandBuffer.cpp b/src/gpu/vk/GrVkCommandBuffer.cpp index 5bd43f26b3..bc8c20f016 100644 --- a/src/gpu/vk/GrVkCommandBuffer.cpp +++ b/src/gpu/vk/GrVkCommandBuffer.cpp @@ -251,30 +251,32 @@ void GrVkCommandBuffer::copyImage(const GrVkGpu* gpu, this->addResource(srcImage->resource()); this->addResource(dstImage->resource()); GR_VK_CALL(gpu->vkInterface(), CmdCopyImage(fCmdBuffer, - srcImage->textureImage(), + srcImage->image(), srcLayout, - dstImage->textureImage(), + dstImage->image(), dstLayout, copyRegionCount, copyRegions)); } void GrVkCommandBuffer::blitImage(const GrVkGpu* gpu, - const GrVkImage::Resource* srcImage, + const GrVkResource* srcResource, + VkImage srcImage, VkImageLayout srcLayout, - const GrVkImage::Resource* dstImage, + const GrVkResource* dstResource, + VkImage dstImage, VkImageLayout dstLayout, uint32_t blitRegionCount, const VkImageBlit* blitRegions, VkFilter filter) { SkASSERT(fIsActive); SkASSERT(!fActiveRenderPass); - this->addResource(srcImage); - this->addResource(dstImage); + this->addResource(srcResource); + this->addResource(dstResource); GR_VK_CALL(gpu->vkInterface(), CmdBlitImage(fCmdBuffer, - srcImage->fImage, + srcImage, srcLayout, - dstImage->fImage, + dstImage, dstLayout, blitRegionCount, blitRegions, @@ -292,7 +294,7 @@ void GrVkCommandBuffer::copyImageToBuffer(const GrVkGpu* gpu, this->addResource(srcImage->resource()); this->addResource(dstBuffer->resource()); GR_VK_CALL(gpu->vkInterface(), CmdCopyImageToBuffer(fCmdBuffer, - srcImage->textureImage(), + srcImage->image(), srcLayout, dstBuffer->buffer(), copyRegionCount, @@ -311,7 +313,7 @@ void GrVkCommandBuffer::copyBufferToImage(const GrVkGpu* gpu, this->addResource(dstImage->resource()); GR_VK_CALL(gpu->vkInterface(), CmdCopyBufferToImage(fCmdBuffer, srcBuffer->buffer(), - dstImage->textureImage(), + dstImage->image(), dstLayout, copyRegionCount, copyRegions)); @@ -326,7 +328,7 @@ void GrVkCommandBuffer::clearColorImage(const GrVkGpu* gpu, SkASSERT(!fActiveRenderPass); this->addResource(image->resource()); GR_VK_CALL(gpu->vkInterface(), CmdClearColorImage(fCmdBuffer, - image->textureImage(), + image->image(), image->currentLayout(), color, subRangeCount, @@ -342,7 +344,7 @@ void GrVkCommandBuffer::clearDepthStencilImage(const GrVkGpu* gpu, SkASSERT(!fActiveRenderPass); this->addResource(image->resource()); GR_VK_CALL(gpu->vkInterface(), CmdClearDepthStencilImage(fCmdBuffer, - image->textureImage(), + image->image(), image->currentLayout(), color, subRangeCount, diff --git a/src/gpu/vk/GrVkCommandBuffer.h b/src/gpu/vk/GrVkCommandBuffer.h index b2f6ef013f..b513a47f29 100644 --- a/src/gpu/vk/GrVkCommandBuffer.h +++ b/src/gpu/vk/GrVkCommandBuffer.h @@ -127,14 +127,34 @@ public: const VkImageCopy* copyRegions); void blitImage(const GrVkGpu* gpu, - const GrVkImage::Resource* srcImage, + const GrVkResource* srcResource, + VkImage srcImage, VkImageLayout srcLayout, - const GrVkImage::Resource* dstImage, + const GrVkResource* dstResource, + VkImage dstImage, VkImageLayout dstLayout, uint32_t blitRegionCount, const VkImageBlit* blitRegions, VkFilter filter); + void blitImage(const GrVkGpu* gpu, + const GrVkImage& srcImage, + const GrVkImage& dstImage, + uint32_t blitRegionCount, + const VkImageBlit* blitRegions, + VkFilter filter) { + this->blitImage(gpu, + srcImage.resource(), + srcImage.image(), + srcImage.currentLayout(), + dstImage.resource(), + dstImage.image(), + dstImage.currentLayout(), + blitRegionCount, + blitRegions, + filter); + } + void copyImageToBuffer(const GrVkGpu* gpu, GrVkImage* srcImage, VkImageLayout srcLayout, diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp index c24d8c2799..f87a6f6fbd 100644 --- a/src/gpu/vk/GrVkGpu.cpp +++ b/src/gpu/vk/GrVkGpu.cpp @@ -326,7 +326,7 @@ bool GrVkGpu::uploadTexDataLinear(GrVkTexture* tex, const GrVkInterface* interface = this->vkInterface(); GR_VK_CALL(interface, GetImageSubresourceLayout(fDevice, - tex->textureImage(), + tex->image(), &subres, &layout)); @@ -334,8 +334,7 @@ bool GrVkGpu::uploadTexDataLinear(GrVkTexture* tex, VkDeviceSize offset = texTop*layout.rowPitch + left*bpp; VkDeviceSize size = height*layout.rowPitch; void* mapPtr; - err = GR_VK_CALL(interface, MapMemory(fDevice, tex->textureMemory(), offset, size, 0, - &mapPtr)); + err = GR_VK_CALL(interface, MapMemory(fDevice, tex->memory(), offset, size, 0, &mapPtr)); if (err) { return false; } @@ -359,7 +358,7 @@ bool GrVkGpu::uploadTexDataLinear(GrVkTexture* tex, } } - GR_VK_CALL(interface, UnmapMemory(fDevice, tex->textureMemory())); + GR_VK_CALL(interface, UnmapMemory(fDevice, tex->memory())); return true; } @@ -608,11 +607,6 @@ static GrSurfaceOrigin resolve_origin(GrSurfaceOrigin origin) { GrTexture* GrVkGpu::onWrapBackendTexture(const GrBackendTextureDesc& desc, GrWrapOwnership ownership) { - VkFormat format; - if (!GrPixelConfigToVkFormat(desc.fConfig, &format)) { - return nullptr; - } - if (0 == desc.fTextureHandle) { return nullptr; } @@ -622,10 +616,17 @@ GrTexture* GrVkGpu::onWrapBackendTexture(const GrBackendTextureDesc& desc, return nullptr; } - const GrVkTextureInfo* info = reinterpret_cast<const GrVkTextureInfo*>(desc.fTextureHandle); + const GrVkImageInfo* info = reinterpret_cast<const GrVkImageInfo*>(desc.fTextureHandle); if (VK_NULL_HANDLE == info->fImage || VK_NULL_HANDLE == info->fAlloc) { return nullptr; } +#ifdef SK_DEBUG + VkFormat format; + if (!GrPixelConfigToVkFormat(desc.fConfig, &format)) { + return nullptr; + } + SkASSERT(format == info->fFormat); +#endif GrSurfaceDesc surfDesc; // next line relies on GrBackendTextureDesc's flags matching GrTexture's @@ -642,10 +643,9 @@ GrTexture* GrVkGpu::onWrapBackendTexture(const GrBackendTextureDesc& desc, GrVkTexture* texture = nullptr; if (renderTarget) { texture = GrVkTextureRenderTarget::CreateWrappedTextureRenderTarget(this, surfDesc, - ownership, format, - info); + ownership, info); } else { - texture = GrVkTexture::CreateWrappedTexture(this, surfDesc, ownership, format, info); + texture = GrVkTexture::CreateWrappedTexture(this, surfDesc, ownership, info); } if (!texture) { return nullptr; @@ -657,8 +657,8 @@ GrTexture* GrVkGpu::onWrapBackendTexture(const GrBackendTextureDesc& desc, GrRenderTarget* GrVkGpu::onWrapBackendRenderTarget(const GrBackendRenderTargetDesc& wrapDesc, GrWrapOwnership ownership) { - const GrVkTextureInfo* info = - reinterpret_cast<const GrVkTextureInfo*>(wrapDesc.fRenderTargetHandle); + const GrVkImageInfo* info = + reinterpret_cast<const GrVkImageInfo*>(wrapDesc.fRenderTargetHandle); if (VK_NULL_HANDLE == info->fImage || (VK_NULL_HANDLE == info->fAlloc && kAdopt_GrWrapOwnership == ownership)) { return nullptr; @@ -710,8 +710,9 @@ void GrVkGpu::generateMipmap(GrVkTexture* tex) const { VK_ACCESS_TRANSFER_READ_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, false); // grab handle to the original image resource - const GrVkImage::Resource* oldResource = tex->resource(); + const GrVkResource* oldResource = tex->resource(); oldResource->ref(); + VkImage oldImage = tex->image(); // SkMipMap doesn't include the base level in the level count so we have to add 1 uint32_t levelCount = SkMipMap::ComputeLevelCount(tex->width(), tex->height()) + 1; @@ -739,15 +740,17 @@ void GrVkGpu::generateMipmap(GrVkTexture* tex) const { fCurrentCmdBuffer->blitImage(this, oldResource, + oldImage, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, tex->resource(), + tex->image(), VK_IMAGE_LAYOUT_GENERAL, 1, &blitRegion, VK_FILTER_LINEAR); // setup memory barrier - SkASSERT(GrVkFormatToPixelConfig(tex->resource()->fFormat, nullptr)); + SkASSERT(GrVkFormatToPixelConfig(tex->imageFormat(), nullptr)); VkImageAspectFlags aspectFlags = VK_IMAGE_ASPECT_COLOR_BIT; VkImageMemoryBarrier imageMemoryBarrier = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType @@ -758,7 +761,7 @@ void GrVkGpu::generateMipmap(GrVkTexture* tex) const { VK_IMAGE_LAYOUT_GENERAL, // newLayout VK_QUEUE_FAMILY_IGNORED, // srcQueueFamilyIndex VK_QUEUE_FAMILY_IGNORED, // dstQueueFamilyIndex - tex->resource()->fImage, // image + tex->image(), // image { aspectFlags, 0, 1, 0, 1 } // subresourceRange }; @@ -781,10 +784,8 @@ void GrVkGpu::generateMipmap(GrVkTexture* tex) const { blitRegion.dstOffsets[0] = { 0, 0, 0 }; blitRegion.dstOffsets[1] = { width, height, 0 }; fCurrentCmdBuffer->blitImage(this, - tex->resource(), - VK_IMAGE_LAYOUT_GENERAL, - tex->resource(), - VK_IMAGE_LAYOUT_GENERAL, + *tex, + *tex, 1, &blitRegion, VK_FILTER_LINEAR); @@ -947,7 +948,7 @@ GrBackendObject GrVkGpu::createTestingOnlyBackendTexture(void* srcData, int w, i } } - GrVkTextureInfo* info = new GrVkTextureInfo; + GrVkImageInfo* info = new GrVkImageInfo; info->fImage = image; info->fAlloc = alloc; info->fImageTiling = imageTiling; @@ -959,7 +960,7 @@ GrBackendObject GrVkGpu::createTestingOnlyBackendTexture(void* srcData, int w, i } bool GrVkGpu::isTestingOnlyBackendTexture(GrBackendObject id) const { - const GrVkTextureInfo* backend = reinterpret_cast<const GrVkTextureInfo*>(id); + const GrVkImageInfo* backend = reinterpret_cast<const GrVkImageInfo*>(id); if (backend && backend->fImage && backend->fAlloc) { VkMemoryRequirements req; @@ -976,7 +977,7 @@ bool GrVkGpu::isTestingOnlyBackendTexture(GrBackendObject id) const { } void GrVkGpu::deleteTestingOnlyBackendTexture(GrBackendObject id, bool abandon) { - const GrVkTextureInfo* backend = reinterpret_cast<const GrVkTextureInfo*>(id); + const GrVkImageInfo* backend = reinterpret_cast<const GrVkImageInfo*>(id); if (backend) { if (!abandon) { @@ -1379,10 +1380,8 @@ void GrVkGpu::copySurfaceAsBlit(GrSurface* dst, blitRegion.dstOffsets[1] = { dstRect.fRight, dstRect.fBottom, 0 }; fCurrentCmdBuffer->blitImage(this, - srcImage->resource(), - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - dstImage->resource(), - VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + *srcImage, + *dstImage, 1, &blitRegion, VK_FILTER_NEAREST); // We never scale so any filter works here diff --git a/src/gpu/vk/GrVkImage.cpp b/src/gpu/vk/GrVkImage.cpp index 49adc574ae..9e7faf4706 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::InitImageInfo(const GrVkGpu* gpu, const ImageDesc& imageDesc, GrVkImageInfo* info) { 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,30 @@ 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; +} + +void GrVkImage::DestroyImageInfo(const GrVkGpu* gpu, GrVkImageInfo* info) { + VK_CALL(gpu, DestroyImage(gpu->device(), info->fImage, nullptr)); + VK_CALL(gpu, FreeMemory(gpu->device(), info->fAlloc, nullptr)); +} - 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() { diff --git a/src/gpu/vk/GrVkImage.h b/src/gpu/vk/GrVkImage.h index e73d314e5e..30b6b89a13 100644 --- a/src/gpu/vk/GrVkImage.h +++ b/src/gpu/vk/GrVkImage.h @@ -14,77 +14,41 @@ #include "SkTypes.h" #include "vk/GrVkDefines.h" +#include "vk/GrVkTypes.h" class GrVkGpu; class GrVkImage : SkNoncopyable { -public: - // unlike GrVkBuffer, this needs to be public so GrVkStencilAttachment can use it - class Resource : public GrVkResource { - public: - enum Flags { - kNo_Flags = 0, - kLinearTiling_Flag = 0x01, - kBorrowed_Flag = 0x02 - }; - - VkImage fImage; - VkDeviceMemory fAlloc; - VkFormat fFormat; - uint32_t fLevelCount; - uint32_t fFlags; - - Resource() - : INHERITED() - , fImage(VK_NULL_HANDLE) - , fAlloc(VK_NULL_HANDLE) - , fFormat(VK_FORMAT_UNDEFINED) - , fLevelCount(0) - , fFlags(kNo_Flags) {} - - Resource(VkImage image, VkDeviceMemory alloc, VkFormat format, uint32_t levelCount, - uint32_t flags) - : fImage(image), fAlloc(alloc), fFormat(format), fLevelCount(levelCount) - , fFlags(flags) {} - - ~Resource() override {} +private: + class Resource; - private: - void freeGPUData(const GrVkGpu* gpu) const override; - - typedef GrVkResource INHERITED; - }; - - // for wrapped textures - class BorrowedResource : public Resource { - public: - BorrowedResource(VkImage image, VkDeviceMemory alloc, VkFormat format, uint32_t levelCount, - uint32_t flags) - : Resource(image, alloc, format, levelCount, (flags | kBorrowed_Flag)) { - } - private: - void freeGPUData(const GrVkGpu* gpu) const override; +public: + enum Wrapped { + kNot_Wrapped, + kAdopted_Wrapped, + kBorrowed_Wrapped, }; - GrVkImage(const Resource* imageResource) : fResource(imageResource) { - if (imageResource->fFlags & Resource::kLinearTiling_Flag) { - fCurrentLayout = VK_IMAGE_LAYOUT_PREINITIALIZED; + GrVkImage(const GrVkImageInfo& info, Wrapped wrapped) + : fInfo(info) + , fIsBorrowed(kBorrowed_Wrapped == wrapped) { + if (kBorrowed_Wrapped == wrapped) { + fResource = new BorrowedResource(info.fImage, info.fAlloc); } else { - fCurrentLayout = VK_IMAGE_LAYOUT_UNDEFINED; + fResource = new Resource(info.fImage, info.fAlloc); } - imageResource->ref(); } - virtual ~GrVkImage(); - VkImage textureImage() const { return fResource->fImage; } - VkDeviceMemory textureMemory() const { return fResource->fAlloc; } + VkImage image() const { return fInfo.fImage; } + VkDeviceMemory memory() const { return fInfo.fAlloc; } + VkFormat imageFormat() const { return fInfo.fFormat; } const Resource* resource() const { return fResource; } bool isLinearTiled() const { - return SkToBool(fResource->fFlags & Resource::kLinearTiling_Flag); + return SkToBool(VK_IMAGE_TILING_LINEAR == fInfo.fImageTiling); } - VkImageLayout currentLayout() const { return fCurrentLayout; } + VkImageLayout currentLayout() const { return fInfo.fImageLayout; } void setImageLayout(const GrVkGpu* gpu, VkImageLayout newLayout, @@ -115,16 +79,54 @@ public: , fMemProps(VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) {} }; - static const Resource* CreateResource(const GrVkGpu* gpu, const ImageDesc& imageDesc); + static bool InitImageInfo(const GrVkGpu* gpu, const ImageDesc& imageDesc, GrVkImageInfo*); + // Destroys the internal VkImage and VkDeviceMemory in the GrVkImageInfo + static void DestroyImageInfo(const GrVkGpu* gpu, GrVkImageInfo*); protected: - void releaseImage(const GrVkGpu* gpu); void abandonImage(); + void setNewResource(VkImage image, VkDeviceMemory alloc); + + GrVkImageInfo fInfo; + bool fIsBorrowed; + +private: + // unlike GrVkBuffer, this needs to be public so GrVkStencilAttachment can use it + class Resource : public GrVkResource { + public: + Resource() + : INHERITED() + , fImage(VK_NULL_HANDLE) + , fAlloc(VK_NULL_HANDLE) { + } + + Resource(VkImage image, VkDeviceMemory alloc) : fImage(image), fAlloc(alloc) {} + + ~Resource() override {} + + private: + void freeGPUData(const GrVkGpu* gpu) const override; + + VkImage fImage; + VkDeviceMemory fAlloc; + + typedef GrVkResource INHERITED; + }; + + // for wrapped textures + class BorrowedResource : public Resource { + public: + BorrowedResource(VkImage image, VkDeviceMemory alloc) : Resource(image, alloc) { + } + private: + void freeGPUData(const GrVkGpu* gpu) const override; + }; + const Resource* fResource; - VkImageLayout fCurrentLayout; + friend class GrVkRenderTarget; }; #endif diff --git a/src/gpu/vk/GrVkPipelineState.cpp b/src/gpu/vk/GrVkPipelineState.cpp index 0ebd1dd7fd..f27916f714 100644 --- a/src/gpu/vk/GrVkPipelineState.cpp +++ b/src/gpu/vk/GrVkPipelineState.cpp @@ -304,7 +304,7 @@ void GrVkPipelineState::writeSamplers(GrVkGpu* gpu, fSamplers.push(gpu->resourceProvider().findOrCreateCompatibleSampler(params, texture->texturePriv().maxMipMapLevel())); - const GrVkImage::Resource* textureResource = texture->resource(); + const GrVkResource* textureResource = texture->resource(); textureResource->ref(); fTextures.push(textureResource); diff --git a/src/gpu/vk/GrVkPipelineState.h b/src/gpu/vk/GrVkPipelineState.h index ea988861ef..d4cc19a9a3 100644 --- a/src/gpu/vk/GrVkPipelineState.h +++ b/src/gpu/vk/GrVkPipelineState.h @@ -266,7 +266,7 @@ private: // GrVkResources used for sampling textures SkTDArray<GrVkSampler*> fSamplers; SkTDArray<const GrVkImageView*> fTextureViews; - SkTDArray<const GrVkImage::Resource*> fTextures; + SkTDArray<const GrVkResource*> fTextures; // Tracks the current render target uniforms stored in the vertex buffer. RenderTargetState fRenderTargetState; diff --git a/src/gpu/vk/GrVkRenderTarget.cpp b/src/gpu/vk/GrVkRenderTarget.cpp index 70b73a758a..277448001e 100644 --- a/src/gpu/vk/GrVkRenderTarget.cpp +++ b/src/gpu/vk/GrVkRenderTarget.cpp @@ -24,17 +24,18 @@ GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu, SkBudgeted budgeted, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, - const GrVkImage::Resource* msaaResource, + const GrVkImageInfo& info, + const GrVkImageInfo& msaaInfo, const GrVkImageView* colorAttachmentView, - const GrVkImageView* resolveAttachmentView) + const GrVkImageView* resolveAttachmentView, + GrVkImage::Wrapped wrapped) : GrSurface(gpu, desc) - , GrVkImage(imageResource) + , GrVkImage(info, wrapped) // for the moment we only support 1:1 color to stencil , GrRenderTarget(gpu, desc, kUnified_SampleConfig) , fFramebuffer(nullptr) , fColorAttachmentView(colorAttachmentView) - , fMSAAImageResource(msaaResource) + , fMSAAImage(new GrVkImage(info, GrVkImage::kNot_Wrapped)) , fResolveAttachmentView(resolveAttachmentView) , fCachedSimpleRenderPass(nullptr) { SkASSERT(desc.fSampleCnt); @@ -42,31 +43,30 @@ GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu, fColorValuesPerPixel = desc.fSampleCnt + 1; // TODO: this still correct? this->createFramebuffer(gpu); this->registerWithCache(budgeted); - msaaResource->ref(); } // We're virtually derived from GrSurface (via GrRenderTarget) so its // constructor must be explicitly called. GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, - const GrVkImage::Resource* msaaResource, + const GrVkImageInfo& info, + const GrVkImageInfo& msaaInfo, const GrVkImageView* colorAttachmentView, - const GrVkImageView* resolveAttachmentView) + const GrVkImageView* resolveAttachmentView, + GrVkImage::Wrapped wrapped) : GrSurface(gpu, desc) - , GrVkImage(imageResource) + , GrVkImage(info, wrapped) // for the moment we only support 1:1 color to stencil , GrRenderTarget(gpu, desc, kUnified_SampleConfig) , fFramebuffer(nullptr) , fColorAttachmentView(colorAttachmentView) - , fMSAAImageResource(msaaResource) + , fMSAAImage(new GrVkImage(info, GrVkImage::kNot_Wrapped)) , fResolveAttachmentView(resolveAttachmentView) , fCachedSimpleRenderPass(nullptr) { SkASSERT(desc.fSampleCnt); // The plus 1 is to account for the resolve texture. fColorValuesPerPixel = desc.fSampleCnt + 1; // TODO: this still correct? this->createFramebuffer(gpu); - msaaResource->ref(); } // We're virtually derived from GrSurface (via GrRenderTarget) so its @@ -74,14 +74,15 @@ GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu, GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu, SkBudgeted budgeted, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, - const GrVkImageView* colorAttachmentView) + const GrVkImageInfo& info, + const GrVkImageView* colorAttachmentView, + GrVkImage::Wrapped wrapped) : GrSurface(gpu, desc) - , GrVkImage(imageResource) + , GrVkImage(info, wrapped) , GrRenderTarget(gpu, desc, kUnified_SampleConfig) , fFramebuffer(nullptr) , fColorAttachmentView(colorAttachmentView) - , fMSAAImageResource(nullptr) + , fMSAAImage(nullptr) , fResolveAttachmentView(nullptr) , fCachedSimpleRenderPass(nullptr) { SkASSERT(!desc.fSampleCnt); @@ -94,14 +95,15 @@ GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu, // constructor must be explicitly called. GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, - const GrVkImageView* colorAttachmentView) + const GrVkImageInfo& info, + const GrVkImageView* colorAttachmentView, + GrVkImage::Wrapped wrapped) : GrSurface(gpu, desc) - , GrVkImage(imageResource) + , GrVkImage(info, wrapped) , GrRenderTarget(gpu, desc, kUnified_SampleConfig) , fFramebuffer(nullptr) , fColorAttachmentView(colorAttachmentView) - , fMSAAImageResource(nullptr) + , fMSAAImage(nullptr) , fResolveAttachmentView(nullptr) , fCachedSimpleRenderPass(nullptr) { SkASSERT(!desc.fSampleCnt); @@ -113,14 +115,15 @@ GrVkRenderTarget* GrVkRenderTarget::Create(GrVkGpu* gpu, SkBudgeted budgeted, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource) { + const GrVkImageInfo& info, + GrVkImage::Wrapped wrapped) { VkFormat pixelFormat; GrPixelConfigToVkFormat(desc.fConfig, &pixelFormat); VkImage colorImage; // create msaa surface if necessary - const GrVkImage::Resource* msaaResource = nullptr; + GrVkImageInfo msInfo; const GrVkImageView* resolveAttachmentView = nullptr; if (desc.fSampleCnt) { GrVkImage::ImageDesc msImageDesc; @@ -134,46 +137,42 @@ GrVkRenderTarget::Create(GrVkGpu* gpu, msImageDesc.fUsageFlags = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; msImageDesc.fMemProps = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - msaaResource = GrVkImage::CreateResource(gpu, msImageDesc); - - if (!msaaResource) { + if (!GrVkImage::InitImageInfo(gpu, msImageDesc, &msInfo)) { return nullptr; } // Set color attachment image - colorImage = msaaResource->fImage; + colorImage = msInfo.fImage; // Create Resolve attachment view - resolveAttachmentView = GrVkImageView::Create(gpu, imageResource->fImage, pixelFormat, + resolveAttachmentView = GrVkImageView::Create(gpu, info.fImage, pixelFormat, GrVkImageView::kColor_Type, 1); if (!resolveAttachmentView) { - msaaResource->unref(gpu); + GrVkImage::DestroyImageInfo(gpu, &msInfo); return nullptr; } } else { // Set color attachment image - colorImage = imageResource->fImage; + colorImage = info.fImage; } // Get color attachment view const GrVkImageView* colorAttachmentView = GrVkImageView::Create(gpu, colorImage, pixelFormat, GrVkImageView::kColor_Type, 1); if (!colorAttachmentView) { - if (msaaResource) { + if (desc.fSampleCnt) { resolveAttachmentView->unref(gpu); - msaaResource->unref(gpu); + GrVkImage::DestroyImageInfo(gpu, &msInfo); } - return NULL; + return nullptr; } GrVkRenderTarget* texRT; - if (msaaResource) { - texRT = new GrVkRenderTarget(gpu, budgeted, desc, imageResource, msaaResource, - colorAttachmentView, resolveAttachmentView); - msaaResource->unref(gpu); + if (desc.fSampleCnt) { + texRT = new GrVkRenderTarget(gpu, budgeted, desc, info, msInfo, + colorAttachmentView, resolveAttachmentView, wrapped); } else { - texRT = new GrVkRenderTarget(gpu, budgeted, desc, imageResource, - colorAttachmentView); + texRT = new GrVkRenderTarget(gpu, budgeted, desc, info, colorAttachmentView, wrapped); } return texRT; @@ -186,14 +185,16 @@ GrVkRenderTarget::CreateNewRenderTarget(GrVkGpu* gpu, const GrVkImage::ImageDesc& imageDesc) { SkASSERT(imageDesc.fUsageFlags & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); - const GrVkImage::Resource* imageResource = GrVkImage::CreateResource(gpu, imageDesc); - if (!imageResource) { + GrVkImageInfo info; + if (!GrVkImage::InitImageInfo(gpu, imageDesc, &info)) { return nullptr; } - GrVkRenderTarget* rt = GrVkRenderTarget::Create(gpu, budgeted, desc, imageResource); - // Create() will increment the refCount of the image resource if it succeeds - imageResource->unref(gpu); + GrVkRenderTarget* rt = GrVkRenderTarget::Create(gpu, budgeted, desc, info, + GrVkImage::kNot_Wrapped); + if (!rt) { + GrVkImage::DestroyImageInfo(gpu, &info); + } return rt; } @@ -201,36 +202,16 @@ GrVkRenderTarget* GrVkRenderTarget::CreateWrappedRenderTarget(GrVkGpu* gpu, const GrSurfaceDesc& desc, GrWrapOwnership ownership, - const GrVkTextureInfo* info) { + const GrVkImageInfo* info) { SkASSERT(info); // We can wrap a rendertarget without its allocation, as long as we don't take ownership SkASSERT(VK_NULL_HANDLE != info->fImage); SkASSERT(VK_NULL_HANDLE != info->fAlloc || kAdopt_GrWrapOwnership != ownership); - GrVkImage::Resource::Flags flags = (VK_IMAGE_TILING_LINEAR == info->fImageTiling) - ? Resource::kLinearTiling_Flag : Resource::kNo_Flags; + GrVkImage::Wrapped wrapped = kBorrow_GrWrapOwnership == ownership ? GrVkImage::kBorrowed_Wrapped + : GrVkImage::kAdopted_Wrapped; - const GrVkImage::Resource* imageResource; - if (kBorrow_GrWrapOwnership == ownership) { - imageResource = new GrVkImage::BorrowedResource(info->fImage, - info->fAlloc, - info->fFormat, - info->fLevelCount, - flags); - } else { - imageResource = new GrVkImage::Resource(info->fImage, info->fAlloc, info->fFormat, - info->fLevelCount, flags); - } - if (!imageResource) { - return nullptr; - } - - GrVkRenderTarget* rt = GrVkRenderTarget::Create(gpu, SkBudgeted::kNo, desc, imageResource); - if (rt) { - rt->fCurrentLayout = info->fImageLayout; - } - // Create() will increment the refCount of the image resource if it succeeds - imageResource->unref(gpu); + GrVkRenderTarget* rt = GrVkRenderTarget::Create(gpu, SkBudgeted::kNo, desc, *info, wrapped); return rt; } @@ -292,7 +273,7 @@ void GrVkRenderTarget::getAttachmentsDescriptor( GrVkRenderTarget::~GrVkRenderTarget() { // either release or abandon should have been called by the owner of this object. - SkASSERT(!fMSAAImageResource); + SkASSERT(!fMSAAImage); SkASSERT(!fResolveAttachmentView); SkASSERT(!fColorAttachmentView); SkASSERT(!fFramebuffer); @@ -316,9 +297,9 @@ void GrVkRenderTarget::addResources(GrVkCommandBuffer& commandBuffer) const { void GrVkRenderTarget::releaseInternalObjects() { GrVkGpu* gpu = this->getVkGpu(); - if (fMSAAImageResource) { - fMSAAImageResource->unref(gpu); - fMSAAImageResource = nullptr; + if (fMSAAImage) { + fMSAAImage->releaseImage(gpu); + fMSAAImage = nullptr; } if (fResolveAttachmentView) { @@ -340,9 +321,9 @@ void GrVkRenderTarget::releaseInternalObjects() { } void GrVkRenderTarget::abandonInternalObjects() { - if (fMSAAImageResource) { - fMSAAImageResource->unrefAndAbandon(); - fMSAAImageResource = nullptr; + if (fMSAAImage) { + fMSAAImage->abandonImage(); + fMSAAImage = nullptr; } if (fResolveAttachmentView) { @@ -381,7 +362,7 @@ GrBackendObject GrVkRenderTarget::getRenderTargetHandle() const { return (GrBackendObject)&fResource; } -const GrVkImage::Resource* GrVkRenderTarget::stencilImageResource() const { +const GrVkResource* GrVkRenderTarget::stencilImageResource() const { const GrStencilAttachment* stencil = this->renderTargetPriv().getStencilAttachment(); if (stencil) { const GrVkStencilAttachment* vkStencil = static_cast<const GrVkStencilAttachment*>(stencil); diff --git a/src/gpu/vk/GrVkRenderTarget.h b/src/gpu/vk/GrVkRenderTarget.h index 8c720aef86..accc677806 100644 --- a/src/gpu/vk/GrVkRenderTarget.h +++ b/src/gpu/vk/GrVkRenderTarget.h @@ -20,7 +20,7 @@ class GrVkGpu; class GrVkImageView; class GrVkStencilAttachment; -struct GrVkTextureInfo; +struct GrVkImageInfo; #ifdef SK_BUILD_FOR_WIN // Windows gives bogus warnings about inheriting asTexture/asRenderTarget via dominance. @@ -35,15 +35,20 @@ public: static GrVkRenderTarget* CreateWrappedRenderTarget(GrVkGpu*, const GrSurfaceDesc&, GrWrapOwnership, - const GrVkTextureInfo*); + const GrVkImageInfo*); ~GrVkRenderTarget() override; const GrVkFramebuffer* framebuffer() const { return fFramebuffer; } const GrVkImageView* colorAttachmentView() const { return fColorAttachmentView; } - const GrVkImage::Resource* msaaImageResource() const { return fMSAAImageResource; } + const GrVkResource* msaaImageResource() const { + if (fMSAAImage) { + return fMSAAImage->fResource; + } + return nullptr; + } const GrVkImageView* resolveAttachmentView() const { return fResolveAttachmentView; } - const GrVkImage::Resource* stencilImageResource() const; + const GrVkResource* stencilImageResource() const; const GrVkImageView* stencilAttachmentView() const; const GrVkRenderPass* simpleRenderPass() const { return fCachedSimpleRenderPass; } @@ -67,33 +72,18 @@ public: protected: GrVkRenderTarget(GrVkGpu* gpu, - SkBudgeted, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, - const GrVkImage::Resource* msaaImageResource, + const GrVkImageInfo& info, + const GrVkImageInfo& msaaInfo, const GrVkImageView* colorAttachmentView, - const GrVkImageView* resolveAttachmentView); + const GrVkImageView* resolveAttachmentView, + GrVkImage::Wrapped wrapped); GrVkRenderTarget(GrVkGpu* gpu, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, - const GrVkImage::Resource* msaaImageResource, + const GrVkImageInfo& info, const GrVkImageView* colorAttachmentView, - const GrVkImageView* resolveAttachmentView); - - GrVkRenderTarget(GrVkGpu* gpu, - SkBudgeted, - const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, - const GrVkImageView* colorAttachmentView); - - GrVkRenderTarget(GrVkGpu* gpu, - const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, - const GrVkImageView* colorAttachmentView); - - static GrVkRenderTarget* Create(GrVkGpu*, SkBudgeted, const GrSurfaceDesc&, - const GrVkImage::Resource* imageResource); + GrVkImage::Wrapped wrapped); GrVkGpu* getVkGpu() const; @@ -110,6 +100,25 @@ protected: } private: + GrVkRenderTarget(GrVkGpu* gpu, + SkBudgeted, + const GrSurfaceDesc& desc, + const GrVkImageInfo& info, + const GrVkImageInfo& msaaInfo, + const GrVkImageView* colorAttachmentView, + const GrVkImageView* resolveAttachmentView, + GrVkImage::Wrapped wrapped); + + GrVkRenderTarget(GrVkGpu* gpu, + SkBudgeted, + const GrSurfaceDesc& desc, + const GrVkImageInfo& info, + const GrVkImageView* colorAttachmentView, + GrVkImage::Wrapped wrapped); + + static GrVkRenderTarget* Create(GrVkGpu*, SkBudgeted, const GrSurfaceDesc&, + const GrVkImageInfo&, GrVkImage::Wrapped wrapped); + bool completeStencilAttachment() override; void createFramebuffer(GrVkGpu* gpu); @@ -119,7 +128,7 @@ private: const GrVkFramebuffer* fFramebuffer; const GrVkImageView* fColorAttachmentView; - const GrVkImage::Resource* fMSAAImageResource; + GrVkImage* fMSAAImage; const GrVkImageView* fResolveAttachmentView; int fColorValuesPerPixel; diff --git a/src/gpu/vk/GrVkStencilAttachment.cpp b/src/gpu/vk/GrVkStencilAttachment.cpp index a876aea15f..5976811be4 100644 --- a/src/gpu/vk/GrVkStencilAttachment.cpp +++ b/src/gpu/vk/GrVkStencilAttachment.cpp @@ -16,11 +16,11 @@ GrVkStencilAttachment::GrVkStencilAttachment(GrVkGpu* gpu, const Format& format, const GrVkImage::ImageDesc& desc, - const GrVkImage::Resource* imageResource, + const GrVkImageInfo& info, const GrVkImageView* stencilView) : GrStencilAttachment(gpu, desc.fWidth, desc.fHeight, format.fStencilBits, desc.fSamples) - , GrVkImage(imageResource) + , GrVkImage(info, GrVkImage::kNot_Wrapped) , fFormat(format) , fStencilView(stencilView) { this->registerWithCache(SkBudgeted::kYes); @@ -44,22 +44,22 @@ GrVkStencilAttachment* GrVkStencilAttachment::Create(GrVkGpu* gpu, VK_IMAGE_USAGE_TRANSFER_DST_BIT; imageDesc.fMemProps = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - const GrVkImage::Resource* imageResource = GrVkImage::CreateResource(gpu, imageDesc); - if (!imageResource) { + GrVkImageInfo info; + if (!GrVkImage::InitImageInfo(gpu, imageDesc, &info)) { return nullptr; } - const GrVkImageView* imageView = GrVkImageView::Create(gpu, imageResource->fImage, + const GrVkImageView* imageView = GrVkImageView::Create(gpu, info.fImage, format.fInternalFormat, GrVkImageView::kStencil_Type, 1); if (!imageView) { - imageResource->unref(gpu); + VK_CALL(gpu, DestroyImage(gpu->device(), info.fImage, nullptr)); + VK_CALL(gpu, FreeMemory(gpu->device(), info.fAlloc, nullptr)); return nullptr; } GrVkStencilAttachment* stencil = new GrVkStencilAttachment(gpu, format, imageDesc, - imageResource, imageView); - imageResource->unref(gpu); + info, imageView); imageView->unref(gpu); return stencil; diff --git a/src/gpu/vk/GrVkStencilAttachment.h b/src/gpu/vk/GrVkStencilAttachment.h index f106c69971..f6bf19af4f 100644 --- a/src/gpu/vk/GrVkStencilAttachment.h +++ b/src/gpu/vk/GrVkStencilAttachment.h @@ -29,7 +29,7 @@ public: ~GrVkStencilAttachment() override; - const GrVkImage::Resource* imageResource() const { return this->resource(); } + const GrVkResource* imageResource() const { return this->resource(); } const GrVkImageView* stencilView() const { return fStencilView; } VkFormat vkFormat() const { return fFormat.fInternalFormat; } @@ -44,7 +44,7 @@ private: GrVkStencilAttachment(GrVkGpu* gpu, const Format& format, const GrVkImage::ImageDesc&, - const GrVkImage::Resource*, + const GrVkImageInfo&, const GrVkImageView* stencilView); GrVkGpu* getVkGpu() const; diff --git a/src/gpu/vk/GrVkTexture.cpp b/src/gpu/vk/GrVkTexture.cpp index c2a30a27f4..fef6b72928 100644 --- a/src/gpu/vk/GrVkTexture.cpp +++ b/src/gpu/vk/GrVkTexture.cpp @@ -19,10 +19,10 @@ GrVkTexture::GrVkTexture(GrVkGpu* gpu, SkBudgeted budgeted, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, + const GrVkImageInfo& info, const GrVkImageView* view) : GrSurface(gpu, desc) - , GrVkImage(imageResource) + , GrVkImage(info, GrVkImage::kNot_Wrapped) , INHERITED(gpu, desc, kSampler2D_GrSLType, desc.fIsMipMapped) , fTextureView(view) , fLinearTextureView(nullptr) { @@ -32,10 +32,11 @@ GrVkTexture::GrVkTexture(GrVkGpu* gpu, GrVkTexture::GrVkTexture(GrVkGpu* gpu, Wrapped, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, - const GrVkImageView* view) + const GrVkImageInfo& info, + const GrVkImageView* view, + GrVkImage::Wrapped wrapped) : GrSurface(gpu, desc) - , GrVkImage(imageResource) + , GrVkImage(info, wrapped) , INHERITED(gpu, desc, kSampler2D_GrSLType, desc.fIsMipMapped) , fTextureView(view) , fLinearTextureView(nullptr) { @@ -45,31 +46,14 @@ GrVkTexture::GrVkTexture(GrVkGpu* gpu, // Because this class is virtually derived from GrSurface we must explicitly call its constructor. GrVkTexture::GrVkTexture(GrVkGpu* gpu, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, - const GrVkImageView* view) + const GrVkImageInfo& info, + const GrVkImageView* view, + GrVkImage::Wrapped wrapped) : GrSurface(gpu, desc) - , GrVkImage(imageResource) + , GrVkImage(info, wrapped) , INHERITED(gpu, desc, kSampler2D_GrSLType, desc.fIsMipMapped) , fTextureView(view) - , fLinearTextureView(nullptr) {} - - -template<typename ResourceType> -GrVkTexture* GrVkTexture::Create(GrVkGpu* gpu, - ResourceType type, - const GrSurfaceDesc& desc, - VkFormat format, - const GrVkImage::Resource* imageResource) { - VkImage image = imageResource->fImage; - - const GrVkImageView* imageView = GrVkImageView::Create(gpu, image, format, - GrVkImageView::kColor_Type, - imageResource->fLevelCount); - if (!imageView) { - return nullptr; - } - - return new GrVkTexture(gpu, type, desc, imageResource, imageView); + , fLinearTextureView(nullptr) { } GrVkTexture* GrVkTexture::CreateNewTexture(GrVkGpu* gpu, SkBudgeted budgeted, @@ -77,53 +61,41 @@ GrVkTexture* GrVkTexture::CreateNewTexture(GrVkGpu* gpu, SkBudgeted budgeted, const GrVkImage::ImageDesc& imageDesc) { SkASSERT(imageDesc.fUsageFlags & VK_IMAGE_USAGE_SAMPLED_BIT); - const GrVkImage::Resource* imageResource = GrVkImage::CreateResource(gpu, imageDesc); - if (!imageResource) { + GrVkImageInfo info; + if (!GrVkImage::InitImageInfo(gpu, imageDesc, &info)) { return nullptr; } - GrVkTexture* texture = Create(gpu, budgeted, desc, imageDesc.fFormat, imageResource); - // Create() will increment the refCount of the image resource if it succeeds - imageResource->unref(gpu); + const GrVkImageView* imageView = GrVkImageView::Create(gpu, info.fImage, info.fFormat, + GrVkImageView::kColor_Type, + info.fLevelCount); + if (!imageView) { + GrVkImage::DestroyImageInfo(gpu, &info); + return nullptr; + } - return texture; + return new GrVkTexture(gpu, budgeted, desc, info, imageView); } GrVkTexture* GrVkTexture::CreateWrappedTexture(GrVkGpu* gpu, const GrSurfaceDesc& desc, GrWrapOwnership ownership, - VkFormat format, - const GrVkTextureInfo* info) { + const GrVkImageInfo* info) { SkASSERT(info); // Wrapped textures require both image and allocation (because they can be mapped) SkASSERT(VK_NULL_HANDLE != info->fImage && VK_NULL_HANDLE != info->fAlloc); - GrVkImage::Resource::Flags flags = (VK_IMAGE_TILING_LINEAR == info->fImageTiling) - ? Resource::kLinearTiling_Flag : Resource::kNo_Flags; - - const GrVkImage::Resource* imageResource; - if (kBorrow_GrWrapOwnership == ownership) { - imageResource = new GrVkImage::BorrowedResource(info->fImage, - info->fAlloc, - info->fFormat, - info->fLevelCount, - flags); - } else { - imageResource = new GrVkImage::Resource(info->fImage, info->fAlloc, info->fFormat, - info->fLevelCount, flags); - } - if (!imageResource) { + const GrVkImageView* imageView = GrVkImageView::Create(gpu, info->fImage, info->fFormat, + GrVkImageView::kColor_Type, + info->fLevelCount); + if (!imageView) { return nullptr; } - GrVkTexture* texture = Create(gpu, kWrapped, desc, format, imageResource); - if (texture) { - texture->fCurrentLayout = info->fImageLayout; - } - // Create() will increment the refCount of the image resource if it succeeds - imageResource->unref(gpu); + GrVkImage::Wrapped wrapped = kBorrow_GrWrapOwnership == ownership ? GrVkImage::kBorrowed_Wrapped + : GrVkImage::kAdopted_Wrapped; - return texture; + return new GrVkTexture(gpu, kWrapped, desc, *info, imageView, wrapped); } GrVkTexture::~GrVkTexture() { @@ -165,8 +137,7 @@ void GrVkTexture::onAbandon() { } GrBackendObject GrVkTexture::getTextureHandle() const { - // Currently just passing back the pointer to the Resource as the handle - return (GrBackendObject)&fResource; + return (GrBackendObject)&fInfo; } GrVkGpu* GrVkTexture::getVkGpu() const { @@ -176,14 +147,14 @@ GrVkGpu* GrVkTexture::getVkGpu() const { const GrVkImageView* GrVkTexture::textureView(bool allowSRGB) { VkFormat linearFormat; - if (allowSRGB || !GrVkFormatIsSRGB(fResource->fFormat, &linearFormat)) { + if (allowSRGB || !GrVkFormatIsSRGB(fInfo.fFormat, &linearFormat)) { return fTextureView; } if (!fLinearTextureView) { - fLinearTextureView = GrVkImageView::Create(this->getVkGpu(), fResource->fImage, + fLinearTextureView = GrVkImageView::Create(this->getVkGpu(), fInfo.fImage, linearFormat, GrVkImageView::kColor_Type, - fResource->fLevelCount); + fInfo.fLevelCount); SkASSERT(fLinearTextureView); } @@ -196,10 +167,10 @@ bool GrVkTexture::reallocForMipmap(const GrVkGpu* gpu, uint32_t mipLevels) { return false; } - const GrVkImage::Resource* oldResource = fResource; + const GrVkResource* oldResource = this->resource(); // We shouldn't realloc something that doesn't belong to us - if (GrVkImage::Resource::kBorrowed_Flag & oldResource->fFlags) { + if (fIsBorrowed) { return false; } @@ -214,7 +185,7 @@ bool GrVkTexture::reallocForMipmap(const GrVkGpu* gpu, uint32_t mipLevels) { GrVkImage::ImageDesc imageDesc; imageDesc.fImageType = VK_IMAGE_TYPE_2D; - imageDesc.fFormat = oldResource->fFormat; + imageDesc.fFormat = fInfo.fFormat; imageDesc.fWidth = fDesc.fWidth; imageDesc.fHeight = fDesc.fHeight; imageDesc.fLevels = mipLevels; @@ -223,18 +194,18 @@ bool GrVkTexture::reallocForMipmap(const GrVkGpu* gpu, uint32_t mipLevels) { imageDesc.fUsageFlags = usageFlags; imageDesc.fMemProps = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - const GrVkImage::Resource* imageResource = GrVkImage::CreateResource(gpu, imageDesc); - if (!imageResource) { - return false; + GrVkImageInfo info; + if (!GrVkImage::InitImageInfo(gpu, imageDesc, &info)) { + return nullptr; } // have to create a new image view for new resource const GrVkImageView* oldView = fTextureView; - VkImage image = imageResource->fImage; - const GrVkImageView* textureView = GrVkImageView::Create(gpu, image, imageResource->fFormat, + VkImage image = info.fImage; + const GrVkImageView* textureView = GrVkImageView::Create(gpu, image, info.fFormat, GrVkImageView::kColor_Type, mipLevels); if (!textureView) { - imageResource->unref(gpu); + GrVkImage::DestroyImageInfo(gpu, &info); return false; } @@ -244,9 +215,10 @@ bool GrVkTexture::reallocForMipmap(const GrVkGpu* gpu, uint32_t mipLevels) { fLinearTextureView->unref(gpu); fLinearTextureView = nullptr; } - fResource = imageResource; + + this->setNewResource(info.fImage, info.fAlloc); fTextureView = textureView; - fCurrentLayout = VK_IMAGE_LAYOUT_UNDEFINED; + fInfo = info; this->texturePriv().setMaxMipMapLevel(mipLevels); return true; diff --git a/src/gpu/vk/GrVkTexture.h b/src/gpu/vk/GrVkTexture.h index eae75ea131..de10a32b4c 100644 --- a/src/gpu/vk/GrVkTexture.h +++ b/src/gpu/vk/GrVkTexture.h @@ -14,7 +14,7 @@ class GrVkGpu; class GrVkImageView; -struct GrVkTextureInfo; +struct GrVkImageInfo; class GrVkTexture : public GrTexture, public virtual GrVkImage { public: @@ -22,8 +22,7 @@ public: const GrVkImage::ImageDesc&); static GrVkTexture* CreateWrappedTexture(GrVkGpu*, const GrSurfaceDesc&, - GrWrapOwnership, - VkFormat, const GrVkTextureInfo*); + GrWrapOwnership, const GrVkImageInfo*); ~GrVkTexture() override; @@ -36,12 +35,8 @@ public: bool reallocForMipmap(const GrVkGpu* gpu, uint32_t mipLevels); protected: - GrVkTexture(GrVkGpu*, const GrSurfaceDesc&, - const GrVkImage::Resource*, const GrVkImageView* imageView); - - template<typename ResourceType> - static GrVkTexture* Create(GrVkGpu*, ResourceType, const GrSurfaceDesc&, VkFormat, - const GrVkImage::Resource* texImpl); + GrVkTexture(GrVkGpu*, const GrSurfaceDesc&, const GrVkImageInfo&, const GrVkImageView*, + GrVkImage::Wrapped wrapped); GrVkGpu* getVkGpu() const; @@ -51,9 +46,9 @@ protected: private: enum Wrapped { kWrapped }; GrVkTexture(GrVkGpu*, SkBudgeted, const GrSurfaceDesc&, - const GrVkImage::Resource*, const GrVkImageView* imageView); + const GrVkImageInfo&, const GrVkImageView* imageView); GrVkTexture(GrVkGpu*, Wrapped, const GrSurfaceDesc&, - const GrVkImage::Resource*, const GrVkImageView* imageView); + const GrVkImageInfo&, const GrVkImageView* imageView, GrVkImage::Wrapped wrapped); const GrVkImageView* fTextureView; const GrVkImageView* fLinearTextureView; diff --git a/src/gpu/vk/GrVkTextureRenderTarget.cpp b/src/gpu/vk/GrVkTextureRenderTarget.cpp index c33a6800b8..b92ea661fb 100644 --- a/src/gpu/vk/GrVkTextureRenderTarget.cpp +++ b/src/gpu/vk/GrVkTextureRenderTarget.cpp @@ -18,20 +18,19 @@ #define VK_CALL(GPU, X) GR_VK_CALL(GPU->vkInterface(), X) -template<typename ResourceType> GrVkTextureRenderTarget* GrVkTextureRenderTarget::Create(GrVkGpu* gpu, - ResourceType resourceType, const GrSurfaceDesc& desc, - VkFormat format, - const GrVkImage::Resource* imageResource) { - VkImage image = imageResource->fImage; + const GrVkImageInfo& info, + SkBudgeted budgeted, + GrVkImage::Wrapped wrapped) { + VkImage image = info.fImage; // Create the texture ImageView uint32_t mipLevels = 1; //TODO: does a mipmapped textureRenderTarget make sense? //if (desc.fIsMipMapped) { // mipLevels = SkMipMap::ComputeLevelCount(this->width(), this->height()) + 1; //} - const GrVkImageView* imageView = GrVkImageView::Create(gpu, image, format, + const GrVkImageView* imageView = GrVkImageView::Create(gpu, image, info.fFormat, GrVkImageView::kColor_Type, mipLevels); if (!imageView) { return nullptr; @@ -43,7 +42,7 @@ GrVkTextureRenderTarget* GrVkTextureRenderTarget::Create(GrVkGpu* gpu, VkImage colorImage; // create msaa surface if necessary - const GrVkImage::Resource* msaaImageResource = nullptr; + GrVkImageInfo msInfo; const GrVkImageView* resolveAttachmentView = nullptr; if (desc.fSampleCnt) { GrVkImage::ImageDesc msImageDesc; @@ -57,65 +56,74 @@ GrVkTextureRenderTarget* GrVkTextureRenderTarget::Create(GrVkGpu* gpu, msImageDesc.fUsageFlags = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; msImageDesc.fMemProps = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - msaaImageResource = GrVkImage::CreateResource(gpu, msImageDesc); - - if (!msaaImageResource) { - imageView->unref(gpu); + if (!GrVkImage::InitImageInfo(gpu, msImageDesc, &msInfo)) { return nullptr; } // Set color attachment image - colorImage = msaaImageResource->fImage; + colorImage = msInfo.fImage; // Create resolve attachment view if necessary. // If the format matches, this is the same as the texture imageView. - if (pixelFormat == format) { + if (pixelFormat == info.fFormat) { resolveAttachmentView = imageView; resolveAttachmentView->ref(); } else { resolveAttachmentView = GrVkImageView::Create(gpu, image, pixelFormat, GrVkImageView::kColor_Type, 1); if (!resolveAttachmentView) { - msaaImageResource->unref(gpu); + GrVkImage::DestroyImageInfo(gpu, &msInfo); imageView->unref(gpu); return nullptr; } } } else { // Set color attachment image - colorImage = imageResource->fImage; + colorImage = info.fImage; } const GrVkImageView* colorAttachmentView; // Get color attachment view. // If the format matches and there's no multisampling, // this is the same as the texture imageView - if (pixelFormat == format && !resolveAttachmentView) { + if (pixelFormat == info.fFormat && !resolveAttachmentView) { colorAttachmentView = imageView; colorAttachmentView->ref(); } else { colorAttachmentView = GrVkImageView::Create(gpu, colorImage, pixelFormat, GrVkImageView::kColor_Type, 1); if (!colorAttachmentView) { - if (msaaImageResource) { + if (desc.fSampleCnt) { resolveAttachmentView->unref(gpu); - msaaImageResource->unref(gpu); + GrVkImage::DestroyImageInfo(gpu, &msInfo); } imageView->unref(gpu); return nullptr; } } GrVkTextureRenderTarget* texRT; - if (msaaImageResource) { - texRT = new GrVkTextureRenderTarget(gpu, resourceType, desc, - imageResource, imageView, msaaImageResource, - colorAttachmentView, - resolveAttachmentView); - msaaImageResource->unref(gpu); + if (desc.fSampleCnt) { + if (GrVkImage::kNot_Wrapped == wrapped) { + texRT = new GrVkTextureRenderTarget(gpu, budgeted, desc, + info, imageView, msInfo, + colorAttachmentView, + resolveAttachmentView); + } else { + texRT = new GrVkTextureRenderTarget(gpu, desc, + info, imageView, msInfo, + colorAttachmentView, + resolveAttachmentView, wrapped); + } } else { - texRT = new GrVkTextureRenderTarget(gpu, resourceType, desc, - imageResource, imageView, - colorAttachmentView); + if (GrVkImage::kNot_Wrapped == wrapped) { + texRT = new GrVkTextureRenderTarget(gpu, budgeted, desc, + info, imageView, + colorAttachmentView); + } else { + texRT = new GrVkTextureRenderTarget(gpu, desc, + info, imageView, + colorAttachmentView, wrapped); + } } return texRT; } @@ -128,16 +136,15 @@ GrVkTextureRenderTarget::CreateNewTextureRenderTarget(GrVkGpu* gpu, SkASSERT(imageDesc.fUsageFlags & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); SkASSERT(imageDesc.fUsageFlags & VK_IMAGE_USAGE_SAMPLED_BIT); - const GrVkImage::Resource* imageRsrc = GrVkImage::CreateResource(gpu, imageDesc); - - if (!imageRsrc) { + GrVkImageInfo info; + if (!GrVkImage::InitImageInfo(gpu, imageDesc, &info)) { return nullptr; } - GrVkTextureRenderTarget* trt = Create(gpu, budgeted, desc, imageDesc.fFormat, - imageRsrc); - // Create() will increment the refCount of the image resource if it succeeds - imageRsrc->unref(gpu); + GrVkTextureRenderTarget* trt = Create(gpu, desc, info, budgeted, GrVkImage::kNot_Wrapped); + if (!trt) { + GrVkImage::DestroyImageInfo(gpu, &info); + } return trt; } @@ -146,35 +153,16 @@ GrVkTextureRenderTarget* GrVkTextureRenderTarget::CreateWrappedTextureRenderTarget(GrVkGpu* gpu, const GrSurfaceDesc& desc, GrWrapOwnership ownership, - VkFormat format, - const GrVkTextureInfo* info) { + const GrVkImageInfo* info) { SkASSERT(info); // Wrapped textures require both image and allocation (because they can be mapped) SkASSERT(VK_NULL_HANDLE != info->fImage && VK_NULL_HANDLE != info->fAlloc); - GrVkImage::Resource::Flags flags = (VK_IMAGE_TILING_LINEAR == info->fImageTiling) - ? Resource::kLinearTiling_Flag : Resource::kNo_Flags; + + GrVkImage::Wrapped wrapped = kBorrow_GrWrapOwnership == ownership ? GrVkImage::kBorrowed_Wrapped + : GrVkImage::kAdopted_Wrapped; - const GrVkImage::Resource* imageResource; - if (kBorrow_GrWrapOwnership == ownership) { - imageResource = new GrVkImage::BorrowedResource(info->fImage, - info->fAlloc, - info->fFormat, - info->fLevelCount, - flags); - } else { - imageResource = new GrVkImage::Resource(info->fImage, info->fAlloc, info->fFormat, - info->fLevelCount, flags); - } - if (!imageResource) { - return nullptr; - } - GrVkTextureRenderTarget* trt = Create(gpu, kWrapped, desc, format, imageResource); - if (trt) { - trt->fCurrentLayout = info->fImageLayout; - } - // Create() will increment the refCount of the image resource if it succeeds - imageResource->unref(gpu); + GrVkTextureRenderTarget* trt = Create(gpu, desc, *info, SkBudgeted::kNo, wrapped); return trt; } diff --git a/src/gpu/vk/GrVkTextureRenderTarget.h b/src/gpu/vk/GrVkTextureRenderTarget.h index e888397cdd..6ea332a0ae 100644 --- a/src/gpu/vk/GrVkTextureRenderTarget.h +++ b/src/gpu/vk/GrVkTextureRenderTarget.h @@ -20,7 +20,7 @@ #endif class GrVkImageView; -struct GrVkTextureInfo; +struct GrVkImageInfo; class GrVkTextureRenderTarget: public GrVkTexture, public GrVkRenderTarget { public: @@ -31,8 +31,7 @@ public: static GrVkTextureRenderTarget* CreateWrappedTextureRenderTarget(GrVkGpu*, const GrSurfaceDesc&, GrWrapOwnership, - VkFormat, - const GrVkTextureInfo*); + const GrVkImageInfo*); protected: void onAbandon() override { @@ -49,67 +48,65 @@ private: GrVkTextureRenderTarget(GrVkGpu* gpu, SkBudgeted budgeted, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, + const GrVkImageInfo& info, const GrVkImageView* texView, - const GrVkImage::Resource* msaaResource, + const GrVkImageInfo& msaaInfo, const GrVkImageView* colorAttachmentView, const GrVkImageView* resolveAttachmentView) : GrSurface(gpu, desc) - , GrVkImage(imageResource) - , GrVkTexture(gpu, desc, imageResource, texView) - , GrVkRenderTarget(gpu, desc, imageResource, msaaResource, colorAttachmentView, - resolveAttachmentView) { + , GrVkImage(info, GrVkImage::kNot_Wrapped) + , GrVkTexture(gpu, desc, info, texView, GrVkImage::kNot_Wrapped) + , GrVkRenderTarget(gpu, desc, info, msaaInfo, colorAttachmentView, + resolveAttachmentView, GrVkImage::kNot_Wrapped) { this->registerWithCache(budgeted); } GrVkTextureRenderTarget(GrVkGpu* gpu, SkBudgeted budgeted, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, + const GrVkImageInfo& info, const GrVkImageView* texView, const GrVkImageView* colorAttachmentView) : GrSurface(gpu, desc) - , GrVkImage(imageResource) - , GrVkTexture(gpu, desc, imageResource, texView) - , GrVkRenderTarget(gpu, desc, imageResource, colorAttachmentView) { + , GrVkImage(info, GrVkImage::kNot_Wrapped) + , GrVkTexture(gpu, desc, info, texView, GrVkImage::kNot_Wrapped) + , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, GrVkImage::kNot_Wrapped) { this->registerWithCache(budgeted); } - enum Wrapped { kWrapped }; GrVkTextureRenderTarget(GrVkGpu* gpu, - Wrapped, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, + const GrVkImageInfo& info, const GrVkImageView* texView, - const GrVkImage::Resource* msaaResource, + const GrVkImageInfo& msaaInfo, const GrVkImageView* colorAttachmentView, - const GrVkImageView* resolveAttachmentView) + const GrVkImageView* resolveAttachmentView, + GrVkImage::Wrapped wrapped) : GrSurface(gpu, desc) - , GrVkImage(imageResource) - , GrVkTexture(gpu, desc, imageResource, texView) - , GrVkRenderTarget(gpu, desc, imageResource, msaaResource, colorAttachmentView, - resolveAttachmentView) { + , GrVkImage(info, wrapped) + , GrVkTexture(gpu, desc, info, texView, wrapped) + , GrVkRenderTarget(gpu, desc, info, msaaInfo, colorAttachmentView, + resolveAttachmentView, wrapped) { this->registerWithCacheWrapped(); } GrVkTextureRenderTarget(GrVkGpu* gpu, - Wrapped, const GrSurfaceDesc& desc, - const GrVkImage::Resource* imageResource, + const GrVkImageInfo& info, const GrVkImageView* texView, - const GrVkImageView* colorAttachmentView) + const GrVkImageView* colorAttachmentView, + GrVkImage::Wrapped wrapped) : GrSurface(gpu, desc) - , GrVkImage(imageResource) - , GrVkTexture(gpu, desc, imageResource, texView) - , GrVkRenderTarget(gpu, desc, imageResource, colorAttachmentView) { + , GrVkImage(info, wrapped) + , GrVkTexture(gpu, desc, info, texView, wrapped) + , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, wrapped) { this->registerWithCacheWrapped(); } - template <typename ResourceType> static GrVkTextureRenderTarget* Create(GrVkGpu*, - ResourceType, const GrSurfaceDesc&, - VkFormat, - const GrVkImage::Resource* imageResource); + const GrVkImageInfo&, + SkBudgeted budgeted, + GrVkImage::Wrapped wrapped); // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory. size_t onGpuMemorySize() const override { diff --git a/tests/VkWrapTests.cpp b/tests/VkWrapTests.cpp index e81ebf5f17..6122655938 100644 --- a/tests/VkWrapTests.cpp +++ b/tests/VkWrapTests.cpp @@ -30,7 +30,7 @@ void wrap_tex_test(skiatest::Reporter* reporter, GrContext* context) { GrVkGpu* gpu = static_cast<GrVkGpu*>(context->getGpu()); GrBackendObject backendObj = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH, kPixelConfig); - const GrVkTextureInfo* backendTex = reinterpret_cast<const GrVkTextureInfo*>(backendObj); + const GrVkImageInfo* backendTex = reinterpret_cast<const GrVkImageInfo*>(backendObj); // check basic borrowed creation GrBackendTextureDesc desc; @@ -43,7 +43,7 @@ void wrap_tex_test(skiatest::Reporter* reporter, GrContext* context) { tex->unref(); // image is null - GrVkTextureInfo backendCopy = *backendTex; + GrVkImageInfo backendCopy = *backendTex; backendCopy.fImage = VK_NULL_HANDLE; desc.fTextureHandle = (GrBackendObject) &backendCopy; tex = gpu->wrapBackendTexture(desc, kBorrow_GrWrapOwnership); @@ -72,7 +72,7 @@ void wrap_rt_test(skiatest::Reporter* reporter, GrContext* context) { GrVkGpu* gpu = static_cast<GrVkGpu*>(context->getGpu()); GrBackendObject backendObj = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH, kPixelConfig); - const GrVkTextureInfo* backendTex = reinterpret_cast<const GrVkTextureInfo*>(backendObj); + const GrVkImageInfo* backendTex = reinterpret_cast<const GrVkImageInfo*>(backendObj); // check basic borrowed creation GrBackendRenderTargetDesc desc; @@ -88,7 +88,7 @@ void wrap_rt_test(skiatest::Reporter* reporter, GrContext* context) { rt->unref(); // image is null - GrVkTextureInfo backendCopy = *backendTex; + GrVkImageInfo backendCopy = *backendTex; backendCopy.fImage = VK_NULL_HANDLE; desc.fRenderTargetHandle = (GrBackendObject)&backendCopy; rt = gpu->wrapBackendRenderTarget(desc, kBorrow_GrWrapOwnership); @@ -119,7 +119,7 @@ void wrap_trt_test(skiatest::Reporter* reporter, GrContext* context) { GrVkGpu* gpu = static_cast<GrVkGpu*>(context->getGpu()); GrBackendObject backendObj = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH, kPixelConfig); - const GrVkTextureInfo* backendTex = reinterpret_cast<const GrVkTextureInfo*>(backendObj); + const GrVkImageInfo* backendTex = reinterpret_cast<const GrVkImageInfo*>(backendObj); // check basic borrowed creation GrBackendTextureDesc desc; @@ -133,7 +133,7 @@ void wrap_trt_test(skiatest::Reporter* reporter, GrContext* context) { tex->unref(); // image is null - GrVkTextureInfo backendCopy = *backendTex; + GrVkImageInfo backendCopy = *backendTex; backendCopy.fImage = VK_NULL_HANDLE; desc.fTextureHandle = (GrBackendObject)&backendCopy; tex = gpu->wrapBackendTexture(desc, kBorrow_GrWrapOwnership); diff --git a/tools/viewer/sk_app/VulkanWindowContext.cpp b/tools/viewer/sk_app/VulkanWindowContext.cpp index d2ea2bec4d..2570e826a3 100644 --- a/tools/viewer/sk_app/VulkanWindowContext.cpp +++ b/tools/viewer/sk_app/VulkanWindowContext.cpp @@ -255,7 +255,7 @@ void VulkanWindowContext::createBuffers(VkFormat format) { fImageLayouts[i] = VK_IMAGE_LAYOUT_UNDEFINED; GrBackendRenderTargetDesc desc; - GrVkTextureInfo info; + GrVkImageInfo info; info.fImage = fImages[i]; info.fAlloc = VK_NULL_HANDLE; info.fImageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; |