Remove GrGpuTextureCommandBuffer class and rename to GrOpsRenderPass.
Change-Id: Ia6e666a7bb986bb3dc769d25919580bca17b4748
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/236556
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrOpsRenderPass.cpp b/src/gpu/GrOpsRenderPass.cpp
new file mode 100644
index 0000000..3876a42
--- /dev/null
+++ b/src/gpu/GrOpsRenderPass.cpp
@@ -0,0 +1,104 @@
+/*
+* Copyright 2016 Google Inc.
+*
+* Use of this source code is governed by a BSD-style license that can be
+* found in the LICENSE file.
+*/
+
+#include "src/gpu/GrOpsRenderPass.h"
+
+#include "include/core/SkRect.h"
+#include "include/gpu/GrContext.h"
+#include "src/gpu/GrCaps.h"
+#include "src/gpu/GrContextPriv.h"
+#include "src/gpu/GrFixedClip.h"
+#include "src/gpu/GrGpu.h"
+#include "src/gpu/GrMesh.h"
+#include "src/gpu/GrPrimitiveProcessor.h"
+#include "src/gpu/GrRenderTarget.h"
+#include "src/gpu/GrRenderTargetPriv.h"
+
+void GrOpsRenderPass::clear(const GrFixedClip& clip, const SkPMColor4f& color) {
+ SkASSERT(fRenderTarget);
+ // A clear at this level will always be a true clear, so make sure clears were not supposed to
+ // be redirected to draws instead
+ SkASSERT(!this->gpu()->caps()->performColorClearsAsDraws());
+ SkASSERT(!clip.scissorEnabled() || !this->gpu()->caps()->performPartialClearsAsDraws());
+ this->onClear(clip, color);
+}
+
+void GrOpsRenderPass::clearStencilClip(const GrFixedClip& clip, bool insideStencilMask) {
+ // As above, make sure the stencil clear wasn't supposed to be a draw rect with stencil settings
+ SkASSERT(!this->gpu()->caps()->performStencilClearsAsDraws());
+ this->onClearStencilClip(clip, insideStencilMask);
+}
+
+bool GrOpsRenderPass::draw(const GrPrimitiveProcessor& primProc, const GrPipeline& pipeline,
+ const GrPipeline::FixedDynamicState* fixedDynamicState,
+ const GrPipeline::DynamicStateArrays* dynamicStateArrays,
+ const GrMesh meshes[], int meshCount, const SkRect& bounds) {
+#ifdef SK_DEBUG
+ SkASSERT(!primProc.hasInstanceAttributes() || this->gpu()->caps()->instanceAttribSupport());
+ for (int i = 0; i < meshCount; ++i) {
+ SkASSERT(!GrPrimTypeRequiresGeometryShaderSupport(meshes[i].primitiveType()) ||
+ this->gpu()->caps()->shaderCaps()->geometryShaderSupport());
+ SkASSERT(primProc.hasVertexAttributes() == meshes[i].hasVertexData());
+ SkASSERT(primProc.hasInstanceAttributes() == meshes[i].hasInstanceData());
+ }
+#endif
+ SkASSERT(!pipeline.isScissorEnabled() || fixedDynamicState ||
+ (dynamicStateArrays && dynamicStateArrays->fScissorRects));
+
+ SkASSERT(!pipeline.isBad());
+
+#ifdef SK_DEBUG
+ if (fixedDynamicState && fixedDynamicState->fPrimitiveProcessorTextures) {
+ GrTextureProxy** processorProxies = fixedDynamicState->fPrimitiveProcessorTextures;
+ for (int i = 0; i < primProc.numTextureSamplers(); ++i) {
+ SkASSERT(processorProxies[i]->isInstantiated());
+ }
+ }
+ if (dynamicStateArrays && dynamicStateArrays->fPrimitiveProcessorTextures) {
+ int n = primProc.numTextureSamplers() * meshCount;
+ const auto* textures = dynamicStateArrays->fPrimitiveProcessorTextures;
+ for (int i = 0; i < n; ++i) {
+ SkASSERT(textures[i]->isInstantiated());
+ }
+ SkASSERT(meshCount >= 1);
+ const GrTextureProxy* const* primProcProxies =
+ dynamicStateArrays->fPrimitiveProcessorTextures;
+ for (int i = 0; i < primProc.numTextureSamplers(); ++i) {
+ const GrBackendFormat& format = primProcProxies[i]->backendFormat();
+ GrTextureType type = primProcProxies[i]->textureType();
+ GrPixelConfig config = primProcProxies[i]->config();
+ for (int j = 1; j < meshCount; ++j) {
+ const GrTextureProxy* testProxy =
+ primProcProxies[j*primProc.numTextureSamplers() + i];
+ SkASSERT(testProxy->backendFormat() == format);
+ SkASSERT(testProxy->textureType() == type);
+ SkASSERT(testProxy->config() == config);
+ }
+ }
+ }
+#endif
+
+ if (primProc.numVertexAttributes() > this->gpu()->caps()->maxVertexAttributes()) {
+ this->gpu()->stats()->incNumFailedDraws();
+ return false;
+ }
+ this->onDraw(primProc, pipeline, fixedDynamicState, dynamicStateArrays, meshes, meshCount,
+ bounds);
+#ifdef SK_DEBUG
+ GrProcessor::CustomFeatures processorFeatures = primProc.requestedFeatures();
+ for (int i = 0; i < pipeline.numFragmentProcessors(); ++i) {
+ processorFeatures |= pipeline.getFragmentProcessor(i).requestedFeatures();
+ }
+ processorFeatures |= pipeline.getXferProcessor().requestedFeatures();
+ if (GrProcessor::CustomFeatures::kSampleLocations & processorFeatures) {
+ // Verify we always have the same sample pattern key, regardless of graphics state.
+ SkASSERT(this->gpu()->findOrAssignSamplePatternKey(fRenderTarget)
+ == fRenderTarget->renderTargetPriv().getSamplePatternKey());
+ }
+#endif
+ return true;
+}