refactored to match latest libpacket2 api
This commit is contained in:
@@ -15,15 +15,8 @@
|
|||||||
#include <sifrpc.h>
|
#include <sifrpc.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <vu.h>
|
|
||||||
#include <dma.h>
|
|
||||||
#include "include/utils/debug.hpp"
|
#include "include/utils/debug.hpp"
|
||||||
|
|
||||||
// VU1 micro program
|
|
||||||
extern u32 VU1Draw3D_CodeStart __attribute__((section(".vudata")));
|
|
||||||
extern u32 VU1Draw3D_CodeEnd __attribute__((section(".vudata")));
|
|
||||||
//
|
|
||||||
|
|
||||||
// ----
|
// ----
|
||||||
// Constructors/Destructors
|
// Constructors/Destructors
|
||||||
// ----
|
// ----
|
||||||
@@ -84,9 +77,6 @@ void Engine::firePS2()
|
|||||||
{
|
{
|
||||||
SifInitRpc(0);
|
SifInitRpc(0);
|
||||||
srand(time(NULL));
|
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();
|
fileService.startThread();
|
||||||
audio.startThread(&fileService);
|
audio.startThread(&fileService);
|
||||||
isInitialized = 0;
|
isInitialized = 0;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
#define _TYRA_VIF_SENDER_
|
#define _TYRA_VIF_SENDER_
|
||||||
|
|
||||||
#include <tamtypes.h>
|
#include <tamtypes.h>
|
||||||
#include <vu.h>
|
#include <packet2_vu.h>
|
||||||
#include "../models/render_data.hpp"
|
#include "../models/render_data.hpp"
|
||||||
#include "../models/light_bulb.hpp"
|
#include "../models/light_bulb.hpp"
|
||||||
#include "../models/mesh.hpp"
|
#include "../models/mesh.hpp"
|
||||||
@@ -32,6 +32,7 @@ public:
|
|||||||
void sendMatrices(const RenderData &t_renderData, const Vector3 &t_position, const Vector3 &t_rotation);
|
void sendMatrices(const RenderData &t_renderData, const Vector3 &t_position, const Vector3 &t_rotation);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void uploadMicroProgram();
|
||||||
void setDoubleBuffer();
|
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);
|
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)));
|
packet2_t *packets[2] __attribute__((aligned(64)));
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ GifSender::GifSender(u32 t_packetSize, ScreenSettings *t_screen) : screen(t_scre
|
|||||||
{
|
{
|
||||||
PRINT_LOG("Initializing GifSender");
|
PRINT_LOG("Initializing GifSender");
|
||||||
packetSize = t_packetSize;
|
packetSize = t_packetSize;
|
||||||
packets[0] = 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_chain(t_packetSize, P2_TYPE_NORMAL, false);
|
packets[1] = packet2_create(t_packetSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, false);
|
||||||
PRINT_LOG("GifSender initialized!");
|
PRINT_LOG("GifSender initialized!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ GifSender::~GifSender()
|
|||||||
/** Send texture via GIF */
|
/** Send texture via GIF */
|
||||||
void GifSender::sendTexture(MeshTexture &texture, texbuffer_t *t_texBuffer)
|
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_update(
|
||||||
packet2,
|
packet2,
|
||||||
draw_texture_transfer(
|
draw_texture_transfer(
|
||||||
@@ -75,7 +75,7 @@ void GifSender::sendTexture(MeshTexture &texture, texbuffer_t *t_texBuffer)
|
|||||||
|
|
||||||
void GifSender::sendClear(zbuffer_t *t_zBuffer)
|
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_chain_open_end(packet2, 0, 0);
|
||||||
packet2_update(packet2, draw_disable_tests(packet2->next, 0, t_zBuffer));
|
packet2_update(packet2, draw_disable_tests(packet2->next, 0, t_zBuffer));
|
||||||
packet2_update(packet2, draw_clear(packet2->next, 0,
|
packet2_update(packet2, draw_clear(packet2->next, 0,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ Renderer::Renderer(u32 t_packetSize, ScreenSettings *t_screen)
|
|||||||
isVSyncEnabled = true;
|
isVSyncEnabled = true;
|
||||||
isFrameEmpty = false;
|
isFrameEmpty = false;
|
||||||
lastTextureId = 0;
|
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);
|
allocateBuffers(t_screen->width, t_screen->height);
|
||||||
initDrawingEnv(t_screen->width, t_screen->height);
|
initDrawingEnv(t_screen->width, t_screen->height);
|
||||||
setPrim();
|
setPrim();
|
||||||
@@ -106,7 +106,7 @@ void Renderer::initDrawingEnv(float t_screenW, float t_screenH)
|
|||||||
PRINT_LOG("Initializing drawing environment");
|
PRINT_LOG("Initializing drawing environment");
|
||||||
u16 halfW = (u16)t_screenW / 2;
|
u16 halfW = (u16)t_screenW / 2;
|
||||||
u16 halfH = (u16)t_screenH / 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_setup_environment(packet2->base, 0, frameBuffers, &(zBuffer)));
|
||||||
packet2_update(packet2, draw_primitive_xyoffset(packet2->next, 0, (2048 - halfW), (2048 - halfH)));
|
packet2_update(packet2, draw_primitive_xyoffset(packet2->next, 0, (2048 - halfW), (2048 - halfH)));
|
||||||
packet2_update(packet2, draw_finish(packet2->next));
|
packet2_update(packet2, draw_finish(packet2->next));
|
||||||
|
|||||||
@@ -24,13 +24,21 @@ const u32 VU1_PACKET_SIZE = 128;
|
|||||||
// Constructors/Destructors
|
// Constructors/Destructors
|
||||||
// ----
|
// ----
|
||||||
|
|
||||||
|
// VU1 micro program
|
||||||
|
extern u32 VU1Draw3D_CodeStart __attribute__((section(".vudata")));
|
||||||
|
extern u32 VU1Draw3D_CodeEnd __attribute__((section(".vudata")));
|
||||||
|
//
|
||||||
|
|
||||||
VifSender::VifSender()
|
VifSender::VifSender()
|
||||||
{
|
{
|
||||||
PRINT_LOG("Initializing VifSender");
|
PRINT_LOG("Initializing VifSender");
|
||||||
PRINT_LOG("VifSender initialized!");
|
PRINT_LOG("VifSender initialized!");
|
||||||
packets[0] = packet2_create_chain(VU1_PACKET_SIZE, P2_TYPE_NORMAL, true);
|
dma_channel_initialize(DMA_CHANNEL_VIF1, NULL, 0);
|
||||||
packets[1] = packet2_create_chain(VU1_PACKET_SIZE, P2_TYPE_NORMAL, true);
|
dma_channel_fast_waits(DMA_CHANNEL_VIF1);
|
||||||
matricesPacket = packet2_create_chain(4, P2_TYPE_NORMAL, true);
|
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;
|
context = 0;
|
||||||
setDoubleBuffer();
|
setDoubleBuffer();
|
||||||
}
|
}
|
||||||
@@ -46,6 +54,20 @@ VifSender::~VifSender()
|
|||||||
// Methods
|
// 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)
|
void VifSender::sendMatrices(const RenderData &t_renderData, const Vector3 &t_position, const Vector3 &t_rotation)
|
||||||
{
|
{
|
||||||
vec3ToNative(position, t_position, 1.0F);
|
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_world(localWorld, position, rotation);
|
||||||
create_local_screen(localScreen, localWorld, t_renderData.worldView->data, t_renderData.perspective->data);
|
create_local_screen(localScreen, localWorld, t_renderData.worldView->data, t_renderData.perspective->data);
|
||||||
packet2_reset(matricesPacket, false);
|
packet2_reset(matricesPacket, false);
|
||||||
vu_add_unpack_data(matricesPacket, 0, &localScreen, 8, 0);
|
packet2_vu_add_unpack_data(matricesPacket, 0, &localScreen, 8, 0);
|
||||||
vu_add_end_tag(matricesPacket);
|
packet2_vu_add_end_tag(matricesPacket);
|
||||||
dma_channel_send_packet2(matricesPacket, DMA_CHANNEL_VIF1, 1);
|
dma_channel_send_packet2(matricesPacket, DMA_CHANNEL_VIF1, 1);
|
||||||
dma_channel_wait(DMA_CHANNEL_VIF1, 0);
|
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 += (VU1_PACKAGE_VERTS_PER_BUFF - 1);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
vu_add_end_tag(currPacket);
|
packet2_vu_add_end_tag(currPacket);
|
||||||
dma_channel_send_packet2(currPacket, DMA_CHANNEL_VIF1, 1);
|
dma_channel_send_packet2(currPacket, DMA_CHANNEL_VIF1, 1);
|
||||||
dma_channel_wait(DMA_CHANNEL_VIF1, 0);
|
dma_channel_wait(DMA_CHANNEL_VIF1, 0);
|
||||||
context = !context;
|
context = !context;
|
||||||
@@ -91,9 +113,9 @@ void VifSender::drawMesh(RenderData *t_renderData, Matrix t_perspective, u32 ver
|
|||||||
|
|
||||||
void VifSender::setDoubleBuffer()
|
void VifSender::setDoubleBuffer()
|
||||||
{
|
{
|
||||||
packet2_t *settings = packet2_create_chain(2, P2_TYPE_NORMAL, true);
|
packet2_t *settings = packet2_create(2, P2_TYPE_NORMAL, P2_MODE_CHAIN, true);
|
||||||
vu_add_double_buffer_settings(settings, 8, 496);
|
packet2_vu_add_double_buffer_settings(settings, 8, 496);
|
||||||
vu_add_end_tag(settings);
|
packet2_vu_add_end_tag(settings);
|
||||||
dma_channel_send_packet2(settings, DMA_CHANNEL_VIF1, 1);
|
dma_channel_send_packet2(settings, DMA_CHANNEL_VIF1, 1);
|
||||||
dma_channel_wait(DMA_CHANNEL_VIF1, 0);
|
dma_channel_wait(DMA_CHANNEL_VIF1, 0);
|
||||||
packet2_free(settings);
|
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)
|
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;
|
const u32 vertCount = t_end - t_start;
|
||||||
vu_open_unpack(currPacket);
|
packet2_vu_open_unpack(currPacket);
|
||||||
// TODO get this via screensettings
|
// TODO get this via screensettings
|
||||||
vu_unpack_add_float(currPacket, 2048.0F); // scale
|
packet2_vu_unpack_add_float(currPacket, 2048.0F); // scale
|
||||||
vu_unpack_add_float(currPacket, 2048.0F); // scale
|
packet2_vu_unpack_add_float(currPacket, 2048.0F); // scale
|
||||||
vu_unpack_add_float(currPacket, ((float)0xFFFFFF) / 32.0F); // scale
|
packet2_vu_unpack_add_float(currPacket, ((float)0xFFFFFF) / 32.0F); // scale
|
||||||
vu_unpack_add_u32(currPacket, vertCount); // vertex count
|
packet2_vu_unpack_add_u32(currPacket, vertCount); // vertex count
|
||||||
vu_unpack_add_set(currPacket, 1);
|
packet2_vu_unpack_add_set(currPacket, 1);
|
||||||
vu_unpack_add_lod(currPacket, &t_mesh.lod);
|
packet2_vu_unpack_add_lod(currPacket, &t_mesh.lod);
|
||||||
vu_unpack_add_texbuff_clut(currPacket, textureBuffer, &t_mesh.clut);
|
packet2_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_prim_giftag(currPacket, t_prim, vertCount, DRAW_STQ2_REGLIST, 3, 0);
|
||||||
|
|
||||||
for (u8 j = 0; j < 4; j++)
|
for (u8 j = 0; j < 4; j++)
|
||||||
vu_unpack_add_u32(currPacket, 128);
|
packet2_vu_unpack_add_u32(currPacket, 128);
|
||||||
|
|
||||||
// Clipping tests start
|
// 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(1.0F);
|
||||||
// // vu1.addFloat(500.0F); // far
|
// // vu1.addFloat(500.0F); // far
|
||||||
|
|
||||||
vu_unpack_add_float(currPacket, 0.0F);
|
packet2_vu_unpack_add_float(currPacket, 0.0F);
|
||||||
vu_unpack_add_float(currPacket, 0.0F);
|
packet2_vu_unpack_add_float(currPacket, 0.0F);
|
||||||
vu_unpack_add_float(currPacket, 0.0F);
|
packet2_vu_unpack_add_float(currPacket, 0.0F);
|
||||||
vu_unpack_add_float(currPacket, 0.0F);
|
packet2_vu_unpack_add_float(currPacket, 0.0F);
|
||||||
|
|
||||||
//// Clipping tests end
|
//// Clipping tests end
|
||||||
vu_close_unpack(currPacket);
|
packet2_vu_close_unpack(currPacket);
|
||||||
vu_add_unpack_data(currPacket, 0, t_vertices + t_start, 2 * vertCount, 1);
|
packet2_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);
|
packet2_vu_add_unpack_data(currPacket, 0, t_coordinates + t_start, 2 * vertCount, 1);
|
||||||
vu_add_start_program(currPacket, 0);
|
packet2_vu_add_start_program(currPacket, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ EE_OBJS = \
|
|||||||
ari.o \
|
ari.o \
|
||||||
main.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_INCS := -I./../../engine/include $(EE_INCS)
|
||||||
EE_DVP = dvp-as
|
EE_DVP = dvp-as
|
||||||
EE_VCL = vcl
|
EE_VCL = vcl
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ EE_OBJS = \
|
|||||||
floors.o \
|
floors.o \
|
||||||
main.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_INCS := -I./../../engine/include $(EE_INCS)
|
||||||
EE_DVP = dvp-as
|
EE_DVP = dvp-as
|
||||||
EE_VCL = openvcl
|
EE_VCL = openvcl
|
||||||
|
|||||||
Reference in New Issue
Block a user