// Copyright 2018 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/service/webgpu_decoder.h"

#include "gpu/command_buffer/service/shared_context_state.h"
#include "ui/gl/buildflags.h"

#if BUILDFLAG(USE_DAWN)
#include "gpu/command_buffer/service/webgpu_decoder_impl.h"
#endif

namespace gpu {
namespace webgpu {

// static
std::unique_ptr<WebGPUDecoder> WebGPUDecoder::Create(
    DecoderClient* client,
    CommandBufferServiceBase* command_buffer_service,
    SharedImageManager* shared_image_manager,
    scoped_refptr<MemoryTracker> memory_tracker,
    gles2::Outputter* outputter,
    const GpuPreferences& gpu_preferences,
    scoped_refptr<SharedContextState> shared_context_state,
    const DawnCacheOptions& dawn_cache_options,
    IsolationKeyProvider* isolation_key_provider) {
#if BUILDFLAG(USE_DAWN)
  return CreateWebGPUDecoderImpl(
      client, command_buffer_service, shared_image_manager,
      std::move(memory_tracker), outputter, gpu_preferences,
      std::move(shared_context_state), dawn_cache_options,
      isolation_key_provider);
#else
  NOTREACHED();
#endif
}

WebGPUDecoder::WebGPUDecoder(DecoderClient* client,
                             CommandBufferServiceBase* command_buffer_service,
                             gles2::Outputter* outputter)
    : CommonDecoder(client, command_buffer_service) {}

WebGPUDecoder::~WebGPUDecoder() {}

}  // namespace webgpu
}  // namespace gpu
