| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 #include "GrGLSLFragmentShaderBuilder.h" | 8 #include "GrGLSLFragmentShaderBuilder.h" |
| 9 #include "GrRenderTarget.h" | 9 #include "GrRenderTarget.h" |
| 10 #include "glsl/GrGLSL.h" | 10 #include "glsl/GrGLSL.h" |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 if (!fSetupFragPosition) { | 139 if (!fSetupFragPosition) { |
| 140 const char* rtHeightName; | 140 const char* rtHeightName; |
| 141 | 141 |
| 142 fProgramBuilder->addRTHeightUniform("RTHeight", &rtHeightName); | 142 fProgramBuilder->addRTHeightUniform("RTHeight", &rtHeightName); |
| 143 | 143 |
| 144 // The Adreno compiler seems to be very touchy about access to "gl_F
ragCoord". | 144 // The Adreno compiler seems to be very touchy about access to "gl_F
ragCoord". |
| 145 // Accessing glFragCoord.zw can cause a program to fail to link. Add
itionally, | 145 // Accessing glFragCoord.zw can cause a program to fail to link. Add
itionally, |
| 146 // depending on the surrounding code, accessing .xy with a uniform i
nvolved can | 146 // depending on the surrounding code, accessing .xy with a uniform i
nvolved can |
| 147 // do the same thing. Copying gl_FragCoord.xy into a temp vec2 befor
ehand | 147 // do the same thing. Copying gl_FragCoord.xy into a temp vec2 befor
ehand |
| 148 // (and only accessing .xy) seems to "fix" things. | 148 // (and only accessing .xy) seems to "fix" things. |
| 149 this->codePrependf("\tvec4 %s = vec4(%s.x, %s - %s.y, 1.0, 1.0);\n", | 149 const char* precision = glslCaps->usesPrecisionModifiers() ? "highp
" : ""; |
| 150 kCoordName, kTempName, rtHeightName, kTempName); | 150 this->codePrependf("\t%svec4 %s = vec4(%s.x, %s - %s.y, 1.0, 1.0);\n
", |
| 151 this->codePrependf("vec2 %s = gl_FragCoord.xy;", kTempName); | 151 precision, kCoordName, kTempName, rtHeightName, k
TempName); |
| 152 this->codePrependf("%svec2 %s = gl_FragCoord.xy;", precision, kTempN
ame); |
| 152 fSetupFragPosition = true; | 153 fSetupFragPosition = true; |
| 153 } | 154 } |
| 154 SkASSERT(fProgramBuilder->fUniformHandles.fRTHeightUni.isValid()); | 155 SkASSERT(fProgramBuilder->fUniformHandles.fRTHeightUni.isValid()); |
| 155 return kCoordName; | 156 return kCoordName; |
| 156 } | 157 } |
| 157 } | 158 } |
| 158 | 159 |
| 159 const char* GrGLSLFragmentShaderBuilder::dstColor() { | 160 const char* GrGLSLFragmentShaderBuilder::dstColor() { |
| 160 fHasReadDstColor = true; | 161 fHasReadDstColor = true; |
| 161 | 162 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 248 } | 249 } |
| 249 | 250 |
| 250 void GrGLSLFragmentBuilder::onAfterChildProcEmitCode() { | 251 void GrGLSLFragmentBuilder::onAfterChildProcEmitCode() { |
| 251 SkASSERT(fSubstageIndices.count() >= 2); | 252 SkASSERT(fSubstageIndices.count() >= 2); |
| 252 fSubstageIndices.pop_back(); | 253 fSubstageIndices.pop_back(); |
| 253 fSubstageIndices.back()++; | 254 fSubstageIndices.back()++; |
| 254 int removeAt = fMangleString.findLastOf('_'); | 255 int removeAt = fMangleString.findLastOf('_'); |
| 255 fMangleString.remove(removeAt, fMangleString.size() - removeAt); | 256 fMangleString.remove(removeAt, fMangleString.size() - removeAt); |
| 256 } | 257 } |
| 257 | 258 |
| OLD | NEW |