1066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel/* 2b0e93a22bbfad05bb834e33387880ece56e0f6d2Robert Phillips * Copyright 2016 Google Inc. 3b0e93a22bbfad05bb834e33387880ece56e0f6d2Robert Phillips * 4b0e93a22bbfad05bb834e33387880ece56e0f6d2Robert Phillips * Use of this source code is governed by a BSD-style license that can be 5b0e93a22bbfad05bb834e33387880ece56e0f6d2Robert Phillips * found in the LICENSE file. 6b0e93a22bbfad05bb834e33387880ece56e0f6d2Robert Phillips */ 7066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel 8066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel#ifndef GrGLGpuCommandBuffer_DEFINED 9066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel#define GrGLGpuCommandBuffer_DEFINED 10066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel 11066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel#include "GrGpuCommandBuffer.h" 12066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel 13466c7d65974a055ad361430e57f92584b09af0bdHal Canary#include "GrGLGpu.h" 14466c7d65974a055ad361430e57f92584b09af0bdHal Canary#include "GrGLRenderTarget.h" 15742e31de1599f3902810aecdf2e2e3eed3b40a09Brian Salomon#include "GrOpFlushState.h" 16066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel 17009e9af5549301be41cfbd9f286ad90842e4096bRobert Phillipsclass GrGLGpu; 1865a09274184ffd25d446352a96d3890ea7e625faGreg Danielclass GrGLRenderTarget; 1965a09274184ffd25d446352a96d3890ea7e625faGreg Daniel 20500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Danielclass GrGLGpuTextureCommandBuffer : public GrGpuTextureCommandBuffer { 21500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Danielpublic: 22500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel GrGLGpuTextureCommandBuffer(GrGLGpu* gpu, GrTexture* texture, GrSurfaceOrigin origin) 23500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel : INHERITED(texture, origin) 24500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel , fGpu(gpu) { 25500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel } 26500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel 27500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel ~GrGLGpuTextureCommandBuffer() override {} 28500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel 29500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel void submit() override {} 30500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel 31b0e93a22bbfad05bb834e33387880ece56e0f6d2Robert Phillips void copy(GrSurface* src, GrSurfaceOrigin srcOrigin, const SkIRect& srcRect, 32b0e93a22bbfad05bb834e33387880ece56e0f6d2Robert Phillips const SkIPoint& dstPoint) override { 33b0e93a22bbfad05bb834e33387880ece56e0f6d2Robert Phillips fGpu->copySurface(fTexture, fOrigin, src, srcOrigin, srcRect, dstPoint); 34500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel } 35500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel 36500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel void insertEventMarker(const char* msg) override { 37500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel fGpu->insertEventMarker(msg); 38500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel } 39500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel 40500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Danielprivate: 41b0e93a22bbfad05bb834e33387880ece56e0f6d2Robert Phillips GrGLGpu* fGpu; 42500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel 43500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel typedef GrGpuTextureCommandBuffer INHERITED; 44500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel}; 45500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel 46500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Danielclass GrGLGpuRTCommandBuffer : public GrGpuRTCommandBuffer { 479cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel/** 489cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel * We do not actually buffer up draws or do any work in the this class for GL. Instead commands 499cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel * are immediately sent to the gpu to execute. Thus all the commands in this class are simply 509cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel * pass through functions to corresponding calls in the GrGLGpu class. 519cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel */ 52066df7ca911b65d416783f3bec6f4f1662948ad5egdanielpublic: 53500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel GrGLGpuRTCommandBuffer(GrGLGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin, 546b47c7d19fcc95d2c3dbce582a8d68bb3bf6ba2aRobert Phillips const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo, 55500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) 5619e51dcd1eb0bcdc70f29620ce4ca30ddbfc2042Robert Phillips : INHERITED(rt, origin) 576b47c7d19fcc95d2c3dbce582a8d68bb3bf6ba2aRobert Phillips , fGpu(gpu) 586b47c7d19fcc95d2c3dbce582a8d68bb3bf6ba2aRobert Phillips , fColorLoadAndStoreInfo(colorInfo) 596b47c7d19fcc95d2c3dbce582a8d68bb3bf6ba2aRobert Phillips , fStencilLoadAndStoreInfo(stencilInfo) { 60952144753dc31d9d935683123cae43fca483badeRobert Phillips } 61066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel 62500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel ~GrGLGpuRTCommandBuffer() override {} 63066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel 64cb2e235e6fb5d9230c41ccf58b865c90ff928f67Robert Phillips void begin() override; 65066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel void end() override {} 66066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel 6719e51dcd1eb0bcdc70f29620ce4ca30ddbfc2042Robert Phillips void discard() override { } 6865a88fadab72abd104fdf4cc4a97488b2e901c60Robert Phillips 6919e51dcd1eb0bcdc70f29620ce4ca30ddbfc2042Robert Phillips void insertEventMarker(const char* msg) override { 7065a88fadab72abd104fdf4cc4a97488b2e901c60Robert Phillips fGpu->insertEventMarker(msg); 7165a88fadab72abd104fdf4cc4a97488b2e901c60Robert Phillips } 7265a88fadab72abd104fdf4cc4a97488b2e901c60Robert Phillips 73943ed7910f938d7b4894b4e925566cf7b7053f29Brian Salomon void inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) override { 7477b53f66bacd9a1d1c9df7d879a419b2abe069baGreg Daniel state->doUpload(upload); 7577b53f66bacd9a1d1c9df7d879a419b2abe069baGreg Daniel } 7677b53f66bacd9a1d1c9df7d879a419b2abe069baGreg Daniel 77b0e93a22bbfad05bb834e33387880ece56e0f6d2Robert Phillips void copy(GrSurface* src, GrSurfaceOrigin srcOrigin, const SkIRect& srcRect, 78b0e93a22bbfad05bb834e33387880ece56e0f6d2Robert Phillips const SkIPoint& dstPoint) override { 79b0e93a22bbfad05bb834e33387880ece56e0f6d2Robert Phillips fGpu->copySurface(fRenderTarget, fOrigin, src, srcOrigin, srcRect, dstPoint); 80500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel } 81500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel 82500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel void submit() override {} 83500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel 84066df7ca911b65d416783f3bec6f4f1662948ad5egdanielprivate: 859cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel GrGpu* gpu() override { return fGpu; } 869cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel 879cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel void onDraw(const GrPipeline& pipeline, 889cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel const GrPrimitiveProcessor& primProc, 8946983b7dd88603bb2a9a3c3e1ce3e147f5615f2fChris Dalton const GrMesh mesh[], 9046983b7dd88603bb2a9a3c3e1ce3e147f5615f2fChris Dalton const GrPipeline::DynamicState dynamicStates[], 9136a77ee494791989548b717515e3621b9c4ffe4eGreg Daniel int meshCount, 9236a77ee494791989548b717515e3621b9c4ffe4eGreg Daniel const SkRect& bounds) override { 9319e51dcd1eb0bcdc70f29620ce4ca30ddbfc2042Robert Phillips SkASSERT(pipeline.renderTarget() == fRenderTarget); 9446983b7dd88603bb2a9a3c3e1ce3e147f5615f2fChris Dalton fGpu->draw(pipeline, primProc, mesh, dynamicStates, meshCount); 959cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel } 969cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel 9719e51dcd1eb0bcdc70f29620ce4ca30ddbfc2042Robert Phillips void onClear(const GrFixedClip& clip, GrColor color) override { 9819e51dcd1eb0bcdc70f29620ce4ca30ddbfc2042Robert Phillips fGpu->clear(clip, color, fRenderTarget, fOrigin); 999cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel } 1009cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel 10119e51dcd1eb0bcdc70f29620ce4ca30ddbfc2042Robert Phillips void onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) override { 10219e51dcd1eb0bcdc70f29620ce4ca30ddbfc2042Robert Phillips fGpu->clearStencilClip(clip, insideStencilMask, fRenderTarget, fOrigin); 1039cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel } 1049cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel 1056b47c7d19fcc95d2c3dbce582a8d68bb3bf6ba2aRobert Phillips GrGLGpu* fGpu; 1066b47c7d19fcc95d2c3dbce582a8d68bb3bf6ba2aRobert Phillips GrGpuRTCommandBuffer::LoadAndStoreInfo fColorLoadAndStoreInfo; 1076b47c7d19fcc95d2c3dbce582a8d68bb3bf6ba2aRobert Phillips GrGpuRTCommandBuffer::StencilLoadAndStoreInfo fStencilLoadAndStoreInfo; 108066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel 109500d58b2a6e6fd03239622da42b67b2c9843b7beGreg Daniel typedef GrGpuRTCommandBuffer INHERITED; 110066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel}; 111066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel 112066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel#endif 113066df7ca911b65d416783f3bec6f4f1662948ad5egdaniel 114