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