summaryrefslogtreecommitdiff
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
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.
-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;