OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 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 #include "GrVkGpuCommandBuffer.h" | 8 #include "GrVkGpuCommandBuffer.h" |
9 | 9 |
10 #include "GrMesh.h" | 10 #include "GrMesh.h" |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
93 fRenderPass->unref(fGpu); | 93 fRenderPass->unref(fGpu); |
94 } | 94 } |
95 | 95 |
96 GrGpu* GrVkGpuCommandBuffer::gpu() { return fGpu; } | 96 GrGpu* GrVkGpuCommandBuffer::gpu() { return fGpu; } |
97 | 97 |
98 void GrVkGpuCommandBuffer::end() { | 98 void GrVkGpuCommandBuffer::end() { |
99 fCommandBuffer->end(fGpu); | 99 fCommandBuffer->end(fGpu); |
100 } | 100 } |
101 | 101 |
102 void GrVkGpuCommandBuffer::onSubmit(const SkIRect& bounds) { | 102 void GrVkGpuCommandBuffer::onSubmit(const SkIRect& bounds) { |
103 // Change layout of our render target so it can be used as the color attachm ent | 103 // Change layout of our render target so it can be used as the color attachm ent. Currently |
104 fRenderTarget->setImageLayout(fGpu, | 104 // we dont' attach the resolve to the framebuffer so no need to change its l ayout. |
jvanverth1
2016/08/26 15:03:19
don't
egdaniel
2016/08/26 15:48:45
Done.
| |
105 if (GrVkImage* msaaImage = fRenderTarget->msaaImage()) { | |
jvanverth1
2016/08/26 15:03:19
How about
GrVkImage* layoutImage = fRenderTarget-
egdaniel
2016/08/26 15:48:45
Done.
| |
106 msaaImage->setImageLayout(fGpu, | |
105 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, | 107 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, |
106 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, | 108 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, |
107 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, | 109 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, |
108 false); | 110 false); |
111 } else { | |
112 fRenderTarget->setImageLayout(fGpu, | |
113 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, | |
114 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, | |
115 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, | |
116 false); | |
117 } | |
109 | 118 |
110 // If we are using a stencil attachment we also need to update its layout | 119 // If we are using a stencil attachment we also need to update its layout |
111 if (GrStencilAttachment* stencil = fRenderTarget->renderTargetPriv().getSten cilAttachment()) { | 120 if (GrStencilAttachment* stencil = fRenderTarget->renderTargetPriv().getSten cilAttachment()) { |
112 GrVkStencilAttachment* vkStencil = (GrVkStencilAttachment*)stencil; | 121 GrVkStencilAttachment* vkStencil = (GrVkStencilAttachment*)stencil; |
113 vkStencil->setImageLayout(fGpu, | 122 vkStencil->setImageLayout(fGpu, |
114 VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIM AL, | 123 VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIM AL, |
115 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | | 124 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | |
116 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT, | 125 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT, |
117 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, | 126 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, |
118 false); | 127 false); |
119 } | 128 } |
120 | 129 |
121 if (GrVkImage* msaaImage = fRenderTarget->msaaImage()) { | |
122 msaaImage->setImageLayout(fGpu, | |
123 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, | |
124 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, | |
125 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, | |
126 false); | |
127 } | |
128 | |
129 for (int i = 0; i < fSampledImages.count(); ++i) { | 130 for (int i = 0; i < fSampledImages.count(); ++i) { |
130 fSampledImages[i]->setImageLayout(fGpu, | 131 fSampledImages[i]->setImageLayout(fGpu, |
131 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIM AL, | 132 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIM AL, |
132 VK_ACCESS_SHADER_READ_BIT, | 133 VK_ACCESS_SHADER_READ_BIT, |
133 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, | 134 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, |
134 false); | 135 false); |
135 } | 136 } |
136 | 137 |
137 fGpu->submitSecondaryCommandBuffer(fCommandBuffer, fRenderPass, &fColorClear Value, | 138 fGpu->submitSecondaryCommandBuffer(fCommandBuffer, fRenderPass, &fColorClear Value, |
138 fRenderTarget, bounds); | 139 fRenderTarget, bounds); |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
437 fGpu->stats()->incNumDraws(); | 438 fGpu->stats()->incNumDraws(); |
438 } while ((nonIdxMesh = iter.next())); | 439 } while ((nonIdxMesh = iter.next())); |
439 } | 440 } |
440 | 441 |
441 // Technically we don't have to call this here (since there is a safety chec k in | 442 // Technically we don't have to call this here (since there is a safety chec k in |
442 // pipelineState:setData but this will allow for quicker freeing of resource s if the | 443 // pipelineState:setData but this will allow for quicker freeing of resource s if the |
443 // pipelineState sits in a cache for a while. | 444 // pipelineState sits in a cache for a while. |
444 pipelineState->freeTempResources(fGpu); | 445 pipelineState->freeTempResources(fGpu); |
445 } | 446 } |
446 | 447 |
OLD | NEW |