19#ifndef __PACKET2_UTILS_H__
20#define __PACKET2_UTILS_H__
23#include "packet2_chain.h"
24#include "packet2_vif.h"
32#define VU_GS_PRIM(PRIM, IIP, TME, FGE, ABE, AA1, FST, CTXT, FIX) (u128)(((FIX << 10) | (CTXT << 9) | (FST << 8) | (AA1 << 7) | (ABE << 6) | (FGE << 5) | (TME << 4) | (IIP << 3) | (PRIM)))
33#define VU_GS_GIFTAG(NLOOP, EOP, PRE, PRIM, FLG, NREG) (((u64)(NREG) << 60) | ((u64)(FLG) << 58) | ((u64)(PRIM) << 47) | ((u64)(PRE) << 46) | (EOP << 15) | (NLOOP << 0))
49 static inline void packet2_utils_vu_add_double_buffer(
packet2_t *packet2, u16 base, u16 offset)
51 packet2_chain_open_cnt(packet2, 0, 0, 0);
52 packet2_vif_base(packet2, base, 0);
53 packet2_vif_offset(packet2, offset, 0);
54 packet2_chain_close_tag(packet2);
67 static inline void packet2_utils_vu_add_unpack_data(
packet2_t *packet2, u32 t_dest_address,
void *t_data, u32 t_size, u8 t_use_top)
69 packet2_chain_ref(packet2, t_data, t_size, 0, 0, 0);
70 packet2_vif_stcycl(packet2, 0, 0x0101, 0);
71 packet2_vif_open_unpack(packet2, P2_UNPACK_V4_32, t_dest_address, t_use_top, 0, 1, 0);
72 packet2_vif_close_unpack_manual(packet2, t_size);
81 static inline void packet2_utils_vu_open_unpack(
packet2_t *packet2, u32 t_dest_address, u8 t_use_top)
83 packet2_chain_open_cnt(packet2, 0, 0, 0);
84 packet2_vif_stcycl(packet2, 0, 0x0101, 0);
85 packet2_vif_open_unpack(packet2, P2_UNPACK_V4_32, t_dest_address, t_use_top, 0, 1, 0);
92 static inline u32 packet2_utils_vu_close_unpack(
packet2_t *packet2)
94 packet2_vif_pad128(packet2);
95 packet2_chain_close_tag(packet2);
103 static inline void packet2_utils_vu_add_continue_program(
packet2_t *packet2)
105 packet2_chain_open_cnt(packet2, 0, 0, 0);
106 packet2_vif_flush(packet2, 0);
107 packet2_vif_mscnt(packet2, 0);
108 packet2_chain_close_tag(packet2);
115 static inline void packet2_utils_vu_add_start_program(
packet2_t *packet2, u32 addr)
117 packet2_chain_open_cnt(packet2, 0, 0, 0);
118 packet2_vif_flush(packet2, 0);
119 packet2_vif_mscal(packet2, addr, 0);
120 packet2_chain_close_tag(packet2);
124 static inline void packet2_utils_vu_add_end_tag(
packet2_t *packet2)
126 packet2_chain_open_end(packet2, 0, 0);
127 packet2_vif_nop(packet2, 0);
128 packet2_vif_nop(packet2, 0);
129 packet2_chain_close_tag(packet2);
138 static inline u32 packet2_utils_get_packet_size_for_program(u32 *start, u32 *end)
141 u32
count = (end - start) / 2;
144 return (
count >> 8) + 1;
157 static inline void packet2_utils_gif_add_set(
packet2_t *packet2, u32 loops_count)
172 static inline void packet2_utils_gs_add_lod(
packet2_t *packet2,
lod_t *lod)
183 (
int)(lod->k * 16.0F)),
199 texbuff->address >> 6,
203 texbuff->info.height,
204 texbuff->info.components,
205 texbuff->info.function,
220 static inline void packet2_utils_gs_add_draw_finish_giftag(
packet2_t *packet2)
235 static inline void packet2_utils_gs_add_prim_giftag(
packet2_t *packet2,
prim_t *prim, u32 loops_count, u32 nreg, u8 nreg_count, u8 context)
u32 packet2_vif_close_unpack_auto(packet2_t *packet2, u32 wl, u32 cl)
u32 count
start sector of fragmented bd/file