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