diff options
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/gl/GrGLSemaphore.cpp | 20 | ||||
-rw-r--r-- | src/gpu/gl/GrGLSemaphore.h | 11 | ||||
-rw-r--r-- | src/gpu/gl/GrGLTextureRenderTarget.cpp | 24 | ||||
-rw-r--r-- | src/gpu/gl/GrGLTextureRenderTarget.h | 17 | ||||
-rw-r--r-- | src/gpu/vk/GrVkCommandBuffer.cpp | 58 | ||||
-rw-r--r-- | src/gpu/vk/GrVkCommandBuffer.h | 55 | ||||
-rw-r--r-- | src/gpu/vk/GrVkResourceProvider.cpp | 1 | ||||
-rw-r--r-- | src/gpu/vk/GrVkTextureRenderTarget.cpp | 59 | ||||
-rw-r--r-- | src/gpu/vk/GrVkTextureRenderTarget.h | 38 |
9 files changed, 187 insertions, 96 deletions
diff --git a/src/gpu/gl/GrGLSemaphore.cpp b/src/gpu/gl/GrGLSemaphore.cpp new file mode 100644 index 0000000000..c26b74e9c1 --- /dev/null +++ b/src/gpu/gl/GrGLSemaphore.cpp @@ -0,0 +1,20 @@ +/* + * Copyright 2017 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "GrGLSemaphore.h" + +#include "GrGLGpu.h" + +GrGLSemaphore::GrGLSemaphore(const GrGLGpu* gpu, bool isOwned) + : INHERITED(gpu), fSync(0), fIsOwned(isOwned) { +} + +GrGLSemaphore::~GrGLSemaphore() { + if (fIsOwned && fGpu) { + static_cast<const GrGLGpu*>(fGpu)->deleteSync(fSync); + } +} diff --git a/src/gpu/gl/GrGLSemaphore.h b/src/gpu/gl/GrGLSemaphore.h index cfc3de9951..ba05219357 100644 --- a/src/gpu/gl/GrGLSemaphore.h +++ b/src/gpu/gl/GrGLSemaphore.h @@ -11,7 +11,8 @@ #include "GrSemaphore.h" #include "GrBackendSemaphore.h" -#include "GrGLGpu.h" + +class GrGLGpu; class GrGLSemaphore : public GrSemaphore { public: @@ -28,17 +29,13 @@ public: return sema; } - ~GrGLSemaphore() override { - if (fIsOwned && fGpu) { - static_cast<const GrGLGpu*>(fGpu)->deleteSync(fSync); - } - } + ~GrGLSemaphore() override; GrGLsync sync() const { return fSync; } void setSync(const GrGLsync& sync) { fSync = sync; } private: - GrGLSemaphore(const GrGLGpu* gpu, bool isOwned) : INHERITED(gpu), fSync(0), fIsOwned(isOwned) {} + GrGLSemaphore(const GrGLGpu* gpu, bool isOwned); void setBackendSemaphore(GrBackendSemaphore* backendSemaphore) const override { backendSemaphore->initGL(fSync); diff --git a/src/gpu/gl/GrGLTextureRenderTarget.cpp b/src/gpu/gl/GrGLTextureRenderTarget.cpp index c643cfffa5..ef401cdd06 100644 --- a/src/gpu/gl/GrGLTextureRenderTarget.cpp +++ b/src/gpu/gl/GrGLTextureRenderTarget.cpp @@ -8,9 +8,33 @@ #include "GrGLTextureRenderTarget.h" #include "GrContext.h" +#include "GrGLGpu.h" #include "GrTexturePriv.h" #include "SkTraceMemoryDump.h" +GrGLTextureRenderTarget::GrGLTextureRenderTarget(GrGLGpu* gpu, + SkBudgeted budgeted, + const GrSurfaceDesc& desc, + const GrGLTexture::IDDesc& texIDDesc, + const GrGLRenderTarget::IDDesc& rtIDDesc, + bool wasMipMapDataProvided) + : GrSurface(gpu, desc) + , GrGLTexture(gpu, desc, texIDDesc, wasMipMapDataProvided) + , GrGLRenderTarget(gpu, desc, rtIDDesc) { + this->registerWithCache(budgeted); +} + +GrGLTextureRenderTarget::GrGLTextureRenderTarget(GrGLGpu* gpu, + const GrSurfaceDesc& desc, + const GrGLTexture::IDDesc& texIDDesc, + const GrGLRenderTarget::IDDesc& rtIDDesc, + bool wasMipMapDataProvided) + : GrSurface(gpu, desc) + , GrGLTexture(gpu, desc, texIDDesc, wasMipMapDataProvided) + , GrGLRenderTarget(gpu, desc, rtIDDesc) { + this->registerWithCacheWrapped(); +} + // GrGLTextureRenderTarget must dump both of its superclasses. void GrGLTextureRenderTarget::dumpMemoryStatistics( SkTraceMemoryDump* traceMemoryDump) const { diff --git a/src/gpu/gl/GrGLTextureRenderTarget.h b/src/gpu/gl/GrGLTextureRenderTarget.h index d74239ec14..e104e85b3f 100644 --- a/src/gpu/gl/GrGLTextureRenderTarget.h +++ b/src/gpu/gl/GrGLTextureRenderTarget.h @@ -9,10 +9,11 @@ #ifndef GrGLTextureRenderTarget_DEFINED #define GrGLTextureRenderTarget_DEFINED -#include "GrGLGpu.h" #include "GrGLTexture.h" #include "GrGLRenderTarget.h" +class GrGLGpu; + #ifdef SK_BUILD_FOR_WIN // Windows gives bogus warnings about inheriting asTexture/asRenderTarget via dominance. #pragma warning(push) @@ -28,12 +29,7 @@ public: const GrSurfaceDesc& desc, const GrGLTexture::IDDesc& texIDDesc, const GrGLRenderTarget::IDDesc& rtIDDesc, - bool wasMipMapDataProvided) - : GrSurface(gpu, desc) - , GrGLTexture(gpu, desc, texIDDesc, wasMipMapDataProvided) - , GrGLRenderTarget(gpu, desc, rtIDDesc) { - this->registerWithCache(budgeted); - } + bool wasMipMapDataProvided); bool canAttemptStencilAttachment() const override; @@ -59,12 +55,7 @@ private: const GrSurfaceDesc& desc, const GrGLTexture::IDDesc& texIDDesc, const GrGLRenderTarget::IDDesc& rtIDDesc, - bool wasMipMapDataProvided) - : GrSurface(gpu, desc) - , GrGLTexture(gpu, desc, texIDDesc, wasMipMapDataProvided) - , GrGLRenderTarget(gpu, desc, rtIDDesc) { - this->registerWithCacheWrapped(); - } + bool wasMipMapDataProvided); size_t onGpuMemorySize() const override; }; diff --git a/src/gpu/vk/GrVkCommandBuffer.cpp b/src/gpu/vk/GrVkCommandBuffer.cpp index 63642d4ed0..d4fe80caf9 100644 --- a/src/gpu/vk/GrVkCommandBuffer.cpp +++ b/src/gpu/vk/GrVkCommandBuffer.cpp @@ -7,14 +7,19 @@ #include "GrVkCommandBuffer.h" +#include "GrVkGpu.h" #include "GrVkFramebuffer.h" +#include "GrVkImage.h" #include "GrVkImageView.h" +#include "GrVkIndexBuffer.h" #include "GrVkPipeline.h" +#include "GrVkPipelineState.h" #include "GrVkRenderPass.h" #include "GrVkRenderTarget.h" #include "GrVkPipelineState.h" #include "GrVkTransferBuffer.h" #include "GrVkUtil.h" +#include "GrVkVertexBuffer.h" #include "SkRect.h" void GrVkCommandBuffer::invalidateState() { @@ -145,6 +150,40 @@ void GrVkCommandBuffer::pipelineBarrier(const GrVkGpu* gpu, } +void GrVkCommandBuffer::bindInputBuffer(GrVkGpu* gpu, uint32_t binding, + const GrVkVertexBuffer* vbuffer) { + VkBuffer vkBuffer = vbuffer->buffer(); + SkASSERT(VK_NULL_HANDLE != vkBuffer); + SkASSERT(binding < kMaxInputBuffers); + // TODO: once vbuffer->offset() no longer always returns 0, we will need to track the offset + // to know if we can skip binding or not. + if (vkBuffer != fBoundInputBuffers[binding]) { + VkDeviceSize offset = vbuffer->offset(); + GR_VK_CALL(gpu->vkInterface(), CmdBindVertexBuffers(fCmdBuffer, + binding, + 1, + &vkBuffer, + &offset)); + fBoundInputBuffers[binding] = vkBuffer; + addResource(vbuffer->resource()); + } +} + +void GrVkCommandBuffer::bindIndexBuffer(GrVkGpu* gpu, const GrVkIndexBuffer* ibuffer) { + VkBuffer vkBuffer = ibuffer->buffer(); + SkASSERT(VK_NULL_HANDLE != vkBuffer); + // TODO: once ibuffer->offset() no longer always returns 0, we will need to track the offset + // to know if we can skip binding or not. + if (vkBuffer != fBoundIndexBuffer) { + GR_VK_CALL(gpu->vkInterface(), CmdBindIndexBuffer(fCmdBuffer, + vkBuffer, + ibuffer->offset(), + VK_INDEX_TYPE_UINT16)); + fBoundIndexBuffer = vkBuffer; + addResource(ibuffer->resource()); + } +} + void GrVkCommandBuffer::clearAttachments(const GrVkGpu* gpu, int numAttachments, const VkClearAttachment* attachments, @@ -535,6 +574,25 @@ void GrVkPrimaryCommandBuffer::blitImage(const GrVkGpu* gpu, filter)); } +void GrVkPrimaryCommandBuffer::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 GrVkPrimaryCommandBuffer::copyImageToBuffer(const GrVkGpu* gpu, GrVkImage* srcImage, VkImageLayout srcLayout, diff --git a/src/gpu/vk/GrVkCommandBuffer.h b/src/gpu/vk/GrVkCommandBuffer.h index b387885fff..e602e4d574 100644 --- a/src/gpu/vk/GrVkCommandBuffer.h +++ b/src/gpu/vk/GrVkCommandBuffer.h @@ -14,11 +14,16 @@ #include "GrVkUtil.h" #include "vk/GrVkDefines.h" +class GrVkBuffer; class GrVkFramebuffer; +class GrVkIndexBuffer; +class GrVkImage; class GrVkPipeline; +class GrVkPipelineState; class GrVkRenderPass; class GrVkRenderTarget; class GrVkTransferBuffer; +class GrVkVertexBuffer; class GrVkCommandBuffer : public GrVkResource { public: @@ -40,40 +45,9 @@ public: BarrierType barrierType, void* barrier) const; - static constexpr uint32_t kMaxInputBuffers = 2; + void bindInputBuffer(GrVkGpu* gpu, uint32_t binding, const GrVkVertexBuffer* vbuffer); - void bindInputBuffer(GrVkGpu* gpu, uint32_t binding, const GrVkVertexBuffer* vbuffer) { - VkBuffer vkBuffer = vbuffer->buffer(); - SkASSERT(VK_NULL_HANDLE != vkBuffer); - SkASSERT(binding < kMaxInputBuffers); - // TODO: once vbuffer->offset() no longer always returns 0, we will need to track the offset - // to know if we can skip binding or not. - if (vkBuffer != fBoundInputBuffers[binding]) { - VkDeviceSize offset = vbuffer->offset(); - GR_VK_CALL(gpu->vkInterface(), CmdBindVertexBuffers(fCmdBuffer, - binding, - 1, - &vkBuffer, - &offset)); - fBoundInputBuffers[binding] = vkBuffer; - addResource(vbuffer->resource()); - } - } - - void bindIndexBuffer(GrVkGpu* gpu, const GrVkIndexBuffer* ibuffer) { - VkBuffer vkBuffer = ibuffer->buffer(); - SkASSERT(VK_NULL_HANDLE != vkBuffer); - // TODO: once ibuffer->offset() no longer always returns 0, we will need to track the offset - // to know if we can skip binding or not. - if (vkBuffer != fBoundIndexBuffer) { - GR_VK_CALL(gpu->vkInterface(), CmdBindIndexBuffer(fCmdBuffer, - vkBuffer, - ibuffer->offset(), - VK_INDEX_TYPE_UINT16)); - fBoundIndexBuffer = vkBuffer; - addResource(ibuffer->resource()); - } - } + void bindIndexBuffer(GrVkGpu* gpu, const GrVkIndexBuffer* ibuffer); void bindPipeline(const GrVkGpu* gpu, const GrVkPipeline* pipeline); @@ -178,6 +152,8 @@ private: virtual void onReset(GrVkGpu* gpu) {} + static constexpr uint32_t kMaxInputBuffers = 2; + VkBuffer fBoundInputBuffers[kMaxInputBuffers]; VkBuffer fBoundIndexBuffer; @@ -258,18 +234,7 @@ public: 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); - } + VkFilter filter); void copyImageToBuffer(const GrVkGpu* gpu, GrVkImage* srcImage, diff --git a/src/gpu/vk/GrVkResourceProvider.cpp b/src/gpu/vk/GrVkResourceProvider.cpp index 9b94c08723..0f4b2a9f34 100644 --- a/src/gpu/vk/GrVkResourceProvider.cpp +++ b/src/gpu/vk/GrVkResourceProvider.cpp @@ -10,6 +10,7 @@ #include "GrSamplerParams.h" #include "GrVkCommandBuffer.h" #include "GrVkCopyPipeline.h" +#include "GrVkGpu.h" #include "GrVkPipeline.h" #include "GrVkRenderTarget.h" #include "GrVkSampler.h" diff --git a/src/gpu/vk/GrVkTextureRenderTarget.cpp b/src/gpu/vk/GrVkTextureRenderTarget.cpp index a77722832d..8dc5ffed1e 100644 --- a/src/gpu/vk/GrVkTextureRenderTarget.cpp +++ b/src/gpu/vk/GrVkTextureRenderTarget.cpp @@ -19,6 +19,65 @@ #define VK_CALL(GPU, X) GR_VK_CALL(GPU->vkInterface(), X) +GrVkTextureRenderTarget::GrVkTextureRenderTarget(GrVkGpu* gpu, + SkBudgeted budgeted, + const GrSurfaceDesc& desc, + const GrVkImageInfo& info, + const GrVkImageView* texView, + const GrVkImageInfo& msaaInfo, + const GrVkImageView* colorAttachmentView, + const GrVkImageView* resolveAttachmentView) + : GrSurface(gpu, desc) + , 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::GrVkTextureRenderTarget(GrVkGpu* gpu, + SkBudgeted budgeted, + const GrSurfaceDesc& desc, + const GrVkImageInfo& info, + const GrVkImageView* texView, + const GrVkImageView* colorAttachmentView) + : GrSurface(gpu, desc) + , GrVkImage(info, GrVkImage::kNot_Wrapped) + , GrVkTexture(gpu, desc, info, texView, GrVkImage::kNot_Wrapped) + , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, GrVkImage::kNot_Wrapped) { + this->registerWithCache(budgeted); +} + +GrVkTextureRenderTarget::GrVkTextureRenderTarget(GrVkGpu* gpu, + const GrSurfaceDesc& desc, + const GrVkImageInfo& info, + const GrVkImageView* texView, + const GrVkImageInfo& msaaInfo, + const GrVkImageView* colorAttachmentView, + const GrVkImageView* resolveAttachmentView, + GrVkImage::Wrapped wrapped) + : GrSurface(gpu, desc) + , GrVkImage(info, wrapped) + , GrVkTexture(gpu, desc, info, texView, wrapped) + , GrVkRenderTarget(gpu, desc, info, msaaInfo, colorAttachmentView, + resolveAttachmentView, wrapped) { + this->registerWithCacheWrapped(); +} + +GrVkTextureRenderTarget::GrVkTextureRenderTarget(GrVkGpu* gpu, + const GrSurfaceDesc& desc, + const GrVkImageInfo& info, + const GrVkImageView* texView, + const GrVkImageView* colorAttachmentView, + GrVkImage::Wrapped wrapped) + : GrSurface(gpu, desc) + , GrVkImage(info, wrapped) + , GrVkTexture(gpu, desc, info, texView, wrapped) + , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, wrapped) { + this->registerWithCacheWrapped(); +} + + sk_sp<GrVkTextureRenderTarget> GrVkTextureRenderTarget::Make(GrVkGpu* gpu, const GrSurfaceDesc& desc, const GrVkImageInfo& info, diff --git a/src/gpu/vk/GrVkTextureRenderTarget.h b/src/gpu/vk/GrVkTextureRenderTarget.h index 7eab1058d6..9dc7574730 100644 --- a/src/gpu/vk/GrVkTextureRenderTarget.h +++ b/src/gpu/vk/GrVkTextureRenderTarget.h @@ -11,7 +11,8 @@ #include "GrVkTexture.h" #include "GrVkRenderTarget.h" -#include "GrVkGpu.h" + +class GrVkGpu; #ifdef SK_BUILD_FOR_WIN // Windows gives bogus warnings about inheriting asTexture/asRenderTarget via dominance. @@ -54,27 +55,15 @@ private: const GrVkImageView* texView, const GrVkImageInfo& msaaInfo, const GrVkImageView* colorAttachmentView, - const GrVkImageView* resolveAttachmentView) - : GrSurface(gpu, desc) - , 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); - } + const GrVkImageView* resolveAttachmentView); GrVkTextureRenderTarget(GrVkGpu* gpu, SkBudgeted budgeted, const GrSurfaceDesc& desc, const GrVkImageInfo& info, const GrVkImageView* texView, - const GrVkImageView* colorAttachmentView) - : GrSurface(gpu, desc) - , GrVkImage(info, GrVkImage::kNot_Wrapped) - , GrVkTexture(gpu, desc, info, texView, GrVkImage::kNot_Wrapped) - , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, GrVkImage::kNot_Wrapped) { - this->registerWithCache(budgeted); - } + const GrVkImageView* colorAttachmentView); + GrVkTextureRenderTarget(GrVkGpu* gpu, const GrSurfaceDesc& desc, const GrVkImageInfo& info, @@ -82,27 +71,14 @@ private: const GrVkImageInfo& msaaInfo, const GrVkImageView* colorAttachmentView, const GrVkImageView* resolveAttachmentView, - GrVkImage::Wrapped wrapped) - : GrSurface(gpu, desc) - , GrVkImage(info, wrapped) - , GrVkTexture(gpu, desc, info, texView, wrapped) - , GrVkRenderTarget(gpu, desc, info, msaaInfo, colorAttachmentView, - resolveAttachmentView, wrapped) { - this->registerWithCacheWrapped(); - } + GrVkImage::Wrapped wrapped); GrVkTextureRenderTarget(GrVkGpu* gpu, const GrSurfaceDesc& desc, const GrVkImageInfo& info, const GrVkImageView* texView, const GrVkImageView* colorAttachmentView, - GrVkImage::Wrapped wrapped) - : GrSurface(gpu, desc) - , GrVkImage(info, wrapped) - , GrVkTexture(gpu, desc, info, texView, wrapped) - , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, wrapped) { - this->registerWithCacheWrapped(); - } + GrVkImage::Wrapped wrapped); static sk_sp<GrVkTextureRenderTarget> Make(GrVkGpu*, const GrSurfaceDesc&, |