diff options
Diffstat (limited to '3rdparty/bgfx/src/renderer_d3d12.cpp')
-rw-r--r-- | 3rdparty/bgfx/src/renderer_d3d12.cpp | 176 |
1 files changed, 104 insertions, 72 deletions
diff --git a/3rdparty/bgfx/src/renderer_d3d12.cpp b/3rdparty/bgfx/src/renderer_d3d12.cpp index 3ba3619561c..cf001166b4c 100644 --- a/3rdparty/bgfx/src/renderer_d3d12.cpp +++ b/3rdparty/bgfx/src/renderer_d3d12.cpp @@ -316,7 +316,7 @@ namespace bgfx { namespace d3d12 { if (UINT16_MAX != _decl.m_attributes[attr]) { - memcpy(elem, &s_attrib[attr], sizeof(D3D12_INPUT_ELEMENT_DESC) ); + bx::memCopy(elem, &s_attrib[attr], sizeof(D3D12_INPUT_ELEMENT_DESC) ); if (0 == _decl.m_attributes[attr]) { @@ -439,7 +439,7 @@ namespace bgfx { namespace d3d12 char temp[2048]; va_list argList; va_start(argList, _format); - int size = bx::uint32_min(sizeof(temp)-1, vsnprintf(temp, sizeof(temp), _format, argList) ); + int size = bx::uint32_min(sizeof(temp)-1, bx::vsnprintf(temp, sizeof(temp), _format, argList) ); va_end(argList); temp[size] = '\0'; @@ -498,11 +498,11 @@ namespace bgfx { namespace d3d12 ErrorState::Enum errorState = ErrorState::Default; LUID luid; -// m_renderdocdll = loadRenderDoc(); + m_renderdocdll = loadRenderDoc(); m_fbh.idx = invalidHandle; - memset(m_uniforms, 0, sizeof(m_uniforms) ); - memset(&m_resolution, 0, sizeof(m_resolution) ); + bx::memSet(m_uniforms, 0, sizeof(m_uniforms) ); + bx::memSet(&m_resolution, 0, sizeof(m_resolution) ); #if USE_D3D12_DYNAMIC_LIB m_kernel32dll = bx::dlopen("kernel32.dll"); @@ -684,7 +684,7 @@ namespace bgfx { namespace d3d12 if (NULL != m_factory) { - memset(&m_adapterDesc, 0, sizeof(m_adapterDesc) ); + bx::memSet(&m_adapterDesc, 0, sizeof(m_adapterDesc) ); luid = m_device->GetAdapterLuid(); #if BX_PLATFORM_WINDOWS IDXGIAdapter3* adapter; @@ -730,7 +730,7 @@ namespace bgfx { namespace d3d12 ); if (0 == ii) { - memcpy(&m_architecture, &architecture, sizeof(architecture) ); + bx::memCopy(&m_architecture, &architecture, sizeof(architecture) ); } } } @@ -895,7 +895,7 @@ namespace bgfx { namespace d3d12 m_infoQueue->SetBreakOnSeverity(D3D12_MESSAGE_SEVERITY_WARNING, false); D3D12_INFO_QUEUE_FILTER filter; - memset(&filter, 0, sizeof(filter) ); + bx::memSet(&filter, 0, sizeof(filter) ); D3D12_MESSAGE_CATEGORY catlist[] = { @@ -1319,7 +1319,7 @@ namespace bgfx { namespace d3d12 void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) BX_OVERRIDE { VertexDecl& decl = m_vertexDecls[_handle.idx]; - memcpy(&decl, &_decl, sizeof(VertexDecl) ); + bx::memCopy(&decl, &_decl, sizeof(VertexDecl) ); dump(decl); } @@ -1456,7 +1456,7 @@ namespace bgfx { namespace d3d12 for (uint32_t yy = 0, height = srcHeight; yy < height; ++yy) { - memcpy(dst, src, pitch); + bx::memCopy(dst, src, pitch); src += srcPitch; dst += dstPitch; @@ -1547,7 +1547,7 @@ namespace bgfx { namespace d3d12 uint32_t size = BX_ALIGN_16(g_uniformTypeSize[_type] * _num); void* data = BX_ALLOC(g_allocator, size); - memset(data, 0, size); + bx::memSet(data, 0, size); m_uniforms[_handle.idx] = data; m_uniformReg.add(_handle, _name, data); } @@ -1559,8 +1559,10 @@ namespace bgfx { namespace d3d12 m_uniformReg.remove(_handle); } - void saveScreenShot(const char* _filePath) BX_OVERRIDE + void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) BX_OVERRIDE { + BX_UNUSED(_handle); + uint32_t idx = (m_backBufferColorIdx-1) % m_scd.BufferCount; m_cmd.finish(m_backBufferColorFence[idx]); ID3D12Resource* backBuffer = m_backBufferColor[idx]; @@ -1630,13 +1632,18 @@ namespace bgfx { namespace d3d12 void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) BX_OVERRIDE { - memcpy(m_uniforms[_loc], _data, _size); + bx::memCopy(m_uniforms[_loc], _data, _size); } void setMarker(const char* /*_marker*/, uint32_t /*_size*/) BX_OVERRIDE { } + void invalidateOcclusionQuery(OcclusionQueryHandle _handle) BX_OVERRIDE + { + m_occlusionQuery.invalidate(_handle); + } + void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE; void blitSetup(TextVideoMemBlitter& _blitter) BX_OVERRIDE @@ -1762,7 +1769,7 @@ namespace bgfx { namespace d3d12 void postReset() { - memset(m_backBufferColorFence, 0, sizeof(m_backBufferColorFence) ); + bx::memSet(m_backBufferColorFence, 0, sizeof(m_backBufferColorFence) ); uint32_t rtvDescriptorSize = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); @@ -1835,7 +1842,7 @@ namespace bgfx { namespace d3d12 uint32_t msaa = s_checkMsaa[ii]; D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS data; - memset(&data, 0, sizeof(msaa) ); + bx::memSet(&data, 0, sizeof(msaa) ); data.Format = getBufferFormat(); data.SampleCount = msaa; data.Flags = D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE; @@ -1945,12 +1952,12 @@ data.NumQualityLevels = 0; { if (_flags&BGFX_UNIFORM_FRAGMENTBIT) { - memcpy(&m_fsScratch[_regIndex], _val, _numRegs*16); + bx::memCopy(&m_fsScratch[_regIndex], _val, _numRegs*16); m_fsChanges += _numRegs; } else { - memcpy(&m_vsScratch[_regIndex], _val, _numRegs*16); + bx::memCopy(&m_vsScratch[_regIndex], _val, _numRegs*16); m_vsChanges += _numRegs; } } @@ -1977,7 +1984,7 @@ data.NumQualityLevels = 0; { uint32_t size = program.m_vsh->m_size; - memcpy(data, m_vsScratch, size); + bx::memCopy(data, m_vsScratch, size); data += size; m_vsChanges = 0; @@ -1985,7 +1992,7 @@ data.NumQualityLevels = 0; if (NULL != program.m_fsh) { - memcpy(data, m_fsScratch, program.m_fsh->m_size); + bx::memCopy(data, m_fsScratch, program.m_fsh->m_size); m_fsChanges = 0; } @@ -2149,7 +2156,7 @@ data.NumQualityLevels = 0; { for (uint32_t ii = 1; ii < BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS; ++ii) { - memcpy(&_desc.RenderTarget[ii], drt, sizeof(D3D12_RENDER_TARGET_BLEND_DESC) ); + bx::memCopy(&_desc.RenderTarget[ii], drt, sizeof(D3D12_RENDER_TARGET_BLEND_DESC) ); } } } @@ -2181,7 +2188,7 @@ data.NumQualityLevels = 0; { const uint32_t fstencil = unpackStencil(0, _stencil); - memset(&_desc, 0, sizeof(_desc) ); + bx::memSet(&_desc, 0, sizeof(_desc) ); uint32_t func = (_state&BGFX_STATE_DEPTH_TEST_MASK)>>BGFX_STATE_DEPTH_TEST_SHIFT; _desc.DepthEnable = 0 != func; _desc.DepthWriteMask = !!(BGFX_STATE_DEPTH_WRITE & _state) @@ -2212,7 +2219,7 @@ data.NumQualityLevels = 0; uint32_t setInputLayout(D3D12_INPUT_ELEMENT_DESC* _vertexElements, const VertexDecl& _vertexDecl, const ProgramD3D12& _program, uint8_t _numInstanceData) { VertexDecl decl; - memcpy(&decl, &_vertexDecl, sizeof(VertexDecl) ); + bx::memCopy(&decl, &_vertexDecl, sizeof(VertexDecl) ); const uint16_t* attrMask = _program.m_vsh->m_attrMask; for (uint32_t ii = 0; ii < Attrib::Count; ++ii) @@ -2236,7 +2243,7 @@ data.NumQualityLevels = 0; for (jj = 0; jj < num; ++jj) { curr = &_vertexElements[jj]; - if (0 == strcmp(curr->SemanticName, "TEXCOORD") + if (0 == bx::strncmp(curr->SemanticName, "TEXCOORD") && curr->SemanticIndex == index) { break; @@ -2249,7 +2256,7 @@ data.NumQualityLevels = 0; ++elem; } - memcpy(curr, &inst, sizeof(D3D12_INPUT_ELEMENT_DESC) ); + bx::memCopy(curr, &inst, sizeof(D3D12_INPUT_ELEMENT_DESC) ); curr->InputSlot = 1; curr->SemanticIndex = index; curr->AlignedByteOffset = ii*16; @@ -2291,7 +2298,7 @@ data.NumQualityLevels = 0; } D3D12_COMPUTE_PIPELINE_STATE_DESC desc; - memset(&desc, 0, sizeof(desc) ); + bx::memSet(&desc, 0, sizeof(desc) ); desc.pRootSignature = m_rootSignature; @@ -2330,7 +2337,7 @@ data.NumQualityLevels = 0; _stencil &= packStencil(~BGFX_STENCIL_FUNC_REF_MASK, BGFX_STENCIL_MASK); VertexDecl decl; - memcpy(&decl, &m_vertexDecls[_declIdx], sizeof(VertexDecl) ); + bx::memCopy(&decl, &m_vertexDecls[_declIdx], sizeof(VertexDecl) ); const uint16_t* attrMask = program.m_vsh->m_attrMask; for (uint32_t ii = 0; ii < Attrib::Count; ++ii) @@ -2361,7 +2368,7 @@ data.NumQualityLevels = 0; } D3D12_GRAPHICS_PIPELINE_STATE_DESC desc; - memset(&desc, 0, sizeof(desc) ); + bx::memSet(&desc, 0, sizeof(desc) ); desc.pRootSignature = m_rootSignature; @@ -2369,7 +2376,7 @@ data.NumQualityLevels = 0; desc.VS.BytecodeLength = program.m_vsh->m_code->size; const Memory* temp = alloc(program.m_fsh->m_code->size); - memset(temp->data, 0, temp->size); + bx::memSet(temp->data, 0, temp->size); bx::MemoryReader rd(program.m_fsh->m_code->data, program.m_fsh->m_code->size); bx::StaticMemoryBlockWriter wr(temp->data, temp->size); @@ -2388,14 +2395,14 @@ data.NumQualityLevels = 0; dxbcHash(temp->data + 20, temp->size - 20, temp->data + 4); - patchShader = 0 == memcmp(program.m_fsh->m_code->data, temp->data, 16); + patchShader = 0 == bx::memCmp(program.m_fsh->m_code->data, temp->data, 16); BX_CHECK(patchShader, "DXBC fragment shader patching error (ShaderHandle: %d).", program.m_fsh - m_shaders); if (!patchShader) { for (uint32_t ii = 20; ii < temp->size; ii += 16) { - if (0 != memcmp(&program.m_fsh->m_code->data[ii], &temp->data[ii], 16) ) + if (0 != bx::memCmp(&program.m_fsh->m_code->data[ii], &temp->data[ii], 16) ) { // bx::debugPrintfData(&program.m_fsh->m_code->data[ii], temp->size-ii, ""); // bx::debugPrintfData(&temp->data[ii], temp->size-ii, ""); @@ -2410,7 +2417,7 @@ data.NumQualityLevels = 0; if (patchShader) { - memcpy(temp->data, program.m_fsh->m_code->data, program.m_fsh->m_code->size); + bx::memCopy(temp->data, program.m_fsh->m_code->data, program.m_fsh->m_code->size); bx::seek(&wr, 0, bx::Whence::Begin); union { uint32_t offset; void* ptr; } cast = @@ -2509,7 +2516,7 @@ data.NumQualityLevels = 0; if (FAILED(hr) ) { BX_TRACE("Failed to load cached PSO (HRESULT 0x%08x).", hr); - memset(&desc.CachedPSO, 0, sizeof(desc.CachedPSO) ); + bx::memSet(&desc.CachedPSO, 0, sizeof(desc.CachedPSO) ); } } } @@ -2632,7 +2639,7 @@ data.NumQualityLevels = 0; else { UniformHandle handle; - memcpy(&handle, _uniformBuffer.read(sizeof(UniformHandle) ), sizeof(UniformHandle) ); + bx::memCopy(&handle, _uniformBuffer.read(sizeof(UniformHandle) ), sizeof(UniformHandle) ); data = (const char*)m_uniforms[handle.idx]; } @@ -2977,7 +2984,7 @@ data.NumQualityLevels = 0; D3D12_SHADER_RESOURCE_VIEW_DESC* srvd = &_texture.m_srvd; if (0 != _mip) { - memcpy(&tmpSrvd, srvd, sizeof(tmpSrvd) ); + bx::memCopy(&tmpSrvd, srvd, sizeof(tmpSrvd) ); srvd = &tmpSrvd; switch (_texture.m_srvd.ViewDimension) @@ -3023,7 +3030,7 @@ data.NumQualityLevels = 0; if (0 != _mip) { - memcpy(&tmpUavd, uavd, sizeof(tmpUavd) ); + bx::memCopy(&tmpUavd, uavd, sizeof(tmpUavd) ); uavd = &tmpUavd; switch (_texture.m_uavd.ViewDimension) @@ -3473,7 +3480,7 @@ data.NumQualityLevels = 0; } else { - memset(&cmd.vbv[1], 0, sizeof(cmd.vbv[1]) ); + bx::memSet(&cmd.vbv[1], 0, sizeof(cmd.vbv[1]) ); } cmd.draw.InstanceCount = _draw.m_numInstances; cmd.draw.VertexCountPerInstance = numVertices; @@ -3514,7 +3521,7 @@ data.NumQualityLevels = 0; } else { - memset(&cmd.vbv[1], 0, sizeof(cmd.vbv[1]) ); + bx::memSet(&cmd.vbv[1], 0, sizeof(cmd.vbv[1]) ); } cmd.drawIndexed.IndexCountPerInstance = numIndices; cmd.drawIndexed.InstanceCount = _draw.m_numInstances; @@ -3579,9 +3586,9 @@ data.NumQualityLevels = 0; _commandList->SetGraphicsRootConstantBufferView(Rdt::CBV, cmd.cbv); } - if (0 != memcmp(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ) ) + if (0 != bx::memCmp(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ) ) { - memcpy(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ); + bx::memCopy(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ); _commandList->IASetVertexBuffers(0 , 0 == cmd.vbv[1].BufferLocation ? 1 : 2 , cmd.vbv @@ -3609,18 +3616,18 @@ data.NumQualityLevels = 0; _commandList->SetGraphicsRootConstantBufferView(Rdt::CBV, cmd.cbv); } - if (0 != memcmp(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ) ) + if (0 != bx::memCmp(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ) ) { - memcpy(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ); + bx::memCopy(m_current.vbv, cmd.vbv, sizeof(cmd.vbv) ); _commandList->IASetVertexBuffers(0 , 0 == cmd.vbv[1].BufferLocation ? 1 : 2 , cmd.vbv ); } - if (0 != memcmp(&m_current.ibv, &cmd.ibv, sizeof(cmd.ibv) ) ) + if (0 != bx::memCmp(&m_current.ibv, &cmd.ibv, sizeof(cmd.ibv) ) ) { - memcpy(&m_current.ibv, &cmd.ibv, sizeof(cmd.ibv) ); + bx::memCopy(&m_current.ibv, &cmd.ibv, sizeof(cmd.ibv) ); _commandList->IASetIndexBuffer(&cmd.ibv); } @@ -3644,14 +3651,14 @@ data.NumQualityLevels = 0; if (_clean) { - memset(&m_current, 0, sizeof(m_current) ); + bx::memSet(&m_current, 0, sizeof(m_current) ); } } void BatchD3D12::begin() { - memset(&m_stats, 0, sizeof(m_stats) ); - memset(&m_current, 0, sizeof(m_current) ); + bx::memSet(&m_stats, 0, sizeof(m_stats) ); + bx::memSet(&m_current, 0, sizeof(m_current) ); } void BatchD3D12::end(ID3D12GraphicsCommandList* _commandList) @@ -3772,7 +3779,7 @@ data.NumQualityLevels = 0; ID3D12Resource* staging = createCommittedResource(s_renderD3D12->m_device, HeapProperty::Upload, _size); uint8_t* data; DX_CHECK(staging->Map(0, NULL, (void**)&data) ); - memcpy(data, _data, _size); + bx::memCopy(data, _data, _size); staging->Unmap(0, NULL); D3D12_RESOURCE_STATES state = setState(_commandList, D3D12_RESOURCE_STATE_COPY_DEST); @@ -3933,7 +3940,7 @@ data.NumQualityLevels = 0; uint8_t numAttrs = 0; bx::read(&reader, numAttrs); - memset(m_attrMask, 0, sizeof(m_attrMask) ); + bx::memSet(m_attrMask, 0, sizeof(m_attrMask) ); for (uint32_t ii = 0; ii < numAttrs; ++ii) { @@ -4128,7 +4135,7 @@ data.NumQualityLevels = 0; const uint32_t msaaQuality = bx::uint32_satsub( (m_flags&BGFX_TEXTURE_RT_MSAA_MASK)>>BGFX_TEXTURE_RT_MSAA_SHIFT, 1); const DXGI_SAMPLE_DESC& msaa = s_msaa[msaaQuality]; - memset(&m_srvd, 0, sizeof(m_srvd) ); + bx::memSet(&m_srvd, 0, sizeof(m_srvd) ); m_srvd.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; m_srvd.Format = s_textureFormat[m_textureFormat].m_fmtSrv; DXGI_FORMAT format = s_textureFormat[m_textureFormat].m_fmt; @@ -4263,7 +4270,8 @@ data.NumQualityLevels = 0; break; case Texture3D: - resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + resourceDesc.DepthOrArraySize = uint16_t(m_depth); m_srvd.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; m_srvd.Texture3D.MostDetailedMip = 0; m_srvd.Texture3D.MipLevels = numMips; @@ -4385,7 +4393,7 @@ data.NumQualityLevels = 0; DX_CHECK(staging->Map(0, NULL, (void**)&data) ); for (uint32_t ii = 0, height = _rect.m_height; ii < height; ++ii) { - memcpy(&data[ii*rowPitch], &_mem->data[ii*srcpitch], srcpitch); + bx::memCopy(&data[ii*rowPitch], &_mem->data[ii*srcpitch], srcpitch); } staging->Unmap(0, NULL); @@ -4431,7 +4439,7 @@ data.NumQualityLevels = 0; { m_denseIdx = UINT16_MAX; m_numTh = _num; - memcpy(m_attachment, _attachment, _num*sizeof(Attachment) ); + bx::memCopy(m_attachment, _attachment, _num*sizeof(Attachment) ); postReset(); } @@ -4716,7 +4724,10 @@ data.NumQualityLevels = 0; while (0 == m_control.reserve(1) ) { OcclusionQueryHandle handle = m_handle[m_control.m_read]; - _render->m_occlusion[handle.idx] = 0 < m_result[handle.idx]; + if (isValid(handle) ) + { + _render->m_occlusion[handle.idx] = int32_t(m_result[handle.idx]); + } m_control.consume(1); } @@ -4744,6 +4755,20 @@ data.NumQualityLevels = 0; m_control.commit(1); } + void OcclusionQueryD3D12::invalidate(OcclusionQueryHandle _handle) + { + const uint32_t size = m_control.m_size; + + for (uint32_t ii = 0, num = m_control.available(); ii < num; ++ii) + { + OcclusionQueryHandle& handle = m_handle[(m_control.m_read + ii) % size]; + if (handle.idx == _handle.idx) + { + handle.idx = bgfx::invalidHandle; + } + } + } + struct Bind { D3D12_GPU_DESCRIPTOR_HANDLE m_srvHandle; @@ -4909,7 +4934,7 @@ data.NumQualityLevels = 0; if (BGFX_CLEAR_NONE != clr.m_flags) { Rect clearRect = rect; - clearRect.intersect(rect, viewScissorRect); + clearRect.setIntersect(rect, viewScissorRect); clearQuad(clearRect, clr, _render->m_colorPalette); } @@ -5286,7 +5311,7 @@ data.NumQualityLevels = 0; } else { - memcpy(&srvHandle[stage], &srvHandle[0], sizeof(D3D12_GPU_DESCRIPTOR_HANDLE) ); + bx::memCopy(&srvHandle[stage], &srvHandle[0], sizeof(D3D12_GPU_DESCRIPTOR_HANDLE) ); samplerFlags[stage] = 0; } } @@ -5372,7 +5397,7 @@ data.NumQualityLevels = 0; { restoreScissor = true; Rect scissorRect; - scissorRect.intersect(viewScissorRect,_render->m_rectCache.m_cache[scissor]); + scissorRect.setIntersect(viewScissorRect,_render->m_rectCache.m_cache[scissor]); if (scissorRect.isZeroArea() ) { continue; @@ -5545,27 +5570,34 @@ data.NumQualityLevels = 0; ); #if BX_PLATFORM_WINDOWS - DXGI_QUERY_VIDEO_MEMORY_INFO memInfo; - DX_CHECK(m_adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_LOCAL, &memInfo) ); + DXGI_QUERY_VIDEO_MEMORY_INFO vmi[2]; + DX_CHECK(m_adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_LOCAL, &vmi[0]) ); + DX_CHECK(m_adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL, &vmi[1]) ); - char budget[16]; - bx::prettify(budget, BX_COUNTOF(budget), memInfo.Budget); + for (uint32_t ii = 0; ii < BX_COUNTOF(vmi); ++ii) + { + const DXGI_QUERY_VIDEO_MEMORY_INFO& memInfo = vmi[ii]; - char currentUsage[16]; - bx::prettify(currentUsage, BX_COUNTOF(currentUsage), memInfo.CurrentUsage); + char budget[16]; + bx::prettify(budget, BX_COUNTOF(budget), memInfo.Budget); - char availableForReservation[16]; - bx::prettify(availableForReservation, BX_COUNTOF(currentUsage), memInfo.AvailableForReservation); + char currentUsage[16]; + bx::prettify(currentUsage, BX_COUNTOF(currentUsage), memInfo.CurrentUsage); - char currentReservation[16]; - bx::prettify(currentReservation, BX_COUNTOF(currentReservation), memInfo.CurrentReservation); + char availableForReservation[16]; + bx::prettify(availableForReservation, BX_COUNTOF(currentUsage), memInfo.AvailableForReservation); - tvm.printf(0, pos++, 0x8f, " Budget: %s, Usage: %s, AvailRes: %s, CurrRes: %s " - , budget - , currentUsage - , availableForReservation - , currentReservation - ); + char currentReservation[16]; + bx::prettify(currentReservation, BX_COUNTOF(currentReservation), memInfo.CurrentReservation); + + tvm.printf(0, pos++, 0x8f, " %s - Budget: %10s, Usage: %10s, AvailRes: %10s, CurrRes: %10s " + , 0 == ii ? "Local " : "Non-local" + , budget + , currentUsage + , availableForReservation + , currentReservation + ); + } #endif // BX_PLATFORM_WINDOWS pos = 10; |