mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-02 20:51:45 +00:00
Although VkPhysicalDeviceVulkan11Features::storageBuffer16BitAccess is a subset of VkPhysicalDeviceVulkan11Features::uniformAndStorageBuffer16BitAccess, when the SPIR-V Capability (StorageBuffer16BitAccess) was declared, we must enable the VkPhysicalDeviceVulkan11Features::storageBuffer16BitAccess feature according to the requirements of the spec. BUG=dawn:675 Change-Id: I99f9eb4c5f2fd6c6565a51063817efb8bc88216f Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/42620 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Hao Li <hao.x.li@intel.com> Reviewed-by: Jiawei Shao <jiawei.shao@intel.com> Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
109 lines
4.0 KiB
C++
109 lines
4.0 KiB
C++
// 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(), wgpu::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));
|
|
if (!mDeviceInfo.HasExt(DeviceExt::Maintenance1)) {
|
|
return DAWN_INTERNAL_ERROR(
|
|
"Dawn requires Vulkan 1.1 or Vulkan 1.0 with KHR_Maintenance1 in order to support "
|
|
"viewport flipY");
|
|
}
|
|
|
|
if (mDeviceInfo.HasExt(DeviceExt::DriverProperties)) {
|
|
mDriverDescription = mDeviceInfo.driverProperties.driverName;
|
|
if (mDeviceInfo.driverProperties.driverInfo[0] != '\0') {
|
|
mDriverDescription += std::string(": ") + mDeviceInfo.driverProperties.driverInfo;
|
|
}
|
|
} else {
|
|
mDriverDescription =
|
|
"Vulkan driver version: " + std::to_string(mDeviceInfo.properties.driverVersion);
|
|
}
|
|
|
|
InitializeSupportedExtensions();
|
|
|
|
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:
|
|
mAdapterType = wgpu::AdapterType::IntegratedGPU;
|
|
break;
|
|
case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU:
|
|
mAdapterType = wgpu::AdapterType::DiscreteGPU;
|
|
break;
|
|
case VK_PHYSICAL_DEVICE_TYPE_CPU:
|
|
mAdapterType = wgpu::AdapterType::CPU;
|
|
break;
|
|
default:
|
|
mAdapterType = wgpu::AdapterType::Unknown;
|
|
break;
|
|
}
|
|
|
|
return {};
|
|
}
|
|
|
|
void Adapter::InitializeSupportedExtensions() {
|
|
if (mDeviceInfo.features.textureCompressionBC == VK_TRUE) {
|
|
mSupportedExtensions.EnableExtension(Extension::TextureCompressionBC);
|
|
}
|
|
|
|
if (mDeviceInfo.HasExt(DeviceExt::ShaderFloat16Int8) &&
|
|
mDeviceInfo.shaderFloat16Int8Features.shaderFloat16 == VK_TRUE &&
|
|
mDeviceInfo.HasExt(DeviceExt::_16BitStorage) &&
|
|
mDeviceInfo._16BitStorageFeatures.storageBuffer16BitAccess == VK_TRUE &&
|
|
mDeviceInfo._16BitStorageFeatures.uniformAndStorageBuffer16BitAccess == VK_TRUE) {
|
|
mSupportedExtensions.EnableExtension(Extension::ShaderFloat16);
|
|
}
|
|
|
|
if (mDeviceInfo.features.pipelineStatisticsQuery == VK_TRUE) {
|
|
mSupportedExtensions.EnableExtension(Extension::PipelineStatisticsQuery);
|
|
}
|
|
|
|
if (mDeviceInfo.properties.limits.timestampComputeAndGraphics == VK_TRUE) {
|
|
mSupportedExtensions.EnableExtension(Extension::TimestampQuery);
|
|
}
|
|
}
|
|
|
|
ResultOrError<DeviceBase*> Adapter::CreateDeviceImpl(const DeviceDescriptor* descriptor) {
|
|
return Device::Create(this, descriptor);
|
|
}
|
|
|
|
}} // namespace dawn_native::vulkan
|