more gpu stats
This commit is contained in:
parent
054fe159f5
commit
444db417a5
@ -349,14 +349,19 @@ Struct(GPU_Scissor)
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ Memory info types
|
||||
//~ Statistic types
|
||||
|
||||
Struct(GPU_MemoryStats)
|
||||
Struct(GPU_Stats)
|
||||
{
|
||||
u64 budget;
|
||||
u64 committed;
|
||||
u64 reserved;
|
||||
u64 available_to_reserve;
|
||||
/* Memory usage */
|
||||
u64 local_committed;
|
||||
u64 local_budget;
|
||||
u64 non_local_committed;
|
||||
u64 non_local_budget;
|
||||
|
||||
/* Resources */
|
||||
u64 driver_resources_allocated;
|
||||
u64 driver_descriptors_allocated;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
@ -468,10 +473,9 @@ void GPU_Unmap(GPU_Mapped mapped);
|
||||
void GPU_CopyBytesToFootprint(void *dst, void *src, GPU_Resource *footprint_reference);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ @hookdecl Memory info operations
|
||||
//~ @hookdecl Statistics
|
||||
|
||||
GPU_MemoryStats GPU_QueryDedicatedMemoryStats(void);
|
||||
GPU_MemoryStats GPU_QuerySharedMemoryStats(void);
|
||||
GPU_Stats GPU_QueryStats(void);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ @hookdecl Swapchain available_to_reserve
|
||||
|
||||
@ -565,6 +565,7 @@ GPU_D12_Descriptor *GPU_D12_AcquireDescriptor(GPU_D12_DescriptorHeap *heap)
|
||||
d = PushStructNoZero(heap->arena, GPU_D12_Descriptor);
|
||||
index = heap->allocated_count++;
|
||||
handle.ptr = heap->start_handle.ptr + (index * heap->descriptor_size);
|
||||
Atomic64FetchAdd(&GPU_D12_shared_state.driver_descriptors_allocated, 1);
|
||||
}
|
||||
Unlock(&lock);
|
||||
}
|
||||
@ -886,6 +887,7 @@ GPU_Resource *GPU_AcquireResource(GPU_ResourceDesc desc)
|
||||
d3d_desc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS * !!(desc.flags & GPU_ResourceFlag_Writable);
|
||||
r->state = desc.buffer.heap_kind == GPU_HeapKind_Upload ? D3D12_RESOURCE_STATE_GENERIC_READ : D3D12_RESOURCE_STATE_COPY_DEST;
|
||||
HRESULT hr = ID3D12Device_CreateCommittedResource(g->device, &heap_props, heap_flags, &d3d_desc, r->state, 0, &IID_ID3D12Resource, (void **)&r->d3d_resource);
|
||||
Atomic64FetchAdd(&g->driver_resources_allocated, 1);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
/* TODO: Don't panic */
|
||||
@ -924,6 +926,7 @@ GPU_Resource *GPU_AcquireResource(GPU_ResourceDesc desc)
|
||||
clear_value.Color[3] = desc.clear_color.w;
|
||||
D3D12_CLEAR_VALUE *clear_value_ptr = d3d_desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ? &clear_value : 0;
|
||||
HRESULT hr = ID3D12Device_CreateCommittedResource(g->device, &heap_props, heap_flags, &d3d_desc, r->state, clear_value_ptr, &IID_ID3D12Resource, (void **)&r->d3d_resource);
|
||||
Atomic64FetchAdd(&g->driver_resources_allocated, 1);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
/* TODO: Don't panic */
|
||||
@ -1092,13 +1095,15 @@ void GPU_ReleaseResource(GPU_Resource *gpu_resource, GPU_ReleaseFlag flags)
|
||||
{
|
||||
switch (r->desc.kind)
|
||||
{
|
||||
default: break;
|
||||
case GPU_ResourceKind_Buffer:
|
||||
case GPU_ResourceKind_Texture1D:
|
||||
case GPU_ResourceKind_Texture2D:
|
||||
case GPU_ResourceKind_Texture3D:
|
||||
{
|
||||
ID3D12Resource_Release(r->d3d_resource);
|
||||
}
|
||||
Atomic64FetchAdd(&g->driver_resources_allocated, -1);
|
||||
} break;
|
||||
}
|
||||
Lock lock = LockE(&g->free_resources_mutex);
|
||||
r->next_free = g->first_free_resource;
|
||||
@ -1808,37 +1813,33 @@ void GPU_CopyBytesToFootprint(void *dst, void *src, GPU_Resource *footprint_refe
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ @hookdef Memory info hooks
|
||||
//~ @hookdef Statistics
|
||||
|
||||
GPU_MemoryStats GPU_QueryDedicatedMemoryStats(void)
|
||||
GPU_Stats GPU_QueryStats(void)
|
||||
{
|
||||
GPU_D12_SharedState *g = &GPU_D12_shared_state;
|
||||
GPU_MemoryStats result = ZI;
|
||||
GPU_Stats result = ZI;
|
||||
{
|
||||
DXGI_QUERY_VIDEO_MEMORY_INFO info = ZI;
|
||||
IDXGIAdapter3_QueryVideoMemoryInfo(g->adapter, 0, DXGI_MEMORY_SEGMENT_GROUP_LOCAL, &info);
|
||||
result.budget = info.Budget;
|
||||
result.committed = info.CurrentUsage;
|
||||
result.reserved = info.CurrentReservation;
|
||||
result.available_to_reserve = info.AvailableForReservation;
|
||||
|
||||
result.local_committed = info.CurrentUsage;
|
||||
result.local_budget = info.Budget;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
GPU_MemoryStats GPU_QuerySharedMemoryStats(void)
|
||||
{
|
||||
GPU_D12_SharedState *g = &GPU_D12_shared_state;
|
||||
GPU_MemoryStats result = ZI;
|
||||
{
|
||||
DXGI_QUERY_VIDEO_MEMORY_INFO info = ZI;
|
||||
IDXGIAdapter3_QueryVideoMemoryInfo(g->adapter, 0, DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL, &info);
|
||||
result.budget = info.Budget;
|
||||
result.committed = info.CurrentUsage;
|
||||
result.reserved = info.CurrentReservation;
|
||||
result.available_to_reserve = info.AvailableForReservation;
|
||||
|
||||
result.non_local_budget = info.Budget;
|
||||
result.non_local_committed = info.CurrentUsage;
|
||||
}
|
||||
result.driver_resources_allocated = Atomic64Fetch(&g->driver_resources_allocated);
|
||||
result.driver_descriptors_allocated = Atomic64Fetch(&g->driver_descriptors_allocated);
|
||||
return result;
|
||||
}
|
||||
|
||||
GPU_Stats GPU_QuerySharedMemoryStats(void)
|
||||
{
|
||||
GPU_D12_SharedState *g = &GPU_D12_shared_state;
|
||||
GPU_Stats result = ZI;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@ -12,8 +12,8 @@
|
||||
//~ Tweakable defines
|
||||
|
||||
#define GPU_D12_TearingIsAllowed 1
|
||||
#define GPU_D12_FrameLatency 2
|
||||
#define GPU_D12_SwapchainBufferCount 2
|
||||
#define GPU_D12_FrameLatency 1
|
||||
#define GPU_D12_SwapchainBufferCount 3
|
||||
#define GPU_D12_SwapchainFlags (((GPU_D12_TearingIsAllowed != 0) * DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING) \
|
||||
| ((GPU_D12_FrameLatency != 0) * DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT))
|
||||
|
||||
@ -288,6 +288,10 @@ Struct(GPU_D12_SharedState)
|
||||
|
||||
Atomic64Padded resource_barrier_gen;
|
||||
|
||||
/* Stats */
|
||||
Atomic64 driver_resources_allocated;
|
||||
Atomic64 driver_descriptors_allocated;
|
||||
|
||||
/* Queues */
|
||||
GPU_D12_Queue *queues[GPU_NumQueues];
|
||||
|
||||
|
||||
15
src/pp/pp.c
15
src/pp/pp.c
@ -2055,14 +2055,11 @@ void UpdateUser(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
//- Query vram
|
||||
|
||||
GPU_MemoryStats vram_dedi = GPU_QueryDedicatedMemoryStats();
|
||||
GPU_MemoryStats vram_shared = GPU_QuerySharedMemoryStats();
|
||||
|
||||
//////////////////////////////
|
||||
//- Debug draw
|
||||
|
||||
GPU_Stats gpu_stats = GPU_QueryStats();
|
||||
|
||||
/* Draw debug info */
|
||||
if (g->debug_draw)
|
||||
{
|
||||
@ -2125,8 +2122,12 @@ void UpdateUser(void)
|
||||
UI_BuildLabelF("Arenas allocated: %F", FmtUint(GetGstat(GSTAT_NUM_ARENAS)));
|
||||
UI_BuildSpacer(UI_PixelSize(20, 0));
|
||||
|
||||
UI_BuildLabelF("Video memory (GPU): %F MiB", FmtFloat((f64)vram_dedi.committed / 1024 / 1024));
|
||||
UI_BuildLabelF("Video memory (shared): %F MiB", FmtFloat((f64)vram_shared.committed / 1024 / 1024));
|
||||
UI_BuildLabelF("GPU dedicated memory usage: %F MiB", FmtFloat((f64)gpu_stats.local_committed / 1024 / 1024));
|
||||
UI_BuildLabelF("GPU shared memory usage: %F MiB", FmtFloat((f64)gpu_stats.non_local_committed / 1024 / 1024));
|
||||
UI_BuildSpacer(UI_PixelSize(20, 0));
|
||||
|
||||
UI_BuildLabelF("GPU resources: %F", FmtUint(gpu_stats.driver_resources_allocated));
|
||||
UI_BuildLabelF("GPU descriptors: %F", FmtUint(gpu_stats.driver_descriptors_allocated));
|
||||
//UI_BuildLabelF(\n"));
|
||||
//UI_BuildLabelF(\n"));
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user