mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-20 19:54:19 +01:00
[hud] HudTextRenderer -> HudRenderer
Maintaining one class should be easier than creating multiple renderer classes and having to switch between them.
This commit is contained in:
parent
75c928fc87
commit
e38e1347d3
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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<DxvkDevice> m_device;
|
||||
const Rc<DxvkContext> m_context;
|
||||
|
||||
HudTextRenderer m_textRenderer;
|
||||
HudRenderer m_renderer;
|
||||
VkExtent2D m_surfaceSize = { 0, 0 };
|
||||
|
||||
Rc<DxvkBuffer> m_uniformBuffer;
|
||||
|
@ -23,7 +23,7 @@ namespace dxvk::hud {
|
||||
|
||||
HudPos HudDeviceInfo::renderText(
|
||||
const Rc<DxvkContext>& context,
|
||||
HudTextRenderer& renderer,
|
||||
HudRenderer& renderer,
|
||||
HudPos position) {
|
||||
renderer.drawText(context, 16.0f,
|
||||
{ position.x, position.y },
|
||||
|
@ -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<DxvkContext>& context,
|
||||
HudTextRenderer& renderer,
|
||||
HudRenderer& renderer,
|
||||
HudPos position);
|
||||
|
||||
private:
|
||||
|
@ -34,7 +34,7 @@ namespace dxvk::hud {
|
||||
|
||||
HudPos HudFps::renderText(
|
||||
const Rc<DxvkContext>& context,
|
||||
HudTextRenderer& renderer,
|
||||
HudRenderer& renderer,
|
||||
HudPos position) {
|
||||
renderer.drawText(context, 16.0f,
|
||||
{ position.x, position.y },
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
#include <chrono>
|
||||
|
||||
#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<DxvkContext>& context,
|
||||
HudTextRenderer& renderer,
|
||||
HudRenderer& renderer,
|
||||
HudPos position);
|
||||
|
||||
private:
|
||||
|
@ -1,15 +1,15 @@
|
||||
#include "dxvk_hud_text.h"
|
||||
#include "dxvk_hud_renderer.h"
|
||||
|
||||
#include <hud_text_frag.h>
|
||||
#include <hud_text_vert.h>
|
||||
#include <hud_text.h>
|
||||
#include <hud_vert.h>
|
||||
|
||||
namespace dxvk::hud {
|
||||
|
||||
HudTextRenderer::HudTextRenderer(
|
||||
HudRenderer::HudRenderer(
|
||||
const Rc<DxvkDevice>& device,
|
||||
const Rc<DxvkContext>& 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<DxvkContext>& context) {
|
||||
void HudRenderer::beginFrame(const Rc<DxvkContext>& 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<DxvkVertexAttribute, 3> 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<DxvkVertexBinding, 1> 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<DxvkContext>& 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<HudTextVertex*>(
|
||||
vertexSlice.mapPtr(vertexIndex * sizeof(HudTextVertex)));
|
||||
HudVertex* vertexData = reinterpret_cast<HudVertex*>(
|
||||
vertexSlice.mapPtr(vertexIndex * sizeof(HudVertex)));
|
||||
|
||||
const float sizeFactor = size / static_cast<float>(g_hudFont.size);
|
||||
|
||||
@ -133,8 +133,8 @@ namespace dxvk::hud {
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkShader> HudTextRenderer::createVertexShader(const Rc<DxvkDevice>& device) {
|
||||
const SpirvCodeBuffer codeBuffer(hud_text_vert);
|
||||
Rc<DxvkShader> HudRenderer::createVertexShader(const Rc<DxvkDevice>& device) {
|
||||
const SpirvCodeBuffer codeBuffer(hud_vert);
|
||||
|
||||
// One shader resource: Global HUD uniform buffer
|
||||
const std::array<DxvkResourceSlot, 1> resourceSlots = {{
|
||||
@ -153,8 +153,8 @@ namespace dxvk::hud {
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkShader> HudTextRenderer::createFragmentShader(const Rc<DxvkDevice>& device) {
|
||||
const SpirvCodeBuffer codeBuffer(hud_text_frag);
|
||||
Rc<DxvkShader> HudRenderer::createTextShader(const Rc<DxvkDevice>& device) {
|
||||
const SpirvCodeBuffer codeBuffer(hud_text);
|
||||
|
||||
// One shader resource: Global HUD uniform buffer
|
||||
const std::array<DxvkResourceSlot, 2> resourceSlots = {{
|
||||
@ -174,7 +174,7 @@ namespace dxvk::hud {
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkImage> HudTextRenderer::createFontImage(const Rc<DxvkDevice>& device) {
|
||||
Rc<DxvkImage> HudRenderer::createFontImage(const Rc<DxvkDevice>& device) {
|
||||
DxvkImageCreateInfo info;
|
||||
info.type = VK_IMAGE_TYPE_2D;
|
||||
info.format = VK_FORMAT_R8_UNORM;
|
||||
@ -196,7 +196,7 @@ namespace dxvk::hud {
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkImageView> HudTextRenderer::createFontView(const Rc<DxvkDevice>& device) {
|
||||
Rc<DxvkImageView> HudRenderer::createFontView(const Rc<DxvkDevice>& device) {
|
||||
DxvkImageViewCreateInfo info;
|
||||
info.type = VK_IMAGE_VIEW_TYPE_2D;
|
||||
info.format = m_fontImage->info().format;
|
||||
@ -210,7 +210,7 @@ namespace dxvk::hud {
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkSampler> HudTextRenderer::createFontSampler(const Rc<DxvkDevice>& device) {
|
||||
Rc<DxvkSampler> HudRenderer::createFontSampler(const Rc<DxvkDevice>& device) {
|
||||
DxvkSamplerCreateInfo info;
|
||||
info.magFilter = VK_FILTER_LINEAR;
|
||||
info.minFilter = VK_FILTER_LINEAR;
|
||||
@ -232,9 +232,9 @@ namespace dxvk::hud {
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkBuffer> HudTextRenderer::createVertexBuffer(const Rc<DxvkDevice>& device) {
|
||||
Rc<DxvkBuffer> HudRenderer::createVertexBuffer(const Rc<DxvkDevice>& 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<DxvkDevice>& device,
|
||||
const Rc<DxvkContext>& 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++)
|
@ -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<DxvkDevice>& device,
|
||||
const Rc<DxvkContext>& context);
|
||||
|
||||
~HudTextRenderer();
|
||||
~HudRenderer();
|
||||
|
||||
void beginFrame(
|
||||
const Rc<DxvkContext>& context);
|
||||
@ -81,7 +81,7 @@ namespace dxvk::hud {
|
||||
std::array<uint8_t, 256> m_charMap;
|
||||
|
||||
Rc<DxvkShader> m_vertShader;
|
||||
Rc<DxvkShader> m_fragShader;
|
||||
Rc<DxvkShader> m_textShader;
|
||||
|
||||
Rc<DxvkImage> m_fontImage;
|
||||
Rc<DxvkImageView> m_fontView;
|
||||
@ -93,7 +93,7 @@ namespace dxvk::hud {
|
||||
Rc<DxvkShader> createVertexShader(
|
||||
const Rc<DxvkDevice>& device);
|
||||
|
||||
Rc<DxvkShader> createFragmentShader(
|
||||
Rc<DxvkShader> createTextShader(
|
||||
const Rc<DxvkDevice>& device);
|
||||
|
||||
Rc<DxvkImage> createFontImage(
|
@ -25,7 +25,7 @@ namespace dxvk::hud {
|
||||
|
||||
HudPos HudStats::renderText(
|
||||
const Rc<DxvkContext>& 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<DxvkContext>& 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<DxvkContext>& 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<DxvkContext>& 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<DxvkContext>& context,
|
||||
HudTextRenderer& renderer,
|
||||
HudRenderer& renderer,
|
||||
HudPos position) {
|
||||
constexpr uint64_t mib = 1024 * 1024;
|
||||
|
||||
|
@ -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<DxvkContext>& context,
|
||||
HudTextRenderer& renderer,
|
||||
HudRenderer& renderer,
|
||||
HudPos position);
|
||||
|
||||
private:
|
||||
@ -38,22 +38,22 @@ namespace dxvk::hud {
|
||||
|
||||
HudPos printDrawCallStats(
|
||||
const Rc<DxvkContext>& context,
|
||||
HudTextRenderer& renderer,
|
||||
HudRenderer& renderer,
|
||||
HudPos position);
|
||||
|
||||
HudPos printSubmissionStats(
|
||||
const Rc<DxvkContext>& context,
|
||||
HudTextRenderer& renderer,
|
||||
HudRenderer& renderer,
|
||||
HudPos position);
|
||||
|
||||
HudPos printPipelineStats(
|
||||
const Rc<DxvkContext>& context,
|
||||
HudTextRenderer& renderer,
|
||||
HudRenderer& renderer,
|
||||
HudPos position);
|
||||
|
||||
HudPos printMemoryStats(
|
||||
const Rc<DxvkContext>& context,
|
||||
HudTextRenderer& renderer,
|
||||
HudRenderer& renderer,
|
||||
HudPos position);
|
||||
|
||||
static HudElements filterElements(HudElements elements);
|
||||
|
@ -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',
|
||||
|
Loading…
x
Reference in New Issue
Block a user