// Copyright 2018 The Dawn Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "dawn_native/DawnNative.h" #include "dawn_native/Device.h" #include "dawn_native/Instance.h" // Contains the entry-points into dawn_native namespace dawn_native { DawnProcTable GetProcsAutogen(); DawnProcTable GetProcs() { return GetProcsAutogen(); } // Adapter Adapter::Adapter() = default; Adapter::Adapter(AdapterBase* impl) : mImpl(impl) { } Adapter::~Adapter() { mImpl = nullptr; } BackendType Adapter::GetBackendType() const { return mImpl->GetBackendType(); } DeviceType Adapter::GetDeviceType() const { return mImpl->GetDeviceType(); } const PCIInfo& Adapter::GetPCIInfo() const { return mImpl->GetPCIInfo(); } Adapter::operator bool() const { return mImpl != nullptr; } DawnDevice Adapter::CreateDevice() { return reinterpret_cast(mImpl->CreateDevice()); } // AdapterDiscoverOptionsBase AdapterDiscoveryOptionsBase::AdapterDiscoveryOptionsBase(BackendType type) : backendType(type) { } // Instance Instance::Instance() : mImpl(new InstanceBase()) { } Instance::~Instance() { delete mImpl; mImpl = nullptr; } void Instance::DiscoverDefaultAdapters() { mImpl->DiscoverDefaultAdapters(); } bool Instance::DiscoverAdapters(const AdapterDiscoveryOptionsBase* options) { return mImpl->DiscoverAdapters(options); } std::vector Instance::GetAdapters() const { // Adapters are owned by mImpl so it is safe to return non RAII pointers to them std::vector adapters; for (const std::unique_ptr& adapter : mImpl->GetAdapters()) { adapters.push_back({adapter.get()}); } return adapters; } } // namespace dawn_native