Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1117)

Unified Diff: src/gpu/vk/GrVkTextureRenderTarget.cpp

Issue 1974983002: Refactor Vulkan image, texture, RTs so that create and getter handles match. (Closed) Base URL: https://skia.googlesource.com/skia.git@fixLayerVersion
Patch Set: nits Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/vk/GrVkTextureRenderTarget.h ('k') | tests/VkWrapTests.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/vk/GrVkTextureRenderTarget.cpp
diff --git a/src/gpu/vk/GrVkTextureRenderTarget.cpp b/src/gpu/vk/GrVkTextureRenderTarget.cpp
index c33a6800b837a2647c0c282273ead8b35eb3f351..b92ea661fb3de5ec490919b1224d5dcd4b7dcee1 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;
}
« no previous file with comments | « src/gpu/vk/GrVkTextureRenderTarget.h ('k') | tests/VkWrapTests.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698