blob: d3eece3ce1631b15c8dedbb3e42dfc07a4806dfe [file] [log] [blame]
egdaniel066df7c2016-06-08 14:02:27 -07001/*
2* Copyright 2016 Google Inc.
3*
4* Use of this source code is governed by a BSD-style license that can be
5* found in the LICENSE file.
6*/
7
8#ifndef GrVkGpuCommandBuffer_DEFINED
9#define GrVkGpuCommandBuffer_DEFINED
10
11#include "GrGpuCommandBuffer.h"
12
13#include "GrColor.h"
egdaniel9cb63402016-06-23 08:37:05 -070014#include "GrTypes.h"
15#include "GrVkPipelineState.h"
egdaniel066df7c2016-06-08 14:02:27 -070016
egdaniel9cb63402016-06-23 08:37:05 -070017class GrNonInstancedMesh;
egdaniel066df7c2016-06-08 14:02:27 -070018class GrVkGpu;
egdaniel9cb63402016-06-23 08:37:05 -070019class GrVkImage;
egdaniel066df7c2016-06-08 14:02:27 -070020class GrVkRenderPass;
21class GrVkRenderTarget;
22class GrVkSecondaryCommandBuffer;
23
24class GrVkGpuCommandBuffer : public GrGpuCommandBuffer {
25public:
26 GrVkGpuCommandBuffer(GrVkGpu* gpu,
egdaniel9cb63402016-06-23 08:37:05 -070027 const LoadAndStoreInfo& colorInfo,
28 const LoadAndStoreInfo& stencilInfo);
egdaniel066df7c2016-06-08 14:02:27 -070029
30 virtual ~GrVkGpuCommandBuffer();
31
32 void end() override;
33
Brian Salomonc293a292016-11-30 13:38:32 -050034 void discard(GrRenderTarget*) override;
egdaniel066df7c2016-06-08 14:02:27 -070035
Brian Salomon742e31d2016-12-07 17:06:19 -050036 void inlineUpload(GrOpFlushState* state, GrDrawOp::DeferredUploadFn& upload) override;
Greg Daniel77b53f62016-10-18 11:48:51 -040037
egdaniel066df7c2016-06-08 14:02:27 -070038private:
Brian Salomonc293a292016-11-30 13:38:32 -050039 // Performs lazy initialization on the first operation seen by the command buffer.
40 void init(GrVkRenderTarget* rt);
41
egdaniel9cb63402016-06-23 08:37:05 -070042 GrGpu* gpu() override;
Greg Daniel65a09272016-10-12 09:47:22 -040043 GrRenderTarget* renderTarget() override;
egdaniel9cb63402016-06-23 08:37:05 -070044
Greg Daniel36a77ee2016-10-18 10:33:25 -040045 void onSubmit() override;
egdaniel9cb63402016-06-23 08:37:05 -070046
47 // Bind vertex and index buffers
48 void bindGeometry(const GrPrimitiveProcessor&, const GrNonInstancedMesh&);
49
50 sk_sp<GrVkPipelineState> prepareDrawState(const GrPipeline&,
51 const GrPrimitiveProcessor&,
Greg Daniel36a77ee2016-10-18 10:33:25 -040052 GrPrimitiveType);
egdaniel9cb63402016-06-23 08:37:05 -070053
54 void onDraw(const GrPipeline& pipeline,
55 const GrPrimitiveProcessor& primProc,
56 const GrMesh* mesh,
Greg Daniel36a77ee2016-10-18 10:33:25 -040057 int meshCount,
58 const SkRect& bounds) override;
egdaniel9cb63402016-06-23 08:37:05 -070059
Brian Salomonc293a292016-11-30 13:38:32 -050060 void onClear(GrRenderTarget*, const GrFixedClip&, GrColor color) override;
egdaniel9cb63402016-06-23 08:37:05 -070061
Brian Salomonc293a292016-11-30 13:38:32 -050062 void onClearStencilClip(GrRenderTarget*, const GrFixedClip&, bool insideStencilMask) override;
egdaniel9cb63402016-06-23 08:37:05 -070063
Greg Daniel77b53f62016-10-18 11:48:51 -040064 void addAdditionalCommandBuffer();
65
66 struct InlineUploadInfo {
Brian Salomon742e31d2016-12-07 17:06:19 -050067 InlineUploadInfo(GrOpFlushState* state, const GrDrawOp::DeferredUploadFn& upload)
68 : fFlushState(state), fUpload(upload) {}
Greg Daniel77b53f62016-10-18 11:48:51 -040069
Brian Salomon742e31d2016-12-07 17:06:19 -050070 GrOpFlushState* fFlushState;
Brian Salomon9afd3712016-12-01 10:59:09 -050071 GrDrawOp::DeferredUploadFn fUpload;
Greg Daniel77b53f62016-10-18 11:48:51 -040072 };
73
Greg Daniel36a77ee2016-10-18 10:33:25 -040074 struct CommandBufferInfo {
Greg Daniel77b53f62016-10-18 11:48:51 -040075 const GrVkRenderPass* fRenderPass;
76 GrVkSecondaryCommandBuffer* fCommandBuffer;
77 VkClearValue fColorClearValue;
78 SkRect fBounds;
79 bool fIsEmpty;
80 bool fStartsWithClear;
81 SkTArray<InlineUploadInfo> fPreDrawUploads;
Greg Daniel36a77ee2016-10-18 10:33:25 -040082 };
83
84 SkTArray<CommandBufferInfo> fCommandBufferInfos;
85 int fCurrentCmdBuffer;
86
egdaniel066df7c2016-06-08 14:02:27 -070087 GrVkGpu* fGpu;
egdaniel9cb63402016-06-23 08:37:05 -070088 GrVkRenderTarget* fRenderTarget;
Brian Salomonc293a292016-11-30 13:38:32 -050089 VkAttachmentLoadOp fVkColorLoadOp;
90 VkAttachmentStoreOp fVkColorStoreOp;
91 VkAttachmentLoadOp fVkStencilLoadOp;
92 VkAttachmentStoreOp fVkStencilStoreOp;
93 GrColor4f fClearColor;
egdaniel9cb63402016-06-23 08:37:05 -070094
egdaniel066df7c2016-06-08 14:02:27 -070095 typedef GrGpuCommandBuffer INHERITED;
96};
97
98#endif