mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
d3d12: Split memory size info to device and system memory
We need to split memory size counters into two to fill pipe_memory_info correctly. Device local and system values are needed for this. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31853>
This commit is contained in:
parent
334b368fc9
commit
60cb0ebc25
5 changed files with 28 additions and 11 deletions
|
|
@ -149,7 +149,12 @@ dxcore_get_memory_info(struct d3d12_screen *screen, struct d3d12_memory_info *ou
|
|||
DXCoreAdapterMemoryBudgetNodeSegmentGroup nonlocal_node_segment = { 0, DXCoreSegmentGroup::NonLocal };
|
||||
dxcore_screen->adapter->QueryState(DXCoreAdapterState::AdapterMemoryBudget, &local_node_segment, &local_info);
|
||||
dxcore_screen->adapter->QueryState(DXCoreAdapterState::AdapterMemoryBudget, &nonlocal_node_segment, &nonlocal_info);
|
||||
|
||||
output->budget_local = local_info.budget;
|
||||
output->budget_nonlocal = nonlocal_info.budget;
|
||||
output->budget = local_info.budget + nonlocal_info.budget;
|
||||
output->usage_local = local_info.currentUsage;
|
||||
output->usage_nonlocal = nonlocal_info.currentUsage;
|
||||
output->usage = local_info.currentUsage + nonlocal_info.currentUsage;
|
||||
}
|
||||
|
||||
|
|
@ -213,7 +218,8 @@ d3d12_init_dxcore_screen(struct d3d12_screen *dscreen)
|
|||
screen->base.device_id = hardware_ids.deviceID;
|
||||
screen->base.subsys_id = hardware_ids.subSysID;
|
||||
screen->base.revision = hardware_ids.revision;
|
||||
screen->base.memory_size_megabytes = (dedicated_video_memory + dedicated_system_memory + shared_system_memory) >> 20;
|
||||
screen->base.memory_device_size_megabytes = dedicated_video_memory >> 20;
|
||||
screen->base.memory_system_size_megabytes = (dedicated_system_memory + shared_system_memory) >> 20;
|
||||
screen->base.base.get_name = dxcore_get_name;
|
||||
screen->base.get_memory_info = dxcore_get_memory_info;
|
||||
|
||||
|
|
|
|||
|
|
@ -120,7 +120,12 @@ dxgi_get_memory_info(struct d3d12_screen *screen, struct d3d12_memory_info *outp
|
|||
DXGI_QUERY_VIDEO_MEMORY_INFO local_info, nonlocal_info;
|
||||
dxgi_screen->adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_LOCAL, &local_info);
|
||||
dxgi_screen->adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL, &nonlocal_info);
|
||||
|
||||
output->budget_local = local_info.Budget;
|
||||
output->budget_nonlocal = nonlocal_info.Budget;
|
||||
output->budget = local_info.Budget + nonlocal_info.Budget;
|
||||
output->usage_local = local_info.CurrentUsage;
|
||||
output->usage_nonlocal = nonlocal_info.CurrentUsage;
|
||||
output->usage = local_info.CurrentUsage + nonlocal_info.CurrentUsage;
|
||||
}
|
||||
|
||||
|
|
@ -179,11 +184,12 @@ d3d12_init_dxgi_screen(struct d3d12_screen *dscreen)
|
|||
screen->base.device_id = adapter_desc.DeviceId;
|
||||
screen->base.subsys_id = adapter_desc.SubSysId;
|
||||
screen->base.revision = adapter_desc.Revision;
|
||||
screen->base.memory_device_size_megabytes = adapter_desc.DedicatedVideoMemory >> 20;
|
||||
// Note: memory sizes in bytes, but stored in size_t, so may be capped at 4GB.
|
||||
// In that case, adding before conversion to MB can easily overflow.
|
||||
screen->base.memory_size_megabytes = (adapter_desc.DedicatedVideoMemory >> 20) +
|
||||
(adapter_desc.DedicatedSystemMemory >> 20) +
|
||||
(adapter_desc.SharedSystemMemory >> 20);
|
||||
screen->base.memory_system_size_megabytes =
|
||||
(adapter_desc.DedicatedSystemMemory >> 20) + (adapter_desc.SharedSystemMemory >> 20);
|
||||
|
||||
wcsncpy(screen->description, adapter_desc.Description, ARRAY_SIZE(screen->description));
|
||||
screen->base.base.get_name = dxgi_get_name;
|
||||
screen->base.get_memory_info = dxgi_get_memory_info;
|
||||
|
|
|
|||
|
|
@ -104,11 +104,11 @@ d3d12_init_dxgi_screen(struct d3d12_screen *dscreen)
|
|||
screen->base.device_id = adapter_desc.DeviceId;
|
||||
screen->base.subsys_id = adapter_desc.SubSysId;
|
||||
screen->base.revision = adapter_desc.Revision;
|
||||
screen->base.memory_device_size_megabytes = adapter_desc.DedicatedVideoMemory >> 20;
|
||||
// Note: memory sizes in bytes, but stored in size_t, so may be capped at 4GB.
|
||||
// In that case, adding before conversion to MB can easily overflow.
|
||||
screen->base.memory_size_megabytes = (adapter_desc.DedicatedVideoMemory >> 20) +
|
||||
(adapter_desc.DedicatedSystemMemory >> 20) +
|
||||
(adapter_desc.SharedSystemMemory >> 20);
|
||||
screen->base.memory_system_size_megabytes =
|
||||
(adapter_desc.DedicatedSystemMemory >> 20) + (adapter_desc.SharedSystemMemory >> 20);
|
||||
wcsncpy(screen->description, adapter_desc.Description, ARRAY_SIZE(screen->description));
|
||||
screen->base.base.get_name = dxgi_get_name;
|
||||
screen->base.get_memory_info = dxgi_get_memory_info;
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ d3d12_get_video_mem(struct pipe_screen *pscreen)
|
|||
{
|
||||
struct d3d12_screen* screen = d3d12_screen(pscreen);
|
||||
|
||||
return screen->memory_size_megabytes;
|
||||
return screen->memory_device_size_megabytes + screen->memory_system_size_megabytes;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
|||
|
|
@ -54,8 +54,12 @@ enum resource_dimension
|
|||
};
|
||||
|
||||
struct d3d12_memory_info {
|
||||
uint64_t usage;
|
||||
uint64_t budget;
|
||||
uint64_t usage_local;
|
||||
uint64_t budget_local;
|
||||
uint64_t usage_nonlocal;
|
||||
uint64_t budget_nonlocal;
|
||||
uint64_t usage; // local + nonlocal
|
||||
uint64_t budget; // local + nonlocal
|
||||
};
|
||||
|
||||
struct d3d12_screen {
|
||||
|
|
@ -133,7 +137,8 @@ struct d3d12_screen {
|
|||
uint32_t subsys_id;
|
||||
uint32_t revision;
|
||||
uint64_t driver_version;
|
||||
uint64_t memory_size_megabytes;
|
||||
uint64_t memory_device_size_megabytes;
|
||||
uint64_t memory_system_size_megabytes;
|
||||
float timestamp_multiplier;
|
||||
bool have_load_at_vertex;
|
||||
bool support_shader_images;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue