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

Side by Side Diff: src/gpu/gl/GrGpuGL.h

Issue 15252004: Make GrGLProgramDesc's key variable length by compacting the effect key array (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: address comments, fix unit test Created 7 years, 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/gpu/gl/GrGLShaderBuilder.cpp ('k') | src/gpu/gl/GrGpuGL_program.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 8
9 9
10 #ifndef GrGpuGL_DEFINED 10 #ifndef GrGpuGL_DEFINED
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 170
171 static bool BlendCoeffReferencesConstant(GrBlendCoeff coeff); 171 static bool BlendCoeffReferencesConstant(GrBlendCoeff coeff);
172 172
173 class ProgramCache : public ::GrNoncopyable { 173 class ProgramCache : public ::GrNoncopyable {
174 public: 174 public:
175 ProgramCache(const GrGLContext& gl); 175 ProgramCache(const GrGLContext& gl);
176 ~ProgramCache(); 176 ~ProgramCache();
177 177
178 void abandon(); 178 void abandon();
179 GrGLProgram* getProgram(const GrGLProgramDesc& desc, const GrEffectStage * stages[]); 179 GrGLProgram* getProgram(const GrGLProgramDesc& desc, const GrEffectStage * stages[]);
180
180 private: 181 private:
181 enum { 182 enum {
182 kKeySize = sizeof(GrGLProgramDesc),
183 // We may actually have kMaxEntries+1 shaders in the GL context beca use we create a new 183 // We may actually have kMaxEntries+1 shaders in the GL context beca use we create a new
184 // shader before evicting from the cache. 184 // shader before evicting from the cache.
185 kMaxEntries = 32 185 kMaxEntries = 32,
186 kHashBits = 6,
186 }; 187 };
187 188
188 class Entry; 189 struct Entry;
189 // The value of the hash key is based on the ProgramDesc.
190 typedef GrTBinHashKey<Entry, kKeySize> ProgramHashKey;
191 190
192 class Entry : public ::GrNoncopyable { 191 struct ProgDescLess;
193 public:
194 Entry() : fProgram(NULL), fLRUStamp(0) {}
195 Entry& operator = (const Entry& entry) {
196 GrSafeRef(entry.fProgram.get());
197 fProgram.reset(entry.fProgram.get());
198 fKey = entry.fKey;
199 fLRUStamp = entry.fLRUStamp;
200 return *this;
201 }
202 int compare(const ProgramHashKey& key) const {
203 return fKey.compare(key);
204 }
205 192
206 public: 193 // binary search for entry matching desc. returns index into fEntries th at matches desc or ~
207 SkAutoTUnref<GrGLProgram> fProgram; 194 // of the index of where it should be inserted.
208 ProgramHashKey fKey; 195 int search(const GrGLProgramDesc& desc) const;
209 unsigned int fLRUStamp; // Move outside entry?
210 };
211 196
212 GrTHashTable<Entry, ProgramHashKey, 8> fHashCache; 197 // sorted array of all the entries
198 Entry* fEntries[kMaxEntries];
199 // hash table based on lowest kHashBits bits of the program key. Used to avoid binary
200 // searching fEntries.
201 Entry* fHashTable[1 << kHashBits];
213 202
214 Entry fEntries[kMaxEntries];
215 int fCount; 203 int fCount;
216 unsigned int fCurrLRUStamp; 204 unsigned int fCurrLRUStamp;
217 const GrGLContext& fGL; 205 const GrGLContext& fGL;
218 #ifdef PROGRAM_CACHE_STATS 206 #ifdef PROGRAM_CACHE_STATS
219 int fTotalRequests; 207 int fTotalRequests;
220 int fCacheMisses; 208 int fCacheMisses;
209 int fHashMisses; // cache hit but hash table mis sed
221 #endif 210 #endif
222 }; 211 };
223 212
224 // sets the matrix for path stenciling (uses the GL fixed pipe matrices) 213 // sets the matrix for path stenciling (uses the GL fixed pipe matrices)
225 void flushPathStencilMatrix(); 214 void flushPathStencilMatrix();
226 215
227 // flushes dithering, color-mask, and face culling stat 216 // flushes dithering, color-mask, and face culling stat
228 void flushMiscFixedFunctionState(); 217 void flushMiscFixedFunctionState();
229 218
230 // flushes the scissor. see the note on flushBoundTextureAndParams about 219 // flushes the scissor. see the note on flushBoundTextureAndParams about
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 ///@} 427 ///@}
439 428
440 // we record what stencil format worked last time to hopefully exit early 429 // we record what stencil format worked last time to hopefully exit early
441 // from our loop that tries stencil formats and calls check fb status. 430 // from our loop that tries stencil formats and calls check fb status.
442 int fLastSuccessfulStencilFmtIdx; 431 int fLastSuccessfulStencilFmtIdx;
443 432
444 typedef GrGpu INHERITED; 433 typedef GrGpu INHERITED;
445 }; 434 };
446 435
447 #endif 436 #endif
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLShaderBuilder.cpp ('k') | src/gpu/gl/GrGpuGL_program.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698