compute-runtime/shared/source/os_interface/windows/wddm/adapter_factory.h

56 lines
1.3 KiB
C++

/*
* Copyright (C) 2021-2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/os_interface/windows/windows_wrapper.h"
#include <cstdint>
#include <memory>
#include <string>
typedef unsigned int D3DKMT_HANDLE;
namespace NEO {
class Gdi;
class OsLibrary;
bool canUseAdapterBasedOnDriverDesc(const char *driverDescription);
bool isAllowedDeviceId(uint32_t deviceId);
class AdapterFactory {
public:
using CreateAdapterFactoryFcn = HRESULT(WINAPI *)(REFIID riid, void **ppFactory);
struct AdapterDesc {
enum class Type {
unknown,
hardware,
notHardware
};
Type type = Type::unknown;
std::string driverDescription;
uint32_t deviceId = {};
LUID luid = {};
};
virtual ~AdapterFactory() = default;
virtual bool createSnapshotOfAvailableAdapters() = 0;
virtual uint32_t getNumAdaptersInSnapshot() = 0;
virtual bool getAdapterDesc(uint32_t ordinal, AdapterDesc &outAdapter) = 0;
virtual bool isSupported() = 0;
static std::unique_ptr<AdapterFactory> create(AdapterFactory::CreateAdapterFactoryFcn dxCoreCreateAdapterFactoryF,
AdapterFactory::CreateAdapterFactoryFcn dxgiCreateAdapterFactoryF);
};
} // namespace NEO