OLD | NEW |
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 |
11 | 11 |
| 12 #include "glsl/GrGLSL.h" |
12 #include "GrCaps.h" | 13 #include "GrCaps.h" |
13 #include "glsl/GrGLSL.h" | |
14 #include "GrGLStencilAttachment.h" | 14 #include "GrGLStencilAttachment.h" |
| 15 #include "GrSwizzle.h" |
15 #include "SkChecksum.h" | 16 #include "SkChecksum.h" |
16 #include "SkTHash.h" | 17 #include "SkTHash.h" |
17 #include "SkTArray.h" | 18 #include "SkTArray.h" |
18 | 19 |
19 class GrGLContextInfo; | 20 class GrGLContextInfo; |
20 class GrGLSLCaps; | 21 class GrGLSLCaps; |
21 | 22 |
22 /** | 23 /** |
23 * Stores some capabilities of a GL context. Most are determined by the GL | 24 * Stores some capabilities of a GL context. Most are determined by the GL |
24 * version and the extensions string. It also tracks formats that have passed | 25 * version and the extensions string. It also tracks formats that have passed |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 } else { | 136 } else { |
136 return SkToBool(fConfigTable[config].fFlags & ConfigInfo::kRenderabl
e_Flag); | 137 return SkToBool(fConfigTable[config].fFlags & ConfigInfo::kRenderabl
e_Flag); |
137 } | 138 } |
138 } | 139 } |
139 | 140 |
140 /** Returns conversions to various GL format parameters for a GrPixelCfonig.
*/ | 141 /** Returns conversions to various GL format parameters for a GrPixelCfonig.
*/ |
141 const ConfigFormats& configGLFormats(GrPixelConfig config) const { | 142 const ConfigFormats& configGLFormats(GrPixelConfig config) const { |
142 return fConfigTable[config].fFormats; | 143 return fConfigTable[config].fFormats; |
143 } | 144 } |
144 | 145 |
| 146 /** Returns the mapping between GrPixelConfig components and GL internal for
mat components. */ |
| 147 const GrSwizzle& configSwizzle(GrPixelConfig config) const { |
| 148 return fConfigTable[config].fSwizzle; |
| 149 } |
| 150 |
145 /** | 151 /** |
146 * Gets an array of legal stencil formats. These formats are not guaranteed | 152 * Gets an array of legal stencil formats. These formats are not guaranteed |
147 * to be supported by the driver but are legal GLenum names given the GL | 153 * to be supported by the driver but are legal GLenum names given the GL |
148 * version and extensions supported. | 154 * version and extensions supported. |
149 */ | 155 */ |
150 const SkTArray<StencilFormat, true>& stencilFormats() const { | 156 const SkTArray<StencilFormat, true>& stencilFormats() const { |
151 return fStencilFormats; | 157 return fStencilFormats; |
152 } | 158 } |
153 | 159 |
154 /** | 160 /** |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 | 306 |
301 bool isCoreProfile() const { return fIsCoreProfile; } | 307 bool isCoreProfile() const { return fIsCoreProfile; } |
302 | 308 |
303 bool bindFragDataLocationSupport() const { return fBindFragDataLocationSuppo
rt; } | 309 bool bindFragDataLocationSupport() const { return fBindFragDataLocationSuppo
rt; } |
304 | 310 |
305 bool bindUniformLocationSupport() const { return fBindUniformLocationSupport
; } | 311 bool bindUniformLocationSupport() const { return fBindUniformLocationSupport
; } |
306 | 312 |
307 /// Are textures with GL_TEXTURE_EXTERNAL_OES type supported. | 313 /// Are textures with GL_TEXTURE_EXTERNAL_OES type supported. |
308 bool externalTextureSupport() const { return fExternalTextureSupport; } | 314 bool externalTextureSupport() const { return fExternalTextureSupport; } |
309 | 315 |
| 316 /// GL_ARB_texture_swizzle |
| 317 bool textureSwizzleSupport() const { return fTextureSwizzleSupport; } |
| 318 |
310 /** | 319 /** |
311 * Is there support for enabling/disabling sRGB writes for sRGB-capable colo
r attachments? | 320 * Is there support for enabling/disabling sRGB writes for sRGB-capable colo
r attachments? |
312 * If false this does not mean sRGB is not supported but rather that if it i
s supported | 321 * If false this does not mean sRGB is not supported but rather that if it i
s supported |
313 * it cannot be turned off for configs that support it. | 322 * it cannot be turned off for configs that support it. |
314 */ | 323 */ |
315 bool srgbWriteControl() const { return fSRGBWriteControl; } | 324 bool srgbWriteControl() const { return fSRGBWriteControl; } |
316 | 325 |
317 /** | 326 /** |
318 * Returns a string containing the caps info. | 327 * Returns a string containing the caps info. |
319 */ | 328 */ |
320 SkString dump() const override; | 329 SkString dump() const override; |
321 | 330 |
322 bool rgba8888PixelsOpsAreSlow() const { return fRGBA8888PixelsOpsAreSlow; } | 331 bool rgba8888PixelsOpsAreSlow() const { return fRGBA8888PixelsOpsAreSlow; } |
323 bool partialFBOReadIsSlow() const { return fPartialFBOReadIsSlow; } | 332 bool partialFBOReadIsSlow() const { return fPartialFBOReadIsSlow; } |
324 | 333 |
325 const GrGLSLCaps* glslCaps() const { return reinterpret_cast<GrGLSLCaps*>(fS
haderCaps.get()); } | 334 const GrGLSLCaps* glslCaps() const { return reinterpret_cast<GrGLSLCaps*>(fS
haderCaps.get()); } |
326 | 335 |
327 private: | 336 private: |
328 void init(const GrContextOptions&, const GrGLContextInfo&, const GrGLInterfa
ce*); | 337 void init(const GrContextOptions&, const GrGLContextInfo&, const GrGLInterfa
ce*); |
329 void initGLSL(const GrGLContextInfo&); | 338 void initGLSL(const GrGLContextInfo&); |
330 bool hasPathRenderingSupport(const GrGLContextInfo&, const GrGLInterface*); | 339 bool hasPathRenderingSupport(const GrGLContextInfo&, const GrGLInterface*); |
331 | 340 |
332 void onApplyOptionsOverrides(const GrContextOptions& options) override; | 341 void onApplyOptionsOverrides(const GrContextOptions& options) override; |
333 | 342 |
334 void initFSAASupport(const GrGLContextInfo&, const GrGLInterface*); | 343 void initFSAASupport(const GrGLContextInfo&, const GrGLInterface*); |
335 void initBlendEqationSupport(const GrGLContextInfo&); | 344 void initBlendEqationSupport(const GrGLContextInfo&); |
336 void initStencilFormats(const GrGLContextInfo&); | 345 void initStencilFormats(const GrGLContextInfo&); |
337 // This must be called after initFSAASupport(). | 346 // This must be called after initFSAASupport(). |
338 void initConfigTable(const GrGLContextInfo&, const GrGLInterface* gli); | 347 void initConfigTable(const GrGLContextInfo&, const GrGLInterface* gli, GrGLS
LCaps* glslCaps); |
339 | 348 |
340 void initShaderPrecisionTable(const GrGLContextInfo& ctxInfo, | 349 void initShaderPrecisionTable(const GrGLContextInfo& ctxInfo, |
341 const GrGLInterface* intf, | 350 const GrGLInterface* intf, |
342 GrGLSLCaps* glslCaps); | 351 GrGLSLCaps* glslCaps); |
343 | 352 |
344 void initConfigSwizzleTable(const GrGLContextInfo& ctxInfo, GrGLSLCaps* glsl
Caps); | |
345 | |
346 | |
347 SkTArray<StencilFormat, true> fStencilFormats; | 353 SkTArray<StencilFormat, true> fStencilFormats; |
348 | 354 |
349 int fMaxFragmentUniformVectors; | 355 int fMaxFragmentUniformVectors; |
350 int fMaxVertexAttributes; | 356 int fMaxVertexAttributes; |
351 int fMaxFragmentTextureUnits; | 357 int fMaxFragmentTextureUnits; |
352 | 358 |
353 MSFBOType fMSFBOType; | 359 MSFBOType fMSFBOType; |
354 InvalidateFBType fInvalidateFBType; | 360 InvalidateFBType fInvalidateFBType; |
355 MapBufferType fMapBufferType; | 361 MapBufferType fMapBufferType; |
356 TransferBufferType fTransferBufferType; | 362 TransferBufferType fTransferBufferType; |
(...skipping 12 matching lines...) Expand all Loading... |
369 bool fES2CompatibilitySupport : 1; | 375 bool fES2CompatibilitySupport : 1; |
370 bool fMultisampleDisableSupport : 1; | 376 bool fMultisampleDisableSupport : 1; |
371 bool fUseNonVBOVertexAndIndexDynamicData : 1; | 377 bool fUseNonVBOVertexAndIndexDynamicData : 1; |
372 bool fIsCoreProfile : 1; | 378 bool fIsCoreProfile : 1; |
373 bool fBindFragDataLocationSupport : 1; | 379 bool fBindFragDataLocationSupport : 1; |
374 bool fSRGBWriteControl : 1; | 380 bool fSRGBWriteControl : 1; |
375 bool fRGBA8888PixelsOpsAreSlow : 1; | 381 bool fRGBA8888PixelsOpsAreSlow : 1; |
376 bool fPartialFBOReadIsSlow : 1; | 382 bool fPartialFBOReadIsSlow : 1; |
377 bool fBindUniformLocationSupport : 1; | 383 bool fBindUniformLocationSupport : 1; |
378 bool fExternalTextureSupport : 1; | 384 bool fExternalTextureSupport : 1; |
| 385 bool fTextureSwizzleSupport : 1; |
379 | 386 |
380 /** Number type of the components (with out considering number of bits.) */ | 387 /** Number type of the components (with out considering number of bits.) */ |
381 enum FormatType { | 388 enum FormatType { |
382 kNormalizedFixedPoint_FormatType, | 389 kNormalizedFixedPoint_FormatType, |
383 kFloat_FormatType, | 390 kFloat_FormatType, |
384 }; | 391 }; |
385 | 392 |
386 struct ReadPixelsFormat { | 393 struct ReadPixelsFormat { |
387 ReadPixelsFormat() : fFormat(0), fType(0) {} | 394 ReadPixelsFormat() : fFormat(0), fType(0) {} |
388 GrGLenum fFormat; | 395 GrGLenum fFormat; |
(...skipping 22 matching lines...) Expand all Loading... |
411 // Index fStencilFormats. | 418 // Index fStencilFormats. |
412 int fStencilFormatIndex; | 419 int fStencilFormatIndex; |
413 | 420 |
414 enum { | 421 enum { |
415 kVerifiedColorAttachment_Flag = 0x1, | 422 kVerifiedColorAttachment_Flag = 0x1, |
416 kTextureable_Flag = 0x2, | 423 kTextureable_Flag = 0x2, |
417 kRenderable_Flag = 0x4, | 424 kRenderable_Flag = 0x4, |
418 kRenderableWithMSAA_Flag = 0x8, | 425 kRenderableWithMSAA_Flag = 0x8, |
419 }; | 426 }; |
420 uint32_t fFlags; | 427 uint32_t fFlags; |
| 428 |
| 429 GrSwizzle fSwizzle; |
421 }; | 430 }; |
422 | 431 |
423 ConfigInfo fConfigTable[kGrPixelConfigCnt]; | 432 ConfigInfo fConfigTable[kGrPixelConfigCnt]; |
424 | 433 |
425 typedef GrCaps INHERITED; | 434 typedef GrCaps INHERITED; |
426 }; | 435 }; |
427 | 436 |
428 #endif | 437 #endif |
OLD | NEW |