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 | 8 |
9 #include "GrGpuGL.h" | 9 #include "GrGpuGL.h" |
10 #include "GrGLNameAllocator.h" | 10 #include "GrGLNameAllocator.h" |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 const GrGLubyte* version; | 130 const GrGLubyte* version; |
131 GL_CALL_RET(vendor, GetString(GR_GL_VENDOR)); | 131 GL_CALL_RET(vendor, GetString(GR_GL_VENDOR)); |
132 GL_CALL_RET(renderer, GetString(GR_GL_RENDERER)); | 132 GL_CALL_RET(renderer, GetString(GR_GL_RENDERER)); |
133 GL_CALL_RET(version, GetString(GR_GL_VERSION)); | 133 GL_CALL_RET(version, GetString(GR_GL_VERSION)); |
134 GrPrintf("------------------------- create GrGpuGL %p --------------\n", | 134 GrPrintf("------------------------- create GrGpuGL %p --------------\n", |
135 this); | 135 this); |
136 GrPrintf("------ VENDOR %s\n", vendor); | 136 GrPrintf("------ VENDOR %s\n", vendor); |
137 GrPrintf("------ RENDERER %s\n", renderer); | 137 GrPrintf("------ RENDERER %s\n", renderer); |
138 GrPrintf("------ VERSION %s\n", version); | 138 GrPrintf("------ VERSION %s\n", version); |
139 GrPrintf("------ EXTENSIONS\n"); | 139 GrPrintf("------ EXTENSIONS\n"); |
140 #if 0 // TODO: Reenable this after GrGLInterface's extensions can be accessed s
afely. | 140 ctx.extensions().print(); |
141 ctx.extensions().print(); | |
142 #endif | |
143 GrPrintf("\n"); | 141 GrPrintf("\n"); |
144 GrPrintf(this->glCaps().dump().c_str()); | 142 GrPrintf(this->glCaps().dump().c_str()); |
145 } | 143 } |
146 | 144 |
147 fProgramCache = SkNEW_ARGS(ProgramCache, (this)); | 145 fProgramCache = SkNEW_ARGS(ProgramCache, (this)); |
148 | 146 |
149 SkASSERT(this->glCaps().maxVertexAttributes() >= GrDrawState::kMaxVertexAttr
ibCnt); | 147 SkASSERT(this->glCaps().maxVertexAttributes() >= GrDrawState::kMaxVertexAttr
ibCnt); |
150 | 148 |
151 fLastSuccessfulStencilFmtIdx = 0; | 149 fLastSuccessfulStencilFmtIdx = 0; |
152 fHWProgramID = 0; | 150 fHWProgramID = 0; |
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 | 565 |
568 if (useTexStorage && kGL_GrGLStandard == this->glStandard()) { | 566 if (useTexStorage && kGL_GrGLStandard == this->glStandard()) { |
569 // 565 is not a sized internal format on desktop GL. So on desktop with | 567 // 565 is not a sized internal format on desktop GL. So on desktop with |
570 // 565 we always use an unsized internal format to let the system pick | 568 // 565 we always use an unsized internal format to let the system pick |
571 // the best sized format to convert the 565 data to. Since TexStorage | 569 // the best sized format to convert the 565 data to. Since TexStorage |
572 // only allows sized internal formats we will instead use TexImage2D. | 570 // only allows sized internal formats we will instead use TexImage2D. |
573 useTexStorage = desc.fConfig != kRGB_565_GrPixelConfig; | 571 useTexStorage = desc.fConfig != kRGB_565_GrPixelConfig; |
574 } | 572 } |
575 | 573 |
576 GrGLenum internalFormat; | 574 GrGLenum internalFormat; |
577 GrGLenum externalFormat; | 575 GrGLenum externalFormat = 0x0; // suprress warning |
578 GrGLenum externalType; | 576 GrGLenum externalType = 0x0;// suprress warning |
| 577 |
579 // glTexStorage requires sized internal formats on both desktop and ES. ES2
requires an unsized | 578 // glTexStorage requires sized internal formats on both desktop and ES. ES2
requires an unsized |
580 // format for glTexImage, unlike ES3 and desktop. However, we allow the driv
er to decide the | 579 // format for glTexImage, unlike ES3 and desktop. However, we allow the driv
er to decide the |
581 // size of the internal format whenever possible and so only use a sized int
ernal format when | 580 // size of the internal format whenever possible and so only use a sized int
ernal format when |
582 // using texture storage. | 581 // using texture storage. |
583 if (!this->configToGLFormats(dataConfig, useTexStorage, &internalFormat, | 582 bool useSizedFormat = useTexStorage; |
| 583 // At least some versions of the desktop ES3 drivers for NVIDIA won't accept
GL_RED in |
| 584 // glTexImage2D for the internal format but will accept GL_R8. |
| 585 if (!useSizedFormat && kNVIDIA_GrGLVendor == this->glContext().vendor() && |
| 586 kGLES_GrGLStandard == this->glStandard() && this->glVersion() >= GR_GL_V
ER(3, 0)) { |
| 587 useSizedFormat = true; |
| 588 } |
| 589 if (!this->configToGLFormats(dataConfig, useSizedFormat, &internalFormat, |
584 &externalFormat, &externalType)) { | 590 &externalFormat, &externalType)) { |
585 return false; | 591 return false; |
586 } | 592 } |
587 | 593 |
588 if (!isNewTexture && GR_GL_PALETTE8_RGBA8 == internalFormat) { | 594 if (!isNewTexture && GR_GL_PALETTE8_RGBA8 == internalFormat) { |
589 // paletted textures cannot be updated | 595 // paletted textures cannot be updated |
590 return false; | 596 return false; |
591 } | 597 } |
592 | 598 |
593 /* | 599 /* |
(...skipping 2421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3015 this->setVertexArrayID(gpu, 0); | 3021 this->setVertexArrayID(gpu, 0); |
3016 } | 3022 } |
3017 int attrCount = gpu->glCaps().maxVertexAttributes(); | 3023 int attrCount = gpu->glCaps().maxVertexAttributes(); |
3018 if (fDefaultVertexArrayAttribState.count() != attrCount) { | 3024 if (fDefaultVertexArrayAttribState.count() != attrCount) { |
3019 fDefaultVertexArrayAttribState.resize(attrCount); | 3025 fDefaultVertexArrayAttribState.resize(attrCount); |
3020 } | 3026 } |
3021 attribState = &fDefaultVertexArrayAttribState; | 3027 attribState = &fDefaultVertexArrayAttribState; |
3022 } | 3028 } |
3023 return attribState; | 3029 return attribState; |
3024 } | 3030 } |
OLD | NEW |