summaryrefslogtreecommitdiffstats
path: root/src/video_core/engines/maxwell_3d.h
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2018-03-17 05:34:17 +0100
committerGitHub <noreply@github.com>2018-03-17 05:34:17 +0100
commit516ef4f19fc46a7e482a5a56892e74c0aaa17c8e (patch)
tree0e6fa7a11330d262b3e35e16425e287eccfc4989 /src/video_core/engines/maxwell_3d.h
parentMerge pull request #243 from Subv/vertex_buffer (diff)
parentGPU: Handle the SetShader method call (0xE24) and store the shader config. (diff)
downloadyuzu-516ef4f19fc46a7e482a5a56892e74c0aaa17c8e.tar
yuzu-516ef4f19fc46a7e482a5a56892e74c0aaa17c8e.tar.gz
yuzu-516ef4f19fc46a7e482a5a56892e74c0aaa17c8e.tar.bz2
yuzu-516ef4f19fc46a7e482a5a56892e74c0aaa17c8e.tar.lz
yuzu-516ef4f19fc46a7e482a5a56892e74c0aaa17c8e.tar.xz
yuzu-516ef4f19fc46a7e482a5a56892e74c0aaa17c8e.tar.zst
yuzu-516ef4f19fc46a7e482a5a56892e74c0aaa17c8e.zip
Diffstat (limited to 'src/video_core/engines/maxwell_3d.h')
-rw-r--r--src/video_core/engines/maxwell_3d.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h
index b3f45c85b..c979d4e61 100644
--- a/src/video_core/engines/maxwell_3d.h
+++ b/src/video_core/engines/maxwell_3d.h
@@ -4,6 +4,7 @@
#pragma once
+#include <array>
#include <unordered_map>
#include <vector>
#include "common/bit_field.h"
@@ -133,7 +134,7 @@ public:
u32 gpr_alloc;
ShaderType type;
INSERT_PADDING_WORDS(9);
- } shader_config[6];
+ } shader_config[MaxShaderProgram];
INSERT_PADDING_WORDS(0x5D0);
@@ -149,6 +150,19 @@ public:
static_assert(sizeof(Regs) == Regs::NUM_REGS * sizeof(u32), "Maxwell3D Regs has wrong size");
+ struct State {
+ struct ShaderInfo {
+ Regs::ShaderType type;
+ Regs::ShaderProgram program;
+ GPUVAddr begin_address;
+ GPUVAddr end_address;
+ };
+
+ std::array<ShaderInfo, Regs::MaxShaderProgram> shaders;
+ };
+
+ State state;
+
private:
MemoryManager& memory_manager;
@@ -159,7 +173,7 @@ private:
void DrawArrays();
/// Method call handlers
- void PrepareShader(const std::vector<u32>& parameters);
+ void SetShader(const std::vector<u32>& parameters);
struct MethodInfo {
const char* name;