@@ -1643,19 +1643,40 @@ typedef struct {
1643
1643
unsigned long w3 ;
1644
1644
} TexRect ;
1645
1645
1646
+ #ifdef USE_GBI_TRACE
1647
+ /*
1648
+ * Trace structure
1649
+ */
1650
+ typedef struct {
1651
+ const char * file ;
1652
+ int idx ;
1653
+ bool valid ;
1654
+ } Trace ;
1655
+
1656
+ #define MakeTrace () \
1657
+ , { \
1658
+ __FILE__, __LINE__, true \
1659
+ }
1660
+ #else
1661
+ #define MakeTrace ()
1662
+ #endif
1646
1663
/*
1647
1664
* Generic Gfx Packet
1648
1665
*/
1649
1666
typedef struct {
1650
1667
uintptr_t w0 ;
1651
1668
uintptr_t w1 ;
1652
-
1653
- // unsigned long long w0 ;
1654
- // unsigned long long w1;
1669
+ #ifdef USE_GBI_TRACE
1670
+ Trace trace ;
1671
+ #endif
1655
1672
} Gwords ;
1656
1673
1657
1674
#ifdef __cplusplus
1658
- static_assert (sizeof (Gwords ) == 2 * sizeof (void * ), "Display list size is bad" );
1675
+ #ifdef USE_GBI_TRACE
1676
+ static_assert ((sizeof (Gwords ) == 2 * sizeof (void * ) + sizeof (Trace )), "Display list size is bad" );
1677
+ #else
1678
+ static_assert ((sizeof (Gwords ) == 2 * sizeof (void * )), "Display list size is bad" );
1679
+ #endif
1659
1680
#endif
1660
1681
1661
1682
/*
@@ -1711,28 +1732,54 @@ typedef union Gfx {
1711
1732
#define gsDma0p (c , s , l ) \
1712
1733
{ _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24), (uintptr_t)(s) }
1713
1734
1735
+ #ifdef USE_GBI_TRACE
1714
1736
#define gDma1p (pkt , c , s , l , p ) \
1715
1737
_DW({ \
1716
1738
Gfx* _g = (Gfx*)(pkt); \
1717
1739
\
1718
1740
_g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | _SHIFTL((l), 0, 16)); \
1719
1741
_g->words.w1 = (uintptr_t)(s); \
1742
+ _g->words.trace.file = __FILE__; \
1743
+ _g->words.trace.idx = __LINE__; \
1744
+ _g->words.trace.valid = true; \
1720
1745
})
1721
-
1746
+ #else
1747
+ #define gDma1p (pkt , c , s , l , p ) \
1748
+ _DW({ \
1749
+ Gfx* _g = (Gfx*)(pkt); \
1750
+ \
1751
+ _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | _SHIFTL((l), 0, 16)); \
1752
+ _g->words.w1 = (uintptr_t)(s); \
1753
+ })
1754
+ #endif
1722
1755
#define gsDma1p (c , s , l , p ) \
1723
- { (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | _SHIFTL((l), 0, 16)), (uintptr_t)(s) }
1756
+ { (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | _SHIFTL((l), 0, 16)), (uintptr_t)(s)MakeTrace() }
1724
1757
1758
+ #ifdef USE_GBI_TRACE
1759
+ #define gDma2p (pkt , c , adrs , len , idx , ofs ) \
1760
+ _DW({ \
1761
+ Gfx* _g = (Gfx*)(pkt); \
1762
+ _g->words.w0 = \
1763
+ (_SHIFTL((c), 24, 8) | _SHIFTL(((len)-1) / 8, 19, 5) | _SHIFTL((ofs) / 8, 8, 8) | _SHIFTL((idx), 0, 8)); \
1764
+ _g->words.w1 = (uintptr_t)(adrs); \
1765
+ _g->words.trace.file = __FILE__; \
1766
+ _g->words.trace.idx = __LINE__; \
1767
+ _g->words.trace.valid = true; \
1768
+ })
1769
+ #else
1725
1770
#define gDma2p (pkt , c , adrs , len , idx , ofs ) \
1726
1771
_DW({ \
1727
1772
Gfx* _g = (Gfx*)(pkt); \
1728
1773
_g->words.w0 = \
1729
1774
(_SHIFTL((c), 24, 8) | _SHIFTL(((len)-1) / 8, 19, 5) | _SHIFTL((ofs) / 8, 8, 8) | _SHIFTL((idx), 0, 8)); \
1730
1775
_g->words.w1 = (uintptr_t)(adrs); \
1731
1776
})
1777
+ #endif
1778
+
1732
1779
#define gsDma2p (c , adrs , len , idx , ofs ) \
1733
1780
{ \
1734
1781
(_SHIFTL((c), 24, 8) | _SHIFTL(((len)-1) / 8, 19, 5) | _SHIFTL((ofs) / 8, 8, 8) | _SHIFTL((idx), 0, 8)), \
1735
- (uintptr_t)(adrs) \
1782
+ (uintptr_t)(adrs)MakeTrace() \
1736
1783
}
1737
1784
1738
1785
#define gSPNoOp (pkt ) gDma0p(pkt, G_SPNOOP, 0, 0)
@@ -1756,14 +1803,26 @@ typedef union Gfx {
1756
1803
* | |seg| address |
1757
1804
* +-+---+-----------------------------+
1758
1805
*/
1806
+ #ifdef USE_GBI_TRACE
1759
1807
#define __gSPVertex (pkt , v , n , v0 ) \
1760
1808
_DW({ \
1761
1809
Gfx* _g = (Gfx*)(pkt); \
1762
1810
_g->words.w0 = _SHIFTL(G_VTX, 24, 8) | _SHIFTL((n), 12, 8) | _SHIFTL((v0) + (n), 1, 7); \
1763
1811
_g->words.w1 = (uintptr_t)(v); \
1812
+ _g->words.trace.file = __FILE__; \
1813
+ _g->words.trace.idx = __LINE__; \
1814
+ _g->words.trace.valid = true; \
1764
1815
})
1816
+ #else
1817
+ #define __gSPVertex (pkt , v , n , v0 ) \
1818
+ _DW({ \
1819
+ Gfx* _g = (Gfx*)(pkt); \
1820
+ _g->words.w0 = _SHIFTL(G_VTX, 24, 8) | _SHIFTL((n), 12, 8) | _SHIFTL((v0) + (n), 1, 7); \
1821
+ _g->words.w1 = (uintptr_t)(v); \
1822
+ })
1823
+ #endif
1765
1824
#define gsSPVertex (v , n , v0 ) \
1766
- { (_SHIFTL(G_VTX, 24, 8) | _SHIFTL((n), 12, 8) | _SHIFTL((v0) + (n), 1, 7)), (uintptr_t)(v) }
1825
+ { (_SHIFTL(G_VTX, 24, 8) | _SHIFTL((n), 12, 8) | _SHIFTL((v0) + (n), 1, 7)), (uintptr_t)(v)MakeTrace() }
1767
1826
1768
1827
#elif (defined(F3DEX_GBI ) || defined(F3DLP_GBI ))
1769
1828
/*
0 commit comments