summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jannik Vogel2016-09-22 22:42:36 +0200
committerGravatar Jannik Vogel2017-05-12 16:22:37 +0200
commitba722be2ac86a7ef703400fa23b376df2f022190 (patch)
tree989b181319c7256b8a04b3c067c1c592d23b86eb /src
parentPica: Write shader registers in functions (diff)
downloadyuzu-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.
Diffstat (limited to 'src')
-rw-r--r--src/video_core/command_processor.cpp52
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;