VALIDATE();
fResource->recycle(const_cast<GrVkGpu*>(gpu));
fResource = nullptr;
+ if (!fDesc.fDynamic) {
+ delete[] (unsigned char*)fMapPtr;
+ }
fMapPtr = nullptr;
VALIDATE();
}
void GrVkBuffer::vkAbandon() {
fResource->unrefAndAbandon();
fResource = nullptr;
+ if (!fDesc.fDynamic) {
+ delete[] (unsigned char*)fMapPtr;
+ }
fMapPtr = nullptr;
VALIDATE();
}
#include "SkPoint.h"
#include "SkRect.h"
+GrVkCopyManager::GrVkCopyManager()
+ : fVertShaderModule(VK_NULL_HANDLE)
+ , fFragShaderModule(VK_NULL_HANDLE)
+ , fPipelineLayout(VK_NULL_HANDLE) {}
+
+GrVkCopyManager::~GrVkCopyManager() {}
+
bool GrVkCopyManager::createCopyProgram(GrVkGpu* gpu) {
const GrShaderCaps* shaderCaps = gpu->caps()->shaderCaps();
const char* version = shaderCaps->versionDeclString();
fVertexBuffer->updateData(vdata, sizeof(vdata));
// We use 2 vec4's for uniforms
- fUniformBuffer = GrVkUniformBuffer::Create(gpu, 8 * sizeof(float));
- SkASSERT(fUniformBuffer);
+ fUniformBuffer.reset(GrVkUniformBuffer::Create(gpu, 8 * sizeof(float)));
+ SkASSERT(fUniformBuffer.get());
return true;
}
SkASSERT(VK_NULL_HANDLE == fFragShaderModule &&
VK_NULL_HANDLE == fPipelineLayout &&
nullptr == fVertexBuffer.get() &&
- nullptr == fUniformBuffer);
+ nullptr == fUniformBuffer.get());
if (!this->createCopyProgram(gpu)) {
SkDebugf("Failed to create copy program.\n");
return false;
if (fUniformBuffer) {
fUniformBuffer->release(gpu);
- fUniformBuffer = nullptr;
+ fUniformBuffer.reset();
}
}
if (fUniformBuffer) {
fUniformBuffer->abandon();
- fUniformBuffer = nullptr;
+ fUniformBuffer.reset();
}
}
class GrVkCopyManager {
public:
- GrVkCopyManager()
- : fVertShaderModule(VK_NULL_HANDLE)
- , fFragShaderModule(VK_NULL_HANDLE)
- , fPipelineLayout(VK_NULL_HANDLE)
- , fUniformBuffer(nullptr) {}
+ GrVkCopyManager();
+
+ ~GrVkCopyManager();
bool copySurfaceAsDraw(GrVkGpu* gpu,
GrSurface* dst,
VkPipelineLayout fPipelineLayout;
sk_sp<GrVkVertexBuffer> fVertexBuffer;
- GrVkUniformBuffer* fUniformBuffer;
+ std::unique_ptr<GrVkUniformBuffer> fUniformBuffer;
};
#endif