diff options
| author | 2016-09-22 22:42:36 +0200 | |
|---|---|---|
| committer | 2017-05-12 16:22:37 +0200 | |
| commit | ba722be2ac86a7ef703400fa23b376df2f022190 (patch) | |
| tree | 989b181319c7256b8a04b3c067c1c592d23b86eb | |
| parent | Pica: Write shader registers in functions (diff) | |
| download | yuzu-ba722be2ac86a7ef703400fa23b376df2f022190.tar.gz yuzu-ba722be2ac86a7ef703400fa23b376df2f022190.tar.xz yuzu-ba722be2ac86a7ef703400fa23b376df2f022190.zip | |
Pica: Write GS registers
This adds the handlers for the geometry shader register writes which will call the functions from the previous commit to update registers for the GS.
| -rw-r--r-- | src/video_core/command_processor.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp index c29ad6775..9a09f81dc 100644 --- a/src/video_core/command_processor.cpp +++ b/src/video_core/command_processor.cpp | |||
| @@ -422,6 +422,58 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
| 422 | break; | 422 | break; |
| 423 | } | 423 | } |
| 424 | 424 | ||
| 425 | case PICA_REG_INDEX(gs.bool_uniforms): | ||
| 426 | WriteUniformBoolReg(g_state.gs, value); | ||
| 427 | break; | ||
| 428 | |||
| 429 | case PICA_REG_INDEX_WORKAROUND(gs.int_uniforms[0], 0x281): | ||
| 430 | case PICA_REG_INDEX_WORKAROUND(gs.int_uniforms[1], 0x282): | ||
| 431 | case PICA_REG_INDEX_WORKAROUND(gs.int_uniforms[2], 0x283): | ||
| 432 | case PICA_REG_INDEX_WORKAROUND(gs.int_uniforms[3], 0x284): { | ||
| 433 | unsigned index = (id - PICA_REG_INDEX_WORKAROUND(gs.int_uniforms[0], 0x281)); | ||
| 434 | auto values = regs.gs.int_uniforms[index]; | ||
| 435 | WriteUniformIntReg(g_state.gs, index, | ||
| 436 | Math::Vec4<u8>(values.x, values.y, values.z, values.w)); | ||
| 437 | break; | ||
| 438 | } | ||
| 439 | |||
| 440 | case PICA_REG_INDEX_WORKAROUND(gs.uniform_setup.set_value[0], 0x291): | ||
| 441 | case PICA_REG_INDEX_WORKAROUND(gs.uniform_setup.set_value[1], 0x292): | ||
| 442 | case PICA_REG_INDEX_WORKAROUND(gs.uniform_setup.set_value[2], 0x293): | ||
| 443 | case PICA_REG_INDEX_WORKAROUND(gs.uniform_setup.set_value[3], 0x294): | ||
| 444 | case PICA_REG_INDEX_WORKAROUND(gs.uniform_setup.set_value[4], 0x295): | ||
| 445 | case PICA_REG_INDEX_WORKAROUND(gs.uniform_setup.set_value[5], 0x296): | ||
| 446 | case PICA_REG_INDEX_WORKAROUND(gs.uniform_setup.set_value[6], 0x297): | ||
| 447 | case PICA_REG_INDEX_WORKAROUND(gs.uniform_setup.set_value[7], 0x298): { | ||
| 448 | WriteUniformFloatReg(g_state.regs.gs, g_state.gs, gs_float_regs_counter, | ||
| 449 | gs_uniform_write_buffer, value); | ||
| 450 | break; | ||
| 451 | } | ||
| 452 | |||
| 453 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[0], 0x29c): | ||
| 454 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[1], 0x29d): | ||
| 455 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[2], 0x29e): | ||
| 456 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[3], 0x29f): | ||
| 457 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[4], 0x2a0): | ||
| 458 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[5], 0x2a1): | ||
| 459 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[6], 0x2a2): | ||
| 460 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[7], 0x2a3): { | ||
| 461 | WriteProgramCode(g_state.regs.gs, g_state.gs, 4096, value); | ||
| 462 | break; | ||
| 463 | } | ||
| 464 | |||
| 465 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[0], 0x2a6): | ||
| 466 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[1], 0x2a7): | ||
| 467 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[2], 0x2a8): | ||
| 468 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[3], 0x2a9): | ||
| 469 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[4], 0x2aa): | ||
| 470 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[5], 0x2ab): | ||
| 471 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[6], 0x2ac): | ||
| 472 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[7], 0x2ad): { | ||
| 473 | WriteSwizzlePatterns(g_state.regs.gs, g_state.gs, value); | ||
| 474 | break; | ||
| 475 | } | ||
| 476 | |||
| 425 | case PICA_REG_INDEX(vs.bool_uniforms): | 477 | case PICA_REG_INDEX(vs.bool_uniforms): |
| 426 | WriteUniformBoolReg(g_state.vs, value); | 478 | WriteUniformBoolReg(g_state.vs, value); |
| 427 | break; | 479 | break; |