| // Copyright 2019 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/vulkan/AdapterVk.h" |
| |
| #include "dawn_native/vulkan/BackendVk.h" |
| #include "dawn_native/vulkan/DeviceVk.h" |
| |
| namespace dawn_native { namespace vulkan { |
| |
| Adapter::Adapter(Backend* backend, VkPhysicalDevice physicalDevice) |
| : AdapterBase(backend->GetInstance(), BackendType::Vulkan), |
| mPhysicalDevice(physicalDevice), |
| mBackend(backend) { |
| } |
| |
| const VulkanDeviceInfo& Adapter::GetDeviceInfo() const { |
| return mDeviceInfo; |
| } |
| |
| VkPhysicalDevice Adapter::GetPhysicalDevice() const { |
| return mPhysicalDevice; |
| } |
| |
| Backend* Adapter::GetBackend() const { |
| return mBackend; |
| } |
| |
| MaybeError Adapter::Initialize() { |
| DAWN_TRY_ASSIGN(mDeviceInfo, GatherDeviceInfo(*this)); |
| |
| mPCIInfo.deviceId = mDeviceInfo.properties.deviceID; |
| mPCIInfo.vendorId = mDeviceInfo.properties.vendorID; |
| mPCIInfo.name = mDeviceInfo.properties.deviceName; |
| |
| switch (mDeviceInfo.properties.deviceType) { |
| case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU: |
| mDeviceType = DeviceType::IntegratedGPU; |
| break; |
| case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU: |
| mDeviceType = DeviceType::DiscreteGPU; |
| break; |
| case VK_PHYSICAL_DEVICE_TYPE_CPU: |
| mDeviceType = DeviceType::CPU; |
| break; |
| default: |
| mDeviceType = DeviceType::Unknown; |
| break; |
| } |
| |
| return {}; |
| } |
| |
| ResultOrError<DeviceBase*> Adapter::CreateDeviceImpl() { |
| std::unique_ptr<Device> device = std::make_unique<Device>(this); |
| DAWN_TRY(device->Initialize()); |
| return device.release(); |
| } |
| |
| }} // namespace dawn_native::vulkan |