| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 | 8 |
| 9 #ifndef GrVkRenderTarget_DEFINED | 9 #ifndef GrVkRenderTarget_DEFINED |
| 10 #define GrVkRenderTarget_DEFINED | 10 #define GrVkRenderTarget_DEFINED |
| 11 | 11 |
| 12 #include "GrVkImage.h" | 12 #include "GrVkImage.h" |
| 13 #include "GrRenderTarget.h" | 13 #include "GrRenderTarget.h" |
| 14 | 14 |
| 15 #include "GrVkRenderPass.h" | 15 #include "GrVkRenderPass.h" |
| 16 | 16 |
| 17 class GrVkCommandBuffer; | 17 class GrVkCommandBuffer; |
| 18 class GrVkFramebuffer; | 18 class GrVkFramebuffer; |
| 19 class GrVkGpu; | 19 class GrVkGpu; |
| 20 class GrVkImageView; | 20 class GrVkImageView; |
| 21 class GrVkStencilAttachment; | 21 class GrVkStencilAttachment; |
| 22 | 22 |
| 23 struct GrVkTextureInfo; | 23 struct GrVkImageInfo; |
| 24 | 24 |
| 25 #ifdef SK_BUILD_FOR_WIN | 25 #ifdef SK_BUILD_FOR_WIN |
| 26 // Windows gives bogus warnings about inheriting asTexture/asRenderTarget via do
minance. | 26 // Windows gives bogus warnings about inheriting asTexture/asRenderTarget via do
minance. |
| 27 #pragma warning(push) | 27 #pragma warning(push) |
| 28 #pragma warning(disable: 4250) | 28 #pragma warning(disable: 4250) |
| 29 #endif | 29 #endif |
| 30 | 30 |
| 31 class GrVkRenderTarget: public GrRenderTarget, public virtual GrVkImage { | 31 class GrVkRenderTarget: public GrRenderTarget, public virtual GrVkImage { |
| 32 public: | 32 public: |
| 33 static GrVkRenderTarget* CreateNewRenderTarget(GrVkGpu*, SkBudgeted, const G
rSurfaceDesc&, | 33 static GrVkRenderTarget* CreateNewRenderTarget(GrVkGpu*, SkBudgeted, const G
rSurfaceDesc&, |
| 34 const GrVkImage::ImageDesc&); | 34 const GrVkImage::ImageDesc&); |
| 35 | 35 |
| 36 static GrVkRenderTarget* CreateWrappedRenderTarget(GrVkGpu*, const GrSurface
Desc&, | 36 static GrVkRenderTarget* CreateWrappedRenderTarget(GrVkGpu*, const GrSurface
Desc&, |
| 37 GrWrapOwnership, | 37 GrWrapOwnership, |
| 38 const GrVkTextureInfo*); | 38 const GrVkImageInfo*); |
| 39 | 39 |
| 40 ~GrVkRenderTarget() override; | 40 ~GrVkRenderTarget() override; |
| 41 | 41 |
| 42 const GrVkFramebuffer* framebuffer() const { return fFramebuffer; } | 42 const GrVkFramebuffer* framebuffer() const { return fFramebuffer; } |
| 43 const GrVkImageView* colorAttachmentView() const { return fColorAttachmentVi
ew; } | 43 const GrVkImageView* colorAttachmentView() const { return fColorAttachmentVi
ew; } |
| 44 const GrVkImage::Resource* msaaImageResource() const { return fMSAAImageReso
urce; } | 44 const GrVkResource* msaaImageResource() const { |
| 45 if (fMSAAImage) { |
| 46 return fMSAAImage->fResource; |
| 47 } |
| 48 return nullptr; |
| 49 } |
| 45 const GrVkImageView* resolveAttachmentView() const { return fResolveAttachme
ntView; } | 50 const GrVkImageView* resolveAttachmentView() const { return fResolveAttachme
ntView; } |
| 46 const GrVkImage::Resource* stencilImageResource() const; | 51 const GrVkResource* stencilImageResource() const; |
| 47 const GrVkImageView* stencilAttachmentView() const; | 52 const GrVkImageView* stencilAttachmentView() const; |
| 48 | 53 |
| 49 const GrVkRenderPass* simpleRenderPass() const { return fCachedSimpleRenderP
ass; } | 54 const GrVkRenderPass* simpleRenderPass() const { return fCachedSimpleRenderP
ass; } |
| 50 | 55 |
| 51 // override of GrRenderTarget | 56 // override of GrRenderTarget |
| 52 ResolveType getResolveType() const override { | 57 ResolveType getResolveType() const override { |
| 53 return kCanResolve_ResolveType; | 58 return kCanResolve_ResolveType; |
| 54 } | 59 } |
| 55 | 60 |
| 56 bool canAttemptStencilAttachment() const override { | 61 bool canAttemptStencilAttachment() const override { |
| 57 return true; | 62 return true; |
| 58 } | 63 } |
| 59 | 64 |
| 60 GrBackendObject getRenderTargetHandle() const override; | 65 GrBackendObject getRenderTargetHandle() const override; |
| 61 | 66 |
| 62 // Returns the total number of attachments | 67 // Returns the total number of attachments |
| 63 void getAttachmentsDescriptor(GrVkRenderPass::AttachmentsDescriptor* desc, | 68 void getAttachmentsDescriptor(GrVkRenderPass::AttachmentsDescriptor* desc, |
| 64 GrVkRenderPass::AttachmentFlags* flags) const; | 69 GrVkRenderPass::AttachmentFlags* flags) const; |
| 65 | 70 |
| 66 void addResources(GrVkCommandBuffer& commandBuffer) const; | 71 void addResources(GrVkCommandBuffer& commandBuffer) const; |
| 67 | 72 |
| 68 protected: | 73 protected: |
| 69 GrVkRenderTarget(GrVkGpu* gpu, | 74 GrVkRenderTarget(GrVkGpu* gpu, |
| 70 SkBudgeted, | |
| 71 const GrSurfaceDesc& desc, | 75 const GrSurfaceDesc& desc, |
| 72 const GrVkImage::Resource* imageResource, | 76 const GrVkImageInfo& info, |
| 73 const GrVkImage::Resource* msaaImageResource, | 77 const GrVkImageInfo& msaaInfo, |
| 74 const GrVkImageView* colorAttachmentView, | 78 const GrVkImageView* colorAttachmentView, |
| 75 const GrVkImageView* resolveAttachmentView); | 79 const GrVkImageView* resolveAttachmentView, |
| 80 GrVkImage::Wrapped wrapped); |
| 76 | 81 |
| 77 GrVkRenderTarget(GrVkGpu* gpu, | 82 GrVkRenderTarget(GrVkGpu* gpu, |
| 78 const GrSurfaceDesc& desc, | 83 const GrSurfaceDesc& desc, |
| 79 const GrVkImage::Resource* imageResource, | 84 const GrVkImageInfo& info, |
| 80 const GrVkImage::Resource* msaaImageResource, | |
| 81 const GrVkImageView* colorAttachmentView, | 85 const GrVkImageView* colorAttachmentView, |
| 82 const GrVkImageView* resolveAttachmentView); | 86 GrVkImage::Wrapped wrapped); |
| 83 | |
| 84 GrVkRenderTarget(GrVkGpu* gpu, | |
| 85 SkBudgeted, | |
| 86 const GrSurfaceDesc& desc, | |
| 87 const GrVkImage::Resource* imageResource, | |
| 88 const GrVkImageView* colorAttachmentView); | |
| 89 | |
| 90 GrVkRenderTarget(GrVkGpu* gpu, | |
| 91 const GrSurfaceDesc& desc, | |
| 92 const GrVkImage::Resource* imageResource, | |
| 93 const GrVkImageView* colorAttachmentView); | |
| 94 | |
| 95 static GrVkRenderTarget* Create(GrVkGpu*, SkBudgeted, const GrSurfaceDesc&, | |
| 96 const GrVkImage::Resource* imageResource); | |
| 97 | 87 |
| 98 GrVkGpu* getVkGpu() const; | 88 GrVkGpu* getVkGpu() const; |
| 99 | 89 |
| 100 void onAbandon() override; | 90 void onAbandon() override; |
| 101 void onRelease() override; | 91 void onRelease() override; |
| 102 | 92 |
| 103 // This accounts for the texture's memory and any MSAA renderbuffer's memory
. | 93 // This accounts for the texture's memory and any MSAA renderbuffer's memory
. |
| 104 size_t onGpuMemorySize() const override { | 94 size_t onGpuMemorySize() const override { |
| 105 SkASSERT(kUnknown_GrPixelConfig != fDesc.fConfig); | 95 SkASSERT(kUnknown_GrPixelConfig != fDesc.fConfig); |
| 106 SkASSERT(!GrPixelConfigIsCompressed(fDesc.fConfig)); | 96 SkASSERT(!GrPixelConfigIsCompressed(fDesc.fConfig)); |
| 107 size_t colorBytes = GrBytesPerPixel(fDesc.fConfig); | 97 size_t colorBytes = GrBytesPerPixel(fDesc.fConfig); |
| 108 SkASSERT(colorBytes > 0); | 98 SkASSERT(colorBytes > 0); |
| 109 return fColorValuesPerPixel * fDesc.fWidth * fDesc.fHeight * colorBytes; | 99 return fColorValuesPerPixel * fDesc.fWidth * fDesc.fHeight * colorBytes; |
| 110 } | 100 } |
| 111 | 101 |
| 112 private: | 102 private: |
| 103 GrVkRenderTarget(GrVkGpu* gpu, |
| 104 SkBudgeted, |
| 105 const GrSurfaceDesc& desc, |
| 106 const GrVkImageInfo& info, |
| 107 const GrVkImageInfo& msaaInfo, |
| 108 const GrVkImageView* colorAttachmentView, |
| 109 const GrVkImageView* resolveAttachmentView, |
| 110 GrVkImage::Wrapped wrapped); |
| 111 |
| 112 GrVkRenderTarget(GrVkGpu* gpu, |
| 113 SkBudgeted, |
| 114 const GrSurfaceDesc& desc, |
| 115 const GrVkImageInfo& info, |
| 116 const GrVkImageView* colorAttachmentView, |
| 117 GrVkImage::Wrapped wrapped); |
| 118 |
| 119 static GrVkRenderTarget* Create(GrVkGpu*, SkBudgeted, const GrSurfaceDesc&, |
| 120 const GrVkImageInfo&, GrVkImage::Wrapped wra
pped); |
| 121 |
| 113 bool completeStencilAttachment() override; | 122 bool completeStencilAttachment() override; |
| 114 | 123 |
| 115 void createFramebuffer(GrVkGpu* gpu); | 124 void createFramebuffer(GrVkGpu* gpu); |
| 116 | 125 |
| 117 void releaseInternalObjects(); | 126 void releaseInternalObjects(); |
| 118 void abandonInternalObjects(); | 127 void abandonInternalObjects(); |
| 119 | 128 |
| 120 const GrVkFramebuffer* fFramebuffer; | 129 const GrVkFramebuffer* fFramebuffer; |
| 121 const GrVkImageView* fColorAttachmentView; | 130 const GrVkImageView* fColorAttachmentView; |
| 122 const GrVkImage::Resource* fMSAAImageResource; | 131 GrVkImage* fMSAAImage; |
| 123 const GrVkImageView* fResolveAttachmentView; | 132 const GrVkImageView* fResolveAttachmentView; |
| 124 int fColorValuesPerPixel; | 133 int fColorValuesPerPixel; |
| 125 | 134 |
| 126 // This is a cached pointer to a simple render pass. The render target shoul
d unref it | 135 // This is a cached pointer to a simple render pass. The render target shoul
d unref it |
| 127 // once it is done with it. | 136 // once it is done with it. |
| 128 const GrVkRenderPass* fCachedSimpleRenderPass; | 137 const GrVkRenderPass* fCachedSimpleRenderPass; |
| 129 }; | 138 }; |
| 130 | 139 |
| 131 #endif | 140 #endif |
| OLD | NEW |