blob: 75935fcc59d4e64942d0d54617c9faf845d6c1c9 [file] [log] [blame]
// Copyright (c) 2017 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.
#ifndef GPU_COMMAND_BUFFER_CLIENT_RASTER_IMPLEMENTATION_GLES_H_
#define GPU_COMMAND_BUFFER_CLIENT_RASTER_IMPLEMENTATION_GLES_H_
#include <unordered_map>
#include "base/containers/flat_map.h"
#include "base/macros.h"
#include "base/optional.h"
#include "gpu/command_buffer/client/client_font_manager.h"
#include "gpu/command_buffer/client/gles2_interface.h"
#include "gpu/command_buffer/client/raster_interface.h"
#include "gpu/command_buffer/common/capabilities.h"
#include "gpu/raster_export.h"
#include "third_party/skia/include/core/SkColor.h"
#include "third_party/skia/include/core/SkColorSpace.h"
namespace gpu {
namespace raster {
struct Capabilities;
// An implementation of RasterInterface on top of GLES2Interface.
class RASTER_EXPORT RasterImplementationGLES : public RasterInterface {
public:
RasterImplementationGLES(gles2::GLES2Interface* gl,
const gpu::Capabilities& caps);
~RasterImplementationGLES() override;
// Command buffer Flush / Finish.
void Finish() override;
void Flush() override;
void ShallowFlushCHROMIUM() override;
void OrderingBarrierCHROMIUM() override;
// SyncTokens.
void GenSyncTokenCHROMIUM(GLbyte* sync_token) override;
void GenUnverifiedSyncTokenCHROMIUM(GLbyte* sync_token) override;
void VerifySyncTokensCHROMIUM(GLbyte** sync_tokens, GLsizei count) override;
void WaitSyncTokenCHROMIUM(const GLbyte* sync_token) override;
// Command buffer state.
GLenum GetError() override;
GLenum GetGraphicsResetStatusKHR() override;
void LoseContextCHROMIUM(GLenum current, GLenum other) override;
// Queries: GL_COMMANDS_ISSUED_CHROMIUM / GL_COMMANDS_COMPLETED_CHROMIUM.
void GenQueriesEXT(GLsizei n, GLuint* queries) override;
void DeleteQueriesEXT(GLsizei n, const GLuint* queries) override;
void BeginQueryEXT(GLenum target, GLuint id) override;
void EndQueryEXT(GLenum target) override;
void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) override;
// Texture objects.
void DeleteTextures(GLsizei n, const GLuint* textures) override;
// Mailboxes.
GLuint CreateAndConsumeTexture(bool use_buffer,
gfx::BufferUsage buffer_usage,
viz::ResourceFormat format,
const GLbyte* mailbox) override;
// Texture copying.
void CopySubTexture(GLuint source_id,
GLuint dest_id,
GLint xoffset,
GLint yoffset,
GLint x,
GLint y,
GLsizei width,
GLsizei height) override;
// OOP-Raster
void BeginRasterCHROMIUM(GLuint sk_color,
GLuint msaa_sample_count,
GLboolean can_use_lcd_text,
const cc::RasterColorSpace& raster_color_space,
const GLbyte* mailbox) override;
void RasterCHROMIUM(const cc::DisplayItemList* list,
cc::ImageProvider* provider,
const gfx::Size& content_size,
const gfx::Rect& full_raster_rect,
const gfx::Rect& playback_rect,
const gfx::Vector2dF& post_translate,
GLfloat post_scale,
bool requires_clear) override;
void EndRasterCHROMIUM() override;
// Image decode acceleration.
SyncToken ScheduleImageDecode(base::span<const uint8_t> encoded_data,
const gfx::Size& output_size,
uint32_t transfer_cache_entry_id,
const gfx::ColorSpace& target_color_space,
bool needs_mips) override;
// Raster via GrContext.
void BeginGpuRaster() override;
void EndGpuRaster() override;
void TraceBeginCHROMIUM(const char* category_name,
const char* trace_name) override;
void TraceEndCHROMIUM() override;
void SetActiveURLCHROMIUM(const char* url) override;
private:
struct Texture {
Texture(GLuint id,
GLenum target,
bool use_buffer,
gfx::BufferUsage buffer_usage,
viz::ResourceFormat format);
GLuint id;
GLenum target;
bool use_buffer;
gfx::BufferUsage buffer_usage;
viz::ResourceFormat format;
};
Texture* GetTexture(GLuint texture_id);
gles2::GLES2Interface* gl_;
gpu::Capabilities caps_;
std::unordered_map<GLuint, Texture> texture_info_;
DISALLOW_COPY_AND_ASSIGN(RasterImplementationGLES);
};
} // namespace raster
} // namespace gpu
#endif // GPU_COMMAND_BUFFER_CLIENT_RASTER_IMPLEMENTATION_GLES_H_