diff options
| author | Admiral H. Curtiss <pikachu025@gmail.com> | 2024-04-04 22:10:18 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-04 22:10:18 +0200 |
| commit | ad331205d1b3c4efb41981a332c9d6fc86009ce3 (patch) | |
| tree | 8ae92d26c027eaa38af74f5ba3528f5a7087b10e /Source/Core/VideoBackends/D3D/D3DNativeVertexFormat.cpp | |
| parent | 4312840a4b8cd52ce1beee3a13ba12afe2b59e53 (diff) | |
| parent | a3951dc2d72ebb6f240d592fdbb348137130ce49 (diff) | |
Merge pull request #12684 from Pokechu22/invalid-vertex-component
Fix out of bounds accesses for invalid vertex component formats
Diffstat (limited to 'Source/Core/VideoBackends/D3D/D3DNativeVertexFormat.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/D3DNativeVertexFormat.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/Source/Core/VideoBackends/D3D/D3DNativeVertexFormat.cpp b/Source/Core/VideoBackends/D3D/D3DNativeVertexFormat.cpp index 54c1ae8220..0f81db9aaa 100644 --- a/Source/Core/VideoBackends/D3D/D3DNativeVertexFormat.cpp +++ b/Source/Core/VideoBackends/D3D/D3DNativeVertexFormat.cpp @@ -25,7 +25,7 @@ Gfx::CreateNativeVertexFormat(const PortableVertexDeclaration& vtx_decl) DXGI_FORMAT VarToD3D(ComponentFormat t, int size, bool integer) { - using FormatMap = Common::EnumMap<DXGI_FORMAT, ComponentFormat::Float>; + using FormatMap = Common::EnumMap<DXGI_FORMAT, ComponentFormat::InvalidFloat7>; static constexpr auto f = [](FormatMap a) { return a; }; // Deduction helper static constexpr std::array<FormatMap, 4> d3d_float_format_lookup = { @@ -35,6 +35,9 @@ DXGI_FORMAT VarToD3D(ComponentFormat t, int size, bool integer) DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_R16_SNORM, DXGI_FORMAT_R32_FLOAT, + DXGI_FORMAT_R32_FLOAT, + DXGI_FORMAT_R32_FLOAT, + DXGI_FORMAT_R32_FLOAT, }), f({ DXGI_FORMAT_R8G8_UNORM, @@ -42,6 +45,9 @@ DXGI_FORMAT VarToD3D(ComponentFormat t, int size, bool integer) DXGI_FORMAT_R16G16_UNORM, DXGI_FORMAT_R16G16_SNORM, DXGI_FORMAT_R32G32_FLOAT, + DXGI_FORMAT_R32G32_FLOAT, + DXGI_FORMAT_R32G32_FLOAT, + DXGI_FORMAT_R32G32_FLOAT, }), f({ DXGI_FORMAT_UNKNOWN, @@ -49,6 +55,9 @@ DXGI_FORMAT VarToD3D(ComponentFormat t, int size, bool integer) DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_R32G32B32_FLOAT, + DXGI_FORMAT_R32G32B32_FLOAT, + DXGI_FORMAT_R32G32B32_FLOAT, + DXGI_FORMAT_R32G32B32_FLOAT, }), f({ DXGI_FORMAT_R8G8B8A8_UNORM, @@ -56,6 +65,9 @@ DXGI_FORMAT VarToD3D(ComponentFormat t, int size, bool integer) DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_SNORM, DXGI_FORMAT_R32G32B32A32_FLOAT, + DXGI_FORMAT_R32G32B32A32_FLOAT, + DXGI_FORMAT_R32G32B32A32_FLOAT, + DXGI_FORMAT_R32G32B32A32_FLOAT, }), }; @@ -66,6 +78,9 @@ DXGI_FORMAT VarToD3D(ComponentFormat t, int size, bool integer) DXGI_FORMAT_R16_UINT, DXGI_FORMAT_R16_SINT, DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_UNKNOWN, }), f({ DXGI_FORMAT_R8G8_UINT, @@ -73,6 +88,9 @@ DXGI_FORMAT VarToD3D(ComponentFormat t, int size, bool integer) DXGI_FORMAT_R16G16_UINT, DXGI_FORMAT_R16G16_SINT, DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_UNKNOWN, }), f({ DXGI_FORMAT_UNKNOWN, @@ -80,6 +98,9 @@ DXGI_FORMAT VarToD3D(ComponentFormat t, int size, bool integer) DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_UNKNOWN, }), f({ DXGI_FORMAT_R8G8B8A8_UINT, @@ -87,6 +108,9 @@ DXGI_FORMAT VarToD3D(ComponentFormat t, int size, bool integer) DXGI_FORMAT_R16G16B16A16_UINT, DXGI_FORMAT_R16G16B16A16_SINT, DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_UNKNOWN, }), }; |
