mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-12-23 06:57:08 +00:00
VideoBackends: Use m_system in vertex managers
This commit is contained in:
parent
d8cd227ac2
commit
be20ca2287
@ -162,7 +162,7 @@ bool VideoBackend::Initialize(Core::System& system, const WindowSystemInfo& wsi)
|
||||
}
|
||||
|
||||
auto gfx = std::make_unique<DX11::Gfx>(std::move(swap_chain), wsi.render_surface_scale);
|
||||
auto vertex_manager = std::make_unique<VertexManager>();
|
||||
auto vertex_manager = std::make_unique<VertexManager>(system);
|
||||
auto perf_query = std::make_unique<PerfQuery>();
|
||||
auto bounding_box = std::make_unique<D3DBoundingBox>();
|
||||
|
||||
|
||||
@ -67,7 +67,9 @@ CreateTexelBufferView(ID3D11Buffer* buffer, TexelBufferFormat format, DXGI_FORMA
|
||||
return srv;
|
||||
}
|
||||
|
||||
VertexManager::VertexManager() = default;
|
||||
VertexManager::VertexManager(Core::System& system) : m_system(system)
|
||||
{
|
||||
}
|
||||
|
||||
VertexManager::~VertexManager() = default;
|
||||
|
||||
@ -262,9 +264,7 @@ void VertexManager::CommitBuffer(u32 num_vertices, u32 vertex_stride, u32 num_in
|
||||
|
||||
void VertexManager::UploadUniforms()
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
|
||||
auto& vertex_shader_manager = system.GetVertexShaderManager();
|
||||
auto& vertex_shader_manager = m_system.GetVertexShaderManager();
|
||||
if (vertex_shader_manager.dirty)
|
||||
{
|
||||
UpdateConstantBuffer(m_vertex_constant_buffer.Get(), &vertex_shader_manager.constants,
|
||||
@ -272,7 +272,7 @@ void VertexManager::UploadUniforms()
|
||||
vertex_shader_manager.dirty = false;
|
||||
}
|
||||
|
||||
auto& geometry_shader_manager = system.GetGeometryShaderManager();
|
||||
auto& geometry_shader_manager = m_system.GetGeometryShaderManager();
|
||||
if (geometry_shader_manager.dirty)
|
||||
{
|
||||
UpdateConstantBuffer(m_geometry_constant_buffer.Get(), &geometry_shader_manager.constants,
|
||||
@ -280,7 +280,7 @@ void VertexManager::UploadUniforms()
|
||||
geometry_shader_manager.dirty = false;
|
||||
}
|
||||
|
||||
auto& pixel_shader_manager = system.GetPixelShaderManager();
|
||||
auto& pixel_shader_manager = m_system.GetPixelShaderManager();
|
||||
if (pixel_shader_manager.dirty)
|
||||
{
|
||||
UpdateConstantBuffer(m_pixel_constant_buffer.Get(), &pixel_shader_manager.constants,
|
||||
|
||||
@ -14,6 +14,11 @@
|
||||
|
||||
enum class ShaderAttrib : u32;
|
||||
|
||||
namespace Core
|
||||
{
|
||||
class System;
|
||||
}
|
||||
|
||||
namespace DX11
|
||||
{
|
||||
class D3DVertexFormat : public NativeVertexFormat
|
||||
@ -35,7 +40,7 @@ private:
|
||||
class VertexManager : public VertexManagerBase
|
||||
{
|
||||
public:
|
||||
VertexManager();
|
||||
VertexManager(Core::System& system);
|
||||
~VertexManager() override;
|
||||
|
||||
bool Initialize() override;
|
||||
@ -74,6 +79,8 @@ private:
|
||||
ComPtr<ID3D11Buffer> m_texel_buffer = nullptr;
|
||||
std::array<ComPtr<ID3D11ShaderResourceView>, NUM_TEXEL_BUFFER_FORMATS> m_texel_buffer_views;
|
||||
u32 m_texel_buffer_offset = 0;
|
||||
|
||||
Core::System& m_system;
|
||||
};
|
||||
|
||||
} // namespace DX11
|
||||
|
||||
@ -24,7 +24,9 @@
|
||||
|
||||
namespace DX12
|
||||
{
|
||||
VertexManager::VertexManager() = default;
|
||||
VertexManager::VertexManager(Core::System& system) : m_system(system)
|
||||
{
|
||||
}
|
||||
|
||||
VertexManager::~VertexManager() = default;
|
||||
|
||||
@ -146,8 +148,7 @@ void VertexManager::UploadUniforms()
|
||||
|
||||
void VertexManager::UpdateVertexShaderConstants()
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& vertex_shader_manager = system.GetVertexShaderManager();
|
||||
auto& vertex_shader_manager = m_system.GetVertexShaderManager();
|
||||
|
||||
if (!vertex_shader_manager.dirty || !ReserveConstantStorage())
|
||||
return;
|
||||
@ -162,8 +163,7 @@ void VertexManager::UpdateVertexShaderConstants()
|
||||
|
||||
void VertexManager::UpdateGeometryShaderConstants()
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& geometry_shader_manager = system.GetGeometryShaderManager();
|
||||
auto& geometry_shader_manager = m_system.GetGeometryShaderManager();
|
||||
|
||||
if (!geometry_shader_manager.dirty || !ReserveConstantStorage())
|
||||
return;
|
||||
@ -178,8 +178,7 @@ void VertexManager::UpdateGeometryShaderConstants()
|
||||
|
||||
void VertexManager::UpdatePixelShaderConstants()
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& pixel_shader_manager = system.GetPixelShaderManager();
|
||||
auto& pixel_shader_manager = m_system.GetPixelShaderManager();
|
||||
|
||||
if (!ReserveConstantStorage())
|
||||
return;
|
||||
@ -197,8 +196,7 @@ void VertexManager::UpdatePixelShaderConstants()
|
||||
|
||||
void VertexManager::UpdateCustomShaderConstants()
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& pixel_shader_manager = system.GetPixelShaderManager();
|
||||
auto& pixel_shader_manager = m_system.GetPixelShaderManager();
|
||||
|
||||
if (!ReserveConstantStorage())
|
||||
return;
|
||||
@ -217,8 +215,7 @@ void VertexManager::UpdateCustomShaderConstants()
|
||||
|
||||
bool VertexManager::ReserveConstantStorage()
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& pixel_shader_manager = system.GetPixelShaderManager();
|
||||
auto& pixel_shader_manager = m_system.GetPixelShaderManager();
|
||||
|
||||
static constexpr u32 reserve_size =
|
||||
static_cast<u32>(std::max({sizeof(PixelShaderConstants), sizeof(VertexShaderConstants),
|
||||
@ -242,8 +239,7 @@ bool VertexManager::ReserveConstantStorage()
|
||||
|
||||
void VertexManager::UploadAllConstants()
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& pixel_shader_manager = system.GetPixelShaderManager();
|
||||
auto& pixel_shader_manager = m_system.GetPixelShaderManager();
|
||||
|
||||
// We are free to re-use parts of the buffer now since we're uploading all constants.
|
||||
const u32 pixel_constants_offset = 0;
|
||||
@ -278,8 +274,8 @@ void VertexManager::UploadAllConstants()
|
||||
Gfx::GetInstance()->SetConstantBuffer(3, m_uniform_stream_buffer.GetCurrentGPUPointer() +
|
||||
geometry_constants_offset);
|
||||
|
||||
auto& vertex_shader_manager = system.GetVertexShaderManager();
|
||||
auto& geometry_shader_manager = system.GetGeometryShaderManager();
|
||||
auto& vertex_shader_manager = m_system.GetVertexShaderManager();
|
||||
auto& geometry_shader_manager = m_system.GetGeometryShaderManager();
|
||||
|
||||
// Copy the actual data in
|
||||
std::memcpy(m_uniform_stream_buffer.GetCurrentHostPointer() + pixel_constants_offset,
|
||||
|
||||
@ -9,12 +9,17 @@
|
||||
#include "VideoBackends/D3D12/DescriptorHeapManager.h"
|
||||
#include "VideoCommon/VertexManagerBase.h"
|
||||
|
||||
namespace Core
|
||||
{
|
||||
class System;
|
||||
}
|
||||
|
||||
namespace DX12
|
||||
{
|
||||
class VertexManager final : public VertexManagerBase
|
||||
{
|
||||
public:
|
||||
VertexManager();
|
||||
VertexManager(Core::System& system);
|
||||
~VertexManager() override;
|
||||
|
||||
bool Initialize() override;
|
||||
@ -49,6 +54,7 @@ protected:
|
||||
StreamBuffer m_texel_stream_buffer;
|
||||
std::array<DescriptorHandle, NUM_TEXEL_BUFFER_FORMATS> m_texel_buffer_views = {};
|
||||
DescriptorHandle m_vertex_srv = {};
|
||||
Core::System& m_system;
|
||||
};
|
||||
|
||||
} // namespace DX12
|
||||
|
||||
@ -139,7 +139,7 @@ bool VideoBackend::Initialize(Core::System& system, const WindowSystemInfo& wsi)
|
||||
|
||||
// Create main wrapper instances.
|
||||
auto gfx = std::make_unique<DX12::Gfx>(std::move(swap_chain), wsi.render_surface_scale);
|
||||
auto vertex_manager = std::make_unique<DX12::VertexManager>();
|
||||
auto vertex_manager = std::make_unique<DX12::VertexManager>(system);
|
||||
auto perf_query = std::make_unique<DX12::PerfQuery>();
|
||||
auto bounding_box = std::make_unique<DX12::D3D12BoundingBox>();
|
||||
|
||||
|
||||
@ -131,7 +131,7 @@ bool Metal::VideoBackend::Initialize(Core::System& system, const WindowSystemInf
|
||||
g_state_tracker = std::make_unique<StateTracker>();
|
||||
|
||||
return InitializeShared(system, std::make_unique<Metal::Gfx>(std::move(layer)),
|
||||
std::make_unique<Metal::VertexManager>(),
|
||||
std::make_unique<Metal::VertexManager>(system),
|
||||
std::make_unique<Metal::PerfQuery>(),
|
||||
std::make_unique<Metal::BoundingBox>());
|
||||
}
|
||||
|
||||
@ -6,12 +6,17 @@
|
||||
#include "VideoBackends/Metal/MTLUtil.h"
|
||||
#include "VideoCommon/VertexManagerBase.h"
|
||||
|
||||
namespace Core
|
||||
{
|
||||
class System;
|
||||
};
|
||||
|
||||
namespace Metal
|
||||
{
|
||||
class VertexManager final : public VertexManagerBase
|
||||
{
|
||||
public:
|
||||
VertexManager();
|
||||
VertexManager(Core::System& system);
|
||||
~VertexManager() override;
|
||||
|
||||
void UploadUtilityUniforms(const void* uniforms, u32 uniforms_size) override;
|
||||
@ -30,5 +35,6 @@ protected:
|
||||
private:
|
||||
u32 m_vertex_offset;
|
||||
u32 m_base_vertex;
|
||||
Core::System& m_system;
|
||||
};
|
||||
} // namespace Metal
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
#include "VideoCommon/Statistics.h"
|
||||
#include "VideoCommon/VertexShaderManager.h"
|
||||
|
||||
Metal::VertexManager::VertexManager()
|
||||
Metal::VertexManager::VertexManager(Core::System& system) : m_system(system)
|
||||
{
|
||||
}
|
||||
|
||||
@ -91,10 +91,9 @@ void Metal::VertexManager::CommitBuffer(u32 num_vertices, u32 vertex_stride, u32
|
||||
|
||||
void Metal::VertexManager::UploadUniforms()
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& vertex_shader_manager = system.GetVertexShaderManager();
|
||||
auto& geometry_shader_manager = system.GetGeometryShaderManager();
|
||||
auto& pixel_shader_manager = system.GetPixelShaderManager();
|
||||
auto& vertex_shader_manager = m_system.GetVertexShaderManager();
|
||||
auto& geometry_shader_manager = m_system.GetGeometryShaderManager();
|
||||
auto& pixel_shader_manager = m_system.GetPixelShaderManager();
|
||||
g_state_tracker->InvalidateUniforms(vertex_shader_manager.dirty, geometry_shader_manager.dirty,
|
||||
pixel_shader_manager.dirty);
|
||||
vertex_shader_manager.dirty = false;
|
||||
|
||||
@ -213,7 +213,7 @@ bool VideoBackend::Initialize(Core::System& system, const WindowSystemInfo& wsi)
|
||||
ProgramShaderCache::Init();
|
||||
g_sampler_cache = std::make_unique<SamplerCache>();
|
||||
|
||||
auto vertex_manager = std::make_unique<VertexManager>();
|
||||
auto vertex_manager = std::make_unique<VertexManager>(system);
|
||||
auto perf_query = GetPerfQuery(gfx->IsGLES());
|
||||
auto bounding_box = std::make_unique<OGLBoundingBox>();
|
||||
|
||||
|
||||
@ -22,6 +22,11 @@
|
||||
#include "VideoCommon/VertexLoaderManager.h"
|
||||
#include "VideoCommon/VideoConfig.h"
|
||||
|
||||
namespace Core
|
||||
{
|
||||
class System;
|
||||
}
|
||||
|
||||
namespace OGL
|
||||
{
|
||||
static void CheckBufferBinding()
|
||||
@ -34,7 +39,9 @@ static void CheckBufferBinding()
|
||||
}
|
||||
}
|
||||
|
||||
VertexManager::VertexManager() = default;
|
||||
VertexManager::VertexManager(Core::System& system) : m_system(system)
|
||||
{
|
||||
}
|
||||
|
||||
VertexManager::~VertexManager()
|
||||
{
|
||||
|
||||
@ -11,6 +11,11 @@
|
||||
#include "VideoCommon/NativeVertexFormat.h"
|
||||
#include "VideoCommon/VertexManagerBase.h"
|
||||
|
||||
namespace Core
|
||||
{
|
||||
class System;
|
||||
}
|
||||
|
||||
namespace OGL
|
||||
{
|
||||
class StreamBuffer;
|
||||
@ -28,7 +33,7 @@ public:
|
||||
class VertexManager final : public VertexManagerBase
|
||||
{
|
||||
public:
|
||||
VertexManager();
|
||||
VertexManager(Core::System& system);
|
||||
~VertexManager() override;
|
||||
|
||||
bool Initialize() override;
|
||||
@ -54,5 +59,6 @@ private:
|
||||
std::unique_ptr<StreamBuffer> m_index_buffer;
|
||||
std::unique_ptr<StreamBuffer> m_texel_buffer;
|
||||
std::array<GLuint, NUM_TEXEL_BUFFER_FORMATS> m_texel_buffer_views{};
|
||||
Core::System& m_system;
|
||||
};
|
||||
} // namespace OGL
|
||||
|
||||
@ -30,7 +30,9 @@
|
||||
#include "VideoCommon/VideoConfig.h"
|
||||
#include "VideoCommon/XFMemory.h"
|
||||
|
||||
SWVertexLoader::SWVertexLoader() = default;
|
||||
SWVertexLoader::SWVertexLoader(Core::System& system) : m_system(system)
|
||||
{
|
||||
}
|
||||
|
||||
SWVertexLoader::~SWVertexLoader() = default;
|
||||
|
||||
@ -208,24 +210,21 @@ void SWVertexLoader::ParseVertex(const PortableVertexDeclaration& vdec, int inde
|
||||
}
|
||||
if (!vdec.normals[0].enable)
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& vertex_shader_manager = system.GetVertexShaderManager();
|
||||
auto& vertex_shader_manager = m_system.GetVertexShaderManager();
|
||||
m_vertex.normal[0].x = vertex_shader_manager.constants.cached_normal[0];
|
||||
m_vertex.normal[0].y = vertex_shader_manager.constants.cached_normal[1];
|
||||
m_vertex.normal[0].z = vertex_shader_manager.constants.cached_normal[2];
|
||||
}
|
||||
if (!vdec.normals[1].enable)
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& vertex_shader_manager = system.GetVertexShaderManager();
|
||||
auto& vertex_shader_manager = m_system.GetVertexShaderManager();
|
||||
m_vertex.normal[1].x = vertex_shader_manager.constants.cached_tangent[0];
|
||||
m_vertex.normal[1].y = vertex_shader_manager.constants.cached_tangent[1];
|
||||
m_vertex.normal[1].z = vertex_shader_manager.constants.cached_tangent[2];
|
||||
}
|
||||
if (!vdec.normals[2].enable)
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& vertex_shader_manager = system.GetVertexShaderManager();
|
||||
auto& vertex_shader_manager = m_system.GetVertexShaderManager();
|
||||
m_vertex.normal[2].x = vertex_shader_manager.constants.cached_binormal[0];
|
||||
m_vertex.normal[2].y = vertex_shader_manager.constants.cached_binormal[1];
|
||||
m_vertex.normal[2].z = vertex_shader_manager.constants.cached_binormal[2];
|
||||
|
||||
@ -13,10 +13,15 @@
|
||||
|
||||
#include "VideoCommon/VertexManagerBase.h"
|
||||
|
||||
namespace Core
|
||||
{
|
||||
class system;
|
||||
}
|
||||
|
||||
class SWVertexLoader final : public VertexManagerBase
|
||||
{
|
||||
public:
|
||||
SWVertexLoader();
|
||||
SWVertexLoader(Core::System& system);
|
||||
~SWVertexLoader() override;
|
||||
|
||||
DataReader PrepareForAdditionalData(OpcodeDecoder::Primitive primitive, u32 count, u32 stride,
|
||||
@ -30,4 +35,5 @@ protected:
|
||||
|
||||
InputVertexData m_vertex{};
|
||||
SetupUnit m_setup_unit;
|
||||
Core::System& m_system;
|
||||
};
|
||||
|
||||
@ -105,7 +105,7 @@ bool VideoSoftware::Initialize(Core::System& system, const WindowSystemInfo& wsi
|
||||
Rasterizer::Init();
|
||||
|
||||
return InitializeShared(system, std::make_unique<SWGfx>(std::move(window)),
|
||||
std::make_unique<SWVertexLoader>(), std::make_unique<PerfQuery>(),
|
||||
std::make_unique<SWVertexLoader>(system), std::make_unique<PerfQuery>(),
|
||||
std::make_unique<SWBoundingBox>(), std::make_unique<SWEFBInterface>(),
|
||||
std::make_unique<TextureCache>());
|
||||
}
|
||||
|
||||
@ -233,7 +233,7 @@ bool VideoBackend::Initialize(Core::System& system, const WindowSystemInfo& wsi)
|
||||
}
|
||||
|
||||
auto gfx = std::make_unique<VKGfx>(std::move(swap_chain), wsi.render_surface_scale);
|
||||
auto vertex_manager = std::make_unique<VertexManager>();
|
||||
auto vertex_manager = std::make_unique<VertexManager>(system);
|
||||
auto perf_query = std::make_unique<PerfQuery>();
|
||||
auto bounding_box = std::make_unique<VKBoundingBox>();
|
||||
|
||||
|
||||
@ -53,7 +53,9 @@ static VkBufferView CreateTexelBufferView(VkBuffer buffer, VkFormat vk_format)
|
||||
return view;
|
||||
}
|
||||
|
||||
VertexManager::VertexManager() = default;
|
||||
VertexManager::VertexManager(Core::System& system) : m_system(system)
|
||||
{
|
||||
}
|
||||
|
||||
VertexManager::~VertexManager()
|
||||
{
|
||||
@ -204,8 +206,7 @@ void VertexManager::UploadUniforms()
|
||||
|
||||
void VertexManager::UpdateVertexShaderConstants()
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& vertex_shader_manager = system.GetVertexShaderManager();
|
||||
auto& vertex_shader_manager = m_system.GetVertexShaderManager();
|
||||
|
||||
if (!vertex_shader_manager.dirty || !ReserveConstantStorage())
|
||||
return;
|
||||
@ -222,8 +223,7 @@ void VertexManager::UpdateVertexShaderConstants()
|
||||
|
||||
void VertexManager::UpdateGeometryShaderConstants()
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& geometry_shader_manager = system.GetGeometryShaderManager();
|
||||
auto& geometry_shader_manager = m_system.GetGeometryShaderManager();
|
||||
|
||||
if (!geometry_shader_manager.dirty || !ReserveConstantStorage())
|
||||
return;
|
||||
@ -240,8 +240,7 @@ void VertexManager::UpdateGeometryShaderConstants()
|
||||
|
||||
void VertexManager::UpdatePixelShaderConstants()
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& pixel_shader_manager = system.GetPixelShaderManager();
|
||||
auto& pixel_shader_manager = m_system.GetPixelShaderManager();
|
||||
|
||||
if (!ReserveConstantStorage())
|
||||
return;
|
||||
@ -275,8 +274,7 @@ void VertexManager::UpdatePixelShaderConstants()
|
||||
|
||||
bool VertexManager::ReserveConstantStorage()
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& pixel_shader_manager = system.GetPixelShaderManager();
|
||||
auto& pixel_shader_manager = m_system.GetPixelShaderManager();
|
||||
const u32 custom_constants_size = static_cast<u32>(pixel_shader_manager.custom_constants.size());
|
||||
|
||||
if (m_uniform_stream_buffer->ReserveMemory(m_uniform_buffer_reserve_size + custom_constants_size,
|
||||
@ -297,8 +295,7 @@ bool VertexManager::ReserveConstantStorage()
|
||||
|
||||
void VertexManager::UploadAllConstants()
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& pixel_shader_manager = system.GetPixelShaderManager();
|
||||
auto& pixel_shader_manager = m_system.GetPixelShaderManager();
|
||||
|
||||
const u32 custom_constants_size = static_cast<u32>(pixel_shader_manager.custom_constants.size());
|
||||
|
||||
@ -321,8 +318,8 @@ void VertexManager::UploadAllConstants()
|
||||
return;
|
||||
}
|
||||
|
||||
auto& vertex_shader_manager = system.GetVertexShaderManager();
|
||||
auto& geometry_shader_manager = system.GetGeometryShaderManager();
|
||||
auto& vertex_shader_manager = m_system.GetVertexShaderManager();
|
||||
auto& geometry_shader_manager = m_system.GetGeometryShaderManager();
|
||||
|
||||
// Update bindings
|
||||
StateTracker::GetInstance()->SetGXUniformBuffer(
|
||||
|
||||
@ -10,6 +10,11 @@
|
||||
#include "VideoBackends/Vulkan/VulkanLoader.h"
|
||||
#include "VideoCommon/VertexManagerBase.h"
|
||||
|
||||
namespace Core
|
||||
{
|
||||
class System;
|
||||
}
|
||||
|
||||
namespace Vulkan
|
||||
{
|
||||
class StreamBuffer;
|
||||
@ -17,7 +22,7 @@ class StreamBuffer;
|
||||
class VertexManager : public VertexManagerBase
|
||||
{
|
||||
public:
|
||||
VertexManager();
|
||||
VertexManager(Core::System& system);
|
||||
~VertexManager() override;
|
||||
|
||||
bool Initialize() override;
|
||||
@ -53,5 +58,6 @@ protected:
|
||||
std::unique_ptr<StreamBuffer> m_texel_stream_buffer;
|
||||
std::array<VkBufferView, NUM_TEXEL_BUFFER_FORMATS> m_texel_buffer_views = {};
|
||||
u32 m_uniform_buffer_reserve_size = 0;
|
||||
Core::System& m_system;
|
||||
};
|
||||
} // namespace Vulkan
|
||||
|
||||
Loading…
Reference in New Issue
Block a user