| 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 #ifndef GrTargetCommands_DEFINED | 8 #ifndef GrTargetCommands_DEFINED |
| 9 #define GrTargetCommands_DEFINED | 9 #define GrTargetCommands_DEFINED |
| 10 | 10 |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 bool SK_WARN_UNUSED_RESULT setupPipelineAndShouldDraw(GrInOrderDrawBuffer*, | 139 bool SK_WARN_UNUSED_RESULT setupPipelineAndShouldDraw(GrInOrderDrawBuffer*, |
| 140 const GrPrimitiveProce
ssor*, | 140 const GrPrimitiveProce
ssor*, |
| 141 const GrDrawTarget::Pi
pelineInfo&); | 141 const GrDrawTarget::Pi
pelineInfo&); |
| 142 bool SK_WARN_UNUSED_RESULT setupPipelineAndShouldDraw(GrInOrderDrawBuffer*, | 142 bool SK_WARN_UNUSED_RESULT setupPipelineAndShouldDraw(GrInOrderDrawBuffer*, |
| 143 GrBatch*, | 143 GrBatch*, |
| 144 const GrDrawTarget::Pi
pelineInfo&); | 144 const GrDrawTarget::Pi
pelineInfo&); |
| 145 | 145 |
| 146 struct Draw : public Cmd { | 146 struct Draw : public Cmd { |
| 147 Draw(const GrDrawTarget::DrawInfo& info) : Cmd(kDraw_CmdType), fInfo(inf
o) {} | 147 Draw(const GrDrawTarget::DrawInfo& info) : Cmd(kDraw_CmdType), fInfo(inf
o) {} |
| 148 | 148 |
| 149 void execute(GrGpu*, const SetState*) SK_OVERRIDE; | 149 void execute(GrGpu*, const SetState*) override; |
| 150 | 150 |
| 151 GrDrawTarget::DrawInfo fInfo; | 151 GrDrawTarget::DrawInfo fInfo; |
| 152 }; | 152 }; |
| 153 | 153 |
| 154 struct StencilPath : public Cmd { | 154 struct StencilPath : public Cmd { |
| 155 StencilPath(const GrPath* path, GrRenderTarget* rt) | 155 StencilPath(const GrPath* path, GrRenderTarget* rt) |
| 156 : Cmd(kStencilPath_CmdType) | 156 : Cmd(kStencilPath_CmdType) |
| 157 , fRenderTarget(rt) | 157 , fRenderTarget(rt) |
| 158 , fPath(path) {} | 158 , fPath(path) {} |
| 159 | 159 |
| 160 const GrPath* path() const { return fPath.get(); } | 160 const GrPath* path() const { return fPath.get(); } |
| 161 | 161 |
| 162 void execute(GrGpu*, const SetState*) SK_OVERRIDE; | 162 void execute(GrGpu*, const SetState*) override; |
| 163 | 163 |
| 164 SkMatrix fViewMatrix; | 164 SkMatrix fViewMatrix; |
| 165 bool fUseHWAA; | 165 bool fUseHWAA; |
| 166 GrStencilSettings fStencil; | 166 GrStencilSettings fStencil; |
| 167 GrScissorState fScissor; | 167 GrScissorState fScissor; |
| 168 private: | 168 private: |
| 169 GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> fRenderTarget; | 169 GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> fRenderTarget; |
| 170 GrPendingIOResource<const GrPath, kRead_GrIOType> fPath; | 170 GrPendingIOResource<const GrPath, kRead_GrIOType> fPath; |
| 171 }; | 171 }; |
| 172 | 172 |
| 173 struct DrawPath : public Cmd { | 173 struct DrawPath : public Cmd { |
| 174 DrawPath(const GrPath* path) : Cmd(kDrawPath_CmdType), fPath(path) {} | 174 DrawPath(const GrPath* path) : Cmd(kDrawPath_CmdType), fPath(path) {} |
| 175 | 175 |
| 176 const GrPath* path() const { return fPath.get(); } | 176 const GrPath* path() const { return fPath.get(); } |
| 177 | 177 |
| 178 void execute(GrGpu*, const SetState*) SK_OVERRIDE; | 178 void execute(GrGpu*, const SetState*) override; |
| 179 | 179 |
| 180 GrStencilSettings fStencilSettings; | 180 GrStencilSettings fStencilSettings; |
| 181 | 181 |
| 182 private: | 182 private: |
| 183 GrPendingIOResource<const GrPath, kRead_GrIOType> fPath; | 183 GrPendingIOResource<const GrPath, kRead_GrIOType> fPath; |
| 184 }; | 184 }; |
| 185 | 185 |
| 186 struct DrawPaths : public Cmd { | 186 struct DrawPaths : public Cmd { |
| 187 DrawPaths(const GrPathRange* pathRange) : Cmd(kDrawPaths_CmdType), fPath
Range(pathRange) {} | 187 DrawPaths(const GrPathRange* pathRange) : Cmd(kDrawPaths_CmdType), fPath
Range(pathRange) {} |
| 188 | 188 |
| 189 const GrPathRange* pathRange() const { return fPathRange.get(); } | 189 const GrPathRange* pathRange() const { return fPathRange.get(); } |
| 190 | 190 |
| 191 void execute(GrGpu*, const SetState*) SK_OVERRIDE; | 191 void execute(GrGpu*, const SetState*) override; |
| 192 | 192 |
| 193 char* fIndices; | 193 char* fIndices; |
| 194 GrDrawTarget::PathIndexType fIndexType; | 194 GrDrawTarget::PathIndexType fIndexType; |
| 195 float* fTransforms; | 195 float* fTransforms; |
| 196 GrDrawTarget::PathTransformType fTransformType; | 196 GrDrawTarget::PathTransformType fTransformType; |
| 197 int fCount; | 197 int fCount; |
| 198 GrStencilSettings fStencilSettings; | 198 GrStencilSettings fStencilSettings; |
| 199 | 199 |
| 200 private: | 200 private: |
| 201 GrPendingIOResource<const GrPathRange, kRead_GrIOType> fPathRange; | 201 GrPendingIOResource<const GrPathRange, kRead_GrIOType> fPathRange; |
| 202 }; | 202 }; |
| 203 | 203 |
| 204 // This is also used to record a discard by setting the color to GrColor_ILL
EGAL | 204 // This is also used to record a discard by setting the color to GrColor_ILL
EGAL |
| 205 struct Clear : public Cmd { | 205 struct Clear : public Cmd { |
| 206 Clear(GrRenderTarget* rt) : Cmd(kClear_CmdType), fRenderTarget(rt) {} | 206 Clear(GrRenderTarget* rt) : Cmd(kClear_CmdType), fRenderTarget(rt) {} |
| 207 | 207 |
| 208 GrRenderTarget* renderTarget() const { return fRenderTarget.get(); } | 208 GrRenderTarget* renderTarget() const { return fRenderTarget.get(); } |
| 209 | 209 |
| 210 void execute(GrGpu*, const SetState*) SK_OVERRIDE; | 210 void execute(GrGpu*, const SetState*) override; |
| 211 | 211 |
| 212 SkIRect fRect; | 212 SkIRect fRect; |
| 213 GrColor fColor; | 213 GrColor fColor; |
| 214 bool fCanIgnoreRect; | 214 bool fCanIgnoreRect; |
| 215 | 215 |
| 216 private: | 216 private: |
| 217 GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> fRenderTarget; | 217 GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> fRenderTarget; |
| 218 }; | 218 }; |
| 219 | 219 |
| 220 // This command is ONLY used by the clip mask manager to clear the stencil c
lip bits | 220 // This command is ONLY used by the clip mask manager to clear the stencil c
lip bits |
| 221 struct ClearStencilClip : public Cmd { | 221 struct ClearStencilClip : public Cmd { |
| 222 ClearStencilClip(GrRenderTarget* rt) : Cmd(kClear_CmdType), fRenderTarge
t(rt) {} | 222 ClearStencilClip(GrRenderTarget* rt) : Cmd(kClear_CmdType), fRenderTarge
t(rt) {} |
| 223 | 223 |
| 224 GrRenderTarget* renderTarget() const { return fRenderTarget.get(); } | 224 GrRenderTarget* renderTarget() const { return fRenderTarget.get(); } |
| 225 | 225 |
| 226 void execute(GrGpu*, const SetState*) SK_OVERRIDE; | 226 void execute(GrGpu*, const SetState*) override; |
| 227 | 227 |
| 228 SkIRect fRect; | 228 SkIRect fRect; |
| 229 bool fInsideClip; | 229 bool fInsideClip; |
| 230 | 230 |
| 231 private: | 231 private: |
| 232 GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> fRenderTarget; | 232 GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> fRenderTarget; |
| 233 }; | 233 }; |
| 234 | 234 |
| 235 struct CopySurface : public Cmd { | 235 struct CopySurface : public Cmd { |
| 236 CopySurface(GrSurface* dst, GrSurface* src) | 236 CopySurface(GrSurface* dst, GrSurface* src) |
| 237 : Cmd(kCopySurface_CmdType) | 237 : Cmd(kCopySurface_CmdType) |
| 238 , fDst(dst) | 238 , fDst(dst) |
| 239 , fSrc(src) { | 239 , fSrc(src) { |
| 240 } | 240 } |
| 241 | 241 |
| 242 GrSurface* dst() const { return fDst.get(); } | 242 GrSurface* dst() const { return fDst.get(); } |
| 243 GrSurface* src() const { return fSrc.get(); } | 243 GrSurface* src() const { return fSrc.get(); } |
| 244 | 244 |
| 245 void execute(GrGpu*, const SetState*) SK_OVERRIDE; | 245 void execute(GrGpu*, const SetState*) override; |
| 246 | 246 |
| 247 SkIPoint fDstPoint; | 247 SkIPoint fDstPoint; |
| 248 SkIRect fSrcRect; | 248 SkIRect fSrcRect; |
| 249 | 249 |
| 250 private: | 250 private: |
| 251 GrPendingIOResource<GrSurface, kWrite_GrIOType> fDst; | 251 GrPendingIOResource<GrSurface, kWrite_GrIOType> fDst; |
| 252 GrPendingIOResource<GrSurface, kRead_GrIOType> fSrc; | 252 GrPendingIOResource<GrSurface, kRead_GrIOType> fSrc; |
| 253 }; | 253 }; |
| 254 | 254 |
| 255 // TODO: rename to SetPipeline once pp, batch tracker, and desc are removed | 255 // TODO: rename to SetPipeline once pp, batch tracker, and desc are removed |
| 256 struct SetState : public Cmd { | 256 struct SetState : public Cmd { |
| 257 // TODO get rid of the prim proc parameter when we use batch everywhere | 257 // TODO get rid of the prim proc parameter when we use batch everywhere |
| 258 SetState(const GrPrimitiveProcessor* primProc = NULL) | 258 SetState(const GrPrimitiveProcessor* primProc = NULL) |
| 259 : Cmd(kSetState_CmdType) | 259 : Cmd(kSetState_CmdType) |
| 260 , fPrimitiveProcessor(primProc) {} | 260 , fPrimitiveProcessor(primProc) {} |
| 261 | 261 |
| 262 ~SetState() { reinterpret_cast<GrPipeline*>(fPipeline.get())->~GrPipelin
e(); } | 262 ~SetState() { reinterpret_cast<GrPipeline*>(fPipeline.get())->~GrPipelin
e(); } |
| 263 | 263 |
| 264 // This function is only for getting the location in memory where we wil
l create our | 264 // This function is only for getting the location in memory where we wil
l create our |
| 265 // pipeline object. | 265 // pipeline object. |
| 266 GrPipeline* pipelineLocation() { return reinterpret_cast<GrPipeline*>(fP
ipeline.get()); } | 266 GrPipeline* pipelineLocation() { return reinterpret_cast<GrPipeline*>(fP
ipeline.get()); } |
| 267 | 267 |
| 268 const GrPipeline* getPipeline() const { | 268 const GrPipeline* getPipeline() const { |
| 269 return reinterpret_cast<const GrPipeline*>(fPipeline.get()); | 269 return reinterpret_cast<const GrPipeline*>(fPipeline.get()); |
| 270 } | 270 } |
| 271 | 271 |
| 272 void execute(GrGpu*, const SetState*) SK_OVERRIDE; | 272 void execute(GrGpu*, const SetState*) override; |
| 273 | 273 |
| 274 typedef GrPendingProgramElement<const GrPrimitiveProcessor> ProgramPrimi
tiveProcessor; | 274 typedef GrPendingProgramElement<const GrPrimitiveProcessor> ProgramPrimi
tiveProcessor; |
| 275 ProgramPrimitiveProcessor fPrimitiveProcessor; | 275 ProgramPrimitiveProcessor fPrimitiveProcessor; |
| 276 SkAlignedSStorage<sizeof(GrPipeline)> fPipeline; | 276 SkAlignedSStorage<sizeof(GrPipeline)> fPipeline; |
| 277 GrProgramDesc fDesc; | 277 GrProgramDesc fDesc; |
| 278 GrBatchTracker fBatchTracker; | 278 GrBatchTracker fBatchTracker; |
| 279 }; | 279 }; |
| 280 | 280 |
| 281 struct DrawBatch : public Cmd { | 281 struct DrawBatch : public Cmd { |
| 282 DrawBatch(GrBatch* batch, GrBatchTarget* batchTarget) | 282 DrawBatch(GrBatch* batch, GrBatchTarget* batchTarget) |
| 283 : Cmd(kDrawBatch_CmdType) | 283 : Cmd(kDrawBatch_CmdType) |
| 284 , fBatch(SkRef(batch)) | 284 , fBatch(SkRef(batch)) |
| 285 , fBatchTarget(batchTarget) { | 285 , fBatchTarget(batchTarget) { |
| 286 SkASSERT(!batch->isUsed()); | 286 SkASSERT(!batch->isUsed()); |
| 287 } | 287 } |
| 288 | 288 |
| 289 void execute(GrGpu*, const SetState*) SK_OVERRIDE; | 289 void execute(GrGpu*, const SetState*) override; |
| 290 | 290 |
| 291 // TODO it wouldn't be too hard to let batches allocate in the cmd buffe
r | 291 // TODO it wouldn't be too hard to let batches allocate in the cmd buffe
r |
| 292 SkAutoTUnref<GrBatch> fBatch; | 292 SkAutoTUnref<GrBatch> fBatch; |
| 293 | 293 |
| 294 private: | 294 private: |
| 295 GrBatchTarget* fBatchTarget; | 295 GrBatchTarget* fBatchTarget; |
| 296 }; | 296 }; |
| 297 | 297 |
| 298 static const int kCmdBufferInitialSizeInBytes = 8 * 1024; | 298 static const int kCmdBufferInitialSizeInBytes = 8 * 1024; |
| 299 | 299 |
| 300 typedef void* TCmdAlign; // This wouldn't be enough align if a command used
long double. | 300 typedef void* TCmdAlign; // This wouldn't be enough align if a command used
long double. |
| 301 typedef GrTRecorder<Cmd, TCmdAlign> CmdBuffer; | 301 typedef GrTRecorder<Cmd, TCmdAlign> CmdBuffer; |
| 302 | 302 |
| 303 CmdBuffer fCmdBuffer; | 303 CmdBuffer fCmdBuffer; |
| 304 SetState* fPrevState; | 304 SetState* fPrevState; |
| 305 GrBatchTarget fBatchTarget; | 305 GrBatchTarget fBatchTarget; |
| 306 // TODO hack until batch is everywhere | 306 // TODO hack until batch is everywhere |
| 307 GrTargetCommands::DrawBatch* fDrawBatch; | 307 GrTargetCommands::DrawBatch* fDrawBatch; |
| 308 | 308 |
| 309 // This will go away when everything uses batch. However, in the short ter
m anything which | 309 // This will go away when everything uses batch. However, in the short ter
m anything which |
| 310 // might be put into the GrInOrderDrawBuffer needs to make sure it closes t
he last batch | 310 // might be put into the GrInOrderDrawBuffer needs to make sure it closes t
he last batch |
| 311 void closeBatch(); | 311 void closeBatch(); |
| 312 }; | 312 }; |
| 313 | 313 |
| 314 #endif | 314 #endif |
| 315 | 315 |
| OLD | NEW |