mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-20 20:49:12 +12:00
[PICA] Shader uploads
This commit is contained in:
parent
36a30da78d
commit
5993dc4759
11 changed files with 105 additions and 9 deletions
|
@ -1,8 +1,9 @@
|
|||
#include "gpu.hpp"
|
||||
#include "PICA/gpu.hpp"
|
||||
#include <cstdio>
|
||||
|
||||
void GPU::reset() {
|
||||
regs.fill(0);
|
||||
shaderUnit.reset();
|
||||
// TODO: Reset blending, texturing, etc here
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "gpu.hpp"
|
||||
#include "PICA/gpu.hpp"
|
||||
#include "PICA/regs.hpp"
|
||||
|
||||
u32 GPU::readReg(u32 address) {
|
||||
printf("Ignoring read from GPU register %08X\n", address);
|
||||
|
@ -10,7 +11,7 @@ void GPU::writeReg(u32 address, u32 value) {
|
|||
const u32 index = (address - 0x1EF01000) / sizeof(u32);
|
||||
writeInternalReg(index, value, 0xffffffff);
|
||||
} else {
|
||||
Helpers::panic("Ignoring write to GPU register %08X. Value: %08X\n", address, value);
|
||||
printf("Ignoring write to external GPU register %08X. Value: %08X\n", address, value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24,6 +25,8 @@ u32 GPU::readInternalReg(u32 index) {
|
|||
}
|
||||
|
||||
void GPU::writeInternalReg(u32 index, u32 value, u32 mask) {
|
||||
using namespace PICAInternalRegs;
|
||||
|
||||
if (index > regNum) {
|
||||
Helpers::panic("Tried to write to invalid GPU register. Index: %X, value: %08X\n", index, value);
|
||||
return;
|
||||
|
@ -32,7 +35,22 @@ void GPU::writeInternalReg(u32 index, u32 value, u32 mask) {
|
|||
u32 currentValue = regs[index];
|
||||
u32 newValue = (currentValue & ~mask) | (value & mask); // Only overwrite the bits specified by "mask"
|
||||
|
||||
// TODO: Figure out if things like the shader index use the unmasked value or the masked one
|
||||
// We currently use the unmasked value like Citra does
|
||||
switch (index) {
|
||||
case VertexShaderTransferEnd:
|
||||
if (value != 0) shaderUnit.vs.finalize();
|
||||
break;
|
||||
|
||||
case VertexShaderTransferIndex:
|
||||
shaderUnit.vs.setBufferIndex(value);
|
||||
break;
|
||||
|
||||
case VertexShaderData0: case VertexShaderData1: case VertexShaderData2: case VertexShaderData3:
|
||||
case VertexShaderData4: case VertexShaderData5: case VertexShaderData6: case VertexShaderData7:
|
||||
shaderUnit.vs.uploadWord(value);
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("GPU: Wrote to unimplemented internal reg: %X, value: %08X\n", index, newValue);
|
||||
break;
|
||||
|
|
6
src/core/PICA/shader_unit.cpp
Normal file
6
src/core/PICA/shader_unit.cpp
Normal file
|
@ -0,0 +1,6 @@
|
|||
#include "PICA/shader_unit.hpp"
|
||||
|
||||
void ShaderUnit::reset() {
|
||||
vs.reset();
|
||||
gs.reset();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue