#include "cpu_state.h" #include "render_pass_projection.h" #include #include extern "C" { int g_psx_render_pass_active=0; int (*g_psx_projection_command)(CPUState*,uint32_t)=nullptr; uint16_t psx_mod_read_half(uint32_t) { return 0; } uint32_t psx_mod_read_word(uint32_t) { return 0; } void psx_mod_write_half(uint32_t,uint16_t) {} void psx_mod_write_word(uint32_t,uint32_t) {} } static int failures=0; #define CHECK(v) do { if(!(v)) { std::printf("FAIL line %d: %s\n",__LINE__,#v); ++failures; } } while(0) static CPUState pose(int x,int vertex=7,double yaw=0) { CPUState c{}; c.gpr[31]=0x80012340; int16_t r[9]={(int16_t)std::lround(4096*std::cos(yaw)),0,(int16_t)std::lround(4096*std::sin(yaw)), 0,4096,0,(int16_t)std::lround(-4096*std::sin(yaw)),0,(int16_t)std::lround(4096*std::cos(yaw))}; for(int i=0;i<9;++i) c.gte_ctrl[i/2]|=uint32_t(uint16_t(r[i]))<<(16*(i%2)); c.gte_ctrl[5]=x; c.gte_ctrl[7]=1000; c.gte_data[0]=vertex; c.gte_data[1]=10; return c; } static void capture(PSXProjectionHistory* h,CPUState* list,int count,uint32_t ticks=2) { g_psx_render_pass_active=0; psx_projection_capture_begin(h); for(int i=0;i