mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-05-05 03:34:49 +12:00
More shader JIT groundwork
This commit is contained in:
parent
bf0436a85b
commit
cf9ed3d460
7 changed files with 46 additions and 7 deletions
include/PICA
21
include/PICA/dynapica/shader_rec.hpp
Normal file
21
include/PICA/dynapica/shader_rec.hpp
Normal file
|
@ -0,0 +1,21 @@
|
|||
#pragma once
|
||||
#include "PICA/shader.hpp"
|
||||
|
||||
class ShaderJIT {
|
||||
void compileShader(PICAShader& shaderUnit);
|
||||
|
||||
public:
|
||||
#if defined(PANDA3DS_DYNAPICA_SUPPORTED) && defined(PANDA3DS_X64_HOST)
|
||||
#define PANDA3DS_SHADER_JIT_SUPPORTED
|
||||
|
||||
// Call this before starting to process a batch of vertices
|
||||
// This will read the PICA config (uploaded shader and shader operand descriptors) and search if we've already compiled this shader
|
||||
// If yes, it sets it as the active shader. if not, then it compiles it, adds it to the cache, and sets it as active,
|
||||
void prepare(PICAShader& shaderUnit);
|
||||
#else
|
||||
void prepare(PICAShader& shaderUnit) {
|
||||
Helpers::panic("Vertex Loader JIT: Tried to load vertices with JIT on platform that does not support vertex loader jit");
|
||||
}
|
||||
#endif
|
||||
|
||||
};
|
|
@ -12,11 +12,15 @@ class VertexLoaderJIT {
|
|||
Callback compileConfig(PICARegs regs);
|
||||
|
||||
public:
|
||||
#ifndef PANDA3DS_DYNAPICA_SUPPORTED
|
||||
#if defined(PANDA3DS_DYNAPICA_SUPPORTED) && defined(PANDA3DS_X64_HOST)
|
||||
void loadVertices(Vertex* output, size_t count, PICARegs regs);
|
||||
static constexpr bool isAvailable() { return true; }
|
||||
|
||||
#else
|
||||
void loadVertices(Vertex* output, size_t count, PICARegs regs) {
|
||||
Helpers::panic("Vertex Loader JIT: Tried to load vertices with JIT on platform that does not support vertex loader jit");
|
||||
}
|
||||
#else
|
||||
void loadVertices(Vertex* output, size_t count, PICARegs regs);
|
||||
|
||||
static constexpr bool isAvailable() { return false; }
|
||||
#endif
|
||||
};
|
|
@ -6,6 +6,7 @@
|
|||
#include "PICA/float_types.hpp"
|
||||
#include "PICA/regs.hpp"
|
||||
#include "PICA/shader_unit.hpp"
|
||||
#include "PICA/dynapica/shader_rec.hpp"
|
||||
#include "renderer_gl/renderer_gl.hpp"
|
||||
|
||||
class GPU {
|
||||
|
|
|
@ -71,6 +71,8 @@ class PICAShader {
|
|||
bool f32UniformTransfer = false; // Are we transferring an f32 uniform or an f24 uniform?
|
||||
|
||||
std::array<u32, 4> floatUniformBuffer; // Buffer for temporarily caching float uniform data
|
||||
|
||||
protected:
|
||||
std::array<u32, 128> operandDescriptors;
|
||||
std::array<vec4f, 16> tempRegisters; // General purpose registers the shader can use for temp values
|
||||
OpenGL::Vector<s32, 2> addrRegister; // Address register
|
||||
|
@ -85,13 +87,15 @@ class PICAShader {
|
|||
std::array<Loop, 4> loopInfo;
|
||||
std::array<ConditionalInfo, 8> conditionalInfo;
|
||||
std::array<CallInfo, 4> callInfo;
|
||||
|
||||
ShaderType type;
|
||||
|
||||
friend class ShaderJIT;
|
||||
|
||||
private:
|
||||
vec4f getSource(u32 source);
|
||||
vec4f& getDest(u32 dest);
|
||||
|
||||
// Shader opcodes
|
||||
// Interpreter functions for the various shader functions
|
||||
void add(u32 instruction);
|
||||
void call(u32 instruction);
|
||||
void callc(u32 instruction);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue