19cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel/* 29cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel* Copyright 2016 Google Inc. 39cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel* 49cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel* Use of this source code is governed by a BSD-style license that can be 59cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel* found in the LICENSE file. 69cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel*/ 79cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel 89cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel#include "GrGpuCommandBuffer.h" 99cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel 1028a838e532250fcca9673aca6c4616193a5a139drobertphillips#include "GrCaps.h" 1129df76096fd30941086324902a82656df2d8becdcsmartdalton#include "GrFixedClip.h" 129cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel#include "GrGpu.h" 139cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel#include "GrPrimitiveProcessor.h" 149cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel#include "GrRenderTarget.h" 159cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel#include "SkRect.h" 169cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel 1736a77ee494791989548b717515e3621b9c4ffe4eGreg Danielvoid GrGpuCommandBuffer::submit() { 189cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel this->gpu()->handleDirtyContext(); 1936a77ee494791989548b717515e3621b9c4ffe4eGreg Daniel this->onSubmit(); 209cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel} 219cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel 22c293a29bc2fced15ac44a66efa813d42cb3f2e0bBrian Salomonvoid GrGpuCommandBuffer::clear(GrRenderTarget* rt, const GrFixedClip& clip, GrColor color) { 2365a09274184ffd25d446352a96d3890ea7e625faGreg Daniel#ifdef SK_DEBUG 2429df76096fd30941086324902a82656df2d8becdcsmartdalton SkASSERT(rt); 2529df76096fd30941086324902a82656df2d8becdcsmartdalton SkASSERT(!clip.scissorEnabled() || 2629df76096fd30941086324902a82656df2d8becdcsmartdalton (SkIRect::MakeWH(rt->width(), rt->height()).contains(clip.scissorRect()) && 2729df76096fd30941086324902a82656df2d8becdcsmartdalton SkIRect::MakeWH(rt->width(), rt->height()) != clip.scissorRect())); 2865a09274184ffd25d446352a96d3890ea7e625faGreg Daniel#endif 29c293a29bc2fced15ac44a66efa813d42cb3f2e0bBrian Salomon this->onClear(rt, clip, color); 309cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel} 319cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel 32c293a29bc2fced15ac44a66efa813d42cb3f2e0bBrian Salomonvoid GrGpuCommandBuffer::clearStencilClip(GrRenderTarget* rt, const GrFixedClip& clip, 3365a09274184ffd25d446352a96d3890ea7e625faGreg Daniel bool insideStencilMask) { 34c293a29bc2fced15ac44a66efa813d42cb3f2e0bBrian Salomon this->onClearStencilClip(rt, clip, insideStencilMask); 359cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel} 369cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel 379cb6340a62a5d748e4189d50e51fa527c8c80c03egdanielbool GrGpuCommandBuffer::draw(const GrPipeline& pipeline, 389cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel const GrPrimitiveProcessor& primProc, 399cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel const GrMesh* mesh, 4036a77ee494791989548b717515e3621b9c4ffe4eGreg Daniel int meshCount, 4136a77ee494791989548b717515e3621b9c4ffe4eGreg Daniel const SkRect& bounds) { 42b5cb6835c449c1c292b1ab124691a45d3d113694Brian Salomon SkASSERT(pipeline.isInitialized()); 439cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel if (primProc.numAttribs() > this->gpu()->caps()->maxVertexAttributes()) { 449cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel this->gpu()->stats()->incNumFailedDraws(); 459cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel return false; 469cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel } 4736a77ee494791989548b717515e3621b9c4ffe4eGreg Daniel this->onDraw(pipeline, primProc, mesh, meshCount, bounds); 489cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel return true; 499cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel} 509cb6340a62a5d748e4189d50e51fa527c8c80c03egdaniel 51