blob: 60f0b808aba0e05cd5be13e58980482719016bfe [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file includes all the necessary GL headers and implements some useful
// utilities.
#ifndef GPU_COMMAND_BUFFER_SERVICE_GL_UTILS_H_
#define GPU_COMMAND_BUFFER_SERVICE_GL_UTILS_H_
#include <string>
#include <vector>
#include "build/build_config.h"
#include "gpu/command_buffer/common/constants.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/transform.h"
#include "ui/gl/gl_bindings.h"
// Define this for extra GL error debugging (slower).
// #define GL_ERROR_DEBUGGING
#ifdef GL_ERROR_DEBUGGING
#define CHECK_GL_ERROR() \
do { \
GLenum gl_error = glGetError(); \
LOG_IF(ERROR, gl_error != GL_NO_ERROR) << "GL Error :" << gl_error; \
} while (0)
#else // GL_ERROR_DEBUGGING
#define CHECK_GL_ERROR() void(0)
#endif // GL_ERROR_DEBUGGING
namespace gl {
struct GLVersionInfo;
}
namespace gpu {
struct Capabilities;
namespace gles2 {
class ErrorState;
class FeatureInfo;
class Logger;
class Texture;
enum class CopyTextureMethod;
// clang-format off
constexpr GLfloat kIdentityMatrix[16] = { 1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f };
// clang-format on
struct CALayerSharedState {
float opacity;
bool is_clipped;
gfx::Rect clip_rect;
int sorting_context_id;
gfx::Transform transform;
};
std::vector<int> GetAllGLErrors();
bool PrecisionMeetsSpecForHighpFloat(GLint rangeMin,
GLint rangeMax,
GLint precision);
void QueryShaderPrecisionFormat(const gl::GLVersionInfo& gl_version_info,
GLenum shader_type,
GLenum precision_type,
GLint* range,
GLint* precision);
// Using the provided feature info, query the numeric limits of the underlying
// GL and fill in the members of the Capabilities struct. Does not perform any
// extension checks.
void PopulateNumericCapabilities(Capabilities* caps,
const FeatureInfo* feature_info);
bool CheckUniqueAndNonNullIds(GLsizei n, const GLuint* client_ids);
const char* GetServiceVersionString(const FeatureInfo* feature_info);
const char* GetServiceShadingLanguageVersionString(
const FeatureInfo* feature_info);
void LogGLDebugMessage(GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const GLchar* message,
Logger* error_logger);
void InitializeGLDebugLogging(bool log_non_errors,
GLDEBUGPROC callback,
const void* user_param);
bool ValidContextLostReason(GLenum reason);
error::ContextLostReason GetContextLostReasonFromResetStatus(
GLenum reset_status);
bool GetCompressedTexSizeInBytes(const char* function_name,
GLsizei width,
GLsizei height,
GLsizei depth,
GLenum format,
GLsizei* size_in_bytes,
ErrorState* error_state);
bool ValidateCompressedTexSubDimensions(GLenum target,
GLint level,
GLint xoffset,
GLint yoffset,
GLint zoffset,
GLsizei width,
GLsizei height,
GLsizei depth,
GLenum format,
Texture* texture,
bool restrict_for_webgl,
const char** error_message);
bool ValidateCompressedTexDimensions(GLenum target,
GLint level,
GLsizei width,
GLsizei height,
GLsizei depth,
GLenum format,
bool restrict_for_webgl,
const char** error_message);
bool ValidateCopyTexFormatHelper(const FeatureInfo* feature_info,
GLenum internal_format,
GLenum read_format,
GLenum read_type,
std::string* output_error_msg);
CopyTextureMethod GetCopyTextureCHROMIUMMethod(const FeatureInfo* feature_info,
GLenum source_target,
GLint source_level,
GLenum source_internal_format,
GLenum source_type,
GLenum dest_target,
GLint dest_level,
GLenum dest_internal_format,
bool flip_y,
bool premultiply_alpha,
bool unpremultiply_alpha,
bool dither);
bool ValidateCopyTextureCHROMIUMInternalFormats(const FeatureInfo* feature_info,
GLenum source_internal_format,
GLenum dest_internal_format,
std::string* output_error_msg);
} // namespace gles2
} // namespace gpu
#endif // GPU_COMMAND_BUFFER_SERVICE_GL_UTILS_H_