Home | History | Annotate | Download | only in service
      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