@@ -268,6 +268,89 @@ void gsKit_prim_sprite(GSGLOBAL *gsGlobal, float x1, float y1, float x2, float y
268268}
269269#endif
270270
271+ #if F_gsKit_prim_list_sprite_gouraud_3d
272+ void gsKit_prim_list_sprite_gouraud_3d (GSGLOBAL * gsGlobal , int count , const GSPRIMPOINT * vertices )
273+ {
274+ u64 * p_store ;
275+ u64 * p_data ;
276+ int qsize = (count * 2 ) + 1 ;
277+ int bytes = count * sizeof (GSPRIMPOINT );
278+
279+ p_store = p_data = gsKit_heap_alloc (gsGlobal , qsize , (qsize * 16 ), GIF_AD );
280+
281+ if (p_store == gsGlobal -> CurQueue -> last_tag )
282+ {
283+ * p_data ++ = GIF_TAG_AD (qsize );
284+ * p_data ++ = GIF_AD ;
285+ }
286+
287+ * p_data ++ = GS_SETREG_PRIM ( GS_PRIM_PRIM_SPRITE , 1 , 0 , gsGlobal -> PrimFogEnable ,
288+ gsGlobal -> PrimAlphaEnable , gsGlobal -> PrimAAEnable ,
289+ 0 , gsGlobal -> PrimContext , 0 );
290+
291+ * p_data ++ = GS_PRIM ;
292+
293+ memcpy (p_data , vertices , bytes );
294+ }
295+ #endif
296+
297+ #if F_gsKit_prim_list_sprite_flat_color
298+ void gsKit_prim_list_sprite_flat_color (GSGLOBAL * gsGlobal , gs_rgbaq color , int count , const gs_xyz2 * vertices )
299+ {
300+ u64 * p_store ;
301+ u64 * p_data ;
302+ int qsize = count + 2 ;
303+ int bytes = count * sizeof (gs_xyz2 );
304+
305+ p_store = p_data = gsKit_heap_alloc (gsGlobal , qsize , (qsize * 16 ), GIF_AD );
306+
307+ if (p_store == gsGlobal -> CurQueue -> last_tag )
308+ {
309+ * p_data ++ = GIF_TAG_AD (qsize );
310+ * p_data ++ = GIF_AD ;
311+ }
312+
313+ * p_data ++ = GS_SETREG_PRIM ( GS_PRIM_PRIM_SPRITE , 0 , 0 , gsGlobal -> PrimFogEnable ,
314+ gsGlobal -> PrimAlphaEnable , gsGlobal -> PrimAAEnable ,
315+ 0 , gsGlobal -> PrimContext , 0 );
316+
317+ * p_data ++ = GS_PRIM ;
318+
319+ // Copy color
320+ memcpy (p_data , & color , sizeof (gs_rgbaq ));
321+ p_data += 2 ; // Advance 2 u64, which is 16 bytes the gs_rgbaq struct size
322+ // Copy vertices
323+ memcpy (p_data , vertices , bytes );
324+ }
325+ #endif
326+
327+ #if F_gsKit_prim_list_sprite_flat
328+ void gsKit_prim_list_sprite_flat (GSGLOBAL * gsGlobal , int count , const u128 * flatContent )
329+ {
330+ u64 * p_store ;
331+ u64 * p_data ;
332+ int qsize = count + 1 ;
333+ int bytes = count * sizeof (u128 );
334+
335+ p_store = p_data = gsKit_heap_alloc (gsGlobal , qsize , (qsize * 16 ), GIF_AD );
336+
337+ if (p_store == gsGlobal -> CurQueue -> last_tag )
338+ {
339+ * p_data ++ = GIF_TAG_AD (qsize );
340+ * p_data ++ = GIF_AD ;
341+ }
342+
343+ * p_data ++ = GS_SETREG_PRIM ( GS_PRIM_PRIM_SPRITE , 0 , 0 , gsGlobal -> PrimFogEnable ,
344+ gsGlobal -> PrimAlphaEnable , gsGlobal -> PrimAAEnable ,
345+ 0 , gsGlobal -> PrimContext , 0 );
346+
347+ * p_data ++ = GS_PRIM ;
348+
349+ memcpy (p_data , flatContent , bytes );
350+ }
351+ #endif
352+
353+
271354#if F_gsKit_prim_triangle_3d
272355void gsKit_prim_triangle_3d (GSGLOBAL * gsGlobal , float x1 , float y1 , int iz1 ,
273356 float x2 , float y2 , int iz2 ,
0 commit comments