// 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 #include "build/build_config.h" #include "gpu/command_buffer/common/constants.h" #include "gpu/gpu_gles2_export.h" #include "ui/gfx/buffer_types.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/overlay_transform.h" #include "ui/gfx/rrect_f.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; gfx::RRectF rounded_corner_bounds; int sorting_context_id; gfx::Transform transform; }; 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); GPU_GLES2_EXPORT 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 ValidateCompressedFormatTarget(GLenum target, GLenum format); bool ValidateCompressedTexSubDimensions(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, Texture* texture, const char** error_message); bool ValidateCompressedTexDimensions(GLenum target, GLint level, GLsizei width, GLsizei height, GLsizei depth, GLenum format, 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); GLenum GetTextureBindingQuery(GLenum texture_type); gfx::OverlayTransform GetGFXOverlayTransform(GLenum plane_transform); bool GetGFXBufferFormat(GLenum internal_format, gfx::BufferFormat* out_format); bool GetGFXBufferUsage(GLenum buffer_usage, gfx::BufferUsage* out_usage); bool IsASTCFormat(GLenum internal_format); bool IsCompressedTextureFormat(GLenum internal_format); } // namespace gles2 } // namespace gpu #endif // GPU_COMMAND_BUFFER_SERVICE_GL_UTILS_H_