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

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 511001: Adds a GLMock object so we can check the code is... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <vector> 5 #include <vector>
6 #include <string> 6 #include <string>
7 #include <map> 7 #include <map>
8 #include <build/build_config.h> 8 #include <build/build_config.h>
9 #include "base/scoped_ptr.h" 9 #include "base/scoped_ptr.h"
10 #define GLES2_GPU_SERVICE 1 10 #define GLES2_GPU_SERVICE 1
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 case GLErrorBit::kInvalidFrameBufferOperation: 133 case GLErrorBit::kInvalidFrameBufferOperation:
134 return GL_INVALID_FRAMEBUFFER_OPERATION; 134 return GL_INVALID_FRAMEBUFFER_OPERATION;
135 default: 135 default:
136 DCHECK(false); 136 DCHECK(false);
137 return GL_NO_ERROR; 137 return GL_NO_ERROR;
138 } 138 }
139 } 139 }
140 140
141 } // anonymous namespace. 141 } // anonymous namespace.
142 142
143 #if defined(OS_LINUX) 143 #if defined(UNIT_TEST)
144 GLES2Decoder::GLES2Decoder() {
145 #elif defined(OS_LINUX)
144 GLES2Decoder::GLES2Decoder() 146 GLES2Decoder::GLES2Decoder()
145 : debug_(false), 147 : debug_(false),
146 window_(NULL) { 148 window_(NULL) {
147 #elif defined(OS_WIN) 149 #elif defined(OS_WIN)
148 GLES2Decoder::GLES2Decoder() 150 GLES2Decoder::GLES2Decoder()
149 : debug_(false), 151 : debug_(false),
150 hwnd_(NULL) { 152 hwnd_(NULL) {
151 #else 153 #else
152 GLES2Decoder::GLES2Decoder() { 154 GLES2Decoder::GLES2Decoder() {
153 #endif 155 #endif
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 BufferInfoMap buffer_infos_; 512 BufferInfoMap buffer_infos_;
511 513
512 // Info for each "successfully linked" program by service side program Id. 514 // Info for each "successfully linked" program by service side program Id.
513 // TODO(gman): Choose a faster container. 515 // TODO(gman): Choose a faster container.
514 typedef std::map<GLuint, ProgramInfo> ProgramInfoMap; 516 typedef std::map<GLuint, ProgramInfo> ProgramInfoMap;
515 ProgramInfoMap program_infos_; 517 ProgramInfoMap program_infos_;
516 518
517 // The program in current use through glUseProgram. 519 // The program in current use through glUseProgram.
518 ProgramInfo* current_program_info_; 520 ProgramInfo* current_program_info_;
519 521
520 #if defined(OS_WIN) 522 #if defined(UNIT_TEST)
523 #elif defined(OS_WIN)
521 HDC device_context_; 524 HDC device_context_;
522 HGLRC gl_context_; 525 HGLRC gl_context_;
523 #endif 526 #endif
524 527
525 bool anti_aliased_; 528 bool anti_aliased_;
526 529
527 DISALLOW_COPY_AND_ASSIGN(GLES2DecoderImpl); 530 DISALLOW_COPY_AND_ASSIGN(GLES2DecoderImpl);
528 }; 531 };
529 532
530 GLES2Decoder* GLES2Decoder::Create() { 533 GLES2Decoder* GLES2Decoder::Create() {
531 return new GLES2DecoderImpl(); 534 return new GLES2DecoderImpl();
532 } 535 }
533 536
534 GLES2DecoderImpl::GLES2DecoderImpl() 537 GLES2DecoderImpl::GLES2DecoderImpl()
535 : GLES2Decoder(), 538 : GLES2Decoder(),
536 error_bits_(0), 539 error_bits_(0),
537 util_(0), // TODO(gman): Set to actual num compress texture formats. 540 util_(0), // TODO(gman): Set to actual num compress texture formats.
538 pack_alignment_(4), 541 pack_alignment_(4),
539 unpack_alignment_(4), 542 unpack_alignment_(4),
540 bound_array_buffer_(0), 543 bound_array_buffer_(0),
541 bound_element_array_buffer_(0), 544 bound_element_array_buffer_(0),
542 max_vertex_attribs_(0), 545 max_vertex_attribs_(0),
543 current_program_info_(NULL), 546 current_program_info_(NULL),
544 #ifdef OS_WIN 547 #if defined(UNIT_TEST)
548 #elif defined(OS_WIN)
545 device_context_(NULL), 549 device_context_(NULL),
546 gl_context_(NULL), 550 gl_context_(NULL),
547 #endif 551 #endif
548 anti_aliased_(false) { 552 anti_aliased_(false) {
549 } 553 }
550 554
551 bool GLES2DecoderImpl::Initialize() { 555 bool GLES2DecoderImpl::Initialize() {
552 if (!InitPlatformSpecific()) 556 if (!InitPlatformSpecific())
553 return false; 557 return false;
554 if (!InitGlew()) 558 if (!InitGlew())
555 return false; 559 return false;
556 CHECK_GL_ERROR(); 560 CHECK_GL_ERROR();
557 561
558 // Lookup GL things we need to know. 562 // Lookup GL things we need to know.
559 GLint value; 563 GLint value;
560 glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &value); 564 glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &value);
561 max_vertex_attribs_ = value; 565 max_vertex_attribs_ = value;
562 566
563 DCHECK_GE(max_vertex_attribs_, 8u); 567 DCHECK_GE(max_vertex_attribs_, 8u);
564 568
565 vertex_attrib_infos_.reset(new VertexAttribInfo[max_vertex_attribs_]); 569 vertex_attrib_infos_.reset(new VertexAttribInfo[max_vertex_attribs_]);
566 memset(vertex_attrib_infos_.get(), 0, 570 memset(vertex_attrib_infos_.get(), 0,
567 sizeof(vertex_attrib_infos_[0]) * max_vertex_attribs_); 571 sizeof(vertex_attrib_infos_[0]) * max_vertex_attribs_);
568 572
569 //glBindFramebuffer(0, 0); 573 //glBindFramebuffer(0, 0);
570 return true; 574 return true;
571 } 575 }
572 576
573 #if defined(OS_WIN)
574 namespace { 577 namespace {
575 578
579 #if defined(UNIT_TEST)
580 #elif defined(OS_WIN)
581
576 const PIXELFORMATDESCRIPTOR kPixelFormatDescriptor = { 582 const PIXELFORMATDESCRIPTOR kPixelFormatDescriptor = {
577 sizeof(kPixelFormatDescriptor), // Size of structure. 583 sizeof(kPixelFormatDescriptor), // Size of structure.
578 1, // Default version. 584 1, // Default version.
579 PFD_DRAW_TO_WINDOW | // Window drawing support. 585 PFD_DRAW_TO_WINDOW | // Window drawing support.
580 PFD_SUPPORT_OPENGL | // OpenGL support. 586 PFD_SUPPORT_OPENGL | // OpenGL support.
581 PFD_DOUBLEBUFFER, // Double buffering support (not stereo). 587 PFD_DOUBLEBUFFER, // Double buffering support (not stereo).
582 PFD_TYPE_RGBA, // RGBA color mode (not indexed). 588 PFD_TYPE_RGBA, // RGBA color mode (not indexed).
583 24, // 24 bit color mode. 589 24, // 24 bit color mode.
584 0, 0, 0, 0, 0, 0, // Don't set RGB bits & shifts. 590 0, 0, 0, 0, 0, 0, // Don't set RGB bits & shifts.
585 8, 0, // 8 bit alpha 591 8, 0, // 8 bit alpha
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 738
733 ::wglMakeCurrent(intermediate_dc, NULL); 739 ::wglMakeCurrent(intermediate_dc, NULL);
734 ::wglDeleteContext(gl_context); 740 ::wglDeleteContext(gl_context);
735 ::ReleaseDC(intermediate_window, intermediate_dc); 741 ::ReleaseDC(intermediate_window, intermediate_dc);
736 ::DestroyWindow(intermediate_window); 742 ::DestroyWindow(intermediate_window);
737 ::UnregisterClass(reinterpret_cast<wchar_t*>(class_registration), 743 ::UnregisterClass(reinterpret_cast<wchar_t*>(class_registration),
738 module_handle); 744 module_handle);
739 return true; 745 return true;
740 } 746 }
741 747
748 #endif // OS_WIN
749
742 // These commands convert from c calls to local os calls. 750 // These commands convert from c calls to local os calls.
743 void GLGenBuffersHelper( 751 void GLGenBuffersHelper(
744 GLES2DecoderImpl*, GLsizei n, GLuint* ids) { 752 GLES2DecoderImpl*, GLsizei n, GLuint* ids) {
745 glGenBuffersARB(n, ids); 753 glGenBuffersARB(n, ids);
746 } 754 }
747 755
748 void GLGenFramebuffersHelper( 756 void GLGenFramebuffersHelper(
749 GLES2DecoderImpl*, GLsizei n, GLuint* ids) { 757 GLES2DecoderImpl*, GLsizei n, GLuint* ids) {
750 glGenFramebuffersEXT(n, ids); 758 glGenFramebuffersEXT(n, ids);
751 } 759 }
(...skipping 25 matching lines...) Expand all
777 GLES2DecoderImpl*, GLsizei n, GLuint* ids) { 785 GLES2DecoderImpl*, GLsizei n, GLuint* ids) {
778 glDeleteRenderbuffersEXT(n, ids); 786 glDeleteRenderbuffersEXT(n, ids);
779 } 787 }
780 788
781 void GLDeleteTexturesHelper( 789 void GLDeleteTexturesHelper(
782 GLES2DecoderImpl*, GLsizei n, GLuint* ids) { 790 GLES2DecoderImpl*, GLsizei n, GLuint* ids) {
783 glDeleteTextures(n, ids); 791 glDeleteTextures(n, ids);
784 } 792 }
785 793
786 } // anonymous namespace 794 } // anonymous namespace
787 #endif
788 795
789 bool GLES2DecoderImpl::RegisterObjects( 796 bool GLES2DecoderImpl::RegisterObjects(
790 GLsizei n, const GLuint* client_ids, const GLuint* service_ids) { 797 GLsizei n, const GLuint* client_ids, const GLuint* service_ids) {
791 for (GLsizei ii = 0; ii < n; ++ii) { 798 for (GLsizei ii = 0; ii < n; ++ii) {
792 if (!id_map_.AddMapping(client_ids[ii], service_ids[ii])) { 799 if (!id_map_.AddMapping(client_ids[ii], service_ids[ii])) {
793 // TODO(gman): fail. 800 // TODO(gman): fail.
794 } 801 }
795 } 802 }
796 return true; 803 return true;
797 } 804 }
(...skipping 13 matching lines...) Expand all
811 void GLES2DecoderImpl::RemoveBufferInfo(GLuint buffer_id) { 818 void GLES2DecoderImpl::RemoveBufferInfo(GLuint buffer_id) {
812 for (GLuint ii = 0; ii < max_vertex_attribs_; ++ii) { 819 for (GLuint ii = 0; ii < max_vertex_attribs_; ++ii) {
813 if (vertex_attrib_infos_[ii].buffer() == buffer_id) { 820 if (vertex_attrib_infos_[ii].buffer() == buffer_id) {
814 vertex_attrib_infos_[ii].Clear(); 821 vertex_attrib_infos_[ii].Clear();
815 } 822 }
816 } 823 }
817 buffer_infos_.erase(buffer_id); 824 buffer_infos_.erase(buffer_id);
818 } 825 }
819 826
820 bool GLES2DecoderImpl::InitPlatformSpecific() { 827 bool GLES2DecoderImpl::InitPlatformSpecific() {
821 #if defined(OS_WIN) 828 #if defined(UNIT_TEST)
829 #elif defined(OS_WIN)
822 device_context_ = ::GetDC(hwnd()); 830 device_context_ = ::GetDC(hwnd());
823 831
824 int pixel_format; 832 int pixel_format;
825 833
826 if (!GetWindowsPixelFormat(hwnd(), 834 if (!GetWindowsPixelFormat(hwnd(),
827 anti_aliased_, 835 anti_aliased_,
828 &pixel_format)) { 836 &pixel_format)) {
829 DLOG(ERROR) << "Unable to determine optimal pixel format for GL context."; 837 DLOG(ERROR) << "Unable to determine optimal pixel format for GL context.";
830 return false; 838 return false;
831 } 839 }
(...skipping 19 matching lines...) Expand all
851 if (!window()->Initialize()) 859 if (!window()->Initialize())
852 return false; 860 return false;
853 if (!window()->MakeCurrent()) 861 if (!window()->MakeCurrent())
854 return false; 862 return false;
855 #endif 863 #endif
856 864
857 return true; 865 return true;
858 } 866 }
859 867
860 bool GLES2DecoderImpl::InitGlew() { 868 bool GLES2DecoderImpl::InitGlew() {
869 #if !defined(UNIT_TEST)
861 DLOG(INFO) << "Initializing GL and GLEW for GLES2Decoder."; 870 DLOG(INFO) << "Initializing GL and GLEW for GLES2Decoder.";
862 871
863 GLenum glew_error = glewInit(); 872 GLenum glew_error = glewInit();
864 if (glew_error != GLEW_OK) { 873 if (glew_error != GLEW_OK) {
865 DLOG(ERROR) << "Unable to initialise GLEW : " 874 DLOG(ERROR) << "Unable to initialise GLEW : "
866 << ::glewGetErrorString(glew_error); 875 << ::glewGetErrorString(glew_error);
867 return false; 876 return false;
868 } 877 }
869 878
870 // Check to see that we can use the OpenGL vertex attribute APIs 879 // Check to see that we can use the OpenGL vertex attribute APIs
(...skipping 29 matching lines...) Expand all
900 if (!GLEW_VERSION_1_4 && !GLEW_EXT_blend_func_separate) { 909 if (!GLEW_VERSION_1_4 && !GLEW_EXT_blend_func_separate) {
901 DLOG(ERROR) <<"Separate blend func extension missing."; 910 DLOG(ERROR) <<"Separate blend func extension missing.";
902 extensions_found = false; 911 extensions_found = false;
903 } 912 }
904 if (!GLEW_VERSION_2_0 && !GLEW_EXT_blend_equation_separate) { 913 if (!GLEW_VERSION_2_0 && !GLEW_EXT_blend_equation_separate) {
905 DLOG(ERROR) << "Separate blend function extension missing."; 914 DLOG(ERROR) << "Separate blend function extension missing.";
906 extensions_found = false; 915 extensions_found = false;
907 } 916 }
908 if (!extensions_found) 917 if (!extensions_found)
909 return false; 918 return false;
919 #endif
910 920
911 return true; 921 return true;
912 } 922 }
913 923
914 void GLES2DecoderImpl::Destroy() { 924 void GLES2DecoderImpl::Destroy() {
915 #ifdef OS_LINUX 925 #if defined(UNIT_TEST)
926 #elif defined(OS_LINUX)
916 DCHECK(window()); 927 DCHECK(window());
917 window()->Destroy(); 928 window()->Destroy();
918 #endif 929 #endif
919 } 930 }
920 931
921 const char* GLES2DecoderImpl::GetCommandName(unsigned int command_id) const { 932 const char* GLES2DecoderImpl::GetCommandName(unsigned int command_id) const {
922 if (command_id > kStartPoint && command_id < kNumCommands) { 933 if (command_id > kStartPoint && command_id < kNumCommands) {
923 return gles2::GetCommandName(static_cast<CommandId>(command_id)); 934 return gles2::GetCommandName(static_cast<CommandId>(command_id));
924 } 935 }
925 return GetCommonCommandName(static_cast<cmd::CommandId>(command_id)); 936 return GetCommonCommandName(static_cast<cmd::CommandId>(command_id));
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
1066 RemoveProgramInfo(program); 1077 RemoveProgramInfo(program);
1067 SetGLError(error); 1078 SetGLError(error);
1068 } else { 1079 } else {
1069 UpdateProgramInfo(program); 1080 UpdateProgramInfo(program);
1070 } 1081 }
1071 }; 1082 };
1072 1083
1073 // NOTE: If you need to know the results of SwapBuffers (like losing 1084 // NOTE: If you need to know the results of SwapBuffers (like losing
1074 // the context) then add a new command. Do NOT make SwapBuffers synchronous. 1085 // the context) then add a new command. Do NOT make SwapBuffers synchronous.
1075 void GLES2DecoderImpl::DoSwapBuffers() { 1086 void GLES2DecoderImpl::DoSwapBuffers() {
1076 #ifdef OS_WIN 1087 #if defined(UNIT_TEST)
1088 #elif defined(OS_WIN)
1077 ::SwapBuffers(device_context_); 1089 ::SwapBuffers(device_context_);
1078 #endif 1090 #elif defined(OS_LINUX)
1079
1080 #ifdef OS_LINUX
1081 DCHECK(window()); 1091 DCHECK(window());
1082 window()->SwapBuffers(); 1092 window()->SwapBuffers();
1083 #endif 1093 #endif
1084 } 1094 }
1085 1095
1086 void GLES2DecoderImpl::DoUseProgram(GLuint program) { 1096 void GLES2DecoderImpl::DoUseProgram(GLuint program) {
1087 ProgramInfo* info = GetProgramInfo(program); 1097 ProgramInfo* info = GetProgramInfo(program);
1088 if (!info) { 1098 if (!info) {
1089 // Program was not linked successfully. (ie, glLinkProgram) 1099 // Program was not linked successfully. (ie, glLinkProgram)
1090 SetGLError(GL_INVALID_OPERATION); 1100 SetGLError(GL_INVALID_OPERATION);
(...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after
1706 } 1716 }
1707 1717
1708 // Include the auto-generated part of this file. We split this because it means 1718 // Include the auto-generated part of this file. We split this because it means
1709 // we can easily edit the non-auto generated parts right here in this file 1719 // we can easily edit the non-auto generated parts right here in this file
1710 // instead of having to edit some template or the code generator. 1720 // instead of having to edit some template or the code generator.
1711 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 1721 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
1712 1722
1713 } // namespace gles2 1723 } // namespace gles2
1714 } // namespace gpu 1724 } // namespace gpu
1715 1725
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gl_utils.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698