Detect integrated device type on Intel iGPUs.
Fix to prevent incorrectly reporting the device type.
BUG=dawn:144
Change-Id: Ie1956d908b20649787aef785cd29f0f63f524431
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/6980
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Bryan Bernhart <bryan.bernhart@intel.com>
diff --git a/src/common/Constants.h b/src/common/Constants.h
index 7641502..7aa9039 100644
--- a/src/common/Constants.h
+++ b/src/common/Constants.h
@@ -38,4 +38,11 @@
static constexpr float kLodMin = 0.0;
static constexpr float kLodMax = 1000.0;
+static constexpr uint32_t kVendorID_AMD = 0x1002;
+static constexpr uint32_t kVendorID_ARM = 0x13B5;
+static constexpr uint32_t kVendorID_ImgTec = 0x1010;
+static constexpr uint32_t kVendorID_Intel = 0x8086;
+static constexpr uint32_t kVendorID_Nvidia = 0x10DE;
+static constexpr uint32_t kVendorID_Qualcomm = 0x5143;
+
#endif // COMMON_CONSTANTS_H_
diff --git a/src/dawn_native/d3d12/AdapterD3D12.cpp b/src/dawn_native/d3d12/AdapterD3D12.cpp
index a5df7e4..16fc617 100644
--- a/src/dawn_native/d3d12/AdapterD3D12.cpp
+++ b/src/dawn_native/d3d12/AdapterD3D12.cpp
@@ -14,6 +14,7 @@
#include "dawn_native/d3d12/AdapterD3D12.h"
+#include "common/Constants.h"
#include "dawn_native/d3d12/BackendD3D12.h"
#include "dawn_native/d3d12/DeviceD3D12.h"
#include "dawn_native/d3d12/PlatformFunctions.h"
@@ -46,8 +47,23 @@
if (adapterDesc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) {
mDeviceType = DeviceType::CPU;
} else {
- // TODO(cwallez@chromium.org): properly detect integrated vs. discrete.
- mDeviceType = DeviceType::DiscreteGPU;
+ // Using DXGI_ADAPTER_DESC1 approach to determine integrated vs dedicated is
+ // vendor-specific.
+ switch (mPCIInfo.vendorId) {
+ case kVendorID_Intel: {
+ // On Intel GPUs, dedicated video memory is always set to 128MB when the GPU is
+ // integrated.
+ static constexpr uint64_t kDedicatedVideoMemory = 128 * 1024 * 1024;
+ mDeviceType = (adapterDesc.DedicatedVideoMemory == kDedicatedVideoMemory)
+ ? DeviceType::IntegratedGPU
+ : DeviceType::DiscreteGPU;
+ break;
+ }
+ default:
+ // TODO: Support additional GPU vendors.
+ mDeviceType = DeviceType::Unknown;
+ break;
+ }
}
std::wstring_convert<DeletableFacet<std::codecvt<wchar_t, char, std::mbstate_t>>> converter(
diff --git a/src/tests/DawnTest.cpp b/src/tests/DawnTest.cpp
index 1d3c8ff..b0f423b 100644
--- a/src/tests/DawnTest.cpp
+++ b/src/tests/DawnTest.cpp
@@ -78,13 +78,6 @@
size_t slot;
};
- constexpr uint32_t kVendorID_AMD = 0x1002;
- constexpr uint32_t kVendorID_ARM = 0x13B5;
- constexpr uint32_t kVendorID_ImgTec = 0x1010;
- constexpr uint32_t kVendorID_Intel = 0x8086;
- constexpr uint32_t kVendorID_Nvidia = 0x10DE;
- constexpr uint32_t kVendorID_Qualcomm = 0x5143;
-
DawnTestEnvironment* gTestEnv = nullptr;
} // namespace