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 <stdint.h> 11 12 #include "base/compiler_specific.h" 13 #include "base/macros.h" 14 #include "gpu/gpu_export.h" 15 16 namespace gpu { 17 namespace gles2 { 18 19 class Logger; 20 21 // Use these macro to synthesize GL errors instead of calling the error_state 22 // functions directly as they will propogate the __FILE__ and __LINE__. 23 24 // Use to synthesize a GL error on the error_state. 25 #define ERRORSTATE_SET_GL_ERROR(error_state, error, function_name, msg) \ 26 error_state->SetGLError(__FILE__, __LINE__, error, function_name, msg) 27 28 // Use to synthesize an INVALID_ENUM GL error on the error_state. Will attempt 29 // to expand the enum to a string. 30 #define ERRORSTATE_SET_GL_ERROR_INVALID_ENUM( \ 31 error_state, function_name, value, label) \ 32 error_state->SetGLErrorInvalidEnum( \ 33 __FILE__, __LINE__, function_name, value, label) 34 35 // Use to synthesize a GL error on the error_state for an invalid enum based 36 // integer parameter. Will attempt to expand the parameter to a string. 37 #define ERRORSTATE_SET_GL_ERROR_INVALID_PARAMI( \ 38 error_state, error, function_name, pname, param) \ 39 error_state->SetGLErrorInvalidParami( \ 40 __FILE__, __LINE__, error, function_name, pname, param) 41 42 // Use to synthesize a GL error on the error_state for an invalid enum based 43 // float parameter. Will attempt to expand the parameter to a string. 44 #define ERRORSTATE_SET_GL_ERROR_INVALID_PARAMF( \ 45 error_state, error, function_name, pname, param) \ 46 error_state->SetGLErrorInvalidParamf( \ 47 __FILE__, __LINE__, error, function_name, pname, param) 48 49 // Use to move all pending error to the wrapper so on your next GL call 50 // you can see if that call generates an error. 51 #define ERRORSTATE_COPY_REAL_GL_ERRORS_TO_WRAPPER(error_state, function_name) \ 52 error_state->CopyRealGLErrorsToWrapper(__FILE__, __LINE__, function_name) 53 // Use to look at the real GL error and still pass it on to the user. 54 #define ERRORSTATE_PEEK_GL_ERROR(error_state, function_name) \ 55 error_state->PeekGLError(__FILE__, __LINE__, function_name) 56 // Use to clear all current GL errors. FAILS if there are any. 57 #define ERRORSTATE_CLEAR_REAL_GL_ERRORS(error_state, function_name) \ 58 error_state->ClearRealGLErrors(__FILE__, __LINE__, function_name) 59 60 class GPU_EXPORT ErrorStateClient { 61 public: 62 // GL_OUT_OF_MEMORY can cause side effects such as losing the context. 63 virtual void OnOutOfMemoryError() = 0; 64 }; 65 66 class GPU_EXPORT ErrorState { 67 public: 68 virtual ~ErrorState(); 69 70 static ErrorState* Create(ErrorStateClient* client, Logger* logger); 71 72 virtual uint32_t GetGLError() = 0; 73 74 virtual void SetGLError( 75 const char* filename, 76 int line, 77 unsigned int error, 78 const char* function_name, 79 const char* msg) = 0; 80 virtual void SetGLErrorInvalidEnum( 81 const char* filename, 82 int line, 83 const char* function_name, 84 unsigned int value, 85 const char* label) = 0; 86 virtual void SetGLErrorInvalidParami( 87 const char* filename, 88 int line, 89 unsigned int error, 90 const char* function_name, 91 unsigned int pname, 92 int param) = 0; 93 virtual void SetGLErrorInvalidParamf( 94 const char* filename, 95 int line, 96 unsigned int error, 97 const char* function_name, 98 unsigned int pname, 99 float param) = 0; 100 101 // Gets the GLError and stores it in our wrapper. Effectively 102 // this lets us peek at the error without losing it. 103 virtual unsigned int PeekGLError( 104 const char* filename, int line, const char* function_name) = 0; 105 106 // Copies the real GL errors to the wrapper. This is so we can 107 // make sure there are no native GL errors before calling some GL function 108 // so that on return we know any error generated was for that specific 109 // command. 110 virtual void CopyRealGLErrorsToWrapper( 111 const char* filename, int line, const char* function_name) = 0; 112 113 // Clear all real GL errors. This is to prevent the client from seeing any 114 // errors caused by GL calls that it was not responsible for issuing. 115 virtual void ClearRealGLErrors( 116 const char* filename, int line, const char* function_name) = 0; 117 118 protected: 119 ErrorState(); 120 121 DISALLOW_COPY_AND_ASSIGN(ErrorState); 122 }; 123 124 } // namespace gles2 125 } // namespace gpu 126 127 #endif // GPU_COMMAND_BUFFER_SERVICE_ERROR_STATE_H_ 128 129