| 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 #include "GrGLCaps.h" | 9 #include "GrGLCaps.h" |
| 10 | 10 |
| (...skipping 788 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 799 return GR_GL_FRAGMENT_SHADER; | 799 return GR_GL_FRAGMENT_SHADER; |
| 800 } | 800 } |
| 801 SkFAIL("Unknown shader type."); | 801 SkFAIL("Unknown shader type."); |
| 802 return -1; | 802 return -1; |
| 803 } | 803 } |
| 804 | 804 |
| 805 void GrGLCaps::initShaderPrecisionTable(const GrGLContextInfo& ctxInfo, const Gr
GLInterface* intf) { | 805 void GrGLCaps::initShaderPrecisionTable(const GrGLContextInfo& ctxInfo, const Gr
GLInterface* intf) { |
| 806 if (kGLES_GrGLStandard == ctxInfo.standard() || ctxInfo.version() >= GR_GL_V
ER(4,1) || | 806 if (kGLES_GrGLStandard == ctxInfo.standard() || ctxInfo.version() >= GR_GL_V
ER(4,1) || |
| 807 ctxInfo.hasExtension("GL_ARB_ES2_compatibility")) { | 807 ctxInfo.hasExtension("GL_ARB_ES2_compatibility")) { |
| 808 for (int s = 0; s < kGrShaderTypeCount; ++s) { | 808 for (int s = 0; s < kGrShaderTypeCount; ++s) { |
| 809 if (kGeometry_GrShaderType != s || fGeometryShaderSupport) { | 809 if (kGeometry_GrShaderType != s) { |
| 810 GrShaderType shaderType = static_cast<GrShaderType>(s); | 810 GrShaderType shaderType = static_cast<GrShaderType>(s); |
| 811 GrGLenum glShader = shader_type_to_gl_shader(shaderType); | 811 GrGLenum glShader = shader_type_to_gl_shader(shaderType); |
| 812 PrecisionInfo* first = NULL; | 812 PrecisionInfo* first = NULL; |
| 813 fShaderPrecisionVaries = false; | 813 fShaderPrecisionVaries = false; |
| 814 for (int p = 0; p < kGrSLPrecisionCount; ++p) { | 814 for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
| 815 GrSLPrecision precision = static_cast<GrSLPrecision>(p); | 815 GrSLPrecision precision = static_cast<GrSLPrecision>(p); |
| 816 GrGLenum glPrecision = precision_to_gl_float_type(precision)
; | 816 GrGLenum glPrecision = precision_to_gl_float_type(precision)
; |
| 817 GrGLint range[2]; | 817 GrGLint range[2]; |
| 818 GrGLint bits; | 818 GrGLint bits; |
| 819 GR_GL_GetShaderPrecisionFormat(intf, glShader, glPrecision,
range, &bits); | 819 GR_GL_GetShaderPrecisionFormat(intf, glShader, glPrecision,
range, &bits); |
| 820 if (bits) { | 820 if (bits) { |
| 821 fFloatPrecisions[s][p].fLogRangeLow = range[0]; | 821 fFloatPrecisions[s][p].fLogRangeLow = range[0]; |
| 822 fFloatPrecisions[s][p].fLogRangeHigh = range[1]; | 822 fFloatPrecisions[s][p].fLogRangeHigh = range[1]; |
| 823 fFloatPrecisions[s][p].fBits = bits; | 823 fFloatPrecisions[s][p].fBits = bits; |
| 824 if (!first) { | 824 if (!first) { |
| 825 first = &fFloatPrecisions[s][p]; | 825 first = &fFloatPrecisions[s][p]; |
| 826 } else if (!fShaderPrecisionVaries) { | 826 } else if (!fShaderPrecisionVaries) { |
| 827 fShaderPrecisionVaries = (*first != fFloatPrecisions
[s][p]); | 827 fShaderPrecisionVaries = (*first != fFloatPrecisions
[s][p]); |
| 828 } | 828 } |
| 829 } | 829 } |
| 830 } | 830 } |
| 831 } | 831 } |
| 832 } | 832 } |
| 833 } else { | 833 } else { |
| 834 // We're on a desktop GL that doesn't have precision info. Assume they'r
e all 32bit float. | 834 // We're on a desktop GL that doesn't have precision info. Assume they'r
e all 32bit float. |
| 835 fShaderPrecisionVaries = false; | 835 fShaderPrecisionVaries = false; |
| 836 for (int s = 0; s < kGrShaderTypeCount; ++s) { | 836 for (int s = 0; s < kGrShaderTypeCount; ++s) { |
| 837 if (kGeometry_GrShaderType != s || fGeometryShaderSupport) { | 837 if (kGeometry_GrShaderType != s) { |
| 838 for (int p = 0; p < kGrSLPrecisionCount; ++p) { | 838 for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
| 839 fFloatPrecisions[s][p].fLogRangeLow = 127; | 839 fFloatPrecisions[s][p].fLogRangeLow = 127; |
| 840 fFloatPrecisions[s][p].fLogRangeHigh = 127; | 840 fFloatPrecisions[s][p].fLogRangeHigh = 127; |
| 841 fFloatPrecisions[s][p].fBits = 23; | 841 fFloatPrecisions[s][p].fBits = 23; |
| 842 } | 842 } |
| 843 } | 843 } |
| 844 } | 844 } |
| 845 } | 845 } |
| 846 // GetShaderPrecisionFormat doesn't accept GL_GEOMETRY_SHADER as a shader ty
pe. Assume they're |
| 847 // the same as the vertex shader. Only fragment shaders were ever allowed to
omit support for |
| 848 // highp. GS was added after GetShaderPrecisionFormat was added to the list
of features that |
| 849 // are recommended against. |
| 850 if (fGeometryShaderSupport) { |
| 851 for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
| 852 fFloatPrecisions[kGeometry_GrShaderType][p] = fFloatPrecisions[kVert
ex_GrShaderType][p]; |
| 853 } |
| 854 } |
| 846 } | 855 } |
| 847 | 856 |
| 848 | 857 |
| 849 void GrGLCaps::markColorConfigAndStencilFormatAsVerified( | 858 void GrGLCaps::markColorConfigAndStencilFormatAsVerified( |
| 850 GrPixelConfig config, | 859 GrPixelConfig config, |
| 851 const GrGLStencilBuffer::Format& format) { | 860 const GrGLStencilBuffer::Format& format) { |
| 852 #if !GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT | 861 #if !GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT |
| 853 return; | 862 return; |
| 854 #endif | 863 #endif |
| 855 SkASSERT((unsigned)config < (unsigned)kGrPixelConfigCnt); | 864 SkASSERT((unsigned)config < (unsigned)kGrPixelConfigCnt); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 969 r.appendf("Two Format Limit: %s\n", (fTwoFormatLimit ? "YES": "NO")); | 978 r.appendf("Two Format Limit: %s\n", (fTwoFormatLimit ? "YES": "NO")); |
| 970 r.appendf("Fragment coord conventions support: %s\n", | 979 r.appendf("Fragment coord conventions support: %s\n", |
| 971 (fFragCoordsConventionSupport ? "YES": "NO")); | 980 (fFragCoordsConventionSupport ? "YES": "NO")); |
| 972 r.appendf("Vertex array object support: %s\n", (fVertexArrayObjectSupport ?
"YES": "NO")); | 981 r.appendf("Vertex array object support: %s\n", (fVertexArrayObjectSupport ?
"YES": "NO")); |
| 973 r.appendf("Use non-VBO for dynamic data: %s\n", | 982 r.appendf("Use non-VBO for dynamic data: %s\n", |
| 974 (fUseNonVBOVertexAndIndexDynamicData ? "YES" : "NO")); | 983 (fUseNonVBOVertexAndIndexDynamicData ? "YES" : "NO")); |
| 975 r.appendf("Full screen clear is free: %s\n", (fFullClearIsFree ? "YES" : "NO
")); | 984 r.appendf("Full screen clear is free: %s\n", (fFullClearIsFree ? "YES" : "NO
")); |
| 976 r.appendf("Drops tile on zero divide: %s\n", (fDropsTileOnZeroDivide ? "YES"
: "NO")); | 985 r.appendf("Drops tile on zero divide: %s\n", (fDropsTileOnZeroDivide ? "YES"
: "NO")); |
| 977 return r; | 986 return r; |
| 978 } | 987 } |
| OLD | NEW |