NativeVertexFormat: Use in-class initialization

This commit is contained in:
Lioncash 2016-02-15 23:11:43 -05:00
parent 2c5fcad5f5
commit 69c82f32ff
3 changed files with 16 additions and 15 deletions

View File

@ -2,6 +2,8 @@
// Licensed under GPLv2+ // Licensed under GPLv2+
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include <array>
#include "VideoBackends/D3D/D3DBase.h" #include "VideoBackends/D3D/D3DBase.h"
#include "VideoBackends/D3D/D3DBlob.h" #include "VideoBackends/D3D/D3DBlob.h"
#include "VideoBackends/D3D/D3DState.h" #include "VideoBackends/D3D/D3DState.h"
@ -14,16 +16,17 @@ namespace DX11
class D3DVertexFormat : public NativeVertexFormat class D3DVertexFormat : public NativeVertexFormat
{ {
D3D11_INPUT_ELEMENT_DESC m_elems[32];
UINT m_num_elems;
ID3D11InputLayout* m_layout;
public: public:
D3DVertexFormat(const PortableVertexDeclaration& vtx_decl); D3DVertexFormat(const PortableVertexDeclaration& vtx_decl);
~D3DVertexFormat() { SAFE_RELEASE(m_layout); } ~D3DVertexFormat() { SAFE_RELEASE(m_layout); }
void SetupVertexPointers(); void SetupVertexPointers();
private:
std::array<D3D11_INPUT_ELEMENT_DESC, 32> m_elems{};
UINT m_num_elems = 0;
ID3D11InputLayout* m_layout = nullptr;
}; };
NativeVertexFormat* VertexManager::CreateNativeVertexFormat(const PortableVertexDeclaration& vtx_decl) NativeVertexFormat* VertexManager::CreateNativeVertexFormat(const PortableVertexDeclaration& vtx_decl)
@ -57,10 +60,9 @@ DXGI_FORMAT VarToD3D(VarType t, int size, bool integer)
} }
D3DVertexFormat::D3DVertexFormat(const PortableVertexDeclaration& _vtx_decl) D3DVertexFormat::D3DVertexFormat(const PortableVertexDeclaration& _vtx_decl)
: m_num_elems(0), m_layout(nullptr)
{ {
this->vtx_decl = _vtx_decl; this->vtx_decl = _vtx_decl;
memset(m_elems, 0, sizeof(m_elems));
const AttributeFormat* format = &_vtx_decl.position; const AttributeFormat* format = &_vtx_decl.position;
if (format->enable) if (format->enable)
@ -134,7 +136,7 @@ void D3DVertexFormat::SetupVertexPointers()
// changes. // changes.
D3DBlob* vs_bytecode = DX11::VertexShaderCache::GetActiveShaderBytecode(); D3DBlob* vs_bytecode = DX11::VertexShaderCache::GetActiveShaderBytecode();
HRESULT hr = DX11::D3D::device->CreateInputLayout(m_elems, m_num_elems, vs_bytecode->Data(), vs_bytecode->Size(), &m_layout); HRESULT hr = DX11::D3D::device->CreateInputLayout(m_elems.data(), m_num_elems, vs_bytecode->Data(), vs_bytecode->Size(), &m_layout);
if (FAILED(hr)) PanicAlert("Failed to create input layout, %s %d\n", __FILE__, __LINE__); if (FAILED(hr)) PanicAlert("Failed to create input layout, %s %d\n", __FILE__, __LINE__);
DX11::D3D::SetDebugObjectName((ID3D11DeviceChild*)m_layout, "input layout used to emulate the GX pipeline"); DX11::D3D::SetDebugObjectName((ID3D11DeviceChild*)m_layout, "input layout used to emulate the GX pipeline");
} }

View File

@ -45,7 +45,6 @@ DXGI_FORMAT VarToD3D(VarType t, int size, bool integer)
} }
D3DVertexFormat::D3DVertexFormat(const PortableVertexDeclaration& vtx_decl) D3DVertexFormat::D3DVertexFormat(const PortableVertexDeclaration& vtx_decl)
: m_num_elems(0), m_layout12({}), m_elems()
{ {
this->vtx_decl = vtx_decl; this->vtx_decl = vtx_decl;

View File

@ -12,11 +12,6 @@ namespace DX12
class D3DVertexFormat final : public NativeVertexFormat class D3DVertexFormat final : public NativeVertexFormat
{ {
std::array<D3D12_INPUT_ELEMENT_DESC, 15> m_elems;
UINT m_num_elems;
D3D12_INPUT_LAYOUT_DESC m_layout12;
public: public:
D3DVertexFormat(const PortableVertexDeclaration& vtx_decl); D3DVertexFormat(const PortableVertexDeclaration& vtx_decl);
~D3DVertexFormat(); ~D3DVertexFormat();
@ -27,5 +22,10 @@ public:
private: private:
void AddInputElementDescFromAttributeFormatIfValid(const AttributeFormat* format, const char* semantic_name, unsigned int semantic_index); void AddInputElementDescFromAttributeFormatIfValid(const AttributeFormat* format, const char* semantic_name, unsigned int semantic_index);
std::array<D3D12_INPUT_ELEMENT_DESC, 15> m_elems{};
UINT m_num_elems = 0;
D3D12_INPUT_LAYOUT_DESC m_layout12{};
}; };
} }