Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(340)

Unified Diff: src/gpu/gl/GrGLPathProgramDataManager.h

Issue 1186113007: Refactor separable varying location info to be stored in GrGLProgram subclass (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: address review comments Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/gl/GrGLPathProgram.cpp ('k') | src/gpu/gl/GrGLPathProgramDataManager.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLPathProgramDataManager.h
diff --git a/src/gpu/gl/GrGLPathProgramDataManager.h b/src/gpu/gl/GrGLPathProgramDataManager.h
new file mode 100644
index 0000000000000000000000000000000000000000..9eeac7ea2083948dae85a69b5a5164cfb9e50c92
--- /dev/null
+++ b/src/gpu/gl/GrGLPathProgramDataManager.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2015 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrGLPathProgramDataManager_DEFINED
+#define GrGLPathProgramDataManager_DEFINED
+
+#include "gl/GrGLProgramDataManager.h"
+
+class GrGLPathProgram;
+class GrGLPathProgramBuilder;
+
+/** Manages the resources used by a shader program for NVPR rendering.
+ */
+class GrGLPathProgramDataManager : SkNoncopyable {
+public:
+ class SeparableVaryingHandle : public GrGLProgramDataManager::ShaderResourceHandle {
+ public:
+ /*
+ * Creates a reference to a separable varying of a GrGLShaderBuilder. The ref can be used
+ * to set the varying with the corresponding GrGLPathProgramDataManager.
+ */
+ static SeparableVaryingHandle CreateFromSeparableVaryingIndex(int i) {
+ return GrGLPathProgramDataManager::SeparableVaryingHandle(i);
+ }
+ SeparableVaryingHandle() { }
+ bool operator==(const SeparableVaryingHandle& other) {
+ return other.fValue == fValue;
+ }
+ private:
+ SeparableVaryingHandle(int value) : ShaderResourceHandle(value) { }
+ int toProgramDataIndex() const { SkASSERT(isValid()); return fValue; }
+ int toShaderBuilderIndex() const { return toProgramDataIndex(); }
+
+ friend class GrGLPathProgramDataManager; // For accessing toProgramDataIndex().
+ friend class GrGLPathProcessor; // For accessing toShaderBuilderIndex().
+ };
+
+ struct SeparableVaryingInfo {
+ GrGLShaderVar fVariable;
+ GrGLint fLocation;
+ };
+
+ // This uses an allocator rather than array so that the GrGLShaderVars don't move in memory
+ // after they are inserted. Users of GrGLShaderBuilder get refs to the vars and ptrs to their
+ // name strings. Otherwise, we'd have to hand out copies.
+ typedef GrTAllocator<SeparableVaryingInfo> SeparableVaryingInfoArray;
+
+ GrGLPathProgramDataManager(GrGLGpu*, GrGLuint programID, const SeparableVaryingInfoArray&);
+
+ /** Functions for uploading the varying values.
+ */
+ void setPathFragmentInputTransform(SeparableVaryingHandle u,
+ int components,
+ const SkMatrix& matrix) const;
+private:
+ enum {
+ kUnusedSeparableVarying = -1,
+ };
+ struct SeparableVarying {
+ GrGLint fLocation;
+ SkDEBUGCODE(
+ GrSLType fType;
+ int fArrayCount;
+ );
+ };
+ SkTArray<SeparableVarying, true> fSeparableVaryings;
+ GrGLGpu* fGpu;
+ GrGLuint fProgramID;
+ typedef SkNoncopyable INHERITED;
+};
+#endif
« no previous file with comments | « src/gpu/gl/GrGLPathProgram.cpp ('k') | src/gpu/gl/GrGLPathProgramDataManager.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698