|
|
|
@ -99,6 +99,10 @@ struct VertexShaderState { |
|
|
|
}; |
|
|
|
|
|
|
|
static void ProcessShaderCode(VertexShaderState& state) { |
|
|
|
|
|
|
|
// Placeholder for invalid inputs
|
|
|
|
static float24 dummy_vec4_float24[4]; |
|
|
|
|
|
|
|
while (true) { |
|
|
|
if (!state.call_stack.empty()) { |
|
|
|
if (state.program_counter - shader_memory.data() == state.call_stack.top().final_address) { |
|
|
|
@ -132,6 +136,9 @@ static void ProcessShaderCode(VertexShaderState& state) { |
|
|
|
|
|
|
|
case RegisterType::FloatUniform: |
|
|
|
return &shader_uniforms.f[source_reg.GetIndex()].x; |
|
|
|
|
|
|
|
default: |
|
|
|
return dummy_vec4_float24; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
@ -182,9 +189,9 @@ static void ProcessShaderCode(VertexShaderState& state) { |
|
|
|
} |
|
|
|
|
|
|
|
float24* dest = (instr.common.dest < 0x08) ? state.output_register_table[4*instr.common.dest.GetIndex()] |
|
|
|
: (instr.common.dest < 0x10) ? nullptr |
|
|
|
: (instr.common.dest < 0x10) ? dummy_vec4_float24 |
|
|
|
: (instr.common.dest < 0x20) ? &state.temporary_registers[instr.common.dest.GetIndex()][0] |
|
|
|
: nullptr; |
|
|
|
: dummy_vec4_float24; |
|
|
|
|
|
|
|
state.debug.max_opdesc_id = std::max<u32>(state.debug.max_opdesc_id, 1+instr.common.operand_desc_id); |
|
|
|
|
|
|
|
|