wsl/libhsakmt: refactor WDDMDevice creation
Signed-off-by: Flora Cui <flora.cui@amd.com> Reviewed-by: Tianci Yin <tianci.yin@amd.com> Part-of: <http://10.67.69.192/wsl/rocr-runtime/-/merge_requests/95>
Šī revīzija ir iekļauta:
revīziju iesūtīja
Frank Min
vecāks
e0f40ae8d4
revīzija
d520b11006
+7
-18
@@ -362,35 +362,24 @@ HSAKMT_STATUS topology_sysfs_get_system_props(HsaSystemProperties& props) {
|
||||
|
||||
std::memset(&props, 0, sizeof(props));
|
||||
|
||||
D3DKMT_ADAPTERINFO *adapters;
|
||||
int num_adapters;
|
||||
if (wsl::thunk::WDDMGetAdapters(adapters, num_adapters) != STATUS_SUCCESS) {
|
||||
pr_err("Failed to get adapters\n");
|
||||
ret = HSAKMT_STATUS_ERROR;
|
||||
goto err;
|
||||
}
|
||||
|
||||
dxg_topology->num_sysfs_nodes = num_adapters + 1;
|
||||
|
||||
dxg_runtime->HeapFini();
|
||||
for (auto device : dxg_topology->wdevices_)
|
||||
delete device;
|
||||
dxg_topology->wdevices_.clear();
|
||||
|
||||
for (uint32_t i = 0; i < num_adapters; i++) {
|
||||
wsl::thunk::WDDMDevice *device = new wsl::thunk::WDDMDevice(
|
||||
adapters[i].hAdapter, adapters[i].AdapterLuid, i+1);
|
||||
assert(device && "Create WDDM Device fail");
|
||||
dxg_topology->wdevices_.push_back(device);
|
||||
WDDMCreateDevices(dxg_topology->wdevices_);
|
||||
int num_adapters = dxg_topology->wdevices_.size();
|
||||
if (num_adapters == 0) {
|
||||
pr_err("No WDDM adapters found.\n");
|
||||
return HSAKMT_STATUS_ERROR;
|
||||
}
|
||||
|
||||
dxg_topology->num_sysfs_nodes = num_adapters + 1;
|
||||
dxg_runtime->HeapInit();
|
||||
props.NumNodes = dxg_topology->num_sysfs_nodes;
|
||||
if (dxg_runtime->default_node > num_adapters)
|
||||
dxg_runtime->default_node = num_adapters;
|
||||
|
||||
delete[] adapters;
|
||||
return ret;
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
+8
-11
@@ -422,7 +422,7 @@ uint32_t WDDMDevice::LdsBlocks(const hsa_kernel_dispatch_packet_t *pkt) {
|
||||
return blk_num;
|
||||
}
|
||||
|
||||
NTSTATUS WDDMGetAdapters(D3DKMT_ADAPTERINFO *&adapters, int &num_adapters)
|
||||
NTSTATUS WDDMCreateDevices(std::vector<WDDMDevice *> &devices)
|
||||
{
|
||||
bool supported = false;
|
||||
D3DKMT_ENUMADAPTERS2 args = {0};
|
||||
@@ -431,8 +431,6 @@ NTSTATUS WDDMGetAdapters(D3DKMT_ADAPTERINFO *&adapters, int &num_adapters)
|
||||
return ret;
|
||||
|
||||
if (!args.NumAdapters) {
|
||||
adapters = NULL;
|
||||
num_adapters = 0;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -445,11 +443,6 @@ NTSTATUS WDDMGetAdapters(D3DKMT_ADAPTERINFO *&adapters, int &num_adapters)
|
||||
if (ret != STATUS_SUCCESS)
|
||||
goto err_out0;
|
||||
|
||||
adapters = new D3DKMT_ADAPTERINFO[args.NumAdapters];
|
||||
if (!adapters)
|
||||
goto err_out0;
|
||||
|
||||
num_adapters = 0;
|
||||
for (int i = 0; i < args.NumAdapters; i++) {
|
||||
D3DKMT_QUERY_DEVICE_IDS query = {0};
|
||||
|
||||
@@ -464,7 +457,11 @@ NTSTATUS WDDMGetAdapters(D3DKMT_ADAPTERINFO *&adapters, int &num_adapters)
|
||||
supported = thunk_proxy::QueryAdapterSupported(query.DeviceIds.DeviceID);
|
||||
|
||||
if (supported) {
|
||||
adapters[num_adapters++] = info[i];
|
||||
auto device = new WDDMDevice(
|
||||
info[i].hAdapter, info[i].AdapterLuid, devices.size() + 1);
|
||||
if (!device)
|
||||
goto err_out1;
|
||||
devices.push_back(device);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -472,8 +469,8 @@ NTSTATUS WDDMGetAdapters(D3DKMT_ADAPTERINFO *&adapters, int &num_adapters)
|
||||
return STATUS_SUCCESS;
|
||||
|
||||
err_out1:
|
||||
delete[] adapters;
|
||||
adapters = NULL;
|
||||
for (auto &device : devices)
|
||||
delete device;
|
||||
err_out0:
|
||||
delete[] info;
|
||||
return ret;
|
||||
|
||||
Atsaukties uz šo jaunā problēmā
Block a user