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

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

Issue 1684413003: Implement support for using GL ES 3.0 with command buffer (Closed) Base URL: https://skia.googlesource.com/skia.git@no-texture-rectangle-gles
Patch Set: Created 4 years, 10 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 "gl/GrGLInterface.h" 9 #include "gl/GrGLInterface.h"
10 #include "gl/GrGLExtensions.h" 10 #include "gl/GrGLExtensions.h"
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 nullptr == fFunctions.fGenFramebuffers || 209 nullptr == fFunctions.fGenFramebuffers ||
210 nullptr == fFunctions.fGenRenderbuffers || 210 nullptr == fFunctions.fGenRenderbuffers ||
211 nullptr == fFunctions.fRenderbufferStorage) { 211 nullptr == fFunctions.fRenderbufferStorage) {
212 RETURN_FALSE_INTERFACE 212 RETURN_FALSE_INTERFACE
213 } 213 }
214 214
215 GrGLVersion glVer = GrGLGetVersion(this); 215 GrGLVersion glVer = GrGLGetVersion(this);
216 if (GR_GL_INVALID_VER == glVer) { 216 if (GR_GL_INVALID_VER == glVer) {
217 RETURN_FALSE_INTERFACE 217 RETURN_FALSE_INTERFACE
218 } 218 }
219 // TODO: Remove this once command buffer implements full ES3.
220 GrGLDriver glDriver = kUnknown_GrGLDriver;
bsalomon 2016/02/12 14:03:27 Similar request to above, instead of storing a dri
Kimmo Kinnunen 2016/02/15 08:10:14 Done.
221 if (kGLES_GrGLStandard == fStandard) {
222 const GrGLubyte* rendererUByte;
223 GR_GL_CALL_RET(this, rendererUByte, GetString(GR_GL_RENDERER));
224 const char* renderer = reinterpret_cast<const char*>(rendererUByte);
225 if (0 == strcmp(renderer, "Chromium")) {
226 glDriver = kChromium_GrGLDriver;
227 }
228 }
219 229
220 // Now check that baseline ES/Desktop fns not covered above are present 230 // Now check that baseline ES/Desktop fns not covered above are present
221 // and that we have fn pointers for any advertised fExtensions that we will 231 // and that we have fn pointers for any advertised fExtensions that we will
222 // try to use. 232 // try to use.
223 233
224 // these functions are part of ES2, we assume they are available 234 // these functions are part of ES2, we assume they are available
225 // On the desktop we assume they are available if the extension 235 // On the desktop we assume they are available if the extension
226 // is present or GL version is high enough. 236 // is present or GL version is high enough.
227 if (kGLES_GrGLStandard == fStandard) { 237 if (kGLES_GrGLStandard == fStandard) {
228 if (nullptr == fFunctions.fStencilFuncSeparate || 238 if (nullptr == fFunctions.fStencilFuncSeparate ||
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 // There is a desktop ARB extension and an ES+desktop EXT extension 309 // There is a desktop ARB extension and an ES+desktop EXT extension
300 if (kGL_GrGLStandard == fStandard) { 310 if (kGL_GrGLStandard == fStandard) {
301 if (glVer >= GR_GL_VER(4,2) || 311 if (glVer >= GR_GL_VER(4,2) ||
302 fExtensions.has("GL_ARB_texture_storage") || 312 fExtensions.has("GL_ARB_texture_storage") ||
303 fExtensions.has("GL_EXT_texture_storage")) { 313 fExtensions.has("GL_EXT_texture_storage")) {
304 if (nullptr == fFunctions.fTexStorage2D) { 314 if (nullptr == fFunctions.fTexStorage2D) {
305 RETURN_FALSE_INTERFACE 315 RETURN_FALSE_INTERFACE
306 } 316 }
307 } 317 }
308 } else if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_EXT_texture_storag e")) { 318 } else if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_EXT_texture_storag e")) {
309 if (nullptr == fFunctions.fTexStorage2D) { 319 // TODO: remove once command buffer implements full ES3.
310 RETURN_FALSE_INTERFACE 320 if (kChromium_GrGLDriver != glDriver) {
321 if (nullptr == fFunctions.fTexStorage2D) {
322 RETURN_FALSE_INTERFACE
323 }
311 } 324 }
312 } 325 }
313 326
314 // glTextureBarrier is part of desktop 4.5. There are also ARB and NV extens ions. 327 // glTextureBarrier is part of desktop 4.5. There are also ARB and NV extens ions.
315 if (kGL_GrGLStandard == fStandard) { 328 if (kGL_GrGLStandard == fStandard) {
316 if (glVer >= GR_GL_VER(4,5) || 329 if (glVer >= GR_GL_VER(4,5) ||
317 fExtensions.has("GL_ARB_texture_barrier") || 330 fExtensions.has("GL_ARB_texture_barrier") ||
318 fExtensions.has("GL_NV_texture_barrier")) { 331 fExtensions.has("GL_NV_texture_barrier")) {
319 if (nullptr == fFunctions.fTextureBarrier) { 332 if (nullptr == fFunctions.fTextureBarrier) {
320 RETURN_FALSE_INTERFACE 333 RETURN_FALSE_INTERFACE
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 nullptr == fFunctions.fUnmapBufferSubData || 486 nullptr == fFunctions.fUnmapBufferSubData ||
474 nullptr == fFunctions.fUnmapTexSubImage2D) { 487 nullptr == fFunctions.fUnmapTexSubImage2D) {
475 RETURN_FALSE_INTERFACE; 488 RETURN_FALSE_INTERFACE;
476 } 489 }
477 } 490 }
478 491
479 // These functions are added to the 3.0 version of both GLES and GL. 492 // These functions are added to the 3.0 version of both GLES and GL.
480 if (glVer >= GR_GL_VER(3,0) || 493 if (glVer >= GR_GL_VER(3,0) ||
481 (kGLES_GrGLStandard == fStandard && fExtensions.has("GL_EXT_map_buffer_r ange")) || 494 (kGLES_GrGLStandard == fStandard && fExtensions.has("GL_EXT_map_buffer_r ange")) ||
482 (kGL_GrGLStandard == fStandard && fExtensions.has("GL_ARB_map_buffer_ran ge"))) { 495 (kGL_GrGLStandard == fStandard && fExtensions.has("GL_ARB_map_buffer_ran ge"))) {
483 if (nullptr == fFunctions.fMapBufferRange || 496 // TODO: remove once command buffer implements full ES3.
484 nullptr == fFunctions.fFlushMappedBufferRange) { 497 if (kChromium_GrGLDriver != glDriver) {
485 RETURN_FALSE_INTERFACE; 498 if (nullptr == fFunctions.fMapBufferRange ||
499 nullptr == fFunctions.fFlushMappedBufferRange) {
500 RETURN_FALSE_INTERFACE;
501 }
486 } 502 }
487 } 503 }
488 504
489 if ((kGL_GrGLStandard == fStandard && 505 if ((kGL_GrGLStandard == fStandard &&
490 (glVer >= GR_GL_VER(4,3) || fExtensions.has("GL_ARB_program_interface_q uery"))) || 506 (glVer >= GR_GL_VER(4,3) || fExtensions.has("GL_ARB_program_interface_q uery"))) ||
491 (kGLES_GrGLStandard == fStandard && glVer >= GR_GL_VER(3,1))) { 507 (kGLES_GrGLStandard == fStandard && glVer >= GR_GL_VER(3,1))) {
492 if (nullptr == fFunctions.fGetProgramResourceLocation) { 508 if (nullptr == fFunctions.fGetProgramResourceLocation) {
493 RETURN_FALSE_INTERFACE 509 RETURN_FALSE_INTERFACE
494 } 510 }
495 } 511 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 } 571 }
556 } 572 }
557 573
558 if (kGL_GrGLStandard == fStandard) { 574 if (kGL_GrGLStandard == fStandard) {
559 if (glVer >= GR_GL_VER(3,1) || 575 if (glVer >= GR_GL_VER(3,1) ||
560 fExtensions.has("GL_EXT_draw_instanced") || fExtensions.has("GL_ARB_ draw_instanced")) { 576 fExtensions.has("GL_EXT_draw_instanced") || fExtensions.has("GL_ARB_ draw_instanced")) {
561 if (nullptr == fFunctions.fDrawArraysInstanced || 577 if (nullptr == fFunctions.fDrawArraysInstanced ||
562 nullptr == fFunctions.fDrawElementsInstanced) { 578 nullptr == fFunctions.fDrawElementsInstanced) {
563 RETURN_FALSE_INTERFACE 579 RETURN_FALSE_INTERFACE
564 } 580 }
565 } 581 }
566 } else if (kGLES_GrGLStandard == fStandard) { 582 } else if (kGLES_GrGLStandard == fStandard) {
567 if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_EXT_draw_instanced")) { 583 // TODO: remove once command buffer implements full ES3.
568 if (nullptr == fFunctions.fDrawArraysInstanced || 584 if (kChromium_GrGLDriver != glDriver) {
569 nullptr == fFunctions.fDrawElementsInstanced) { 585 if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_EXT_draw_instance d")) {
570 RETURN_FALSE_INTERFACE 586 if (nullptr == fFunctions.fDrawArraysInstanced ||
587 nullptr == fFunctions.fDrawElementsInstanced) {
588 RETURN_FALSE_INTERFACE
589 }
571 } 590 }
572 } 591 }
573 } 592 }
574 593
575 if (kGL_GrGLStandard == fStandard) { 594 if (kGL_GrGLStandard == fStandard) {
576 if (glVer >= GR_GL_VER(3,2) || fExtensions.has("GL_ARB_instanced_arrays" )) { 595 if (glVer >= GR_GL_VER(3,2) || fExtensions.has("GL_ARB_instanced_arrays" )) {
577 if (nullptr == fFunctions.fVertexAttribDivisor) { 596 if (nullptr == fFunctions.fVertexAttribDivisor) {
578 RETURN_FALSE_INTERFACE 597 RETURN_FALSE_INTERFACE
579 } 598 }
580 } 599 }
581 } else if (kGLES_GrGLStandard == fStandard) { 600 } else if (kGLES_GrGLStandard == fStandard) {
582 if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_EXT_instanced_arrays" )) { 601 // TODO: remove once command buffer implements full ES3.
583 if (nullptr == fFunctions.fVertexAttribDivisor) { 602 if (kChromium_GrGLDriver != glDriver) {
584 RETURN_FALSE_INTERFACE 603 if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_EXT_instanced_arr ays")) {
604 if (nullptr == fFunctions.fVertexAttribDivisor) {
605 RETURN_FALSE_INTERFACE
606 }
585 } 607 }
586 } 608 }
587 } 609 }
588 610
589 if ((kGL_GrGLStandard == fStandard && glVer >= GR_GL_VER(4,3)) || 611 if ((kGL_GrGLStandard == fStandard && glVer >= GR_GL_VER(4,3)) ||
590 (kGLES_GrGLStandard == fStandard && glVer >= GR_GL_VER(3,1))) { 612 (kGLES_GrGLStandard == fStandard && glVer >= GR_GL_VER(3,1))) {
591 if (NULL == fFunctions.fDrawArraysIndirect || 613 if (NULL == fFunctions.fDrawArraysIndirect ||
592 NULL == fFunctions.fDrawElementsIndirect) { 614 NULL == fFunctions.fDrawElementsIndirect) {
593 RETURN_FALSE_INTERFACE 615 RETURN_FALSE_INTERFACE
594 } 616 }
595 } 617 }
596 618
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 777
756 if (fExtensions.has("EGL_KHR_image") || fExtensions.has("EGL_KHR_image_base" )) { 778 if (fExtensions.has("EGL_KHR_image") || fExtensions.has("EGL_KHR_image_base" )) {
757 if (nullptr == fFunctions.fEGLCreateImage || 779 if (nullptr == fFunctions.fEGLCreateImage ||
758 nullptr == fFunctions.fEGLDestroyImage) { 780 nullptr == fFunctions.fEGLDestroyImage) {
759 RETURN_FALSE_INTERFACE 781 RETURN_FALSE_INTERFACE
760 } 782 }
761 } 783 }
762 784
763 return true; 785 return true;
764 } 786 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698