1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // This file contains the ErrorState class. 6 7 #ifndef GPU_COMMAND_BUFFER_SERVICE_ERROR_STATE_H_ 8 #define GPU_COMMAND_BUFFER_SERVICE_ERROR_STATE_H_ 9 10 #include "base/compiler_specific.h" 11 #include "gpu/command_buffer/common/types.h" 12 #include "gpu/gpu_export.h" 13 14 namespace gpu { 15 namespace gles2 { 16 17 class Logger; 18 19 // Use these macro to synthesize GL errors instead of calling the error_state 20 // functions directly as they will propogate the __FILE__ and __LINE__. 21 22 // Use to synthesize a GL error on the error_state. 23 #define ERRORSTATE_SET_GL_ERROR(error_state, error, function_name, msg) \ 24 error_state->SetGLError(__FILE__, __LINE__, error, function_name, msg) 25 26 // Use to synthesize an INVALID_ENUM GL error on the error_state. Will attempt 27 // to expand the enum to a string. 28 #define ERRORSTATE_SET_GL_ERROR_INVALID_ENUM( \ 29 error_state, function_name, value, label) \ 30 error_state->SetGLErrorInvalidEnum( \ 31 __FILE__, __LINE__, function_name, value, label) 32 33 // Use to synthesize a GL error on the error_state for an invalid enum based 34 // parameter. Will attempt to expand the parameter to a string. 35 #define ERRORSTATE_SET_GL_ERROR_INVALID_PARAM( \ 36 error_state, error, function_name, pname, param) \ 37 error_state->SetGLErrorInvalidParam( \ 38 __FILE__, __LINE__, error, function_name, pname, param) 39 40 // Use to move all pending error to the wrapper so on your next GL call 41 // you can see if that call generates an error. 42 #define ERRORSTATE_COPY_REAL_GL_ERRORS_TO_WRAPPER(error_state, function_name) \ 43 error_state->CopyRealGLErrorsToWrapper(__FILE__, __LINE__, function_name) 44 // Use to look at the real GL error and still pass it on to the user. 45 #define ERRORSTATE_PEEK_GL_ERROR(error_state, function_name) \ 46 error_state->PeekGLError(__FILE__, __LINE__, function_name) 47 // Use to clear all current GL errors. FAILS if there are any. 48 #define ERRORSTATE_CLEAR_REAL_GL_ERRORS(error_state, function_name) \ 49 error_state->ClearRealGLErrors(__FILE__, __LINE__, function_name) 50 51 52 class GPU_EXPORT ErrorState { 53 public: 54 virtual ~ErrorState(); 55 56 static ErrorState* Create(Logger* logger); 57 58 virtual uint32 GetGLError() = 0; 59 60 virtual void SetGLError( 61 const char* filename, 62 int line, 63 unsigned int error, 64 const char* function_name, 65 const char* msg) = 0; 66 virtual void SetGLErrorInvalidEnum( 67 const char* filename, 68 int line, 69 const char* function_name, 70 unsigned int value, 71 const char* label) = 0; 72 virtual void SetGLErrorInvalidParam( 73 const char* filename, 74 int line, 75 unsigned int error, 76 const char* function_name, 77 unsigned int pname, 78 int param) = 0; 79 80 // Gets the GLError and stores it in our wrapper. Effectively 81 // this lets us peek at the error without losing it. 82 virtual unsigned int PeekGLError( 83 const char* filename, int line, const char* function_name) = 0; 84 85 // Copies the real GL errors to the wrapper. This is so we can 86 // make sure there are no native GL errors before calling some GL function 87 // so that on return we know any error generated was for that specific 88 // command. 89 virtual void CopyRealGLErrorsToWrapper( 90 const char* filename, int line, const char* function_name) = 0; 91 92 // Clear all real GL errors. This is to prevent the client from seeing any 93 // errors caused by GL calls that it was not responsible for issuing. 94 virtual void ClearRealGLErrors( 95 const char* filename, int line, const char* function_name) = 0; 96 97 protected: 98 ErrorState(); 99 100 DISALLOW_COPY_AND_ASSIGN(ErrorState); 101 }; 102 103 } // namespace gles2 104 } // namespace gpu 105 106 #endif // GPU_COMMAND_BUFFER_SERVICE_ERROR_STATE_H_ 107 108