OLD | NEW |
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 #include "GrGLGpu.h" | 8 #include "GrGLGpu.h" |
9 #include "GrGLBuffer.h" | 9 #include "GrGLBuffer.h" |
10 #include "GrGLGLSL.h" | 10 #include "GrGLGLSL.h" |
(...skipping 3772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3783 fshaderTxt.appendf("#extension %s : require\n", | 3783 fshaderTxt.appendf("#extension %s : require\n", |
3784 glslCaps->externalTextureExtensionString()); | 3784 glslCaps->externalTextureExtensionString()); |
3785 } | 3785 } |
3786 GrGLSLAppendDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision, *glslCa
ps, | 3786 GrGLSLAppendDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision, *glslCa
ps, |
3787 &fshaderTxt); | 3787 &fshaderTxt); |
3788 vTexCoord.setTypeModifier(GrShaderVar::kVaryingIn_TypeModifier); | 3788 vTexCoord.setTypeModifier(GrShaderVar::kVaryingIn_TypeModifier); |
3789 vTexCoord.appendDecl(glslCaps, &fshaderTxt); | 3789 vTexCoord.appendDecl(glslCaps, &fshaderTxt); |
3790 fshaderTxt.append(";"); | 3790 fshaderTxt.append(";"); |
3791 uTexture.appendDecl(glslCaps, &fshaderTxt); | 3791 uTexture.appendDecl(glslCaps, &fshaderTxt); |
3792 fshaderTxt.append(";"); | 3792 fshaderTxt.append(";"); |
3793 const char* fsOutName; | |
3794 if (glslCaps->mustDeclareFragmentShaderOutput()) { | |
3795 oFragColor.appendDecl(glslCaps, &fshaderTxt); | |
3796 fshaderTxt.append(";"); | |
3797 fsOutName = oFragColor.c_str(); | |
3798 } else { | |
3799 fsOutName = "gl_FragColor"; | |
3800 } | |
3801 fshaderTxt.appendf( | 3793 fshaderTxt.appendf( |
3802 "// Copy Program FS\n" | 3794 "// Copy Program FS\n" |
3803 "void main() {" | 3795 "void main() {" |
3804 " %s = %s(u_texture, v_texCoord);" | 3796 " sk_FragColor = %s(u_texture, v_texCoord);" |
3805 "}", | 3797 "}", |
3806 fsOutName, | |
3807 GrGLSLTexture2DFunctionName(kVec2f_GrSLType, kSamplerTypes[progIdx], thi
s->glslGeneration()) | 3798 GrGLSLTexture2DFunctionName(kVec2f_GrSLType, kSamplerTypes[progIdx], thi
s->glslGeneration()) |
3808 ); | 3799 ); |
3809 | 3800 |
3810 const char* str; | 3801 const char* str; |
3811 GrGLint length; | 3802 GrGLint length; |
3812 | 3803 |
3813 str = vshaderTxt.c_str(); | 3804 str = vshaderTxt.c_str(); |
3814 length = SkToInt(vshaderTxt.size()); | 3805 length = SkToInt(vshaderTxt.size()); |
3815 GrGLuint vshader = GrGLCompileAndAttachShader(*fGLContext, fCopyPrograms[pro
gIdx].fProgram, | 3806 GrGLuint vshader = GrGLCompileAndAttachShader(*fGLContext, fCopyPrograms[pro
gIdx].fProgram, |
3816 GR_GL_VERTEX_SHADER, &str, &le
ngth, 1, | 3807 GR_GL_VERTEX_SHADER, &str, &le
ngth, 1, |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3929 } | 3920 } |
3930 GrGLSLAppendDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision, *glslCa
ps, | 3921 GrGLSLAppendDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision, *glslCa
ps, |
3931 &fshaderTxt); | 3922 &fshaderTxt); |
3932 for (int i = 0; i < numTaps; ++i) { | 3923 for (int i = 0; i < numTaps; ++i) { |
3933 vTexCoords[i].setTypeModifier(GrShaderVar::kVaryingIn_TypeModifier); | 3924 vTexCoords[i].setTypeModifier(GrShaderVar::kVaryingIn_TypeModifier); |
3934 vTexCoords[i].appendDecl(glslCaps, &fshaderTxt); | 3925 vTexCoords[i].appendDecl(glslCaps, &fshaderTxt); |
3935 fshaderTxt.append(";"); | 3926 fshaderTxt.append(";"); |
3936 } | 3927 } |
3937 uTexture.appendDecl(glslCaps, &fshaderTxt); | 3928 uTexture.appendDecl(glslCaps, &fshaderTxt); |
3938 fshaderTxt.append(";"); | 3929 fshaderTxt.append(";"); |
3939 const char* fsOutName; | |
3940 if (glslCaps->mustDeclareFragmentShaderOutput()) { | |
3941 oFragColor.appendDecl(glslCaps, &fshaderTxt); | |
3942 fshaderTxt.append(";"); | |
3943 fsOutName = oFragColor.c_str(); | |
3944 } else { | |
3945 fsOutName = "gl_FragColor"; | |
3946 } | |
3947 const char* sampleFunction = GrGLSLTexture2DFunctionName(kVec2f_GrSLType, | 3930 const char* sampleFunction = GrGLSLTexture2DFunctionName(kVec2f_GrSLType, |
3948 kTexture2DSampler_G
rSLType, | 3931 kTexture2DSampler_G
rSLType, |
3949 this->glslGeneratio
n()); | 3932 this->glslGeneratio
n()); |
3950 fshaderTxt.append( | 3933 fshaderTxt.append( |
3951 "// Mipmap Program FS\n" | 3934 "// Mipmap Program FS\n" |
3952 "void main() {" | 3935 "void main() {" |
3953 ); | 3936 ); |
3954 | 3937 |
3955 if (oddWidth && oddHeight) { | 3938 if (oddWidth && oddHeight) { |
3956 fshaderTxt.appendf( | 3939 fshaderTxt.appendf( |
3957 " %s = (%s(u_texture, v_texCoord0) + %s(u_texture, v_texCoord1) + " | 3940 " sk_FragColor = (%s(u_texture, v_texCoord0) + %s(u_texture, v_texC
oord1) + " |
3958 " %s(u_texture, v_texCoord2) + %s(u_texture, v_texCoord3)) *
0.25;", | 3941 " %s(u_texture, v_texCoord2) + %s(u_texture, v_texC
oord3)) * 0.25;", |
3959 fsOutName, sampleFunction, sampleFunction, sampleFunction, sampleFun
ction | 3942 sampleFunction, sampleFunction, sampleFunction, sampleFunction |
3960 ); | 3943 ); |
3961 } else if (oddWidth || oddHeight) { | 3944 } else if (oddWidth || oddHeight) { |
3962 fshaderTxt.appendf( | 3945 fshaderTxt.appendf( |
3963 " %s = (%s(u_texture, v_texCoord0) + %s(u_texture, v_texCoord1)) *
0.5;", | 3946 " sk_FragColor = (%s(u_texture, v_texCoord0) + %s(u_texture, v_texC
oord1)) * 0.5;", |
3964 fsOutName, sampleFunction, sampleFunction | 3947 sampleFunction, sampleFunction |
3965 ); | 3948 ); |
3966 } else { | 3949 } else { |
3967 fshaderTxt.appendf( | 3950 fshaderTxt.appendf( |
3968 " %s = %s(u_texture, v_texCoord0);", | 3951 " sk_FragColor = %s(u_texture, v_texCoord0);", |
3969 fsOutName, sampleFunction | 3952 sampleFunction |
3970 ); | 3953 ); |
3971 } | 3954 } |
3972 | 3955 |
3973 fshaderTxt.append("}"); | 3956 fshaderTxt.append("}"); |
3974 | 3957 |
3975 const char* str; | 3958 const char* str; |
3976 GrGLint length; | 3959 GrGLint length; |
3977 | 3960 |
3978 str = vshaderTxt.c_str(); | 3961 str = vshaderTxt.c_str(); |
3979 length = SkToInt(vshaderTxt.size()); | 3962 length = SkToInt(vshaderTxt.size()); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4046 ); | 4029 ); |
4047 | 4030 |
4048 GrGLSLShaderVar oFragColor("o_FragColor", kVec4f_GrSLType, GrShaderVar::kOut
_TypeModifier); | 4031 GrGLSLShaderVar oFragColor("o_FragColor", kVec4f_GrSLType, GrShaderVar::kOut
_TypeModifier); |
4049 | 4032 |
4050 SkString fshaderTxt(version); | 4033 SkString fshaderTxt(version); |
4051 GrGLSLAppendDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision, | 4034 GrGLSLAppendDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision, |
4052 *this->glCaps().glslCaps(), | 4035 *this->glCaps().glslCaps(), |
4053 &fshaderTxt); | 4036 &fshaderTxt); |
4054 uColor.appendDecl(this->glCaps().glslCaps(), &fshaderTxt); | 4037 uColor.appendDecl(this->glCaps().glslCaps(), &fshaderTxt); |
4055 fshaderTxt.append(";"); | 4038 fshaderTxt.append(";"); |
4056 const char* fsOutName; | |
4057 if (this->glCaps().glslCaps()->mustDeclareFragmentShaderOutput()) { | |
4058 oFragColor.appendDecl(this->glCaps().glslCaps(), &fshaderTxt); | |
4059 fshaderTxt.append(";"); | |
4060 fsOutName = oFragColor.c_str(); | |
4061 } else { | |
4062 fsOutName = "gl_FragColor"; | |
4063 } | |
4064 fshaderTxt.appendf( | 4039 fshaderTxt.appendf( |
4065 "// Write Rect Program FS\n" | 4040 "// Write Rect Program FS\n" |
4066 "void main() {" | 4041 "void main() {" |
4067 " %s = %s;" | 4042 " sk_FragColor = %s;" |
4068 "}", | 4043 "}", |
4069 fsOutName, | |
4070 uColor.c_str() | 4044 uColor.c_str() |
4071 ); | 4045 ); |
4072 | 4046 |
4073 const char* str; | 4047 const char* str; |
4074 GrGLint length; | 4048 GrGLint length; |
4075 | 4049 |
4076 str = vshaderTxt.c_str(); | 4050 str = vshaderTxt.c_str(); |
4077 length = SkToInt(vshaderTxt.size()); | 4051 length = SkToInt(vshaderTxt.size()); |
4078 GrGLuint vshader = GrGLCompileAndAttachShader(*fGLContext, fWireRectProgram.
fProgram, | 4052 GrGLuint vshader = GrGLCompileAndAttachShader(*fGLContext, fWireRectProgram.
fProgram, |
4079 GR_GL_VERTEX_SHADER, &str, &le
ngth, 1, | 4053 GR_GL_VERTEX_SHADER, &str, &le
ngth, 1, |
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4703 | 4677 |
4704 bool GrGLGpu::waitFence(GrFence fence, uint64_t timeout) const { | 4678 bool GrGLGpu::waitFence(GrFence fence, uint64_t timeout) const { |
4705 GrGLenum result; | 4679 GrGLenum result; |
4706 GL_CALL_RET(result, ClientWaitSync((GrGLsync)fence, GR_GL_SYNC_FLUSH_COMMAND
S_BIT, timeout)); | 4680 GL_CALL_RET(result, ClientWaitSync((GrGLsync)fence, GR_GL_SYNC_FLUSH_COMMAND
S_BIT, timeout)); |
4707 return (GR_GL_CONDITION_SATISFIED == result); | 4681 return (GR_GL_CONDITION_SATISFIED == result); |
4708 } | 4682 } |
4709 | 4683 |
4710 void GrGLGpu::deleteFence(GrFence fence) const { | 4684 void GrGLGpu::deleteFence(GrFence fence) const { |
4711 GL_CALL(DeleteSync((GrGLsync)fence)); | 4685 GL_CALL(DeleteSync((GrGLsync)fence)); |
4712 } | 4686 } |
OLD | NEW |