jak-project/goal_src/jak2/engine/gfx/vu1-user-h.gc
2022-09-24 14:30:44 -04:00

532 lines
15 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: vu1-user-h.gc
;; name in dgo: vu1-user-h
;; dgos: ENGINE, GAME
;; The DMA buckets
;; name format:
;; <what renderer>-<what level>-<what tpage>
(defenum bucket-id
:type int32
:bitfield #f
;;;;;;;;;;
(bucket-0 0)
(bucket-1 1)
(bucket-2 2)
(bucket-3 3) ;; blit displays
(tex-lcom-sky-pre 4) ;; tex
(bucket-5 5) ;; sky
(bucket-6 6) ;; ocean
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; All levels with tfrag tpage
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(tex-l0-tfrag 7) ;; level 0 tex
(tfrag-l0-tfrag 8) ;; tfrag
(bucket-9 9) ;; tie
(bucket-10 10) ;; tie
(tfrag-s-l0-tfrag 11) ;; tfrag
(bucket-12 12) ;; tie
(bucket-13 13) ;; tie
(merc-l0-tfrag 14) ;; merc
(emerc-l0-tfrag 15) ;; emerc
(bucket-16 16) ;; mercneric
(bucket-17 17) ;; tie
(tex-l1-tfrag 18) ;; tex
(tfrag-l1-tfrag 19) ;; tfrag
(bucket-20 20) ;; tie
(bucket-21 21) ;; tie
(tfrag-s-l1-tfrag 22) ;; tfrag
(bucket-23 23) ;; tie
(bucket-24 24) ;; tie
(merc-l1-tfrag 25) ;; merc
(emerc-l1-tfrag 26) ;; emerc
(bucket-27 27) ;; mercneric
(bucket-28 28) ;; tie
(tex-l2-tfrag 29) ;; tex
(tfrag-l2-tfrag 30) ;; tfrag
(bucket-31 31) ;; tie
(bucket-32 32) ;; tie
(tfrag-s-l2-tfrag 33) ;; tfrag
(bucket-34 34) ;; tie
(bucket-35 35) ;; tie
(merc-l2-tfrag 36) ;; merc
(emerc-l2-tfrag 37) ;; emerc
(bucket-38 38) ;; mercneric
(bucket-39 39) ;; tie
(tex-l3-tfrag 40) ;; tex
(tfrag-l3-tfrag 41) ;; tfrag
(bucket-42 42) ;; tie
(bucket-43 43) ;; tie
(tfrag-s-l3-tfrag 44) ;; tfrag
(bucket-45 45) ;; tie
(bucket-46 46) ;; tie
(merc-l3-tfrag 47) ;; merc
(emerc-l3-tfrag 48) ;; emerc
(bucket-49 49) ;; mercneric
(bucket-50 50) ;; tie
(tex-l4-tfrag 51) ;; tex
(tfrag-l4-tfrag 52) ;; tfrag
(bucket-53 53) ;; tie
(bucket-54 54) ;; tie
(tfrag-s-l4-tfrag 55) ;; tfrag
(bucket-56 56) ;; tie
(bucket-57 57) ;; tie
(merc-l4-tfrag 58) ;; merc
(emerc-l4-tfrag 59) ;; emerc
(bucket-60 60) ;; mercneric
(bucket-61 61) ;; tie
(tex-l5-tfrag 62) ;; tex
(tfrag-l5-tfrag 63) ;; tfrag
(bucket-64 64) ;; tie
(bucket-65 65) ;; tie
(tfrag-s-l5-tfrag 66) ;; tfrag
(bucket-67 67) ;; tie
(bucket-68 68) ;; tie
(merc-l5-tfrag 69) ;; merc
(emerc-l5-tfrag 70) ;; emerc
(bucket-71 71) ;; mercneric
(bucket-72 72) ;; tie
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; All levels with shrub tpage
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(tex-l0-shrub 73) ;; tex
(bucket-74 74) ;; shrub
(bucket-75 75) ;; shrub
(bucket-76 76) ;; shrub
(bucket-77 77) ;; shrub
(bucket-78 78) ;; shrub
(merc-l0-shrub 79) ;; merc
(emerc-l0-shrub 80) ;; emerc
(bucket-81 81) ;; mercneric
(tex-l1-shrub 82) ;; tex
(bucket-83 83) ;; shrub
(bucket-84 84) ;; shrub
(bucket-85 85) ;; shrub
(bucket-86 86) ;; shrub
(bucket-87 87) ;; shrub
(merc-l1-shrub 88) ;; merc
(emerc-l1-shrub 89) ;; emerc
(bucket-90 90) ;; mercneric
(tex-l2-shrub 91) ;; tex
(bucket-92 92) ;; shrub
(bucket-93 93) ;; shrub
(bucket-94 94) ;; shrub
(bucket-95 95) ;; shrub
(bucket-96 96) ;; shrub
(merc-l2-shrub 97) ;; merc
(emerc-l2-shrub 98) ;; emerc
(bucket-99 99) ;; mercneric
(tex-l3-shrub 100) ;; tex
(bucket-101 101) ;; shrub
(bucket-102 102) ;; shrub
(bucket-103 103) ;; shrub
(bucket-104 104) ;; shrub
(bucket-105 105) ;; shrub
(merc-l3-shrub 106) ;; merc
(emerc-l3-shrub 107) ;; emerc
(bucket-108 108) ;; mercneric
(tex-l4-shrub 109) ;; tex
(bucket-110 110) ;; shrub
(bucket-111 111) ;; shrub
(bucket-112 112) ;; shrub
(bucket-113 113) ;; shrub
(bucket-114 114) ;; shrub
(merc-l4-shrub 115) ;; merc
(emerc-l4-shrub 116) ;; emerc
(bucket-117 117) ;; mercneric
(tex-l5-shrub 118) ;; tex
(bucket-119 119) ;; shrub
(bucket-120 120) ;; shrub
(bucket-121 121) ;; shrub
(bucket-122 122) ;; shrub
(bucket-123 123) ;; shrub
(merc-l5-shrub 124) ;; merc
(emerc-l5-shrub 125) ;; emerc
(bucket-126 126) ;; mercneric
(tex-l0-alpha 127) ;; tex
(tfrag-t-l0-alpha 128) ;; tfrag
(bucket-129 129) ;; tie
(bucket-130 130) ;; tie
(merc-l0-alpha 131) ;; merc
(emerc-l0-alpha 132) ;; emerc
(bucket-133 133) ;; mercneric
(tfrag-st-l0-alpha 134) ;; tfrag
(bucket-135 135) ;; tie
(bucket-136 136) ;; tie
(tex-l1-alpha 137) ;; tex
(tfrag-t-l1-alpha 138) ;; tfrag
(bucket-139 139) ;; tie
(bucket-140 140) ;; tie
(merc-l1-alpha 141) ;; merc
(emerc-l1-alpha 142) ;; emerc
(bucket-143 143) ;; mercneric
(tfrag-st-l1-alpha 144) ;; tfrag
(bucket-145 145) ;; tie
(bucket-146 146) ;; tie
(tex-l2-alpha 147) ;; tex
(tfrag-t-l2-alpha 148) ;; tfrag
(bucket-149 149) ;; tie
(bucket-150 150) ;; tie
(merc-l2-alpha 151) ;; merc
(emerc-l2-alpha 152) ;; emerc
(bucket-153 153) ;; mercneric
(tfrag-st-l2-alpha 154) ;; tfrag
(bucket-155 155) ;; tie
(bucket-156 156) ;; tie
(tex-l3-alpha 157) ;; tex
(tfrag-t-l3-alpha 158) ;; tfrag
(bucket-159 159) ;; tie
(bucket-160 160) ;; tie
(merc-l3-alpha 161) ;; merc
(emerc-l3-alpha 162) ;; emerc
(bucket-163 163) ;; mercneric
(tfrag-st-l3-alpha 164) ;; tfrag
(bucket-165 165) ;; tie
(bucket-166 166) ;; tie
(tex-l4-alpha 167) ;; tex
(tfrag-t-l4-alpha 168) ;; tfrag
(bucket-169 169) ;; tie
(bucket-170 170) ;; tie
(merc-l4-alpha 171) ;; merc
(emerc-l4-alpha 172) ;; emerc
(bucket-173 173) ;; mercneric
(tfrag-st-l4-alpha 174) ;; tfrag
(bucket-175 175) ;; tie
(bucket-176 176) ;; tie
(tex-l5-alpha 177) ;; tex
(tfrag-t-l5-alpha 178) ;; tfrag
(bucket-179 179) ;; tie
(bucket-180 180) ;; tie
(merc-l5-alpha 181) ;; merc
(emerc-l5-alpha 182) ;; emerc
(bucket-183 183) ;; mercneric
(tfrag-st-l5-alpha 184) ;; tfrag
(bucket-185 185) ;; tie
(bucket-186 186) ;; tie
(tex-lcom-tfrag 187) ;; tex
(merc-lcom-tfrag 188) ;; merc
(emerc-lcom-tfrag 189) ;; emerc
(bucket-190 190) ;; mercneric
(tex-lcom-shrub 191) ;; tex
(merc-lcom-shrub 192) ;; merc
(emerc-lcom-shrub 193) ;; emerc
(bucket-194 194) ;; mercneric
(bucket-195 195) ;; shadow
(tex-l0-pris 196) ;; tex
(merc-l0-pris 197) ;; merc
(emerc-l0-pris 198) ;; emerc
(bucket-199 199) ;; mercneric
(tex-l1-pris 200) ;; tex
(merc-l1-pris 201) ;; merc
(emerc-l1-pris 202) ;; emerc
(bucket-203 203) ;; mercneric
(tex-l2-pris 204) ;; tex
(merc-l2-pris 205) ;; merc
(emerc-l2-pris 206) ;; emerc
(bucket-207 207) ;; mercneric
(tex-l3-pris 208) ;; tex
(merc-l3-pris 209) ;; merc
(emerc-l3-pris 210) ;; emerc
(bucket-211 211) ;; mercneric
(tex-l4-pris 212) ;; tex
(merc-l4-pris 213) ;; merc
(emerc-l4-pris 214) ;; emerc
(bucket-215 215) ;; mercneric
(tex-l5-pris 216) ;; tex
(merc-l5-pris 217) ;; merc
(emerc-l5-pris 218) ;; emerc
(bucket-219 219) ;; mercneric
(tex-lcom-pris 220) ;; tex
(merc-lcom-pris 221) ;; merc
(emerc-lcom-pris 222) ;; emerc
(bucket-223 223) ;; mercneric
(tex-l0-pris2 224) ;; tex
(merc-l0-pris2 225) ;; merc
(emerc-l0-pris2 226) ;; emerc
(bucket-227 227) ;; mercneric
(tex-l1-pris2 228) ;; tex
(merc-l1-pris2 229) ;; merc
(emerc-l1-pris2 230) ;; emerc
(bucket-231 231) ;; mercneric
(tex-l2-pris2 232) ;; tex
(merc-l2-pris2 233) ;; merc
(emerc-l2-pris2 234) ;; emerc
(bucket-235 235) ;; mercneric
(tex-l3-pris2 236) ;; tex
(merc-l3-pris2 237) ;; merc
(emerc-l3-pris2 238) ;; emerc
(bucket-239 239) ;; mercneric
(tex-l4-pris2 240) ;; tex
(merc-l4-pris2 241) ;; merc
(emerc-l4-pris2 242) ;; emerc
(bucket-243 243) ;; mercneric
(tex-l5-pris2 244) ;; tex
(merc-l5-pris2 245) ;; merc
(emerc-l5-pris2 246) ;; emerc
(bucket-247 247) ;; mercneric
(tex-lcom-pris2 248) ;; tex
(merc-lcom-pris2 249) ;; merc
(emerc-lcom-pris2 250) ;; emerc
(bucket-251 251) ;; mercneric
(tex-l0-water 252) ;; tex
(merc-l0-water 253) ;; merc
(bucket-254 254) ;; mercneric
(tfrag-w-l0-water 255) ;; tfrag
(bucket-256 256)
(bucket-257 257)
(bucket-258 258)
(tfrag-ws-l0-water 259) ;; tfrag
(bucket-260 260)
(tex-l1-water 261) ;; tex
(merc-l1-water 262) ;; merc
(bucket-263 263) ;; mercneric
(tfrag-w-l1-water 264) ;; tfrag
(bucket-265 265)
(bucket-266 266)
(bucket-267 267)
(tfrag-ws-l1-water 268) ;; tfrag
(bucket-269 269)
(tex-l2-water 270) ;; tex
(merc-l2-water 271) ;; merc
(bucket-272 272) ;; mercneric
(tfrag-w-l2-water 273) ;; tfrag
(bucket-274 274)
(bucket-275 275)
(bucket-276 276)
(tfrag-ws-l2-water 277) ;; tfrag
(bucket-278 278)
(tex-l3-water 279) ;; tex
(merc-l3-water 280) ;; merc
(bucket-281 281) ;; mercneric
(tfrag-w-l3-water 282) ;; tfrag
(bucket-283 283)
(bucket-284 284)
(bucket-285 285)
(tfrag-ws-l3-water 286) ;; tfrag
(bucket-287 287)
(tex-l4-water 288) ;; tex
(merc-l4-water 289) ;; merc
(bucket-290 290) ;; mercneric
(tfrag-w-l4-water 291) ;; tfrag
(bucket-292 292)
(bucket-293 293)
(bucket-294 294)
(tfrag-ws-l4-water 295) ;; tfrag
(bucket-296 296)
(tex-l5-water 297) ;; tex
(merc-l5-water 298) ;; merc
(bucket-299 299) ;; mercneric
(tfrag-w-l5-water 300) ;; tfrag
(bucket-301 301)
(bucket-302 302)
(bucket-303 303)
(tfrag-ws-l5-water 304) ;; tfrag
(bucket-305 305)
(tex-lcom-water 306) ;; tex
(merc-lcom-water 307) ;; merc
(bucket-308 308) ;; mercneric
(tex-lcom-sky-post 309)
(bucket-310 310) ;; ocean
(bucket-311 311) ;; depth-cue
(tex-all-sprite 312)
(bucket-313 313) ;; particles
(bucket-314 314) ;; shadow
(bucket-315 315) ;; effects
(tex-all-warp 316) ;; tex
(bucket-317 317) ;; mercneric
(debug-no-zbuf1 318) ;; debug, no zbuf
(tex-all-map 319) ;; tex
(bucket-320 320) ;; hud
(screen-filter 321) ;; hud letterbox, no zbuf
(bucket-322 322) ;; hud
(bucket-323 323) ;; hud
(debug2 324) ;; debug
(debug-no-zbuf2 325) ;; debug
(debug3 326)
)
(defenum vu1-renderer-mask
:type uint64
:bitfield #t
(rn0)
(rn1)
(rn2)
(rn3)
(rn4)
(rn5)
(tfrag)
(rn7)
(rn8)
(rn9)
(rn10)
(rn11)
(rn12)
(merc)
(emerc)
(rn15)
(rn16)
(rn17)
(rn18)
(tfrag-trans)
(rn20)
(rn21)
(rn22)
(rn23)
(tfrag-water)
(rn25)
(rn26)
(rn27)
(rn28)
(rn29)
(rn30)
(rn31)
(rn32)
(rn33)
(rn34)
)
(defenum texture-enable-mask
:type uint64
:bitfield #t
(tfrag 0)
(pris 1)
(shrub 2)
(alpha 3)
(water 4)
(warp 5)
(sprite 6)
(map 7)
(sky 8)
(tex9 9)
(tex10 10)
(tex11 11)
(tex12 12)
(tex13 13)
(tex14 14)
(tex15 15)
(tex16 16)
)
(defenum texture-enable-mask-u32
:type uint32
:bitfield #t
:copy-entries texture-enable-mask
)
(defenum tpage-category
:type int8
(tfrag 0)
(pris 1)
(shrub 2)
(alpha 3)
(water 4)
(warp 5)
(pris2 6)
(sprite 7)
(map 8)
(sky 9)
)
(defenum tpage-category-u32
:type uint32
:copy-entries tpage-category
)
;; DECOMP BEGINS
;; foreground renderers will output DMA data to one of these "sinks".
(deftype dma-foreground-sink (basic)
;; which bucket to output to. determines draw order.
((bucket bucket-id :offset-assert 4)
;; what kind of textures will be uploaded at this time?
(foreground-texture-page tpage-category :offset-assert 8)
;; which level do we belong to?
(foreground-texture-level int8 :offset-assert 9)
;; if there are multiple buckets for the above categories, which bucket
;; (for example, jak 1 had separate merc/gmerc buckets in some categories)
(foreground-output-bucket int8 :offset-assert 10)
)
:method-count-assert 9
:size-assert #xb
:flag-assert #x90000000b
)
;; the generic renderer is double buffered - while one fragment is uploading, another is rendering.
;; This double buffering even happens across models. So when preparing DMA for the next model,
;; the generic renderer must know the output (gifbuf) region of last fragment of the previous model,
;; and upload to the other buffer.
;; The generic renderer doesn't track this state internally, so we have some extra information
;; to add on to generic buckets.
(deftype generic-bucket-state (structure)
((gifbuf-adr uint32 :offset-assert 0)
(inbuf-adr uint32 :offset-assert 4)
)
:allow-misaligned
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
;; as described above, the generic renderer needs a bit of extra state to double
;; buffer between models.
(deftype generic-dma-foreground-sink (dma-foreground-sink)
((state generic-bucket-state :inline :offset-assert 12)
)
:method-count-assert 9
:size-assert #x14
:flag-assert #x900000014
)