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

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

Issue 1536033003: Fold color attachment verification bit into GrGLCaps::ConfigInfo (Closed) Base URL: https://skia.googlesource.com/skia.git@mv2caps
Patch Set: delete more code Created 5 years 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
« no previous file with comments | « no previous file | src/gpu/gl/GrGLCaps.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 2012 Google Inc. 2 * Copyright 2012 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 #ifndef GrGLCaps_DEFINED 9 #ifndef GrGLCaps_DEFINED
10 #define GrGLCaps_DEFINED 10 #define GrGLCaps_DEFINED
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 fConfigTable[config].fStencilFormatIndex = index; 174 fConfigTable[config].fStencilFormatIndex = index;
175 } 175 }
176 } 176 }
177 177
178 /** 178 /**
179 * Call to note that a color config has been verified as a valid color 179 * Call to note that a color config has been verified as a valid color
180 * attachment. This may save future calls to glCheckFramebufferStatus 180 * attachment. This may save future calls to glCheckFramebufferStatus
181 * using isConfigVerifiedColorAttachment(). 181 * using isConfigVerifiedColorAttachment().
182 */ 182 */
183 void markConfigAsValidColorAttachment(GrPixelConfig config) { 183 void markConfigAsValidColorAttachment(GrPixelConfig config) {
184 fVerifiedColorConfigs.markVerified(config); 184 fConfigTable[config].fFlags |= ConfigInfo::kVerifiedColorAttachment_Flag ;
185 } 185 }
186 186
187 /** 187 /**
188 * Call to check whether a config has been verified as a valid color 188 * Call to check whether a config has been verified as a valid color
189 * attachment. 189 * attachment.
190 */ 190 */
191 bool isConfigVerifiedColorAttachment(GrPixelConfig config) const { 191 bool isConfigVerifiedColorAttachment(GrPixelConfig config) const {
192 return fVerifiedColorConfigs.isVerified(config); 192 return SkToBool(fConfigTable[config].fFlags & ConfigInfo::kVerifiedColor Attachment_Flag);
193 } 193 }
194 194
195 /** 195 /**
196 * Reports the type of MSAA FBO support. 196 * Reports the type of MSAA FBO support.
197 */ 197 */
198 MSFBOType msFBOType() const { return fMSFBOType; } 198 MSFBOType msFBOType() const { return fMSFBOType; }
199 199
200 /** 200 /**
201 * Does the supported MSAA FBO extension have MSAA renderbuffers? 201 * Does the supported MSAA FBO extension have MSAA renderbuffers?
202 */ 202 */
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 334
335 const GrGLSLCaps* glslCaps() const { return reinterpret_cast<GrGLSLCaps*>(fS haderCaps.get()); } 335 const GrGLSLCaps* glslCaps() const { return reinterpret_cast<GrGLSLCaps*>(fS haderCaps.get()); }
336 336
337 private: 337 private:
338 void init(const GrContextOptions&, const GrGLContextInfo&, const GrGLInterfa ce*); 338 void init(const GrContextOptions&, const GrGLContextInfo&, const GrGLInterfa ce*);
339 void initGLSL(const GrGLContextInfo&); 339 void initGLSL(const GrGLContextInfo&);
340 bool hasPathRenderingSupport(const GrGLContextInfo&, const GrGLInterface*); 340 bool hasPathRenderingSupport(const GrGLContextInfo&, const GrGLInterface*);
341 341
342 void onApplyOptionsOverrides(const GrContextOptions& options) override; 342 void onApplyOptionsOverrides(const GrContextOptions& options) override;
343 343
344 /**
345 * Maintains a bit per GrPixelConfig. It is used to avoid redundantly
346 * performing glCheckFrameBufferStatus for the same config.
347 */
348 struct VerifiedColorConfigs {
349 VerifiedColorConfigs() {
350 this->reset();
351 }
352
353 void reset() {
354 for (int i = 0; i < kNumUints; ++i) {
355 fVerifiedColorConfigs[i] = 0;
356 }
357 }
358
359 static const int kNumUints = (kGrPixelConfigCnt + 31) / 32;
360 uint32_t fVerifiedColorConfigs[kNumUints];
361
362 void markVerified(GrPixelConfig config) {
363 #if !GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT
364 return;
365 #endif
366 int u32Idx = config / 32;
367 int bitIdx = config % 32;
368 fVerifiedColorConfigs[u32Idx] |= 1 << bitIdx;
369 }
370
371 bool isVerified(GrPixelConfig config) const {
372 #if !GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT
373 return false;
374 #endif
375 int u32Idx = config / 32;
376 int bitIdx = config % 32;
377 return SkToBool(fVerifiedColorConfigs[u32Idx] & (1 << bitIdx));
378 }
379 };
380
381 void initFSAASupport(const GrGLContextInfo&, const GrGLInterface*); 344 void initFSAASupport(const GrGLContextInfo&, const GrGLInterface*);
382 void initBlendEqationSupport(const GrGLContextInfo&); 345 void initBlendEqationSupport(const GrGLContextInfo&);
383 void initStencilFormats(const GrGLContextInfo&); 346 void initStencilFormats(const GrGLContextInfo&);
384 // This must be called after initFSAASupport(). 347 // This must be called after initFSAASupport().
385 void initConfigRenderableTable(const GrGLContextInfo&, bool srgbSupport); 348 void initConfigRenderableTable(const GrGLContextInfo&, bool srgbSupport);
386 void initConfigTexturableTable(const GrGLContextInfo&, const GrGLInterface*, bool srgbSupport); 349 void initConfigTexturableTable(const GrGLContextInfo&, const GrGLInterface*, bool srgbSupport);
387 350
388 bool doReadPixelsSupported(const GrGLInterface* intf, GrGLenum format, GrGLe num type) const; 351 bool doReadPixelsSupported(const GrGLInterface* intf, GrGLenum format, GrGLe num type) const;
389 352
390 void initShaderPrecisionTable(const GrGLContextInfo& ctxInfo, 353 void initShaderPrecisionTable(const GrGLContextInfo& ctxInfo,
391 const GrGLInterface* intf, 354 const GrGLInterface* intf,
392 GrGLSLCaps* glslCaps); 355 GrGLSLCaps* glslCaps);
393 356
394 void initConfigSwizzleTable(const GrGLContextInfo& ctxInfo, GrGLSLCaps* glsl Caps); 357 void initConfigSwizzleTable(const GrGLContextInfo& ctxInfo, GrGLSLCaps* glsl Caps);
395 358
396 void initConfigTable(const GrGLContextInfo&); 359 void initConfigTable(const GrGLContextInfo&);
397 360
398 // tracks configs that have been verified to pass the FBO completeness when
399 // used as a color attachment
400 VerifiedColorConfigs fVerifiedColorConfigs;
401
402 SkTArray<StencilFormat, true> fStencilFormats; 361 SkTArray<StencilFormat, true> fStencilFormats;
403 362
404 int fMaxFragmentUniformVectors; 363 int fMaxFragmentUniformVectors;
405 int fMaxVertexAttributes; 364 int fMaxVertexAttributes;
406 int fMaxFragmentTextureUnits; 365 int fMaxFragmentTextureUnits;
407 366
408 MSFBOType fMSFBOType; 367 MSFBOType fMSFBOType;
409 InvalidateFBType fInvalidateFBType; 368 InvalidateFBType fInvalidateFBType;
410 MapBufferType fMapBufferType; 369 MapBufferType fMapBufferType;
411 TransferBufferType fTransferBufferType; 370 TransferBufferType fTransferBufferType;
(...skipping 18 matching lines...) Expand all
430 bool fUseNonVBOVertexAndIndexDynamicData : 1; 389 bool fUseNonVBOVertexAndIndexDynamicData : 1;
431 bool fIsCoreProfile : 1; 390 bool fIsCoreProfile : 1;
432 bool fBindFragDataLocationSupport : 1; 391 bool fBindFragDataLocationSupport : 1;
433 bool fSRGBWriteControl : 1; 392 bool fSRGBWriteControl : 1;
434 bool fRGBA8888PixelsOpsAreSlow : 1; 393 bool fRGBA8888PixelsOpsAreSlow : 1;
435 bool fPartialFBOReadIsSlow : 1; 394 bool fPartialFBOReadIsSlow : 1;
436 bool fBindUniformLocationSupport : 1; 395 bool fBindUniformLocationSupport : 1;
437 bool fExternalTextureSupport : 1; 396 bool fExternalTextureSupport : 1;
438 397
439 struct ConfigInfo { 398 struct ConfigInfo {
440 ConfigInfo() : fStencilFormatIndex(kUnknown_StencilIndex) {}; 399 ConfigInfo() : fStencilFormatIndex(kUnknown_StencilIndex), fFlags(0) {};
441 400
442 ConfigFormats fFormats; 401 ConfigFormats fFormats;
443 402
444 // Index into GrGLCaps's list of stencil formats. Support is determined experimentally and
445 // lazily.
446 int fStencilFormatIndex;
447
448 enum { 403 enum {
449 // This indicates that a stencil format has not yet been determined for the config. 404 // This indicates that a stencil format has not yet been determined for the config.
450 kUnknown_StencilIndex = -1, 405 kUnknown_StencilIndex = -1,
451 // This indicates that there is no supported stencil format for the config. 406 // This indicates that there is no supported stencil format for the config.
452 kUnsupported_StencilFormatIndex = -2 407 kUnsupported_StencilFormatIndex = -2
453 }; 408 };
409
410 // Index fStencilFormats.
411 int fStencilFormatIndex;
412
413 enum {
414 kVerifiedColorAttachment_Flag = 0x1
415 };
416 uint32_t fFlags;
454 }; 417 };
455 418
456 ConfigInfo fConfigTable[kGrPixelConfigCnt]; 419 ConfigInfo fConfigTable[kGrPixelConfigCnt];
457 420
458 struct ReadPixelsSupportedFormat { 421 struct ReadPixelsSupportedFormat {
459 GrGLenum fFormat; 422 GrGLenum fFormat;
460 GrGLenum fType; 423 GrGLenum fType;
461 GrGLenum fFboFormat; 424 GrGLenum fFboFormat;
462 425
463 bool operator==(const ReadPixelsSupportedFormat& rhs) const { 426 bool operator==(const ReadPixelsSupportedFormat& rhs) const {
464 return fFormat == rhs.fFormat 427 return fFormat == rhs.fFormat
465 && fType == rhs.fType 428 && fType == rhs.fType
466 && fFboFormat == rhs.fFboFormat; 429 && fFboFormat == rhs.fFboFormat;
467 } 430 }
468 }; 431 };
469 mutable SkTHashMap<ReadPixelsSupportedFormat, bool> fReadPixelsSupportedCach e; 432 mutable SkTHashMap<ReadPixelsSupportedFormat, bool> fReadPixelsSupportedCach e;
470 433
471 typedef GrCaps INHERITED; 434 typedef GrCaps INHERITED;
472 }; 435 };
473 436
474 #endif 437 #endif
OLDNEW
« no previous file with comments | « no previous file | src/gpu/gl/GrGLCaps.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698