blob: 0f9370f309f99df0c7ba338b005a6a5605090f23 [file] [log] [blame]
egdaniel066df7c2016-06-08 14:02:27 -07001/*
Robert Phillipsb0e93a22017-08-29 08:26:54 -04002 * 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 */
egdaniel066df7c2016-06-08 14:02:27 -07007
8#ifndef GrGLGpuCommandBuffer_DEFINED
9#define GrGLGpuCommandBuffer_DEFINED
10
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "src/gpu/GrGpuCommandBuffer.h"
egdaniel066df7c2016-06-08 14:02:27 -070012
Mike Kleinc0bd9f92019-04-23 12:05:21 -050013#include "src/gpu/GrOpFlushState.h"
14#include "src/gpu/gl/GrGLGpu.h"
15#include "src/gpu/gl/GrGLRenderTarget.h"
egdaniel066df7c2016-06-08 14:02:27 -070016
Robert Phillips009e9af2017-06-15 14:01:04 -040017class GrGLGpu;
Greg Daniel65a09272016-10-12 09:47:22 -040018class GrGLRenderTarget;
19
Greg Daniel500d58b2017-08-24 15:59:33 -040020class GrGLGpuTextureCommandBuffer : public GrGpuTextureCommandBuffer {
21public:
Robert Phillips5b5d84c2018-08-09 15:12:18 -040022 GrGLGpuTextureCommandBuffer(GrGLGpu* gpu) : fGpu(gpu) {}
Greg Daniel500d58b2017-08-24 15:59:33 -040023
Robert Phillipsb0e93a22017-08-29 08:26:54 -040024 void copy(GrSurface* src, GrSurfaceOrigin srcOrigin, const SkIRect& srcRect,
25 const SkIPoint& dstPoint) override {
26 fGpu->copySurface(fTexture, fOrigin, src, srcOrigin, srcRect, dstPoint);
Greg Daniel500d58b2017-08-24 15:59:33 -040027 }
28
Brian Salomonab32f652019-05-10 14:24:50 -040029 void transferFrom(const SkIRect& srcRect, GrColorType bufferColorType,
30 GrGpuBuffer* transferBuffer, size_t offset) override {
31 fGpu->transferPixelsFrom(fTexture, srcRect.fLeft, srcRect.fTop, srcRect.width(),
32 srcRect.height(), bufferColorType, transferBuffer, offset);
33 }
34
Greg Daniel500d58b2017-08-24 15:59:33 -040035 void insertEventMarker(const char* msg) override {
36 fGpu->insertEventMarker(msg);
37 }
38
Robert Phillips5b5d84c2018-08-09 15:12:18 -040039 void reset() {
40 fTexture = nullptr;
41 }
42
Greg Daniel500d58b2017-08-24 15:59:33 -040043private:
Robert Phillipsb0e93a22017-08-29 08:26:54 -040044 GrGLGpu* fGpu;
Greg Daniel500d58b2017-08-24 15:59:33 -040045
46 typedef GrGpuTextureCommandBuffer INHERITED;
47};
48
49class GrGLGpuRTCommandBuffer : public GrGpuRTCommandBuffer {
egdaniel9cb63402016-06-23 08:37:05 -070050/**
51 * We do not actually buffer up draws or do any work in the this class for GL. Instead commands
52 * are immediately sent to the gpu to execute. Thus all the commands in this class are simply
53 * pass through functions to corresponding calls in the GrGLGpu class.
54 */
egdaniel066df7c2016-06-08 14:02:27 -070055public:
Robert Phillips5b5d84c2018-08-09 15:12:18 -040056 GrGLGpuRTCommandBuffer(GrGLGpu* gpu) : fGpu(gpu) {}
egdaniel066df7c2016-06-08 14:02:27 -070057
Michael Ludwig6e17f1d2019-05-15 14:00:20 +000058 void begin() override;
59 void end() override {}
egdaniel066df7c2016-06-08 14:02:27 -070060
Robert Phillips19e51dc2017-08-09 09:30:51 -040061 void discard() override { }
egdaniel066df7c2016-06-08 14:02:27 -070062
Robert Phillips19e51dc2017-08-09 09:30:51 -040063 void insertEventMarker(const char* msg) override {
Robert Phillips65a88fa2017-08-08 08:36:22 -040064 fGpu->insertEventMarker(msg);
65 }
66
Brian Salomon943ed792017-10-30 09:37:55 -040067 void inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) override {
Greg Daniel77b53f62016-10-18 11:48:51 -040068 state->doUpload(upload);
69 }
70
Robert Phillipsb0e93a22017-08-29 08:26:54 -040071 void copy(GrSurface* src, GrSurfaceOrigin srcOrigin, const SkIRect& srcRect,
72 const SkIPoint& dstPoint) override {
73 fGpu->copySurface(fRenderTarget, fOrigin, src, srcOrigin, srcRect, dstPoint);
Greg Daniel500d58b2017-08-24 15:59:33 -040074 }
75
Brian Salomonab32f652019-05-10 14:24:50 -040076 void transferFrom(const SkIRect& srcRect, GrColorType bufferColorType,
77 GrGpuBuffer* transferBuffer, size_t offset) override {
78 fGpu->transferPixelsFrom(fRenderTarget, srcRect.fLeft, srcRect.fTop, srcRect.width(),
79 srcRect.height(), bufferColorType, transferBuffer, offset);
80 }
81
Michael Ludwig6e17f1d2019-05-15 14:00:20 +000082 void set(GrRenderTarget*, GrSurfaceOrigin,
83 const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
84 const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&);
Robert Phillips5b5d84c2018-08-09 15:12:18 -040085
86 void reset() {
87 fRenderTarget = nullptr;
88 }
Greg Daniel500d58b2017-08-24 15:59:33 -040089
egdaniel066df7c2016-06-08 14:02:27 -070090private:
egdaniel9cb63402016-06-23 08:37:05 -070091 GrGpu* gpu() override { return fGpu; }
92
Brian Salomonff168d92018-06-23 15:17:27 -040093 void onDraw(const GrPrimitiveProcessor& primProc,
94 const GrPipeline& pipeline,
Brian Salomon49348902018-06-26 09:12:38 -040095 const GrPipeline::FixedDynamicState* fixedDynamicState,
96 const GrPipeline::DynamicStateArrays* dynamicStateArrays,
Chris Dalton46983b72017-06-06 12:27:16 -060097 const GrMesh mesh[],
Greg Daniel36a77ee2016-10-18 10:33:25 -040098 int meshCount,
99 const SkRect& bounds) override {
Robert Phillipsd0fe8752019-01-31 14:13:59 -0500100 fGpu->draw(fRenderTarget, fOrigin, primProc, pipeline, fixedDynamicState,
101 dynamicStateArrays, mesh, meshCount);
egdaniel9cb63402016-06-23 08:37:05 -0700102 }
103
Brian Osman9a9baae2018-11-05 15:06:26 -0500104 void onClear(const GrFixedClip& clip, const SkPMColor4f& color) override {
Robert Phillips19e51dc2017-08-09 09:30:51 -0400105 fGpu->clear(clip, color, fRenderTarget, fOrigin);
egdaniel9cb63402016-06-23 08:37:05 -0700106 }
107
Robert Phillips19e51dc2017-08-09 09:30:51 -0400108 void onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) override {
109 fGpu->clearStencilClip(clip, insideStencilMask, fRenderTarget, fOrigin);
egdaniel9cb63402016-06-23 08:37:05 -0700110 }
111
Robert Phillips6b47c7d2017-08-29 07:24:09 -0400112 GrGLGpu* fGpu;
113 GrGpuRTCommandBuffer::LoadAndStoreInfo fColorLoadAndStoreInfo;
114 GrGpuRTCommandBuffer::StencilLoadAndStoreInfo fStencilLoadAndStoreInfo;
egdaniel066df7c2016-06-08 14:02:27 -0700115
Greg Daniel500d58b2017-08-24 15:59:33 -0400116 typedef GrGpuRTCommandBuffer INHERITED;
egdaniel066df7c2016-06-08 14:02:27 -0700117};
118
119#endif
120