mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-12-03 11:05:40 +00:00
e3d9ba4c99
- Don't have to repeat the same thing for 4 renderers. - Add native Metal renderer.
66 lines
2.1 KiB
C++
66 lines
2.1 KiB
C++
// SPDX-FileCopyrightText: 2019-2023 Connor McLaughlin <stenzek@gmail.com>
|
|
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
|
|
|
|
#include "gpu_device.h"
|
|
|
|
#include "common/windows_headers.h"
|
|
|
|
#include <d3d12.h>
|
|
#include <vector>
|
|
#include <wrl/client.h>
|
|
|
|
class D3D12Device;
|
|
|
|
class D3D12Shader final : public GPUShader
|
|
{
|
|
friend D3D12Device;
|
|
|
|
public:
|
|
using Bytecode = std::vector<u8>;
|
|
|
|
~D3D12Shader() override;
|
|
|
|
ALWAYS_INLINE const Bytecode& GetBytecode() const { return m_bytecode; }
|
|
ALWAYS_INLINE D3D12_SHADER_BYTECODE GetD3DBytecode() const { return {m_bytecode.data(), m_bytecode.size()}; }
|
|
ALWAYS_INLINE const u8* GetBytecodeData() const { return m_bytecode.data(); }
|
|
ALWAYS_INLINE u32 GetBytecodeSize() const { return static_cast<u32>(m_bytecode.size()); }
|
|
|
|
void SetDebugName(const std::string_view& name) override;
|
|
|
|
private:
|
|
D3D12Shader(GPUShaderStage stage, Bytecode bytecode);
|
|
|
|
Bytecode m_bytecode;
|
|
};
|
|
|
|
class D3D12Pipeline final : public GPUPipeline
|
|
{
|
|
friend D3D12Device;
|
|
|
|
public:
|
|
~D3D12Pipeline() override;
|
|
|
|
ALWAYS_INLINE ID3D12PipelineState* GetPipeline() const { return m_pipeline.Get(); }
|
|
ALWAYS_INLINE Layout GetLayout() const { return m_layout; }
|
|
ALWAYS_INLINE D3D12_PRIMITIVE_TOPOLOGY GetTopology() const { return m_topology; }
|
|
ALWAYS_INLINE u32 GetVertexStride() const { return m_vertex_stride; }
|
|
ALWAYS_INLINE u32 GetBlendConstants() const { return m_blend_constants; }
|
|
ALWAYS_INLINE const std::array<float, 4>& GetBlendConstantsF() const { return m_blend_constants_f; }
|
|
ALWAYS_INLINE bool HasVertexStride() const { return (m_vertex_stride > 0); }
|
|
|
|
void SetDebugName(const std::string_view& name) override;
|
|
|
|
static std::string GetPipelineName(const GraphicsConfig& config);
|
|
|
|
private:
|
|
D3D12Pipeline(Microsoft::WRL::ComPtr<ID3D12PipelineState> pipeline, Layout layout, D3D12_PRIMITIVE_TOPOLOGY topology,
|
|
u32 vertex_stride, u32 blend_constants);
|
|
|
|
Microsoft::WRL::ComPtr<ID3D12PipelineState> m_pipeline;
|
|
Layout m_layout;
|
|
D3D12_PRIMITIVE_TOPOLOGY m_topology;
|
|
u32 m_vertex_stride;
|
|
u32 m_blend_constants;
|
|
std::array<float, 4> m_blend_constants_f;
|
|
};
|