diff options
| author | 2014-12-13 21:20:47 +0100 | |
|---|---|---|
| committer | 2014-12-20 18:06:55 +0100 | |
| commit | aff808b2fdfd9605179a13eb55b72d68a7cdd8c2 (patch) | |
| tree | 83e896f6e90c5b13a12d1b879ea3c79a7dbb5a55 /src | |
| parent | Pica/VertexShader: Add support for MOVA, CMP and IFC. (diff) | |
| download | yuzu-aff808b2fdfd9605179a13eb55b72d68a7cdd8c2.tar.gz yuzu-aff808b2fdfd9605179a13eb55b72d68a7cdd8c2.tar.xz yuzu-aff808b2fdfd9605179a13eb55b72d68a7cdd8c2.zip | |
Pica: Add support for boolean uniforms.
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/command_processor.cpp | 6 | ||||
| -rw-r--r-- | src/video_core/pica.h | 8 | ||||
| -rw-r--r-- | src/video_core/vertex_shader.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/vertex_shader.h | 1 |
4 files changed, 21 insertions, 2 deletions
diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp index 4f82694fd..9b8ecf8e3 100644 --- a/src/video_core/command_processor.cpp +++ b/src/video_core/command_processor.cpp | |||
| @@ -162,6 +162,12 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
| 162 | break; | 162 | break; |
| 163 | } | 163 | } |
| 164 | 164 | ||
| 165 | case PICA_REG_INDEX(vs_bool_uniforms): | ||
| 166 | for (unsigned i = 0; i < 16; ++i) | ||
| 167 | VertexShader::GetBoolUniform(i) = (registers.vs_bool_uniforms.Value() & (1 << i)); | ||
| 168 | |||
| 169 | break; | ||
| 170 | |||
| 165 | case PICA_REG_INDEX_WORKAROUND(vs_uniform_setup.set_value[0], 0x2c1): | 171 | case PICA_REG_INDEX_WORKAROUND(vs_uniform_setup.set_value[0], 0x2c1): |
| 166 | case PICA_REG_INDEX_WORKAROUND(vs_uniform_setup.set_value[1], 0x2c2): | 172 | case PICA_REG_INDEX_WORKAROUND(vs_uniform_setup.set_value[1], 0x2c2): |
| 167 | case PICA_REG_INDEX_WORKAROUND(vs_uniform_setup.set_value[2], 0x2c3): | 173 | case PICA_REG_INDEX_WORKAROUND(vs_uniform_setup.set_value[2], 0x2c3): |
diff --git a/src/video_core/pica.h b/src/video_core/pica.h index 87a9e7913..06552a3ef 100644 --- a/src/video_core/pica.h +++ b/src/video_core/pica.h | |||
| @@ -492,7 +492,11 @@ struct Regs { | |||
| 492 | 492 | ||
| 493 | BitField<8, 2, TriangleTopology> triangle_topology; | 493 | BitField<8, 2, TriangleTopology> triangle_topology; |
| 494 | 494 | ||
| 495 | INSERT_PADDING_WORDS(0x5b); | 495 | INSERT_PADDING_WORDS(0x51); |
| 496 | |||
| 497 | BitField<0, 16, u32> vs_bool_uniforms; | ||
| 498 | |||
| 499 | INSERT_PADDING_WORDS(0x9); | ||
| 496 | 500 | ||
| 497 | // Offset to shader program entry point (in words) | 501 | // Offset to shader program entry point (in words) |
| 498 | BitField<0, 16, u32> vs_main_offset; | 502 | BitField<0, 16, u32> vs_main_offset; |
| @@ -620,6 +624,7 @@ struct Regs { | |||
| 620 | ADD_FIELD(trigger_draw); | 624 | ADD_FIELD(trigger_draw); |
| 621 | ADD_FIELD(trigger_draw_indexed); | 625 | ADD_FIELD(trigger_draw_indexed); |
| 622 | ADD_FIELD(triangle_topology); | 626 | ADD_FIELD(triangle_topology); |
| 627 | ADD_FIELD(vs_bool_uniforms); | ||
| 623 | ADD_FIELD(vs_main_offset); | 628 | ADD_FIELD(vs_main_offset); |
| 624 | ADD_FIELD(vs_input_register_map); | 629 | ADD_FIELD(vs_input_register_map); |
| 625 | ADD_FIELD(vs_uniform_setup); | 630 | ADD_FIELD(vs_uniform_setup); |
| @@ -690,6 +695,7 @@ ASSERT_REG_POSITION(num_vertices, 0x228); | |||
| 690 | ASSERT_REG_POSITION(trigger_draw, 0x22e); | 695 | ASSERT_REG_POSITION(trigger_draw, 0x22e); |
| 691 | ASSERT_REG_POSITION(trigger_draw_indexed, 0x22f); | 696 | ASSERT_REG_POSITION(trigger_draw_indexed, 0x22f); |
| 692 | ASSERT_REG_POSITION(triangle_topology, 0x25e); | 697 | ASSERT_REG_POSITION(triangle_topology, 0x25e); |
| 698 | ASSERT_REG_POSITION(vs_bool_uniforms, 0x2b0); | ||
| 693 | ASSERT_REG_POSITION(vs_main_offset, 0x2ba); | 699 | ASSERT_REG_POSITION(vs_main_offset, 0x2ba); |
| 694 | ASSERT_REG_POSITION(vs_input_register_map, 0x2bb); | 700 | ASSERT_REG_POSITION(vs_input_register_map, 0x2bb); |
| 695 | ASSERT_REG_POSITION(vs_uniform_setup, 0x2c0); | 701 | ASSERT_REG_POSITION(vs_uniform_setup, 0x2c0); |
diff --git a/src/video_core/vertex_shader.cpp b/src/video_core/vertex_shader.cpp index 5d9203c86..fbec1bcc8 100644 --- a/src/video_core/vertex_shader.cpp +++ b/src/video_core/vertex_shader.cpp | |||
| @@ -26,8 +26,9 @@ namespace VertexShader { | |||
| 26 | 26 | ||
| 27 | static struct { | 27 | static struct { |
| 28 | Math::Vec4<float24> f[96]; | 28 | Math::Vec4<float24> f[96]; |
| 29 | } shader_uniforms; | ||
| 30 | 29 | ||
| 30 | std::array<bool,16> b; | ||
| 31 | } shader_uniforms; | ||
| 31 | 32 | ||
| 32 | // TODO: Not sure where the shader binary and swizzle patterns are supposed to be loaded to! | 33 | // TODO: Not sure where the shader binary and swizzle patterns are supposed to be loaded to! |
| 33 | // For now, we just keep these local arrays around. | 34 | // For now, we just keep these local arrays around. |
| @@ -49,6 +50,11 @@ Math::Vec4<float24>& GetFloatUniform(u32 index) | |||
| 49 | return shader_uniforms.f[index]; | 50 | return shader_uniforms.f[index]; |
| 50 | } | 51 | } |
| 51 | 52 | ||
| 53 | bool& GetBoolUniform(u32 index) | ||
| 54 | { | ||
| 55 | return shader_uniforms.b[index]; | ||
| 56 | } | ||
| 57 | |||
| 52 | const std::array<u32, 1024>& GetShaderBinary() | 58 | const std::array<u32, 1024>& GetShaderBinary() |
| 53 | { | 59 | { |
| 54 | return shader_memory; | 60 | return shader_memory; |
diff --git a/src/video_core/vertex_shader.h b/src/video_core/vertex_shader.h index be01b24d7..047dde046 100644 --- a/src/video_core/vertex_shader.h +++ b/src/video_core/vertex_shader.h | |||
| @@ -72,6 +72,7 @@ void SubmitSwizzleDataChange(u32 addr, u32 value); | |||
| 72 | OutputVertex RunShader(const InputVertex& input, int num_attributes); | 72 | OutputVertex RunShader(const InputVertex& input, int num_attributes); |
| 73 | 73 | ||
| 74 | Math::Vec4<float24>& GetFloatUniform(u32 index); | 74 | Math::Vec4<float24>& GetFloatUniform(u32 index); |
| 75 | bool& GetBoolUniform(u32 index); | ||
| 75 | 76 | ||
| 76 | const std::array<u32, 1024>& GetShaderBinary(); | 77 | const std::array<u32, 1024>& GetShaderBinary(); |
| 77 | const std::array<u32, 1024>& GetSwizzlePatterns(); | 78 | const std::array<u32, 1024>& GetSwizzlePatterns(); |