From e38e1347d34749b037feb3064af515787db1979b Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Tue, 17 Apr 2018 09:20:18 +0200 Subject: [PATCH] [hud] HudTextRenderer -> HudRenderer Maintaining one class should be easier than creating multiple renderer classes and having to switch between them. --- src/dxvk/hud/dxvk_hud.cpp | 10 ++-- src/dxvk/hud/dxvk_hud.h | 4 +- src/dxvk/hud/dxvk_hud_devinfo.cpp | 2 +- src/dxvk/hud/dxvk_hud_devinfo.h | 4 +- src/dxvk/hud/dxvk_hud_fps.cpp | 2 +- src/dxvk/hud/dxvk_hud_fps.h | 5 +- ...xvk_hud_text.cpp => dxvk_hud_renderer.cpp} | 52 +++++++++---------- .../{dxvk_hud_text.h => dxvk_hud_renderer.h} | 14 ++--- src/dxvk/hud/dxvk_hud_stats.cpp | 10 ++-- src/dxvk/hud/dxvk_hud_stats.h | 12 ++--- .../{hud_text_frag.frag => hud_text.frag} | 0 .../{hud_text_vert.vert => hud_vert.vert} | 0 src/dxvk/meson.build | 6 +-- 13 files changed, 60 insertions(+), 61 deletions(-) rename src/dxvk/hud/{dxvk_hud_text.cpp => dxvk_hud_renderer.cpp} (84%) rename src/dxvk/hud/{dxvk_hud_text.h => dxvk_hud_renderer.h} (91%) rename src/dxvk/hud/shaders/{hud_text_frag.frag => hud_text.frag} (100%) rename src/dxvk/hud/shaders/{hud_text_vert.vert => hud_vert.vert} (100%) diff --git a/src/dxvk/hud/dxvk_hud.cpp b/src/dxvk/hud/dxvk_hud.cpp index 7a7fdf7a..a96e8afc 100644 --- a/src/dxvk/hud/dxvk_hud.cpp +++ b/src/dxvk/hud/dxvk_hud.cpp @@ -10,7 +10,7 @@ namespace dxvk::hud { : m_config (config), m_device (device), m_context (m_device->createContext()), - m_textRenderer (m_device, m_context), + m_renderer (m_device, m_context), m_uniformBuffer (createUniformBuffer()), m_hudDeviceInfo (device), m_hudStats (config.elements) { @@ -65,22 +65,22 @@ namespace dxvk::hud { void Hud::renderText() { - m_textRenderer.beginFrame(m_context); + m_renderer.beginFrame(m_context); HudPos position = { 8.0f, 24.0f }; if (m_config.elements.test(HudElement::DeviceInfo)) { position = m_hudDeviceInfo.renderText( - m_context, m_textRenderer, position); + m_context, m_renderer, position); } if (m_config.elements.test(HudElement::Framerate)) { position = m_hudFps.renderText( - m_context, m_textRenderer, position); + m_context, m_renderer, position); } position = m_hudStats.renderText( - m_context, m_textRenderer, position); + m_context, m_renderer, position); } diff --git a/src/dxvk/hud/dxvk_hud.h b/src/dxvk/hud/dxvk_hud.h index 7d3613b8..9eecdbd5 100644 --- a/src/dxvk/hud/dxvk_hud.h +++ b/src/dxvk/hud/dxvk_hud.h @@ -7,7 +7,7 @@ #include "dxvk_hud_config.h" #include "dxvk_hud_devinfo.h" #include "dxvk_hud_fps.h" -#include "dxvk_hud_text.h" +#include "dxvk_hud_renderer.h" #include "dxvk_hud_stats.h" namespace dxvk::hud { @@ -74,7 +74,7 @@ namespace dxvk::hud { const Rc m_device; const Rc m_context; - HudTextRenderer m_textRenderer; + HudRenderer m_renderer; VkExtent2D m_surfaceSize = { 0, 0 }; Rc m_uniformBuffer; diff --git a/src/dxvk/hud/dxvk_hud_devinfo.cpp b/src/dxvk/hud/dxvk_hud_devinfo.cpp index c58eae48..918277c3 100644 --- a/src/dxvk/hud/dxvk_hud_devinfo.cpp +++ b/src/dxvk/hud/dxvk_hud_devinfo.cpp @@ -23,7 +23,7 @@ namespace dxvk::hud { HudPos HudDeviceInfo::renderText( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position) { renderer.drawText(context, 16.0f, { position.x, position.y }, diff --git a/src/dxvk/hud/dxvk_hud_devinfo.h b/src/dxvk/hud/dxvk_hud_devinfo.h index eb533c10..44100a87 100644 --- a/src/dxvk/hud/dxvk_hud_devinfo.h +++ b/src/dxvk/hud/dxvk_hud_devinfo.h @@ -1,6 +1,6 @@ #pragma once -#include "dxvk_hud_text.h" +#include "dxvk_hud_renderer.h" namespace dxvk::hud { @@ -19,7 +19,7 @@ namespace dxvk::hud { HudPos renderText( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position); private: diff --git a/src/dxvk/hud/dxvk_hud_fps.cpp b/src/dxvk/hud/dxvk_hud_fps.cpp index cdc24702..e5752b9c 100644 --- a/src/dxvk/hud/dxvk_hud_fps.cpp +++ b/src/dxvk/hud/dxvk_hud_fps.cpp @@ -34,7 +34,7 @@ namespace dxvk::hud { HudPos HudFps::renderText( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position) { renderer.drawText(context, 16.0f, { position.x, position.y }, diff --git a/src/dxvk/hud/dxvk_hud_fps.h b/src/dxvk/hud/dxvk_hud_fps.h index 23ae20af..52b92a92 100644 --- a/src/dxvk/hud/dxvk_hud_fps.h +++ b/src/dxvk/hud/dxvk_hud_fps.h @@ -2,7 +2,7 @@ #include -#include "dxvk_hud_text.h" +#include "dxvk_hud_renderer.h" namespace dxvk::hud { @@ -10,7 +10,6 @@ namespace dxvk::hud { * \brief FPS display for the HUD * * Displays the current frames per second. - * TODO implement frame time info/graph. */ class HudFps { using Clock = std::chrono::high_resolution_clock; @@ -27,7 +26,7 @@ namespace dxvk::hud { HudPos renderText( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position); private: diff --git a/src/dxvk/hud/dxvk_hud_text.cpp b/src/dxvk/hud/dxvk_hud_renderer.cpp similarity index 84% rename from src/dxvk/hud/dxvk_hud_text.cpp rename to src/dxvk/hud/dxvk_hud_renderer.cpp index 137a9b41..d5f3a930 100644 --- a/src/dxvk/hud/dxvk_hud_text.cpp +++ b/src/dxvk/hud/dxvk_hud_renderer.cpp @@ -1,15 +1,15 @@ -#include "dxvk_hud_text.h" +#include "dxvk_hud_renderer.h" -#include -#include +#include +#include namespace dxvk::hud { - HudTextRenderer::HudTextRenderer( + HudRenderer::HudRenderer( const Rc& device, const Rc& context) : m_vertShader (createVertexShader(device)), - m_fragShader (createFragmentShader(device)), + m_textShader (createTextShader(device)), m_fontImage (createFontImage(device)), m_fontView (createFontView(device)), m_fontSampler (createFontSampler(device)), @@ -19,14 +19,14 @@ namespace dxvk::hud { } - HudTextRenderer::~HudTextRenderer() { + HudRenderer::~HudRenderer() { } - void HudTextRenderer::beginFrame(const Rc& context) { + void HudRenderer::beginFrame(const Rc& context) { context->bindShader(VK_SHADER_STAGE_VERTEX_BIT, m_vertShader); - context->bindShader(VK_SHADER_STAGE_FRAGMENT_BIT, m_fragShader); + context->bindShader(VK_SHADER_STAGE_FRAGMENT_BIT, m_textShader); DxvkInputAssemblyState iaState; iaState.primitiveTopology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; @@ -35,9 +35,9 @@ namespace dxvk::hud { context->setInputAssemblyState(iaState); const std::array ilAttributes = {{ - { 0, 0, VK_FORMAT_R32G32_SFLOAT, offsetof(HudTextVertex, position) }, - { 1, 0, VK_FORMAT_R32G32_UINT, offsetof(HudTextVertex, texcoord) }, - { 2, 0, VK_FORMAT_R32G32B32A32_SFLOAT, offsetof(HudTextVertex, color) }, + { 0, 0, VK_FORMAT_R32G32_SFLOAT, offsetof(HudVertex, position) }, + { 1, 0, VK_FORMAT_R32G32_UINT, offsetof(HudVertex, texcoord) }, + { 2, 0, VK_FORMAT_R32G32B32A32_SFLOAT, offsetof(HudVertex, color) }, }}; const std::array ilBindings = {{ @@ -52,7 +52,7 @@ namespace dxvk::hud { context->bindVertexBuffer(0, DxvkBufferSlice(m_vertexBuffer), - sizeof(HudTextVertex)); + sizeof(HudVertex)); context->bindResourceSampler(1, m_fontSampler); context->bindResourceView (2, m_fontView, nullptr); @@ -61,7 +61,7 @@ namespace dxvk::hud { } - void HudTextRenderer::drawText( + void HudRenderer::drawText( const Rc& context, float size, HudPos pos, @@ -72,8 +72,8 @@ namespace dxvk::hud { auto vertexSlice = m_vertexBuffer->allocPhysicalSlice(); context->invalidateBuffer(m_vertexBuffer, vertexSlice); - HudTextVertex* vertexData = reinterpret_cast( - vertexSlice.mapPtr(vertexIndex * sizeof(HudTextVertex))); + HudVertex* vertexData = reinterpret_cast( + vertexSlice.mapPtr(vertexIndex * sizeof(HudVertex))); const float sizeFactor = size / static_cast(g_hudFont.size); @@ -133,8 +133,8 @@ namespace dxvk::hud { } - Rc HudTextRenderer::createVertexShader(const Rc& device) { - const SpirvCodeBuffer codeBuffer(hud_text_vert); + Rc HudRenderer::createVertexShader(const Rc& device) { + const SpirvCodeBuffer codeBuffer(hud_vert); // One shader resource: Global HUD uniform buffer const std::array resourceSlots = {{ @@ -153,8 +153,8 @@ namespace dxvk::hud { } - Rc HudTextRenderer::createFragmentShader(const Rc& device) { - const SpirvCodeBuffer codeBuffer(hud_text_frag); + Rc HudRenderer::createTextShader(const Rc& device) { + const SpirvCodeBuffer codeBuffer(hud_text); // One shader resource: Global HUD uniform buffer const std::array resourceSlots = {{ @@ -174,7 +174,7 @@ namespace dxvk::hud { } - Rc HudTextRenderer::createFontImage(const Rc& device) { + Rc HudRenderer::createFontImage(const Rc& device) { DxvkImageCreateInfo info; info.type = VK_IMAGE_TYPE_2D; info.format = VK_FORMAT_R8_UNORM; @@ -196,7 +196,7 @@ namespace dxvk::hud { } - Rc HudTextRenderer::createFontView(const Rc& device) { + Rc HudRenderer::createFontView(const Rc& device) { DxvkImageViewCreateInfo info; info.type = VK_IMAGE_VIEW_TYPE_2D; info.format = m_fontImage->info().format; @@ -210,7 +210,7 @@ namespace dxvk::hud { } - Rc HudTextRenderer::createFontSampler(const Rc& device) { + Rc HudRenderer::createFontSampler(const Rc& device) { DxvkSamplerCreateInfo info; info.magFilter = VK_FILTER_LINEAR; info.minFilter = VK_FILTER_LINEAR; @@ -232,9 +232,9 @@ namespace dxvk::hud { } - Rc HudTextRenderer::createVertexBuffer(const Rc& device) { + Rc HudRenderer::createVertexBuffer(const Rc& device) { DxvkBufferCreateInfo info; - info.size = MaxVertexCount * sizeof(HudTextVertex); + info.size = MaxVertexCount * sizeof(HudVertex); info.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; info.stages = VK_PIPELINE_STAGE_VERTEX_INPUT_BIT; info.access = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT; @@ -245,7 +245,7 @@ namespace dxvk::hud { } - void HudTextRenderer::initFontTexture( + void HudRenderer::initFontTexture( const Rc& device, const Rc& context) { context->beginRecording( @@ -272,7 +272,7 @@ namespace dxvk::hud { } - void HudTextRenderer::initCharMap() { + void HudRenderer::initCharMap() { std::fill(m_charMap.begin(), m_charMap.end(), 0); for (uint32_t i = 0; i < g_hudFont.charCount; i++) diff --git a/src/dxvk/hud/dxvk_hud_text.h b/src/dxvk/hud/dxvk_hud_renderer.h similarity index 91% rename from src/dxvk/hud/dxvk_hud_text.h rename to src/dxvk/hud/dxvk_hud_renderer.h index 1f25c358..4021e2e8 100644 --- a/src/dxvk/hud/dxvk_hud_text.h +++ b/src/dxvk/hud/dxvk_hud_renderer.h @@ -42,9 +42,9 @@ namespace dxvk::hud { }; /** - * \brief Text vertex + * \brief Vertex */ - struct HudTextVertex { + struct HudVertex { HudPos position; HudTexCoord texcoord; HudColor color; @@ -56,15 +56,15 @@ namespace dxvk::hud { * Can be used by the presentation backend to * display performance and driver information. */ - class HudTextRenderer { + class HudRenderer { constexpr static VkDeviceSize MaxVertexCount = 1 << 16; public: - HudTextRenderer( + HudRenderer( const Rc& device, const Rc& context); - ~HudTextRenderer(); + ~HudRenderer(); void beginFrame( const Rc& context); @@ -81,7 +81,7 @@ namespace dxvk::hud { std::array m_charMap; Rc m_vertShader; - Rc m_fragShader; + Rc m_textShader; Rc m_fontImage; Rc m_fontView; @@ -93,7 +93,7 @@ namespace dxvk::hud { Rc createVertexShader( const Rc& device); - Rc createFragmentShader( + Rc createTextShader( const Rc& device); Rc createFontImage( diff --git a/src/dxvk/hud/dxvk_hud_stats.cpp b/src/dxvk/hud/dxvk_hud_stats.cpp index 5e8b1bbb..2762fd31 100644 --- a/src/dxvk/hud/dxvk_hud_stats.cpp +++ b/src/dxvk/hud/dxvk_hud_stats.cpp @@ -25,7 +25,7 @@ namespace dxvk::hud { HudPos HudStats::renderText( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position) { if (m_elements.test(HudElement::StatSubmissions)) position = this->printSubmissionStats(context, renderer, position); @@ -45,7 +45,7 @@ namespace dxvk::hud { HudPos HudStats::printDrawCallStats( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position) { const uint64_t frameCount = std::max(m_diffCounters.getCtr(DxvkStatCounter::QueuePresentCount), 1ull); @@ -78,7 +78,7 @@ namespace dxvk::hud { HudPos HudStats::printSubmissionStats( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position) { const uint64_t frameCount = std::max(m_diffCounters.getCtr(DxvkStatCounter::QueuePresentCount), 1ull); const uint64_t numSubmits = m_diffCounters.getCtr(DxvkStatCounter::QueueSubmitCount) / frameCount; @@ -96,7 +96,7 @@ namespace dxvk::hud { HudPos HudStats::printPipelineStats( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position) { const uint64_t gpCount = m_prevCounters.getCtr(DxvkStatCounter::PipeCountGraphics); const uint64_t cpCount = m_prevCounters.getCtr(DxvkStatCounter::PipeCountCompute); @@ -120,7 +120,7 @@ namespace dxvk::hud { HudPos HudStats::printMemoryStats( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position) { constexpr uint64_t mib = 1024 * 1024; diff --git a/src/dxvk/hud/dxvk_hud_stats.h b/src/dxvk/hud/dxvk_hud_stats.h index 1c9fe3fe..5ecef8cb 100644 --- a/src/dxvk/hud/dxvk_hud_stats.h +++ b/src/dxvk/hud/dxvk_hud_stats.h @@ -3,7 +3,7 @@ #include "../dxvk_stats.h" #include "dxvk_hud_config.h" -#include "dxvk_hud_text.h" +#include "dxvk_hud_renderer.h" namespace dxvk::hud { @@ -26,7 +26,7 @@ namespace dxvk::hud { HudPos renderText( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position); private: @@ -38,22 +38,22 @@ namespace dxvk::hud { HudPos printDrawCallStats( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position); HudPos printSubmissionStats( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position); HudPos printPipelineStats( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position); HudPos printMemoryStats( const Rc& context, - HudTextRenderer& renderer, + HudRenderer& renderer, HudPos position); static HudElements filterElements(HudElements elements); diff --git a/src/dxvk/hud/shaders/hud_text_frag.frag b/src/dxvk/hud/shaders/hud_text.frag similarity index 100% rename from src/dxvk/hud/shaders/hud_text_frag.frag rename to src/dxvk/hud/shaders/hud_text.frag diff --git a/src/dxvk/hud/shaders/hud_text_vert.vert b/src/dxvk/hud/shaders/hud_vert.vert similarity index 100% rename from src/dxvk/hud/shaders/hud_text_vert.vert rename to src/dxvk/hud/shaders/hud_vert.vert diff --git a/src/dxvk/meson.build b/src/dxvk/meson.build index a135b03a..aceb792b 100644 --- a/src/dxvk/meson.build +++ b/src/dxvk/meson.build @@ -12,8 +12,8 @@ dxvk_shaders = files([ 'shaders/dxvk_clear_image3d_u.comp', 'shaders/dxvk_clear_image3d_f.comp', - 'hud/shaders/hud_text_frag.frag', - 'hud/shaders/hud_text_vert.vert', + 'hud/shaders/hud_text.frag', + 'hud/shaders/hud_vert.vert', ]) dxvk_src = files([ @@ -65,8 +65,8 @@ dxvk_src = files([ 'hud/dxvk_hud_devinfo.cpp', 'hud/dxvk_hud_font.cpp', 'hud/dxvk_hud_fps.cpp', + 'hud/dxvk_hud_renderer.cpp', 'hud/dxvk_hud_stats.cpp', - 'hud/dxvk_hud_text.cpp', 'vulkan/dxvk_vulkan_extensions.cpp', 'vulkan/dxvk_vulkan_loader.cpp',