From 82cab6f78bb15903dea15b90d06b2b8a67761f78 Mon Sep 17 00:00:00 2001 From: h4570 Date: Sat, 21 Nov 2020 13:59:56 +0100 Subject: [PATCH] refactored to match latest libpacket2 api --- src/engine/engine.cpp | 10 --- src/engine/include/modules/vif_sender.hpp | 3 +- src/engine/modules/gif_sender.cpp | 8 +-- src/engine/modules/renderer.cpp | 4 +- src/engine/modules/vif_sender.cpp | 76 +++++++++++++++-------- src/samples/ari/Makefile | 2 +- src/samples/floors/Makefile | 2 +- 7 files changed, 59 insertions(+), 46 deletions(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index e5fddc0..76b7614 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -15,15 +15,8 @@ #include #include #include -#include -#include #include "include/utils/debug.hpp" -// VU1 micro program -extern u32 VU1Draw3D_CodeStart __attribute__((section(".vudata"))); -extern u32 VU1Draw3D_CodeEnd __attribute__((section(".vudata"))); -// - // ---- // Constructors/Destructors // ---- @@ -84,9 +77,6 @@ void Engine::firePS2() { SifInitRpc(0); srand(time(NULL)); - dma_channel_initialize(DMA_CHANNEL_VIF1, NULL, 0); - dma_channel_fast_waits(DMA_CHANNEL_VIF1); - vu_upload_program(0, &VU1Draw3D_CodeStart, &VU1Draw3D_CodeEnd, DMA_CHANNEL_VIF1); fileService.startThread(); audio.startThread(&fileService); isInitialized = 0; diff --git a/src/engine/include/modules/vif_sender.hpp b/src/engine/include/modules/vif_sender.hpp index 9924a1b..1c26843 100644 --- a/src/engine/include/modules/vif_sender.hpp +++ b/src/engine/include/modules/vif_sender.hpp @@ -12,7 +12,7 @@ #define _TYRA_VIF_SENDER_ #include -#include +#include #include "../models/render_data.hpp" #include "../models/light_bulb.hpp" #include "../models/mesh.hpp" @@ -32,6 +32,7 @@ public: void sendMatrices(const RenderData &t_renderData, const Vector3 &t_position, const Vector3 &t_rotation); private: + void uploadMicroProgram(); void setDoubleBuffer(); void drawVertices(Mesh &t_mesh, u32 t_start, u32 t_end, VECTOR *t_vertices, VECTOR *t_coordinates, prim_t *t_prim, texbuffer_t *textureBuffer); packet2_t *packets[2] __attribute__((aligned(64))); diff --git a/src/engine/modules/gif_sender.cpp b/src/engine/modules/gif_sender.cpp index 785c183..72b749b 100644 --- a/src/engine/modules/gif_sender.cpp +++ b/src/engine/modules/gif_sender.cpp @@ -32,8 +32,8 @@ GifSender::GifSender(u32 t_packetSize, ScreenSettings *t_screen) : screen(t_scre { PRINT_LOG("Initializing GifSender"); packetSize = t_packetSize; - packets[0] = packet2_create_chain(t_packetSize, P2_TYPE_NORMAL, false); - packets[1] = packet2_create_chain(t_packetSize, P2_TYPE_NORMAL, false); + packets[0] = packet2_create(t_packetSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, false); + packets[1] = packet2_create(t_packetSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, false); PRINT_LOG("GifSender initialized!"); } @@ -54,7 +54,7 @@ GifSender::~GifSender() /** Send texture via GIF */ void GifSender::sendTexture(MeshTexture &texture, texbuffer_t *t_texBuffer) { - packet2_t *packet2 = packet2_create_chain(15, P2_TYPE_NORMAL, false); + packet2_t *packet2 = packet2_create(15, P2_TYPE_NORMAL, P2_MODE_CHAIN, false); packet2_update( packet2, draw_texture_transfer( @@ -75,7 +75,7 @@ void GifSender::sendTexture(MeshTexture &texture, texbuffer_t *t_texBuffer) void GifSender::sendClear(zbuffer_t *t_zBuffer) { - packet2_t *packet2 = packet2_create_chain(36, P2_TYPE_NORMAL, false); + packet2_t *packet2 = packet2_create(36, P2_TYPE_NORMAL, P2_MODE_CHAIN, false); packet2_chain_open_end(packet2, 0, 0); packet2_update(packet2, draw_disable_tests(packet2->next, 0, t_zBuffer)); packet2_update(packet2, draw_clear(packet2->next, 0, diff --git a/src/engine/modules/renderer.cpp b/src/engine/modules/renderer.cpp index 2c38304..4136af5 100644 --- a/src/engine/modules/renderer.cpp +++ b/src/engine/modules/renderer.cpp @@ -40,7 +40,7 @@ Renderer::Renderer(u32 t_packetSize, ScreenSettings *t_screen) isVSyncEnabled = true; isFrameEmpty = false; lastTextureId = 0; - flipPacket = packet2_create_normal(4, P2_TYPE_UNCACHED_ACCL); + flipPacket = packet2_create(4, P2_TYPE_UNCACHED_ACCL, P2_MODE_NORMAL, 0); allocateBuffers(t_screen->width, t_screen->height); initDrawingEnv(t_screen->width, t_screen->height); setPrim(); @@ -106,7 +106,7 @@ void Renderer::initDrawingEnv(float t_screenW, float t_screenH) PRINT_LOG("Initializing drawing environment"); u16 halfW = (u16)t_screenW / 2; u16 halfH = (u16)t_screenH / 2; - packet2_t *packet2 = packet2_create_normal(20, P2_TYPE_NORMAL); + packet2_t *packet2 = packet2_create(20, P2_TYPE_NORMAL, P2_MODE_NORMAL, 0); packet2_update(packet2, draw_setup_environment(packet2->base, 0, frameBuffers, &(zBuffer))); packet2_update(packet2, draw_primitive_xyoffset(packet2->next, 0, (2048 - halfW), (2048 - halfH))); packet2_update(packet2, draw_finish(packet2->next)); diff --git a/src/engine/modules/vif_sender.cpp b/src/engine/modules/vif_sender.cpp index 37231ef..8425207 100644 --- a/src/engine/modules/vif_sender.cpp +++ b/src/engine/modules/vif_sender.cpp @@ -24,13 +24,21 @@ const u32 VU1_PACKET_SIZE = 128; // Constructors/Destructors // ---- +// VU1 micro program +extern u32 VU1Draw3D_CodeStart __attribute__((section(".vudata"))); +extern u32 VU1Draw3D_CodeEnd __attribute__((section(".vudata"))); +// + VifSender::VifSender() { PRINT_LOG("Initializing VifSender"); PRINT_LOG("VifSender initialized!"); - packets[0] = packet2_create_chain(VU1_PACKET_SIZE, P2_TYPE_NORMAL, true); - packets[1] = packet2_create_chain(VU1_PACKET_SIZE, P2_TYPE_NORMAL, true); - matricesPacket = packet2_create_chain(4, P2_TYPE_NORMAL, true); + dma_channel_initialize(DMA_CHANNEL_VIF1, NULL, 0); + dma_channel_fast_waits(DMA_CHANNEL_VIF1); + uploadMicroProgram(); + packets[0] = packet2_create(VU1_PACKET_SIZE, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + packets[1] = packet2_create(VU1_PACKET_SIZE, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + matricesPacket = packet2_create(4, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); context = 0; setDoubleBuffer(); } @@ -46,6 +54,20 @@ VifSender::~VifSender() // Methods // ---- +void VifSender::uploadMicroProgram() +{ + packet2_t *packet2 = packet2_create( + packet2_vu_get_packet_size_for_program(&VU1Draw3D_CodeStart, &VU1Draw3D_CodeEnd) + 1, // + end tag + P2_TYPE_NORMAL, + P2_MODE_CHAIN, + 1); + packet2_vu_add_micro_program(packet2, 0, &VU1Draw3D_CodeStart, &VU1Draw3D_CodeEnd); + packet2_vu_add_end_tag(packet2); + dma_channel_send_packet2(packet2, DMA_CHANNEL_VIF1, 1); + dma_channel_wait(DMA_CHANNEL_VIF1, 0); + packet2_free(packet2); +} + void VifSender::sendMatrices(const RenderData &t_renderData, const Vector3 &t_position, const Vector3 &t_rotation) { vec3ToNative(position, t_position, 1.0F); @@ -53,8 +75,8 @@ void VifSender::sendMatrices(const RenderData &t_renderData, const Vector3 &t_po create_local_world(localWorld, position, rotation); create_local_screen(localScreen, localWorld, t_renderData.worldView->data, t_renderData.perspective->data); packet2_reset(matricesPacket, false); - vu_add_unpack_data(matricesPacket, 0, &localScreen, 8, 0); - vu_add_end_tag(matricesPacket); + packet2_vu_add_unpack_data(matricesPacket, 0, &localScreen, 8, 0); + packet2_vu_add_end_tag(matricesPacket); dma_channel_send_packet2(matricesPacket, DMA_CHANNEL_VIF1, 1); dma_channel_wait(DMA_CHANNEL_VIF1, 0); } @@ -82,7 +104,7 @@ void VifSender::drawMesh(RenderData *t_renderData, Matrix t_perspective, u32 ver i += (VU1_PACKAGE_VERTS_PER_BUFF - 1); i++; } - vu_add_end_tag(currPacket); + packet2_vu_add_end_tag(currPacket); dma_channel_send_packet2(currPacket, DMA_CHANNEL_VIF1, 1); dma_channel_wait(DMA_CHANNEL_VIF1, 0); context = !context; @@ -91,9 +113,9 @@ void VifSender::drawMesh(RenderData *t_renderData, Matrix t_perspective, u32 ver void VifSender::setDoubleBuffer() { - packet2_t *settings = packet2_create_chain(2, P2_TYPE_NORMAL, true); - vu_add_double_buffer_settings(settings, 8, 496); - vu_add_end_tag(settings); + packet2_t *settings = packet2_create(2, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + packet2_vu_add_double_buffer_settings(settings, 8, 496); + packet2_vu_add_end_tag(settings); dma_channel_send_packet2(settings, DMA_CHANNEL_VIF1, 1); dma_channel_wait(DMA_CHANNEL_VIF1, 0); packet2_free(settings); @@ -103,19 +125,19 @@ void VifSender::setDoubleBuffer() void VifSender::drawVertices(Mesh &t_mesh, u32 t_start, u32 t_end, VECTOR *t_vertices, VECTOR *t_coordinates, prim_t *t_prim, texbuffer_t *textureBuffer) { const u32 vertCount = t_end - t_start; - vu_open_unpack(currPacket); + packet2_vu_open_unpack(currPacket); // TODO get this via screensettings - vu_unpack_add_float(currPacket, 2048.0F); // scale - vu_unpack_add_float(currPacket, 2048.0F); // scale - vu_unpack_add_float(currPacket, ((float)0xFFFFFF) / 32.0F); // scale - vu_unpack_add_u32(currPacket, vertCount); // vertex count - vu_unpack_add_set(currPacket, 1); - vu_unpack_add_lod(currPacket, &t_mesh.lod); - vu_unpack_add_texbuff_clut(currPacket, textureBuffer, &t_mesh.clut); - vu_unpack_add_prim_giftag(currPacket, t_prim, vertCount, DRAW_STQ2_REGLIST, 3, 0); + packet2_vu_unpack_add_float(currPacket, 2048.0F); // scale + packet2_vu_unpack_add_float(currPacket, 2048.0F); // scale + packet2_vu_unpack_add_float(currPacket, ((float)0xFFFFFF) / 32.0F); // scale + packet2_vu_unpack_add_u32(currPacket, vertCount); // vertex count + packet2_vu_unpack_add_set(currPacket, 1); + packet2_vu_unpack_add_lod(currPacket, &t_mesh.lod); + packet2_vu_unpack_add_texbuff_clut(currPacket, textureBuffer, &t_mesh.clut); + packet2_vu_unpack_add_prim_giftag(currPacket, t_prim, vertCount, DRAW_STQ2_REGLIST, 3, 0); for (u8 j = 0; j < 4; j++) - vu_unpack_add_u32(currPacket, 128); + packet2_vu_unpack_add_u32(currPacket, 128); // Clipping tests start @@ -152,14 +174,14 @@ void VifSender::drawVertices(Mesh &t_mesh, u32 t_start, u32 t_end, VECTOR *t_ver // // vu1.addFloat(1.0F); // // vu1.addFloat(500.0F); // far - vu_unpack_add_float(currPacket, 0.0F); - vu_unpack_add_float(currPacket, 0.0F); - vu_unpack_add_float(currPacket, 0.0F); - vu_unpack_add_float(currPacket, 0.0F); + packet2_vu_unpack_add_float(currPacket, 0.0F); + packet2_vu_unpack_add_float(currPacket, 0.0F); + packet2_vu_unpack_add_float(currPacket, 0.0F); + packet2_vu_unpack_add_float(currPacket, 0.0F); //// Clipping tests end - vu_close_unpack(currPacket); - vu_add_unpack_data(currPacket, 0, t_vertices + t_start, 2 * vertCount, 1); - vu_add_unpack_data(currPacket, 0, t_coordinates + t_start, 2 * vertCount, 1); - vu_add_start_program(currPacket, 0); + packet2_vu_close_unpack(currPacket); + packet2_vu_add_unpack_data(currPacket, 0, t_vertices + t_start, 2 * vertCount, 1); + packet2_vu_add_unpack_data(currPacket, 0, t_coordinates + t_start, 2 * vertCount, 1); + packet2_vu_add_start_program(currPacket, 0); } diff --git a/src/samples/ari/Makefile b/src/samples/ari/Makefile index ffdc4aa..e06585d 100644 --- a/src/samples/ari/Makefile +++ b/src/samples/ari/Makefile @@ -32,7 +32,7 @@ EE_OBJS = \ ari.o \ main.o -EE_LIBS = -ldraw -lgraph -lmath3d -lpacket -ldma -lpacket2 -lvu -lpad -laudsrv -lc -lstdc++ +EE_LIBS = -ldraw -lgraph -lmath3d -lpacket -ldma -lpacket2 -lpad -laudsrv -lc -lstdc++ EE_INCS := -I./../../engine/include $(EE_INCS) EE_DVP = dvp-as EE_VCL = vcl diff --git a/src/samples/floors/Makefile b/src/samples/floors/Makefile index 5b766b4..bb45494 100644 --- a/src/samples/floors/Makefile +++ b/src/samples/floors/Makefile @@ -36,7 +36,7 @@ EE_OBJS = \ floors.o \ main.o -EE_LIBS = -ldraw -lgraph -lmath3d -lpacket -ldma -lpad -lpacket2 -lvu -laudsrv -lc -lstdc++ +EE_LIBS = -ldraw -lgraph -lmath3d -lpacket -ldma -lpad -lpacket2 -laudsrv -lc -lstdc++ EE_INCS := -I./../../engine/include $(EE_INCS) EE_DVP = dvp-as EE_VCL = openvcl