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

Unified Diff: src/gpu/vk/GrVkTexture.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: clean up 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/GrVkTexture.h ('k') | src/gpu/vk/GrVkTextureRenderTarget.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/vk/GrVkTexture.cpp
diff --git a/src/gpu/vk/GrVkTexture.cpp b/src/gpu/vk/GrVkTexture.cpp
index 8278d2743748a80028aa171bf6ededb7efe47421..c61ce8fda9edc6987a2ca40756879bf039999f9f 100644
--- a/src/gpu/vk/GrVkTexture.cpp
+++ b/src/gpu/vk/GrVkTexture.cpp
@@ -19,10 +19,11 @@
GrVkTexture::GrVkTexture(GrVkGpu* gpu,
SkBudgeted budgeted,
const GrSurfaceDesc& desc,
- const GrVkImage::Resource* imageResource,
- const GrVkImageView* view)
+ const GrVkImageInfo& info,
+ const GrVkImageView* view,
+ bool /*isBorrowed*/)
bsalomon 2016/05/13 13:25:48 unused constructor param?
egdaniel 2016/05/13 13:29:59 it is so this ctor and the next one can both be ca
egdaniel 2016/05/13 15:06:53 Done.
: GrSurface(gpu, desc)
- , GrVkImage(imageResource)
+ , GrVkImage(info, false)
, INHERITED(gpu, desc, kSampler2D_GrSLType, desc.fIsMipMapped)
, fTextureView(view) {
this->registerWithCache(budgeted);
@@ -31,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,
+ bool isBorrowed)
: GrSurface(gpu, desc)
- , GrVkImage(imageResource)
+ , GrVkImage(info, isBorrowed)
, INHERITED(gpu, desc, kSampler2D_GrSLType, desc.fIsMipMapped)
, fTextureView(view) {
this->registerWithCacheWrapped();
@@ -43,10 +45,11 @@ 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,
+ bool isWrapped)
: GrSurface(gpu, desc)
- , GrVkImage(imageResource)
+ , GrVkImage(info, isWrapped)
, INHERITED(gpu, desc, kSampler2D_GrSLType, desc.fIsMipMapped)
, fTextureView(view) {}
@@ -55,18 +58,18 @@ template<typename ResourceType>
GrVkTexture* GrVkTexture::Create(GrVkGpu* gpu,
ResourceType type,
const GrSurfaceDesc& desc,
- VkFormat format,
- const GrVkImage::Resource* imageResource) {
- VkImage image = imageResource->fImage;
+ const GrVkImageInfo& info,
+ bool isBorrowed) {
+ VkImage image = info.fImage;
- const GrVkImageView* imageView = GrVkImageView::Create(gpu, image, format,
+ const GrVkImageView* imageView = GrVkImageView::Create(gpu, image, info.fFormat,
GrVkImageView::kColor_Type,
- imageResource->fLevelCount);
+ info.fLevelCount);
if (!imageView) {
return nullptr;
}
- return new GrVkTexture(gpu, type, desc, imageResource, imageView);
+ return new GrVkTexture(gpu, type, desc, info, imageView, isBorrowed);
}
GrVkTexture* GrVkTexture::CreateNewTexture(GrVkGpu* gpu, SkBudgeted budgeted,
@@ -74,14 +77,16 @@ 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::GetImageInfo(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);
+ GrVkTexture* texture = Create(gpu, budgeted, desc, info, false);
+ if (!texture) {
+ VK_CALL(gpu, DestroyImage(gpu->device(), info.fImage, nullptr));
+ VK_CALL(gpu, FreeMemory(gpu->device(), info.fAlloc, nullptr));
+ }
return texture;
}
@@ -89,36 +94,13 @@ GrVkTexture* GrVkTexture::CreateNewTexture(GrVkGpu* gpu, SkBudgeted budgeted,
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) {
- 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);
+ GrVkTexture* texture = Create(gpu, kWrapped, desc, *info,
+ kBorrow_GrWrapOwnership == ownership);
return texture;
}
@@ -152,7 +134,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 {
@@ -166,10 +148,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;
}
@@ -184,7 +166,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;
@@ -193,26 +175,27 @@ 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::GetImageInfo(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);
+ VK_CALL(gpu, DestroyImage(gpu->device(), info.fImage, nullptr));
+ VK_CALL(gpu, FreeMemory(gpu->device(), info.fAlloc, nullptr));
return false;
}
oldResource->unref(gpu);
oldView->unref(gpu);
- fResource = imageResource;
+ this->setNewResource(info.fImage, info.fAlloc);
fTextureView = textureView;
- fCurrentLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+ fInfo = info;
this->texturePriv().setMaxMipMapLevel(mipLevels);
return true;
« no previous file with comments | « src/gpu/vk/GrVkTexture.h ('k') | src/gpu/vk/GrVkTextureRenderTarget.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698