From 3b35e60222e9a26f1f1731d6e9bbd5aa67f98e4a Mon Sep 17 00:00:00 2001 From: water Date: Sun, 24 Oct 2021 12:35:07 -0400 Subject: [PATCH] temp --- decompiler/config/all-types.gc | 20 ++-- .../jak1_ntsc_black_label/label_types.jsonc | 4 + .../stack_structures.jsonc | 5 + game/graphics/dma/gs.cpp | 4 + game/graphics/dma/gs.h | 2 + game/graphics/opengl_renderer/AdgifHandler.h | 8 +- .../opengl_renderer/DirectRenderer.cpp | 7 +- .../opengl_renderer/SpriteRenderer.cpp | 3 + goal_src/engine/debug/part-tester.gc | 21 +++++ goal_src/engine/gfx/tfrag/tfrag-h.gc | 45 +++++---- goal_src/engine/gfx/tfrag/tfrag-near.gc | 93 +++++++++++++++++++ goal_src/engine/gfx/tfrag/tfrag.gc | 3 + 12 files changed, 183 insertions(+), 32 deletions(-) diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 92f0782640..b22bdfdc40 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -6153,7 +6153,7 @@ (collide-y-probe (_type_ int collide-list) none 12) (collide-ray (_type_ int collide-list) none 13) (dummy-14 (_type_) none 14) - (debug-draw (_type_ drawable object) none 15) + (debug-draw (_type_ drawable display-frame) none 15) (dummy-16 (_type_ object object) object 16) (collect-ambients (_type_ sphere int ambient-list) none 17) ) @@ -12701,12 +12701,12 @@ (debug-data tfragment-debug-data :offset 8) (color-indices uint32 :offset 12) (colors uint32 :offset 12) - (dma-chain uint32 3 :offset-assert 32) - (dma-common uint32 :offset 32) - (dma-level-0 uint32 :offset 32) - (dma-base uint32 :offset 36) - (dma-level-1 uint32 :offset 40) - (dma-qwc uint32 4 :offset 44) + (dma-chain uint32 3 :offset-assert 32) ;; 0 + (dma-common uint32 :offset 32) ;; 0 + (dma-level-0 uint32 :offset 32) ;; 0 + (dma-base uint32 :offset 36) ;; 1 + (dma-level-1 uint32 :offset 40) ;; 2 + (dma-qwc uint8 4 :offset 44) ;; 3 (shader (inline-array adgif-shader) :offset 48) (num-shaders uint8 :offset 52) (num-base-colors uint8 :offset 53) @@ -12717,6 +12717,8 @@ (pad0 uint8 :offset 58) (pad1 uint8 :offset 59) (generic generic-tfragment :offset-assert 60) + + (hack uint32 :offset 44) ) :method-count-assert 18 :size-assert #x40 @@ -16458,8 +16460,8 @@ ;; - Functions -(define-extern tfrag-details function) -(define-extern clip-restore function) +(define-extern tfrag-details (function tfragment none)) +(define-extern clip-restore (function none)) ;; - Unknowns diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index df8ed07d7f..4fa8993857 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -1150,6 +1150,10 @@ ["L32", "uint64", true] ], + "tfrag-near": [ + ["L1", "vu-function"] + ], + // please do not add things after this entry! git is dumb. "object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": [] diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index fe6bb5e48d..92003854a9 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -2747,5 +2747,10 @@ [16, "event-message-block"] ], + "clip-restore":[ + [16, "vector"], + [32, "matrix"] + ], + "placeholder-do-not-add-below!": [] } diff --git a/game/graphics/dma/gs.cpp b/game/graphics/dma/gs.cpp index 97f81cd661..0cf0162671 100644 --- a/game/graphics/dma/gs.cpp +++ b/game/graphics/dma/gs.cpp @@ -356,4 +356,8 @@ std::string GsTex0::print() const { std::string GsPrim::print() const { return fmt::format("0x{:x}, kind {}\n", data, kind()); +} + +std::string GsZbuf::print() const { + return fmt::format("msk: {}\n", zmsk()); } \ No newline at end of file diff --git a/game/graphics/dma/gs.h b/game/graphics/dma/gs.h index 62604e0517..df0dbec7e6 100644 --- a/game/graphics/dma/gs.h +++ b/game/graphics/dma/gs.h @@ -146,6 +146,8 @@ struct GsZbuf { bool zmsk() const { return data & (1ull << 32); } + std::string print() const; + u64 data; }; diff --git a/game/graphics/opengl_renderer/AdgifHandler.h b/game/graphics/opengl_renderer/AdgifHandler.h index 5ccf511310..1c3a648fe5 100644 --- a/game/graphics/opengl_renderer/AdgifHandler.h +++ b/game/graphics/opengl_renderer/AdgifHandler.h @@ -27,7 +27,13 @@ class AdgifHelper { result += fmt::format("[1] {}\n {}\n", register_address_name(m_data.tex1_addr), m_tex1.print()); result += fmt::format("[2] {}\n", register_address_name(m_data.mip_addr)); - result += fmt::format("[3] {}\n", register_address_name(m_data.clamp_addr)); + if (m_data.clamp_addr == (int)GsRegisterAddress::ZBUF_1) { + result += fmt::format("[3] {}\n {}\n", register_address_name(m_data.clamp_addr), + GsZbuf(m_data.clamp_data).print()); + } else { + result += fmt::format("[3] {}\n", register_address_name(m_data.clamp_addr)); + } + result += fmt::format("[4] {}\n {}\n", register_address_name(m_data.alpha_addr), m_alpha.print()); return result; diff --git a/game/graphics/opengl_renderer/DirectRenderer.cpp b/game/graphics/opengl_renderer/DirectRenderer.cpp index 65b8fb6ec8..10a7b8b7db 100644 --- a/game/graphics/opengl_renderer/DirectRenderer.cpp +++ b/game/graphics/opengl_renderer/DirectRenderer.cpp @@ -204,7 +204,10 @@ void DirectRenderer::flush_pending(SharedRenderState* render_state, ScopedProfil render_state->shaders[ShaderId::SPRITE_CPU_AFAIL].activate(); glDepthMask(GL_FALSE); glDrawArrays(GL_TRIANGLES, 0, m_prim_buffer.vert_count); - glDepthMask(GL_TRUE); + if (m_test_state.depth_writes) { + glDepthMask(GL_TRUE); + } + m_prim_gl_state_needs_gl_update = true; m_blend_state_needs_gl_update = true; draw_count++; @@ -735,7 +738,7 @@ void DirectRenderer::handle_zbuf1(u64 val, assert(x.psm() == TextureFormat::PSMZ24); assert(x.zbp() == 448); - bool write = x.zmsk(); + bool write = !x.zmsk(); // assert(write); if (write != m_test_state.depth_writes) { diff --git a/game/graphics/opengl_renderer/SpriteRenderer.cpp b/game/graphics/opengl_renderer/SpriteRenderer.cpp index 6bf5d9db73..91c7e409ad 100644 --- a/game/graphics/opengl_renderer/SpriteRenderer.cpp +++ b/game/graphics/opengl_renderer/SpriteRenderer.cpp @@ -1,6 +1,7 @@ #include "third-party/fmt/core.h" #include "third-party/imgui/imgui.h" #include "SpriteRenderer.h" +#include "game/graphics/opengl_renderer/AdgifHandler.h" namespace { /*! @@ -1155,6 +1156,8 @@ void SpriteRenderer::do_2d_group0_block_cpu(u32 count, if (m_extra_debug) { imgui_vec(vf12_rotated, "vf12", 2); imgui_vec(vf13_rotated_trans, "vf13", 2); + AdgifHelper adgif_debug((const u8*)&packet.user_adgif); + ImGui::Text("%s", adgif_debug.print().c_str()); ImGui::Separator(); } diff --git a/goal_src/engine/debug/part-tester.gc b/goal_src/engine/debug/part-tester.gc index 8644e4bf12..eba2aa233c 100644 --- a/goal_src/engine/debug/part-tester.gc +++ b/goal_src/engine/debug/part-tester.gc @@ -83,6 +83,27 @@ ;; - there is an issue with blending. check the "always" box as a temporary workaround ;; - the visibilty check also doesn't work. comment it out in defmethod spawn. (let ((gp-1 (-> *part-group-id-table* 105))) + ;; cool particles + ;; 42, blue eco + ;; 44, blue vent + ;; 48, red + ;; 50, red vent + ;; 52, yellow vent + ;; 56, yellow + ;; 58 green + ;; 59, small green + ;; 1 hit, 2 + ;; 8 + ;; 575 + ;; 10 + ;; 708 + ;; 104, 103, 102 + + ;; after finalboss + ;; 636, 637 + ;; 682, 702 + ;; after particles reload + ;; 696 (let ((s5-1 (-> self root trans))) (when (!= gp-1 (-> self old-group)) diff --git a/goal_src/engine/gfx/tfrag/tfrag-h.gc b/goal_src/engine/gfx/tfrag/tfrag-h.gc index 05c4ff5083..7f2aa5766c 100644 --- a/goal_src/engine/gfx/tfrag/tfrag-h.gc +++ b/goal_src/engine/gfx/tfrag/tfrag-h.gc @@ -32,27 +32,32 @@ :flag-assert #x900000004 ) + (deftype tfragment (drawable) - ((color-index uint16 :offset 6) - (debug-data tfragment-debug-data :offset 8) - (color-indices uint32 :offset 12) - (colors uint32 :offset 12) - (dma-chain uint32 3 :offset-assert 32) - (dma-common uint32 :offset 32) - (dma-level-0 uint32 :offset 32) - (dma-base uint32 :offset 36) - (dma-level-1 uint32 :offset 40) - (dma-qwc uint32 4 :offset-assert 44) - (shader (inline-array adgif-shader) :offset 48) - (num-shaders uint8 :offset 52) - (num-base-colors uint8 :offset 53) - (num-level0-colors uint8 :offset 54) - (num-level1-colors uint8 :offset 55) - (color-offset uint8 :offset 56) - (color-count uint8 :offset 57) - (pad0 uint8 :offset 58) - (pad1 uint8 :offset 59) - (generic generic-tfragment :offset-assert 60) + ( + (color-index uint16 :offset 6) + (debug-data tfragment-debug-data :offset 8) + (color-indices uint32 :offset 12) + (colors uint32 :offset 12) + (dma-chain uint32 3 :offset-assert 32) ;; 0 + (dma-common uint32 :offset 32) ;; 0 + (dma-level-0 uint32 :offset 32) ;; 0 + (dma-base uint32 :offset 36) ;; 1 + (dma-level-1 uint32 :offset 40) ;; 2 + (dma-qwc uint8 4 :offset 44) ;; 3 + (shader (inline-array adgif-shader) :offset 48) + (num-shaders uint8 :offset 52) + (num-base-colors uint8 :offset 53) + (num-level0-colors uint8 :offset 54) + (num-level1-colors uint8 :offset 55) + (color-offset uint8 :offset 56) + (color-count uint8 :offset 57) + (pad0 uint8 :offset 58) + (pad1 uint8 :offset 59) + (generic generic-tfragment :offset-assert 60) + + ;; likely ran off of the dma-chain array by accident in a debug function: + (hack uint32 :offset 44) ) :method-count-assert 18 :size-assert #x40 diff --git a/goal_src/engine/gfx/tfrag/tfrag-near.gc b/goal_src/engine/gfx/tfrag/tfrag-near.gc index 7dd82c5b9c..58e7591509 100644 --- a/goal_src/engine/gfx/tfrag/tfrag-near.gc +++ b/goal_src/engine/gfx/tfrag/tfrag-near.gc @@ -5,3 +5,96 @@ ;; name in dgo: tfrag-near ;; dgos: GAME, ENGINE +(define tnear-vu1-block (new 'static 'vu-function)) + +;; definition (debug) for function tfrag-details +;; INFO: Return type mismatch symbol vs none. +(defun-debug tfrag-details ((arg0 tfragment)) + (format 0 "id = ~d~%" (-> arg0 id)) + (format 0 "common:~%") + (let ((s5-0 (-> arg0 dma-qwc 0)) + (s4-0 (-> arg0 dma-common)) + ) + (format 0 "qwc = ~d, ref = ~x~%" s5-0 s4-0) + (disasm-vif-tag + (the-as (pointer vif-tag) s4-0) + (the-as int (* s5-0 4)) + (the-as symbol 0) + #t + ) + ) + (format 0 "base:~%") + (let ((s5-1 (-> arg0 dma-qwc 1)) + (s4-1 (-> arg0 dma-base)) + ) + (format 0 "qwc = ~d, ref = ~x~%" s5-1 s4-1) + (disasm-vif-tag + (the-as (pointer vif-tag) s4-1) + (the-as int (* s5-1 4)) + (the-as symbol 0) + #t + ) + ) + (format 0 "level-0 (broken):~%") + + ; (let ((s5-2 (-> arg0 dma-qwc 3)) + ; (s4-2 (-> arg0 hack)) + ; ) + ; (format 0 "qwc = ~d, ref = ~x~%" s5-2 s4-2) + ; (disasm-vif-tag + ; (the-as (pointer vif-tag) s4-2) + ; (the-as int (* s5-2 4)) + ; (the-as symbol 0) + ; #t + ; ) + ; ) + (format 0 "level-1:~%") + (let ((s5-3 (-> arg0 dma-qwc 2)) + (gp-1 (-> arg0 dma-level-1)) + ) + (format 0 "qwc = ~d, ref = ~x~%" s5-3 gp-1) + (disasm-vif-tag + (the-as (pointer vif-tag) gp-1) + (the-as int (* s5-3 4)) + (the-as symbol 0) + #t + ) + ) + (none) + ) + +;; definition (debug) for function clip-restore +;; INFO: Return type mismatch vector vs none. +;; Used lq/sq +(defun-debug clip-restore () + (let ((a0-0 (new-stack-vector0)) + (a1-0 (new-stack-matrix0)) + ) + (set! (-> a0-0 x) 92648.22) + (set! (-> a0-0 y) 238025.03) + (set! (-> a0-0 z) 199836.31) + (set! (-> a0-0 w) 1.0) + (set! (-> a1-0 vector 0 x) -0.9283) + (set! (-> a1-0 vector 0 y) 0.0) + (set! (-> a1-0 vector 0 z) 0.3716) + (set! (-> a1-0 vector 0 w) 0.0) + (set! (-> a1-0 vector 1 x) -0.2257) + (set! (-> a1-0 vector 1 y) 0.7945) + (set! (-> a1-0 vector 1 z) -0.5637) + (set! (-> a1-0 vector 1 w) 0.0) + (set! (-> a1-0 vector 2 x) -0.2952) + (set! (-> a1-0 vector 2 y) -0.6072) + (set! (-> a1-0 vector 2 z) -0.7375) + (set! (-> a1-0 vector 2 w) 0.0) + (set! (-> a1-0 vector 3 x) 0.0) + (set! (-> a1-0 vector 3 y) 0.0) + (set! (-> a1-0 vector 3 z) 0.0) + (set! (-> a1-0 vector 3 w) 1.0) + (debug-set-camera-pos-rot! a0-0 a1-0) + ) + (none) + ) + + + + diff --git a/goal_src/engine/gfx/tfrag/tfrag.gc b/goal_src/engine/gfx/tfrag/tfrag.gc index 856f70e9b0..60020f86c3 100644 --- a/goal_src/engine/gfx/tfrag/tfrag.gc +++ b/goal_src/engine/gfx/tfrag/tfrag.gc @@ -9,6 +9,9 @@ (dotimes (s5-0 (the-as int (-> obj num-shaders))) (adgif-shader-login-no-remap (-> obj shader s5-0)) ) + ; (format #t "login tfrag: ~A: ~A~%" obj (-> obj debug-data debug-lines)) + ; (tfrag-details obj) + ; (inspect obj) obj )