Index: src/gpu/vk/GrVkGpu.cpp |
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp |
index f87a6f6fbd199b626d28eebc75f66b980f1760d5..fb533e317ed20be2176efeb951e02d36afa099d8 100644 |
--- a/src/gpu/vk/GrVkGpu.cpp |
+++ b/src/gpu/vk/GrVkGpu.cpp |
@@ -331,10 +331,11 @@ bool GrVkGpu::uploadTexDataLinear(GrVkTexture* tex, |
&layout)); |
int texTop = kBottomLeft_GrSurfaceOrigin == desc.fOrigin ? tex->height() - top - height : top; |
- VkDeviceSize offset = texTop*layout.rowPitch + left*bpp; |
+ const GrVkAlloc& alloc = tex->alloc(); |
+ VkDeviceSize offset = alloc.fOffset + texTop*layout.rowPitch + left*bpp; |
VkDeviceSize size = height*layout.rowPitch; |
void* mapPtr; |
- err = GR_VK_CALL(interface, MapMemory(fDevice, tex->memory(), offset, size, 0, &mapPtr)); |
+ err = GR_VK_CALL(interface, MapMemory(fDevice, alloc.fMemory, offset, size, 0, &mapPtr)); |
if (err) { |
return false; |
} |
@@ -358,7 +359,7 @@ bool GrVkGpu::uploadTexDataLinear(GrVkTexture* tex, |
} |
} |
- GR_VK_CALL(interface, UnmapMemory(fDevice, tex->memory())); |
+ GR_VK_CALL(interface, UnmapMemory(fDevice, alloc.fMemory)); |
return true; |
} |
@@ -617,7 +618,7 @@ GrTexture* GrVkGpu::onWrapBackendTexture(const GrBackendTextureDesc& desc, |
} |
const GrVkImageInfo* info = reinterpret_cast<const GrVkImageInfo*>(desc.fTextureHandle); |
- if (VK_NULL_HANDLE == info->fImage || VK_NULL_HANDLE == info->fAlloc) { |
+ if (VK_NULL_HANDLE == info->fImage || VK_NULL_HANDLE == info->fAlloc.fMemory) { |
return nullptr; |
} |
#ifdef SK_DEBUG |
@@ -660,7 +661,7 @@ GrRenderTarget* GrVkGpu::onWrapBackendRenderTarget(const GrBackendRenderTargetDe |
const GrVkImageInfo* info = |
reinterpret_cast<const GrVkImageInfo*>(wrapDesc.fRenderTargetHandle); |
if (VK_NULL_HANDLE == info->fImage || |
- (VK_NULL_HANDLE == info->fAlloc && kAdopt_GrWrapOwnership == ownership)) { |
+ (VK_NULL_HANDLE == info->fAlloc.fMemory && kAdopt_GrWrapOwnership == ownership)) { |
return nullptr; |
} |
@@ -873,7 +874,7 @@ GrBackendObject GrVkGpu::createTestingOnlyBackendTexture(void* srcData, int w, i |
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; |
VkImage image = VK_NULL_HANDLE; |
- VkDeviceMemory alloc = VK_NULL_HANDLE; |
+ GrVkAlloc alloc = { VK_NULL_HANDLE, 0 }; |
VkImageTiling imageTiling = linearTiling ? VK_IMAGE_TILING_LINEAR : VK_IMAGE_TILING_OPTIMAL; |
VkImageLayout initialLayout = (VK_IMAGE_TILING_LINEAR == imageTiling) |
@@ -924,9 +925,10 @@ GrBackendObject GrVkGpu::createTestingOnlyBackendTexture(void* srcData, int w, i |
VK_CALL(GetImageSubresourceLayout(fDevice, image, &subres, &layout)); |
void* mapPtr; |
- err = VK_CALL(MapMemory(fDevice, alloc, 0, layout.rowPitch * h, 0, &mapPtr)); |
+ err = VK_CALL(MapMemory(fDevice, alloc.fMemory, alloc.fOffset, layout.rowPitch * h, |
+ 0, &mapPtr)); |
if (err) { |
- VK_CALL(FreeMemory(this->device(), alloc, nullptr)); |
+ GrVkMemory::FreeImageMemory(this, alloc); |
VK_CALL(DestroyImage(this->device(), image, nullptr)); |
return 0; |
} |
@@ -941,7 +943,7 @@ GrBackendObject GrVkGpu::createTestingOnlyBackendTexture(void* srcData, int w, i |
SkRectMemcpy(mapPtr, static_cast<size_t>(layout.rowPitch), srcData, rowCopyBytes, |
rowCopyBytes, h); |
} |
- VK_CALL(UnmapMemory(fDevice, alloc)); |
+ VK_CALL(UnmapMemory(fDevice, alloc.fMemory)); |
} else { |
// TODO: Add support for copying to optimal tiling |
SkASSERT(false); |
@@ -962,7 +964,7 @@ GrBackendObject GrVkGpu::createTestingOnlyBackendTexture(void* srcData, int w, i |
bool GrVkGpu::isTestingOnlyBackendTexture(GrBackendObject id) const { |
const GrVkImageInfo* backend = reinterpret_cast<const GrVkImageInfo*>(id); |
- if (backend && backend->fImage && backend->fAlloc) { |
+ if (backend && backend->fImage && backend->fAlloc.fMemory) { |
VkMemoryRequirements req; |
memset(&req, 0, sizeof(req)); |
GR_VK_CALL(this->vkInterface(), GetImageMemoryRequirements(fDevice, |
@@ -984,7 +986,7 @@ void GrVkGpu::deleteTestingOnlyBackendTexture(GrBackendObject id, bool abandon) |
// something in the command buffer may still be using this, so force submit |
this->submitCommandBuffer(kForce_SyncQueue); |
- VK_CALL(FreeMemory(this->device(), backend->fAlloc, nullptr)); |
+ GrVkMemory::FreeImageMemory(this, backend->fAlloc); |
VK_CALL(DestroyImage(this->device(), backend->fImage, nullptr)); |
} |
delete backend; |