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

Side by Side Diff: src/gpu/gl/GrGLGpu.cpp

Issue 1153813002: Remove init from GrGLContextInfo and caps classes (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: cleanup Created 5 years, 7 months 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
OLDNEW
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 8
9 #include "GrGLGpu.h" 9 #include "GrGLGpu.h"
10 #include "GrGLStencilAttachment.h" 10 #include "GrGLStencilAttachment.h"
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 GR_STATIC_ASSERT(15 == kIS2C_GrBlendCoeff); 150 GR_STATIC_ASSERT(15 == kIS2C_GrBlendCoeff);
151 GR_STATIC_ASSERT(16 == kS2A_GrBlendCoeff); 151 GR_STATIC_ASSERT(16 == kS2A_GrBlendCoeff);
152 GR_STATIC_ASSERT(17 == kIS2A_GrBlendCoeff); 152 GR_STATIC_ASSERT(17 == kIS2A_GrBlendCoeff);
153 153
154 // assertion for gXfermodeCoeff2Blend have to be in GrGpu scope 154 // assertion for gXfermodeCoeff2Blend have to be in GrGpu scope
155 GR_STATIC_ASSERT(kGrBlendCoeffCnt == SK_ARRAY_COUNT(gXfermodeCoeff2Blend)); 155 GR_STATIC_ASSERT(kGrBlendCoeffCnt == SK_ARRAY_COUNT(gXfermodeCoeff2Blend));
156 } 156 }
157 157
158 /////////////////////////////////////////////////////////////////////////////// 158 ///////////////////////////////////////////////////////////////////////////////
159 159
160 GrGpu* GrGLGpu::Create(GrBackendContext backendContext, GrContext* context) {
161 SkAutoTUnref<const GrGLInterface> glInterface(
162 reinterpret_cast<const GrGLInterface*>(backendContext));
163 if (!glInterface) {
164 glInterface.reset(GrGLDefaultInterface());
165 } else {
166 glInterface->ref();
167 }
168 if (!glInterface) {
169 return NULL;
170 }
171 GrGLContext* glContext = GrGLContext::Create(glInterface);
172 if (glContext) {
173 return SkNEW_ARGS(GrGLGpu, (glContext, context));
174 }
175 return NULL;
176 }
177
160 static bool gPrintStartupSpew; 178 static bool gPrintStartupSpew;
161 179
162 GrGLGpu::GrGLGpu(const GrGLContext& ctx, GrContext* context) 180 GrGLGpu::GrGLGpu(GrGLContext* ctx, GrContext* context)
163 : GrGpu(context) 181 : GrGpu(context)
164 , fGLContext(ctx) { 182 , fGLContext(ctx) {
165 183 SkASSERT(ctx);
166 SkASSERT(ctx.isInitialized()); 184 fCaps.reset(SkRef(ctx->caps()));
167 fCaps.reset(SkRef(ctx.caps()));
168 185
169 fHWBoundTextureUniqueIDs.reset(this->glCaps().maxFragmentTextureUnits()); 186 fHWBoundTextureUniqueIDs.reset(this->glCaps().maxFragmentTextureUnits());
170 187
171 GrGLClearErr(fGLContext.interface()); 188 GrGLClearErr(this->glInterface());
172 if (gPrintStartupSpew) { 189 if (gPrintStartupSpew) {
173 const GrGLubyte* vendor; 190 const GrGLubyte* vendor;
174 const GrGLubyte* renderer; 191 const GrGLubyte* renderer;
175 const GrGLubyte* version; 192 const GrGLubyte* version;
176 GL_CALL_RET(vendor, GetString(GR_GL_VENDOR)); 193 GL_CALL_RET(vendor, GetString(GR_GL_VENDOR));
177 GL_CALL_RET(renderer, GetString(GR_GL_RENDERER)); 194 GL_CALL_RET(renderer, GetString(GR_GL_RENDERER));
178 GL_CALL_RET(version, GetString(GR_GL_VERSION)); 195 GL_CALL_RET(version, GetString(GR_GL_VERSION));
179 SkDebugf("------------------------- create GrGLGpu %p --------------\n", 196 SkDebugf("------------------------- create GrGLGpu %p --------------\n",
180 this); 197 this);
181 SkDebugf("------ VENDOR %s\n", vendor); 198 SkDebugf("------ VENDOR %s\n", vendor);
182 SkDebugf("------ RENDERER %s\n", renderer); 199 SkDebugf("------ RENDERER %s\n", renderer);
183 SkDebugf("------ VERSION %s\n", version); 200 SkDebugf("------ VERSION %s\n", version);
184 SkDebugf("------ EXTENSIONS\n"); 201 SkDebugf("------ EXTENSIONS\n");
185 ctx.extensions().print(); 202 this->glContext().extensions().print();
186 SkDebugf("\n"); 203 SkDebugf("\n");
187 SkDebugf("%s", this->glCaps().dump().c_str()); 204 SkDebugf("%s", this->glCaps().dump().c_str());
188 } 205 }
189 206
190 fProgramCache = SkNEW_ARGS(ProgramCache, (this)); 207 fProgramCache = SkNEW_ARGS(ProgramCache, (this));
191 208
192 SkASSERT(this->glCaps().maxVertexAttributes() >= GrGeometryProcessor::kMaxVe rtexAttribs); 209 SkASSERT(this->glCaps().maxVertexAttributes() >= GrGeometryProcessor::kMaxVe rtexAttribs);
193 210
194 fLastSuccessfulStencilFmtIdx = 0; 211 fLastSuccessfulStencilFmtIdx = 0;
195 fHWProgramID = 0; 212 fHWProgramID = 0;
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 // Since ES doesn't support glPointSize at all we always use the VS to 341 // Since ES doesn't support glPointSize at all we always use the VS to
325 // set the point size 342 // set the point size
326 GL_CALL(Enable(GR_GL_VERTEX_PROGRAM_POINT_SIZE)); 343 GL_CALL(Enable(GR_GL_VERTEX_PROGRAM_POINT_SIZE));
327 344
328 // We should set glPolygonMode(FRONT_AND_BACK,FILL) here, too. It is n't 345 // We should set glPolygonMode(FRONT_AND_BACK,FILL) here, too. It is n't
329 // currently part of our gl interface. There are probably others as 346 // currently part of our gl interface. There are probably others as
330 // well. 347 // well.
331 } 348 }
332 349
333 if (kGLES_GrGLStandard == this->glStandard() && 350 if (kGLES_GrGLStandard == this->glStandard() &&
334 fGLContext.hasExtension("GL_ARM_shader_framebuffer_fetch")) { 351 this->hasExtension("GL_ARM_shader_framebuffer_fetch")) {
335 // The arm extension requires specifically enabling MSAA fetching pe r sample. 352 // The arm extension requires specifically enabling MSAA fetching pe r sample.
336 // On some devices this may have a perf hit. Also multiple render t argets are disabled 353 // On some devices this may have a perf hit. Also multiple render t argets are disabled
337 GL_CALL(Enable(GR_GL_FETCH_PER_SAMPLE_ARM)); 354 GL_CALL(Enable(GR_GL_FETCH_PER_SAMPLE_ARM));
338 } 355 }
339 fHWWriteToColor = kUnknown_TriState; 356 fHWWriteToColor = kUnknown_TriState;
340 // we only ever use lines in hairline mode 357 // we only ever use lines in hairline mode
341 GL_CALL(LineWidth(1)); 358 GL_CALL(LineWidth(1));
342 } 359 }
343 360
344 if (resetBits & kMSAAEnable_GrGLBackendState) { 361 if (resetBits & kMSAAEnable_GrGLBackendState) {
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
805 left, top, 822 left, top,
806 width, height, 823 width, height,
807 internalFormat, 824 internalFormat,
808 SkToInt(dataSize), 825 SkToInt(dataSize),
809 data)); 826 data));
810 } 827 }
811 828
812 return true; 829 return true;
813 } 830 }
814 831
815 static bool renderbuffer_storage_msaa(GrGLContext& ctx, 832 static bool renderbuffer_storage_msaa(const GrGLContext& ctx,
816 int sampleCount, 833 int sampleCount,
817 GrGLenum format, 834 GrGLenum format,
818 int width, int height) { 835 int width, int height) {
819 CLEAR_ERROR_BEFORE_ALLOC(ctx.interface()); 836 CLEAR_ERROR_BEFORE_ALLOC(ctx.interface());
820 SkASSERT(GrGLCaps::kNone_MSFBOType != ctx.caps()->msFBOType()); 837 SkASSERT(GrGLCaps::kNone_MSFBOType != ctx.caps()->msFBOType());
821 switch (ctx.caps()->msFBOType()) { 838 switch (ctx.caps()->msFBOType()) {
822 case GrGLCaps::kDesktop_ARB_MSFBOType: 839 case GrGLCaps::kDesktop_ARB_MSFBOType:
823 case GrGLCaps::kDesktop_EXT_MSFBOType: 840 case GrGLCaps::kDesktop_EXT_MSFBOType:
824 case GrGLCaps::kES_3_0_MSFBOType: 841 case GrGLCaps::kES_3_0_MSFBOType:
825 GL_ALLOC_CALL(ctx.interface(), 842 GL_ALLOC_CALL(ctx.interface(),
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 } 909 }
893 } else { 910 } else {
894 idDesc->fRTFBOID = idDesc->fTexFBOID; 911 idDesc->fRTFBOID = idDesc->fTexFBOID;
895 } 912 }
896 913
897 // below here we may bind the FBO 914 // below here we may bind the FBO
898 fHWBoundRenderTargetUniqueID = SK_InvalidUniqueID; 915 fHWBoundRenderTargetUniqueID = SK_InvalidUniqueID;
899 if (idDesc->fRTFBOID != idDesc->fTexFBOID) { 916 if (idDesc->fRTFBOID != idDesc->fTexFBOID) {
900 SkASSERT(desc.fSampleCnt > 0); 917 SkASSERT(desc.fSampleCnt > 0);
901 GL_CALL(BindRenderbuffer(GR_GL_RENDERBUFFER, idDesc->fMSColorRenderbuffe rID)); 918 GL_CALL(BindRenderbuffer(GR_GL_RENDERBUFFER, idDesc->fMSColorRenderbuffe rID));
902 if (!renderbuffer_storage_msaa(fGLContext, 919 if (!renderbuffer_storage_msaa(*fGLContext,
903 desc.fSampleCnt, 920 desc.fSampleCnt,
904 msColorFormat, 921 msColorFormat,
905 desc.fWidth, desc.fHeight)) { 922 desc.fWidth, desc.fHeight)) {
906 goto FAILED; 923 goto FAILED;
907 } 924 }
908 fStats.incRenderTargetBinds(); 925 fStats.incRenderTargetBinds();
909 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, idDesc->fRTFBOID)); 926 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, idDesc->fRTFBOID));
910 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, 927 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER,
911 GR_GL_COLOR_ATTACHMENT0, 928 GR_GL_COLOR_ATTACHMENT0,
912 GR_GL_RENDERBUFFER, 929 GR_GL_RENDERBUFFER,
913 idDesc->fMSColorRenderbufferID)); 930 idDesc->fMSColorRenderbufferID));
914 if ((desc.fFlags & kCheckAllocation_GrSurfaceFlag) || 931 if ((desc.fFlags & kCheckAllocation_GrSurfaceFlag) ||
915 !this->glCaps().isConfigVerifiedColorAttachment(desc.fConfig)) { 932 !this->glCaps().isConfigVerifiedColorAttachment(desc.fConfig)) {
916 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER)); 933 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER));
917 if (status != GR_GL_FRAMEBUFFER_COMPLETE) { 934 if (status != GR_GL_FRAMEBUFFER_COMPLETE) {
918 goto FAILED; 935 goto FAILED;
919 } 936 }
920 fGLContext.caps()->markConfigAsValidColorAttachment(desc.fConfig); 937 fGLContext->caps()->markConfigAsValidColorAttachment(desc.fConfig);
921 } 938 }
922 } 939 }
923 fStats.incRenderTargetBinds(); 940 fStats.incRenderTargetBinds();
924 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, idDesc->fTexFBOID)); 941 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, idDesc->fTexFBOID));
925 942
926 if (this->glCaps().usesImplicitMSAAResolve() && desc.fSampleCnt > 0) { 943 if (this->glCaps().usesImplicitMSAAResolve() && desc.fSampleCnt > 0) {
927 GL_CALL(FramebufferTexture2DMultisample(GR_GL_FRAMEBUFFER, 944 GL_CALL(FramebufferTexture2DMultisample(GR_GL_FRAMEBUFFER,
928 GR_GL_COLOR_ATTACHMENT0, 945 GR_GL_COLOR_ATTACHMENT0,
929 GR_GL_TEXTURE_2D, 946 GR_GL_TEXTURE_2D,
930 texID, 0, desc.fSampleCnt)); 947 texID, 0, desc.fSampleCnt));
931 } else { 948 } else {
932 GL_CALL(FramebufferTexture2D(GR_GL_FRAMEBUFFER, 949 GL_CALL(FramebufferTexture2D(GR_GL_FRAMEBUFFER,
933 GR_GL_COLOR_ATTACHMENT0, 950 GR_GL_COLOR_ATTACHMENT0,
934 GR_GL_TEXTURE_2D, 951 GR_GL_TEXTURE_2D,
935 texID, 0)); 952 texID, 0));
936 } 953 }
937 if ((desc.fFlags & kCheckAllocation_GrSurfaceFlag) || 954 if ((desc.fFlags & kCheckAllocation_GrSurfaceFlag) ||
938 !this->glCaps().isConfigVerifiedColorAttachment(desc.fConfig)) { 955 !this->glCaps().isConfigVerifiedColorAttachment(desc.fConfig)) {
939 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER)); 956 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER));
940 if (status != GR_GL_FRAMEBUFFER_COMPLETE) { 957 if (status != GR_GL_FRAMEBUFFER_COMPLETE) {
941 goto FAILED; 958 goto FAILED;
942 } 959 }
943 fGLContext.caps()->markConfigAsValidColorAttachment(desc.fConfig); 960 fGLContext->caps()->markConfigAsValidColorAttachment(desc.fConfig);
944 } 961 }
945 962
946 return true; 963 return true;
947 964
948 FAILED: 965 FAILED:
949 if (idDesc->fMSColorRenderbufferID) { 966 if (idDesc->fMSColorRenderbufferID) {
950 GL_CALL(DeleteRenderbuffers(1, &idDesc->fMSColorRenderbufferID)); 967 GL_CALL(DeleteRenderbuffers(1, &idDesc->fMSColorRenderbufferID));
951 } 968 }
952 if (idDesc->fRTFBOID != idDesc->fTexFBOID) { 969 if (idDesc->fRTFBOID != idDesc->fTexFBOID) {
953 GL_CALL(DeleteFramebuffers(1, &idDesc->fRTFBOID)); 970 GL_CALL(DeleteFramebuffers(1, &idDesc->fRTFBOID));
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 // we start with the last stencil format that succeeded in hopes 1172 // we start with the last stencil format that succeeded in hopes
1156 // that we won't go through this loop more than once after the 1173 // that we won't go through this loop more than once after the
1157 // first (painful) stencil creation. 1174 // first (painful) stencil creation.
1158 int sIdx = (i + fLastSuccessfulStencilFmtIdx) % stencilFmtCnt; 1175 int sIdx = (i + fLastSuccessfulStencilFmtIdx) % stencilFmtCnt;
1159 const GrGLCaps::StencilFormat& sFmt = this->glCaps().stencilFormats()[sI dx]; 1176 const GrGLCaps::StencilFormat& sFmt = this->glCaps().stencilFormats()[sI dx];
1160 CLEAR_ERROR_BEFORE_ALLOC(this->glInterface()); 1177 CLEAR_ERROR_BEFORE_ALLOC(this->glInterface());
1161 // we do this "if" so that we don't call the multisample 1178 // we do this "if" so that we don't call the multisample
1162 // version on a GL that doesn't have an MSAA extension. 1179 // version on a GL that doesn't have an MSAA extension.
1163 bool created; 1180 bool created;
1164 if (samples > 0) { 1181 if (samples > 0) {
1165 created = renderbuffer_storage_msaa(fGLContext, 1182 created = renderbuffer_storage_msaa(*fGLContext,
1166 samples, 1183 samples,
1167 sFmt.fInternalFormat, 1184 sFmt.fInternalFormat,
1168 width, height); 1185 width, height);
1169 } else { 1186 } else {
1170 GL_ALLOC_CALL(this->glInterface(), RenderbufferStorage(GR_GL_RENDERB UFFER, 1187 GL_ALLOC_CALL(this->glInterface(), RenderbufferStorage(GR_GL_RENDERB UFFER,
1171 sFmt.fInterna lFormat, 1188 sFmt.fInterna lFormat,
1172 width, height )); 1189 width, height ));
1173 created = (GR_GL_NO_ERROR == check_alloc_error(rt->desc(), this->glI nterface())); 1190 created = (GR_GL_NO_ERROR == check_alloc_error(rt->desc(), this->glI nterface()));
1174 } 1191 }
1175 if (created) { 1192 if (created) {
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1296 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, 1313 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER,
1297 GR_GL_STENCIL_ATTACHMENT, 1314 GR_GL_STENCIL_ATTACHMENT,
1298 GR_GL_RENDERBUFFER, 0)); 1315 GR_GL_RENDERBUFFER, 0));
1299 if (glsb->format().fPacked) { 1316 if (glsb->format().fPacked) {
1300 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, 1317 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER,
1301 GR_GL_DEPTH_ATTACHMENT, 1318 GR_GL_DEPTH_ATTACHMENT,
1302 GR_GL_RENDERBUFFER, 0)); 1319 GR_GL_RENDERBUFFER, 0));
1303 } 1320 }
1304 return false; 1321 return false;
1305 } else { 1322 } else {
1306 fGLContext.caps()->markColorConfigAndStencilFormatAsVerified( 1323 fGLContext->caps()->markColorConfigAndStencilFormatAsVerified(
1307 rt->config(), 1324 rt->config(),
1308 glsb->format()); 1325 glsb->format());
1309 } 1326 }
1310 } 1327 }
1311 return true; 1328 return true;
1312 } 1329 }
1313 } 1330 }
1314 1331
1315 //////////////////////////////////////////////////////////////////////////////// 1332 ////////////////////////////////////////////////////////////////////////////////
1316 1333
(...skipping 1556 matching lines...) Expand 10 before | Expand all | Expand 10 after
2873 this->setVertexArrayID(gpu, 0); 2890 this->setVertexArrayID(gpu, 0);
2874 } 2891 }
2875 int attrCount = gpu->glCaps().maxVertexAttributes(); 2892 int attrCount = gpu->glCaps().maxVertexAttributes();
2876 if (fDefaultVertexArrayAttribState.count() != attrCount) { 2893 if (fDefaultVertexArrayAttribState.count() != attrCount) {
2877 fDefaultVertexArrayAttribState.resize(attrCount); 2894 fDefaultVertexArrayAttribState.resize(attrCount);
2878 } 2895 }
2879 attribState = &fDefaultVertexArrayAttribState; 2896 attribState = &fDefaultVertexArrayAttribState;
2880 } 2897 }
2881 return attribState; 2898 return attribState;
2882 } 2899 }
OLDNEW
« src/effects/gradients/SkSweepGradient.cpp ('K') | « src/gpu/gl/GrGLGpu.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698