summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Wasserka <NeoBrainX@gmail.com>2014-12-16 01:20:29 +0100
committerTony Wasserka <NeoBrainX@gmail.com>2014-12-20 18:06:55 +0100
commitb85524c760989f3d053d05df6b244b28252b2f4e (patch)
tree00055a16904c3f20791e39e98b3e906280b3d384
parentPica/VertexShader: Support negating src2. (diff)
downloadyuzu-b85524c760989f3d053d05df6b244b28252b2f4e.tar
yuzu-b85524c760989f3d053d05df6b244b28252b2f4e.tar.gz
yuzu-b85524c760989f3d053d05df6b244b28252b2f4e.tar.bz2
yuzu-b85524c760989f3d053d05df6b244b28252b2f4e.tar.lz
yuzu-b85524c760989f3d053d05df6b244b28252b2f4e.tar.xz
yuzu-b85524c760989f3d053d05df6b244b28252b2f4e.tar.zst
yuzu-b85524c760989f3d053d05df6b244b28252b2f4e.zip
-rw-r--r--src/video_core/vertex_shader.cpp21
-rw-r--r--src/video_core/vertex_shader.h3
2 files changed, 19 insertions, 5 deletions
diff --git a/src/video_core/vertex_shader.cpp b/src/video_core/vertex_shader.cpp
index c5c5261fe..c98c625c2 100644
--- a/src/video_core/vertex_shader.cpp
+++ b/src/video_core/vertex_shader.cpp
@@ -31,8 +31,8 @@ static struct {
// TODO: Not sure where the shader binary and swizzle patterns are supposed to be loaded to!
// For now, we just keep these local arrays around.
-static u32 shader_memory[1024];
-static u32 swizzle_data[1024];
+static std::array<u32, 1024> shader_memory;
+static std::array<u32, 1024> swizzle_data;
void SubmitShaderMemoryChange(u32 addr, u32 value)
{
@@ -49,6 +49,17 @@ Math::Vec4<float24>& GetFloatUniform(u32 index)
return shader_uniforms.f[index];
}
+const std::array<u32, 1024>& GetShaderBinary()
+{
+ return shader_memory;
+}
+
+const std::array<u32, 1024>& GetSwizzlePatterns()
+{
+ return swizzle_data;
+}
+
+
struct VertexShaderState {
u32* program_counter;
@@ -75,7 +86,7 @@ static void ProcessShaderCode(VertexShaderState& state) {
bool increment_pc = true;
bool exit_loop = false;
const Instruction& instr = *(const Instruction*)state.program_counter;
- state.debug.max_offset = std::max<u32>(state.debug.max_offset, 1 + (state.program_counter - shader_memory));
+ state.debug.max_offset = std::max<u32>(state.debug.max_offset, 1 + (state.program_counter - shader_memory.data()));
auto LookupSourceRegister = [&](const SourceRegister& source_reg) -> const float24* {
switch (source_reg.GetRegisterType()) {
@@ -233,7 +244,7 @@ static void ProcessShaderCode(VertexShaderState& state) {
_dbg_assert_(HW_GPU, state.call_stack_pointer - state.call_stack < sizeof(state.call_stack));
- *++state.call_stack_pointer = state.program_counter - shader_memory;
+ *++state.call_stack_pointer = state.program_counter - shader_memory.data();
state.program_counter = &shader_memory[instr.flow_control.dest_offset];
break;
@@ -305,7 +316,7 @@ OutputVertex RunShader(const InputVertex& input, int num_attributes)
state.call_stack_pointer = &state.call_stack[0];
ProcessShaderCode(state);
- DebugUtils::DumpShader(shader_memory, state.debug.max_offset, swizzle_data,
+ DebugUtils::DumpShader(shader_memory.data(), state.debug.max_offset, swizzle_data.data(),
state.debug.max_opdesc_id, registers.vs_main_offset,
registers.vs_output_attributes);
diff --git a/src/video_core/vertex_shader.h b/src/video_core/vertex_shader.h
index 2f6ff5904..be01b24d7 100644
--- a/src/video_core/vertex_shader.h
+++ b/src/video_core/vertex_shader.h
@@ -73,6 +73,9 @@ OutputVertex RunShader(const InputVertex& input, int num_attributes);
Math::Vec4<float24>& GetFloatUniform(u32 index);
+const std::array<u32, 1024>& GetShaderBinary();
+const std::array<u32, 1024>& GetSwizzlePatterns();
+
} // namespace
} // namespace