jak-project/goal_src/jak2/engine/gfx/vu1-user-h.gc
Hat Kid 7339b2b965
decomp: merc, merc-vu1 (#1865)
The merc VU1 program is identical to Jak 1. Jak 2's merc is doing some
new texture login stuff and the DMA buffer setup is a bit different, but
overall very similar.
2022-09-10 19:02:58 -04:00

469 lines
11 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: vu1-user-h.gc
;; name in dgo: vu1-user-h
;; dgos: ENGINE, GAME
;; The DMA buckets
(defenum bucket-id
:type int32
:bitfield #f
(bucket-0 0)
(bucket-1 1)
(bucket-2 2)
(bucket-3 3) ;; blit displays
(bucket-4 4) ;; tex
(bucket-5 5) ;; sky
(bucket-6 6) ;; ocean
(bucket-7 7) ;; level 0 tex
(bucket-8 8) ;; tfrag
(bucket-9 9) ;; tie
(bucket-10 10) ;; tie
(bucket-11 11) ;; tfrag
(bucket-12 12) ;; tie
(bucket-13 13) ;; tie
(bucket-14 14) ;; merc
(bucket-15 15) ;; emerc
(bucket-16 16) ;; mercneric
(bucket-17 17) ;; tie
(bucket-18 18) ;; tex
(bucket-19 19) ;; tfrag
(bucket-20 20) ;; tie
(bucket-21 21) ;; tie
(bucket-22 22) ;; tfrag
(bucket-23 23) ;; tie
(bucket-24 24) ;; tie
(bucket-25 25) ;; merc
(bucket-26 26) ;; emerc
(bucket-27 27) ;; mercneric
(bucket-28 28) ;; tie
(bucket-29 29) ;; tex
(bucket-30 30) ;; tfrag
(bucket-31 31) ;; tie
(bucket-32 32) ;; tie
(bucket-33 33) ;; tfrag
(bucket-34 34) ;; tie
(bucket-35 35) ;; tie
(bucket-36 36) ;; merc
(bucket-37 37) ;; emerc
(bucket-38 38) ;; mercneric
(bucket-39 39) ;; tie
(bucket-40 40) ;; tex
(bucket-41 41) ;; tfrag
(bucket-42 42) ;; tie
(bucket-43 43) ;; tie
(bucket-44 44) ;; tfrag
(bucket-45 45) ;; tie
(bucket-46 46) ;; tie
(bucket-47 47) ;; merc
(bucket-48 48) ;; emerc
(bucket-49 49) ;; mercneric
(bucket-50 50) ;; tie
(bucket-51 51) ;; tex
(bucket-52 52) ;; tfrag
(bucket-53 53) ;; tie
(bucket-54 54) ;; tie
(bucket-55 55) ;; tfrag
(bucket-56 56) ;; tie
(bucket-57 57) ;; tie
(bucket-58 58) ;; merc
(bucket-59 59) ;; emerc
(bucket-60 60) ;; mercneric
(bucket-61 61) ;; tie
(bucket-62 62) ;; tex
(bucket-63 63) ;; tfrag
(bucket-64 64) ;; tie
(bucket-65 65) ;; tie
(bucket-66 66) ;; tfrag
(bucket-67 67) ;; tie
(bucket-68 68) ;; tie
(bucket-69 69) ;; merc
(bucket-70 70) ;; emerc
(bucket-71 71) ;; mercneric
(bucket-72 72) ;; tie
(bucket-73 73) ;; tex
(bucket-74 74) ;; shrub
(bucket-75 75) ;; shrub
(bucket-76 76) ;; shrub
(bucket-77 77) ;; shrub
(bucket-78 78) ;; shrub
(bucket-79 79) ;; merc
(bucket-80 80) ;; emerc
(bucket-81 81) ;; mercneric
(bucket-82 82) ;; tex
(bucket-83 83) ;; shrub
(bucket-84 84) ;; shrub
(bucket-85 85) ;; shrub
(bucket-86 86) ;; shrub
(bucket-87 87) ;; shrub
(bucket-88 88) ;; merc
(bucket-89 89) ;; emerc
(bucket-90 90) ;; mercneric
(bucket-91 91) ;; tex
(bucket-92 92) ;; shrub
(bucket-93 93) ;; shrub
(bucket-94 94) ;; shrub
(bucket-95 95) ;; shrub
(bucket-96 96) ;; shrub
(bucket-97 97) ;; merc
(bucket-98 98) ;; emerc
(bucket-99 99) ;; mercneric
(bucket-100 100) ;; tex
(bucket-101 101) ;; shrub
(bucket-102 102) ;; shrub
(bucket-103 103) ;; shrub
(bucket-104 104) ;; shrub
(bucket-105 105) ;; shrub
(bucket-106 106) ;; merc
(bucket-107 107) ;; emerc
(bucket-108 108) ;; mercneric
(bucket-109 109) ;; tex
(bucket-110 110) ;; shrub
(bucket-111 111) ;; shrub
(bucket-112 112) ;; shrub
(bucket-113 113) ;; shrub
(bucket-114 114) ;; shrub
(bucket-115 115) ;; merc
(bucket-116 116) ;; emerc
(bucket-117 117) ;; mercneric
(bucket-118 118) ;; tex
(bucket-119 119) ;; shrub
(bucket-120 120) ;; shrub
(bucket-121 121) ;; shrub
(bucket-122 122) ;; shrub
(bucket-123 123) ;; shrub
(bucket-124 124) ;; merc
(bucket-125 125) ;; emerc
(bucket-126 126) ;; mercneric
(bucket-127 127) ;; tex
(bucket-128 128) ;; tfrag
(bucket-129 129) ;; tie
(bucket-130 130) ;; tie
(bucket-131 131) ;; merc
(bucket-132 132) ;; emerc
(bucket-133 133) ;; mercneric
(bucket-134 134) ;; tfrag
(bucket-135 135) ;; tie
(bucket-136 136) ;; tie
(bucket-137 137) ;; tex
(bucket-138 138) ;; tfrag
(bucket-139 139) ;; tie
(bucket-140 140) ;; tie
(bucket-141 141) ;; merc
(bucket-142 142) ;; emerc
(bucket-143 143) ;; mercneric
(bucket-144 144) ;; tfrag
(bucket-145 145) ;; tie
(bucket-146 146) ;; tie
(bucket-147 147) ;; tex
(bucket-148 148) ;; tfrag
(bucket-149 149) ;; tie
(bucket-150 150) ;; tie
(bucket-151 151) ;; merc
(bucket-152 152) ;; emerc
(bucket-153 153) ;; mercneric
(bucket-154 154) ;; tfrag
(bucket-155 155) ;; tie
(bucket-156 156) ;; tie
(bucket-157 157) ;; tex
(bucket-158 158) ;; tfrag
(bucket-159 159) ;; tie
(bucket-160 160) ;; tie
(bucket-161 161) ;; merc
(bucket-162 162) ;; emerc
(bucket-163 163) ;; mercneric
(bucket-164 164) ;; tfrag
(bucket-165 165) ;; tie
(bucket-166 166) ;; tie
(bucket-167 167) ;; tex
(bucket-168 168) ;; tfrag
(bucket-169 169) ;; tie
(bucket-170 170) ;; tie
(bucket-171 171) ;; merc
(bucket-172 172) ;; emerc
(bucket-173 173) ;; mercneric
(bucket-174 174) ;; tfrag
(bucket-175 175) ;; tie
(bucket-176 176) ;; tie
(bucket-177 177) ;; tex
(bucket-178 178) ;; tfrag
(bucket-179 179) ;; tie
(bucket-180 180) ;; tie
(bucket-181 181) ;; merc
(bucket-182 182) ;; emerc
(bucket-183 183) ;; mercneric
(bucket-184 184) ;; tfrag
(bucket-185 185) ;; tie
(bucket-186 186) ;; tie
(bucket-187 187) ;; tex
(bucket-188 188) ;; merc
(bucket-189 189) ;; emerc
(bucket-190 190) ;; mercneric
(bucket-191 191)
(bucket-192 192) ;; merc
(bucket-193 193) ;; emerc
(bucket-194 194) ;; mercneric
(bucket-195 195) ;; shadow
(bucket-196 196) ;; tex
(bucket-197 197) ;; merc
(bucket-198 198) ;; emerc
(bucket-199 199) ;; mercneric
(bucket-200 200) ;; tex
(bucket-201 201) ;; merc
(bucket-202 202) ;; emerc
(bucket-203 203) ;; mercneric
(bucket-204 204) ;; tex
(bucket-205 205) ;; merc
(bucket-206 206) ;; emerc
(bucket-207 207) ;; mercneric
(bucket-208 208) ;; tex
(bucket-209 209) ;; merc
(bucket-210 210) ;; emerc
(bucket-211 211) ;; mercneric
(bucket-212 212) ;; tex
(bucket-213 213) ;; merc
(bucket-214 214) ;; emerc
(bucket-215 215) ;; mercneric
(bucket-216 216) ;; tex
(bucket-217 217) ;; merc
(bucket-218 218) ;; emerc
(bucket-219 219) ;; mercneric
(bucket-220 220) ;; tex
(bucket-221 221) ;; merc
(bucket-222 222) ;; emerc
(bucket-223 223) ;; mercneric
(bucket-224 224)
(bucket-225 225) ;; merc
(bucket-226 226) ;; emerc
(bucket-227 227) ;; mercneric
(bucket-228 228)
(bucket-229 229) ;; merc
(bucket-230 230) ;; emerc
(bucket-231 231) ;; mercneric
(bucket-232 232)
(bucket-233 233) ;; merc
(bucket-234 234) ;; emerc
(bucket-235 235) ;; mercneric
(bucket-236 236)
(bucket-237 237) ;; merc
(bucket-238 238) ;; emerc
(bucket-239 239) ;; mercneric
(bucket-240 240)
(bucket-241 241) ;; merc
(bucket-242 242) ;; emerc
(bucket-243 243) ;; mercneric
(bucket-244 244)
(bucket-245 245) ;; merc
(bucket-246 246) ;; emerc
(bucket-247 247) ;; mercneric
(bucket-248 248)
(bucket-249 249) ;; merc
(bucket-250 250) ;; emerc
(bucket-251 251) ;; mercneric
(bucket-252 252) ;; tex
(bucket-253 253) ;; merc
(bucket-254 254) ;; mercneric
(bucket-255 255) ;; tfrag
(bucket-256 256)
(bucket-257 257)
(bucket-258 258)
(bucket-259 259) ;; tfrag
(bucket-260 260)
(bucket-261 261) ;; tex
(bucket-262 262) ;; merc
(bucket-263 263) ;; mercneric
(bucket-264 264) ;; tfrag
(bucket-265 265)
(bucket-266 266)
(bucket-267 267)
(bucket-268 268) ;; tfrag
(bucket-269 269)
(bucket-270 270) ;; tex
(bucket-271 271) ;; merc
(bucket-272 272) ;; mercneric
(bucket-273 273) ;; tfrag
(bucket-274 274)
(bucket-275 275)
(bucket-276 276)
(bucket-277 277) ;; tfrag
(bucket-278 278)
(bucket-279 279) ;; tex
(bucket-280 280) ;; merc
(bucket-281 281) ;; mercneric
(bucket-282 282) ;; tfrag
(bucket-283 283)
(bucket-284 284)
(bucket-285 285)
(bucket-286 286) ;; tfrag
(bucket-287 287)
(bucket-288 288) ;; tex
(bucket-289 289) ;; merc
(bucket-290 290) ;; mercneric
(bucket-291 291) ;; tfrag
(bucket-292 292)
(bucket-293 293)
(bucket-294 294)
(bucket-295 295) ;; tfrag
(bucket-296 296)
(bucket-297 297) ;; tex
(bucket-298 298) ;; merc
(bucket-299 299) ;; mercneric
(bucket-300 300) ;; tfrag
(bucket-301 301)
(bucket-302 302)
(bucket-303 303)
(bucket-304 304) ;; tfrag
(bucket-305 305)
(bucket-306 306) ;; tex
(bucket-307 307) ;; merc
(bucket-308 308) ;; mercneric
(bucket-309 309)
(bucket-310 310) ;; ocean
(bucket-311 311) ;; depth-cue
(bucket-312 312)
(bucket-313 313) ;; particles
(bucket-314 314) ;; shadow
(bucket-315 315) ;; effects
(bucket-316 316) ;; tex
(bucket-317 317) ;; mercneric
(bucket-318 318) ;; debug, no zbuf
(bucket-319 319) ;; tex
(bucket-320 320) ;; hud
(bucket-321 321) ;; hud letterbox, no zbuf
(bucket-322 322) ;; hud
(bucket-323 323) ;; hud
(bucket-324 324) ;; debug
(debug-no-zbuf 325) ;; debug
;; (bucket-326 326) ;; debug
)
(defenum vu1-renderer-mask
:type uint64
:bitfield #t
(rn0)
(rn1)
(rn2)
(rn3)
(rn4)
(rn5)
(rn6)
(rn7)
(rn8)
(rn9)
(rn10)
(rn11)
(rn12)
(merc)
(emerc)
(rn15)
(rn16)
(rn17)
(rn18)
(rn19)
(rn20)
(rn21)
(rn22)
(rn23)
(rn24)
(rn25)
(rn26)
(rn27)
(rn28)
(rn29)
(rn30)
(rn31)
(rn32)
(rn33)
(rn34)
)
(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)
)
;; 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
)