// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "gpu/command_buffer/client/gles2_trace_implementation.h"

#include "base/trace_event/trace_event.h"
#include "gpu/command_buffer/client/client_shared_image.h"

namespace gpu {
namespace gles2 {

GLES2TraceImplementation::GLES2TraceImplementation(GLES2Interface* gl)
    : gl_(gl) {
}

GLES2TraceImplementation::~GLES2TraceImplementation() = default;

bool GLES2TraceImplementation::CanCopySharedImageDirectlyToGLTexture(
    bool is_opaque,
    ClientSharedImage* shared_image,
    uint32_t dst_target,
    uint32_t dst_internal_format,
    uint32_t dst_type,
    int32_t dst_level,
    SkAlphaType dst_alpha_type) {
  return gl_->CanCopySharedImageDirectlyToGLTexture(
      is_opaque, shared_image, dst_target, dst_internal_format, dst_type,
      dst_level, dst_alpha_type);
}

CopySharedImageSyncCallback
GLES2TraceImplementation::CopySharedImageToGLTextureViaTextureCopy(
    const gfx::Rect& src_rect,
    ClientSharedImage* source_shared_image,
    const gpu::SyncToken& source_sync_token,
    uint32_t dst_target,
    uint32_t dst_texture,
    uint32_t dst_internal_format,
    uint32_t dst_format,
    uint32_t dst_type,
    int32_t dst_level,
    SkAlphaType dst_alpha_type,
    GrSurfaceOrigin dst_origin) {
  return gl_->CopySharedImageToGLTextureViaTextureCopy(
      src_rect, source_shared_image, source_sync_token, dst_target, dst_texture,
      dst_internal_format, dst_format, dst_type, dst_level, dst_alpha_type,
      dst_origin);
}

CopySharedImageSyncCallback
GLES2TraceImplementation::CopySharedImageDirectlyToGLTexture(
    const gfx::Rect& src_rect,
    ClientSharedImage* source_shared_image,
    const gpu::SyncToken& source_sync_token,
    bool is_opaque,
    uint32_t dst_target,
    uint32_t dst_texture,
    uint32_t dst_internal_format,
    uint32_t dst_format,
    uint32_t dst_type,
    int32_t dst_level,
    SkAlphaType dst_alpha_type,
    GrSurfaceOrigin dst_origin) {
  return gl_->CopySharedImageDirectlyToGLTexture(
      src_rect, source_shared_image, source_sync_token, is_opaque, dst_target,
      dst_texture, dst_internal_format, dst_format, dst_type, dst_level,
      dst_alpha_type, dst_origin);
}

// InterfaceBase implementation.
void GLES2TraceImplementation::GenSyncTokenCHROMIUM(GLbyte* sync_token) {
  gl_->GenSyncTokenCHROMIUM(sync_token);
}
void GLES2TraceImplementation::GenUnverifiedSyncTokenCHROMIUM(
    GLbyte* sync_token) {
  gl_->GenUnverifiedSyncTokenCHROMIUM(sync_token);
}
void GLES2TraceImplementation::VerifySyncTokensCHROMIUM(GLbyte** sync_tokens,
                                                        GLsizei count) {
  gl_->VerifySyncTokensCHROMIUM(sync_tokens, count);
}
void GLES2TraceImplementation::WaitSyncTokenCHROMIUM(const GLbyte* sync_token) {
  gl_->WaitSyncTokenCHROMIUM(sync_token);
}
void GLES2TraceImplementation::ShallowFlushCHROMIUM() {
  gl_->ShallowFlushCHROMIUM();
}

// Include the auto-generated part of this file. We split this because it means
// we can easily edit the non-auto generated parts right here in this file
// instead of having to edit some template or the code generator.
#include "gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h"

}  // namespace gles2
}  // namespace gpu
