mirror of
https://github.com/open-goal/jak-project
synced 2026-07-09 06:53:45 -04:00
start blit-displays decomp & renderer + improve decompilation of some DMA macros (#2616)
Adds sprite distort, fixes buggy sprite rendering in progress, adds scissoring support (used in various scrolling menus) and a very basic implementation of `blit-displays`. This is enough to make the fade effect in the progress menu work, along with all the menus working properly without needing to use the REPL. This does not make screen flipping and the filter when failing a mission work. Added support in the decompiler for detecting `dma-buffer-add-gs-set` and `dma-buffer-add-gs-set-flusha` and updated all of the Jak 2 code to use it. Readability improved! Fixes decompiler issue with `with-dma-buffer-add-bucket` not inlining forms which broke syntax. Fixes store error warnings showing up for non-existent stores, there is now a dedicated pass for this at the end. I started work on making `BITBLTBUF` stuff work in the DirectRenderer, but stopped for now because it wasn't strictly necessary. It will still assert like before.
This commit is contained in:
@@ -237,9 +237,34 @@ void break_list(Node* node) {
|
||||
node->top_line_count = 1;
|
||||
|
||||
const std::unordered_set<std::string> sameline_splitters = {
|
||||
"if", "<", ">", "<=", ">=", "set!", "=", "!=", "+",
|
||||
"-", "*", "/", "the", "->", "and", "or", "logand", "logior",
|
||||
"logxor", "+!", "*!", "logtest?", "not", "zero?", "nonzero?"};
|
||||
"if",
|
||||
"<",
|
||||
">",
|
||||
"<=",
|
||||
">=",
|
||||
"set!",
|
||||
"=",
|
||||
"!=",
|
||||
"+",
|
||||
"-",
|
||||
"*",
|
||||
"/",
|
||||
"the",
|
||||
"->",
|
||||
"and",
|
||||
"or",
|
||||
"logand",
|
||||
"logior",
|
||||
"logxor",
|
||||
"+!",
|
||||
"*!",
|
||||
"logtest?",
|
||||
"not",
|
||||
"zero?",
|
||||
"nonzero?",
|
||||
"dma-buffer-add-gs-set",
|
||||
"dma-buffer-add-gs-set-flusha",
|
||||
};
|
||||
|
||||
if (node->child_nodes.at(0).kind == Node::Kind::LIST) {
|
||||
// ((foo
|
||||
|
||||
@@ -475,11 +475,6 @@ FormElement* StoreOp::get_as_form(FormPool& pool, const Env& env) const {
|
||||
}
|
||||
}
|
||||
}
|
||||
// print warning about failed store, but only if decompilation passes without any major errors
|
||||
// TODO move this elsewhere! they CAN be deleted later and this would cause false positives.
|
||||
if (!env.func->warnings.has_errors()) {
|
||||
env.func->warnings.error("Failed store: {} at op {}", to_string(env), m_my_idx);
|
||||
}
|
||||
return pool.alloc_element<StoreElement>(this);
|
||||
}
|
||||
|
||||
|
||||
+7
-19
@@ -2964,46 +2964,36 @@ goos::Object DefstateElement::to_form_internal(const Env& env) const {
|
||||
WithDmaBufferAddBucketElement::WithDmaBufferAddBucketElement(RegisterAccess dma_buf,
|
||||
Form* dma_buf_val,
|
||||
Form* bucket,
|
||||
const std::vector<FormElement*>& body)
|
||||
Form* body)
|
||||
: m_dma_buf(dma_buf), m_dma_buf_val(dma_buf_val), m_bucket(bucket), m_body(body) {
|
||||
m_dma_buf_val->parent_element = this;
|
||||
m_bucket->parent_element = this;
|
||||
for (auto& e : m_body) {
|
||||
e->parent_form = nullptr;
|
||||
}
|
||||
m_body->parent_element = this;
|
||||
}
|
||||
|
||||
void WithDmaBufferAddBucketElement::apply(const std::function<void(FormElement*)>& f) {
|
||||
f(this);
|
||||
m_dma_buf_val->apply(f);
|
||||
m_bucket->apply(f);
|
||||
for (auto& e : m_body) {
|
||||
e->apply(f);
|
||||
}
|
||||
m_body->apply(f);
|
||||
}
|
||||
|
||||
void WithDmaBufferAddBucketElement::apply_form(const std::function<void(Form*)>& f) {
|
||||
m_dma_buf_val->apply_form(f);
|
||||
m_bucket->apply_form(f);
|
||||
for (auto& e : m_body) {
|
||||
e->apply_form(f);
|
||||
}
|
||||
m_body->apply_form(f);
|
||||
}
|
||||
|
||||
void WithDmaBufferAddBucketElement::collect_vars(RegAccessSet& vars, bool recursive) const {
|
||||
m_dma_buf_val->collect_vars(vars, recursive);
|
||||
m_bucket->collect_vars(vars, recursive);
|
||||
for (auto& e : m_body) {
|
||||
e->collect_vars(vars, recursive);
|
||||
}
|
||||
m_body->collect_vars(vars, recursive);
|
||||
}
|
||||
|
||||
void WithDmaBufferAddBucketElement::get_modified_regs(RegSet& regs) const {
|
||||
m_dma_buf_val->get_modified_regs(regs);
|
||||
m_bucket->get_modified_regs(regs);
|
||||
for (auto& e : m_body) {
|
||||
e->get_modified_regs(regs);
|
||||
}
|
||||
m_body->get_modified_regs(regs);
|
||||
}
|
||||
|
||||
goos::Object WithDmaBufferAddBucketElement::to_form_internal(const Env& env) const {
|
||||
@@ -3013,9 +3003,7 @@ goos::Object WithDmaBufferAddBucketElement::to_form_internal(const Env& env) con
|
||||
{pretty_print::build_list({pretty_print::to_symbol(env.get_variable_name(m_dma_buf)),
|
||||
m_dma_buf_val->to_form(env)}),
|
||||
m_bucket->to_form(env)}));
|
||||
for (auto& e : m_body) {
|
||||
forms.push_back(e->to_form(env));
|
||||
}
|
||||
m_body->inline_forms(forms, env);
|
||||
|
||||
return pretty_print::build_list(forms);
|
||||
}
|
||||
|
||||
@@ -1811,7 +1811,7 @@ class WithDmaBufferAddBucketElement : public FormElement {
|
||||
WithDmaBufferAddBucketElement(RegisterAccess dma_buf,
|
||||
Form* dma_buf_val,
|
||||
Form* bucket,
|
||||
const std::vector<FormElement*>& body);
|
||||
Form* body);
|
||||
|
||||
goos::Object to_form_internal(const Env& env) const override;
|
||||
void apply(const std::function<void(FormElement*)>& f) override;
|
||||
@@ -1829,7 +1829,7 @@ class WithDmaBufferAddBucketElement : public FormElement {
|
||||
RegisterAccess m_dma_buf;
|
||||
Form* m_dma_buf_val;
|
||||
Form* m_bucket;
|
||||
std::vector<FormElement*> m_body;
|
||||
Form* m_body;
|
||||
};
|
||||
|
||||
class ResLumpMacroElement : public FormElement {
|
||||
|
||||
@@ -77,11 +77,12 @@ struct LetRewriteStats {
|
||||
int rand_float_gen = 0;
|
||||
int set_let = 0;
|
||||
int with_dma_buf_add_bucket = 0;
|
||||
int dma_buffer_add_gs_set = 0;
|
||||
|
||||
int total() const {
|
||||
return dotimes + countdown + abs + abs2 + unused + ja + case_no_else + case_with_else +
|
||||
set_vector + set_vector2 + send_event + font_context_meth + proc_new + attack_info +
|
||||
vector_dot + rand_float_gen + set_let + with_dma_buf_add_bucket;
|
||||
vector_dot + rand_float_gen + set_let + with_dma_buf_add_bucket + dma_buffer_add_gs_set;
|
||||
}
|
||||
|
||||
std::string print() const {
|
||||
@@ -106,6 +107,7 @@ struct LetRewriteStats {
|
||||
out += fmt::format(" rand_float_gen: {}\n", rand_float_gen);
|
||||
out += fmt::format(" set_let: {}\n", set_let);
|
||||
out += fmt::format(" with_dma_buf_add_bucket: {}\n", with_dma_buf_add_bucket);
|
||||
out += fmt::format(" dma_buffer_add_gs_set: {}\n", dma_buffer_add_gs_set);
|
||||
return out;
|
||||
}
|
||||
|
||||
@@ -201,6 +203,7 @@ class ObjectFileDB {
|
||||
// void ir2_store_current_forms(int seg);
|
||||
void ir2_build_expressions(int seg, const Config& config, ObjectFileData& data);
|
||||
void ir2_insert_lets(int seg, ObjectFileData& data);
|
||||
void ir2_add_store_errors(int seg, ObjectFileData& data);
|
||||
void ir2_rewrite_inline_asm_instructions(int seg, ObjectFileData& data);
|
||||
void ir2_insert_anonymous_functions(int seg, ObjectFileData& data);
|
||||
void ir2_symbol_definition_map(ObjectFileData& data);
|
||||
|
||||
@@ -175,6 +175,8 @@ void ObjectFileDB::ir2_do_segment_analysis_phase2(int seg,
|
||||
ir2_rewrite_inline_asm_instructions(seg, data);
|
||||
|
||||
ir2_insert_lets(seg, data);
|
||||
|
||||
ir2_add_store_errors(seg, data);
|
||||
}
|
||||
|
||||
void ObjectFileDB::ir2_setup_labels(const Config& config, ObjectFileData& data) {
|
||||
@@ -717,6 +719,22 @@ void ObjectFileDB::ir2_insert_lets(int seg, ObjectFileData& data) {
|
||||
});
|
||||
}
|
||||
|
||||
void ObjectFileDB::ir2_add_store_errors(int seg, ObjectFileData& data) {
|
||||
for_each_function_in_seg_in_obj(seg, data, [&](Function& func) {
|
||||
if (func.ir2.expressions_succeeded && !func.warnings.has_errors()) {
|
||||
// print warning about failed store, but only if decompilation passes without any major
|
||||
// errors
|
||||
func.ir2.top_form->apply([&](FormElement* f) {
|
||||
auto as_store = dynamic_cast<StoreElement*>(f);
|
||||
if (as_store) {
|
||||
func.warnings.error("Failed store: {} at op {}", as_store->to_string(func.ir2.env),
|
||||
as_store->op()->op_id());
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void ObjectFileDB::ir2_rewrite_inline_asm_instructions(int seg, ObjectFileData& data) {
|
||||
for_each_function_in_seg_in_obj(seg, data, [&](Function& func) {
|
||||
(void)data;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include <array>
|
||||
#include <limits>
|
||||
#include <tuple>
|
||||
#include <unordered_set>
|
||||
|
||||
#include "common/log/log.h"
|
||||
#include "common/util/Assert.h"
|
||||
@@ -2015,13 +2016,15 @@ FormElement* rewrite_multi_let_as_vector_dot(LetElement* in, const Env& env, For
|
||||
return in;
|
||||
}
|
||||
|
||||
// matches (-> <any> base)
|
||||
const static auto dma_buf_base_matcher =
|
||||
Matcher::deref(Matcher::any_reg(0), false, {DerefTokenMatcher::string("base")});
|
||||
|
||||
FormElement* rewrite_with_dma_buf_add_bucket(LetElement* in, const Env& env, FormPool& pool) {
|
||||
if (in->entries().size() != 2) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static auto dma_buf_base_matcher =
|
||||
Matcher::deref(Matcher::any_reg(0), false, {DerefTokenMatcher::string("base")});
|
||||
// dma buffer part can be anything, really.
|
||||
auto buf_reg = in->entries().at(0).dest;
|
||||
auto buf_dst = env.get_variable_name(buf_reg);
|
||||
@@ -2154,7 +2157,8 @@ FormElement* rewrite_with_dma_buf_add_bucket(LetElement* in, const Env& env, For
|
||||
}
|
||||
|
||||
auto elt = pool.alloc_element<WithDmaBufferAddBucketElement>(
|
||||
buf_reg, buf_src, mr_bucket_add_tag_func.maps.forms.at(1), body);
|
||||
buf_reg, buf_src, mr_bucket_add_tag_func.maps.forms.at(1),
|
||||
pool.alloc_sequence_form(nullptr, body));
|
||||
elt->parent_form = in->parent_form;
|
||||
return elt;
|
||||
}
|
||||
@@ -2194,6 +2198,470 @@ FormElement* rewrite_multi_let(LetElement* in,
|
||||
return in;
|
||||
}
|
||||
|
||||
FormElement* rewrite_dma_buffer_add_gs_set(const std::vector<LetElement*>& in,
|
||||
const Env& env,
|
||||
FormPool& pool) {
|
||||
auto let0 = in.at(0);
|
||||
auto let1 = in.at(1);
|
||||
auto let2 = in.at(2);
|
||||
|
||||
// there are three lets and they all have the same format for the entries
|
||||
if (let0->entries().size() != 2 || let1->entries().size() != 2 || let2->entries().size() != 2 ||
|
||||
let0->body()->size() != 4 || let1->body()->size() != 3) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// (let* ((v1-0 arg0)
|
||||
// (a0-2 (-> v1-0 base))
|
||||
// )
|
||||
auto buf = let0->entries().at(0).src;
|
||||
if (auto temp = buf->to_form(env); temp != let1->entries().at(0).src->to_form(env) ||
|
||||
temp != let2->entries().at(0).src->to_form(env)) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: dma buffer mismatch");
|
||||
return nullptr;
|
||||
}
|
||||
auto mr_buf_base0 = match(dma_buf_base_matcher, let0->entries().at(1).src);
|
||||
auto mr_buf_base1 = match(dma_buf_base_matcher, let1->entries().at(1).src);
|
||||
auto mr_buf_base2 = match(dma_buf_base_matcher, let2->entries().at(1).src);
|
||||
if (!mr_buf_base0.matched || !mr_buf_base1.matched || !mr_buf_base2.matched) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: bad (-> dma-buf base) matches {} {} {}",
|
||||
mr_buf_base0.matched, mr_buf_base1.matched, mr_buf_base2.matched);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// LET DMATAG
|
||||
// (set! (-> (the-as (pointer int64) a0-2)) #x10000007)
|
||||
// (s.w! (+ a0-2 8) 0)
|
||||
// (let ((a1-2 #x50000007))
|
||||
// (s.w! (+ a0-2 12) a1-2)
|
||||
// )
|
||||
// (set! (-> v1-0 base) (&+ a0-2 16))
|
||||
u16 dma_qwc = 0;
|
||||
bool flusha = false;
|
||||
auto check_vifcode_set = [&](StoreElement* store, const std::string& varname, int size,
|
||||
int addr) {
|
||||
return store->op()->kind() == StoreOp::Kind::INTEGER && store->op()->store_size() == size &&
|
||||
// store->op()->value().is_int(0) &&
|
||||
store->op()->addr().kind() == SimpleExpression::Kind::ADD &&
|
||||
store->op()->addr().args() == 2 && store->op()->addr().get_arg(0).is_var() &&
|
||||
store->op()->addr().get_arg(1).is_int(addr) &&
|
||||
var_name_equal(env, varname, store->op()->addr().get_arg(0).var());
|
||||
};
|
||||
const auto match_buf_push = [&env](FormElement* elt, const std::string& reg_buf,
|
||||
const std::string& reg_base, int amt) {
|
||||
auto mr = match(Matcher::set(Matcher::deref(Matcher::any_reg(0), false,
|
||||
{DerefTokenMatcher::string("base")}),
|
||||
Matcher::op_fixed(FixedOperatorKind::ADDITION_PTR,
|
||||
{Matcher::any_reg(1), Matcher::integer(amt)})),
|
||||
elt);
|
||||
return mr.matched && var_name_equal(env, reg_buf, mr.maps.regs.at(0)) &&
|
||||
var_name_equal(env, reg_base, mr.maps.regs.at(1));
|
||||
};
|
||||
{
|
||||
auto dmatag_buf = env.get_variable_name(let0->entries().at(0).dest);
|
||||
auto dmatag_ptr = env.get_variable_name(let0->entries().at(1).dest);
|
||||
auto set_dmatag_hdr = dynamic_cast<SetFormFormElement*>(let0->body()->at(0));
|
||||
auto set_dmatag_vif0 = dynamic_cast<StoreElement*>(let0->body()->at(1));
|
||||
auto let_dmatag_vif0 = dynamic_cast<LetElement*>(let0->body()->at(1));
|
||||
auto let_dmatag_vif1 = dynamic_cast<LetElement*>(let0->body()->at(2));
|
||||
auto set_dmatag_push = dynamic_cast<SetFormFormElement*>(let0->body()->at(3));
|
||||
if (!let_dmatag_vif0 && !set_dmatag_vif0) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: bad vif0");
|
||||
return nullptr;
|
||||
}
|
||||
u32 vif0 = 0;
|
||||
if (let_dmatag_vif0 && let_dmatag_vif0->entries().size() == 1 &&
|
||||
let_dmatag_vif0->body()->size() == 1) {
|
||||
auto vif0_elt =
|
||||
let_dmatag_vif0->entries().at(0).src->try_as_element<SimpleExpressionElement>();
|
||||
if (!vif0_elt || !vif0_elt->expr().is_identity() || !vif0_elt->expr().get_arg(0).is_int()) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: bad vif0 let");
|
||||
return nullptr;
|
||||
}
|
||||
vif0 = vif0_elt->expr().get_arg(0).get_int();
|
||||
set_dmatag_vif0 = dynamic_cast<StoreElement*>(let_dmatag_vif0->body()->at(0));
|
||||
} else {
|
||||
if (!check_vifcode_set(set_dmatag_vif0, dmatag_ptr, 4, 8)) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: bad vif0 set");
|
||||
return nullptr;
|
||||
}
|
||||
vif0 = set_dmatag_vif0->op()->value().get_int();
|
||||
}
|
||||
|
||||
if (!set_dmatag_hdr || !let_dmatag_vif1 || !set_dmatag_push ||
|
||||
let_dmatag_vif1->entries().size() != 1 || let_dmatag_vif1->body()->size() != 1) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: bad vif1 let");
|
||||
return nullptr;
|
||||
}
|
||||
auto set_dmatag_vif1 = dynamic_cast<StoreElement*>(let_dmatag_vif1->body()->at(0));
|
||||
if (!set_dmatag_vif1) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: bad vif1 set");
|
||||
return nullptr;
|
||||
}
|
||||
// check dmatag now
|
||||
auto mr_dmatag_hdr =
|
||||
match(Matcher::set(
|
||||
Matcher::deref(Matcher::cast("(pointer int64)", Matcher::any_reg(0)), false, {}),
|
||||
Matcher::any_integer(1)),
|
||||
set_dmatag_hdr);
|
||||
if (!mr_dmatag_hdr.matched || !var_name_equal(env, dmatag_ptr, mr_dmatag_hdr.maps.regs.at(0))) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: bad dmatag set");
|
||||
return nullptr;
|
||||
}
|
||||
dma_qwc = mr_dmatag_hdr.maps.ints.at(1) & 0xffff;
|
||||
if (((mr_dmatag_hdr.maps.ints.at(1) >> 28) & 0x7) != 1 ||
|
||||
(mr_dmatag_hdr.maps.ints.at(1) & ~0x7000ffff)) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: bad dmatag");
|
||||
return nullptr;
|
||||
}
|
||||
if (!(dma_qwc >= 1 && dma_qwc <= 17)) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: bad qwc {}", dma_qwc);
|
||||
return nullptr;
|
||||
}
|
||||
// check vifcode
|
||||
flusha = vif0 == 19ULL << 24;
|
||||
auto vif1_elt = let_dmatag_vif1->entries().at(0).src->try_as_element<SimpleExpressionElement>();
|
||||
if (!check_vifcode_set(set_dmatag_vif1, dmatag_ptr, 4, 12) || (vif0 && !flusha) ||
|
||||
!set_dmatag_vif1->op()->value().is_var() || !vif1_elt || !vif1_elt->expr().is_identity() ||
|
||||
!vif1_elt->expr().get_arg(0).is_int()) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: bad vif1");
|
||||
return nullptr;
|
||||
}
|
||||
u32 vif1 = vif1_elt->expr().get_arg(0).get_int();
|
||||
if (((vif1 >> 24) & 0x7f) != 80 || (vif1 & ~0x7f00ffff) || ((vif1 & 0xffff) != dma_qwc)) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: bad vif1 vifcode");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// check dma buffer base set
|
||||
if (!match_buf_push(set_dmatag_push, dmatag_buf, dmatag_ptr, 16)) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: dma base set 1");
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
// LET GIFTAG
|
||||
// (let* ((v1-1 arg0)
|
||||
// (a0-4 (-> v1-1 base))
|
||||
// )
|
||||
// (set! (-> (the-as (pointer uint64) a0-4)) (make-u128 0 (the-as uint #x6000000000008001)))
|
||||
// (let ((a1-6 (the-as uint #xeeeeeeeeeeeeeeee)))
|
||||
// (s.d! (+ a0-4 8) a1-6)
|
||||
// )
|
||||
// (set! (-> v1-1 base) (&+ a0-4 16))
|
||||
// )
|
||||
{
|
||||
auto giftag_buf = env.get_variable_name(let1->entries().at(0).dest);
|
||||
auto giftag_ptr = env.get_variable_name(let1->entries().at(1).dest);
|
||||
auto set_giftag_hdr = dynamic_cast<SetFormFormElement*>(let1->body()->at(0));
|
||||
auto let_giftag_regs = dynamic_cast<LetElement*>(let1->body()->at(1));
|
||||
auto set_giftag_push = dynamic_cast<SetFormFormElement*>(let1->body()->at(2));
|
||||
if (!set_giftag_hdr || !let_giftag_regs || !set_giftag_push ||
|
||||
let_giftag_regs->entries().size() != 1 || let_giftag_regs->body()->size() != 1) {
|
||||
return nullptr;
|
||||
}
|
||||
auto set_giftag_regs = dynamic_cast<StoreElement*>(let_giftag_regs->body()->at(0));
|
||||
if (!set_giftag_regs) {
|
||||
return nullptr;
|
||||
}
|
||||
// check giftag now
|
||||
auto mr_giftag_hdr =
|
||||
match(Matcher::set(
|
||||
Matcher::deref(Matcher::cast("(pointer uint64)", Matcher::any_reg(0)), false, {}),
|
||||
Matcher::op_fixed(
|
||||
FixedOperatorKind::PCPYLD,
|
||||
{Matcher::integer(0), Matcher::cast("uint", Matcher::any_integer(1))})),
|
||||
set_giftag_hdr);
|
||||
if (!mr_giftag_hdr.matched || (mr_giftag_hdr.maps.ints.at(1) & 0x0fffffffffffffff) != 0x8001 ||
|
||||
((mr_giftag_hdr.maps.ints.at(1) >> 60) & 0xf) != dma_qwc - 1 ||
|
||||
!var_name_equal(env, giftag_ptr, mr_giftag_hdr.maps.regs.at(0))) {
|
||||
return nullptr;
|
||||
}
|
||||
auto giftag_regs_elt = let_giftag_regs->entries().at(0).src->try_as_element<CastElement>();
|
||||
if (!check_vifcode_set(set_giftag_regs, giftag_ptr, 8, 8) || !giftag_regs_elt) {
|
||||
return nullptr;
|
||||
}
|
||||
auto giftag_regs_atom = giftag_regs_elt->source()->try_as_element<SimpleAtomElement>();
|
||||
if (!giftag_regs_atom || !giftag_regs_atom->atom().is_int(0xeeeeeeeeeeeeeeee)) {
|
||||
return nullptr;
|
||||
}
|
||||
// check dma buffer base set
|
||||
if (!match_buf_push(set_giftag_push, giftag_buf, giftag_ptr, 16)) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: dma base set 2");
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
// start building args
|
||||
std::vector<Form*> args;
|
||||
args.push_back(buf);
|
||||
|
||||
// LET GS REGS
|
||||
// (let* ((v1-2 arg0)
|
||||
// (a0-6 (-> v1-2 base))
|
||||
// )
|
||||
// (set! (-> (the-as (pointer int64) a0-6)) #x33001)
|
||||
// (let ((a1-8 71))
|
||||
// (s.d! (+ a0-6 8) a1-8)
|
||||
// )
|
||||
// (s.d! (+ a0-6 16) 0)
|
||||
// (let ((a1-9 66))
|
||||
// (s.d! (+ a0-6 24) a1-9)
|
||||
// )
|
||||
// (let ((a1-10 (the-as uint #x664023300)))
|
||||
// (s.d! (+ a0-6 32) a1-10)
|
||||
// )
|
||||
// (let ((a1-11 6))
|
||||
// (s.d! (+ a0-6 40) a1-11)
|
||||
// )
|
||||
// (let ((a1-12 96))
|
||||
// (s.d! (+ a0-6 48) a1-12)
|
||||
// )
|
||||
// (let ((a1-13 20))
|
||||
// (s.d! (+ a0-6 56) a1-13)
|
||||
// )
|
||||
// (let ((a1-14 5))
|
||||
// (s.d! (+ a0-6 64) a1-14)
|
||||
// )
|
||||
// (let ((a1-15 8))
|
||||
// (s.d! (+ a0-6 72) a1-15)
|
||||
// )
|
||||
// (s.d! (+ a0-6 80) 0)
|
||||
// (let ((a1-16 63))
|
||||
// (s.d! (+ a0-6 88) a1-16)
|
||||
// )
|
||||
// (set! (-> v1-2 base) (&+ a0-6 96))
|
||||
// )
|
||||
{
|
||||
auto gsregs_buf = env.get_variable_name(let2->entries().at(0).dest);
|
||||
auto gsregs_ptr = env.get_variable_name(let2->entries().at(1).dest);
|
||||
auto set_gsregs_push =
|
||||
dynamic_cast<SetFormFormElement*>(let2->body()->at(let2->body()->size() - 1));
|
||||
// check dma buffer base set
|
||||
if (let2->body()->size() != (dma_qwc - 1) * 2 + 1 ||
|
||||
!match_buf_push(set_gsregs_push, gsregs_buf, gsregs_ptr, 16 * (dma_qwc - 1))) {
|
||||
lg::error("rewrite_dma_buffer_add_gs_set: dma base set 3");
|
||||
return nullptr;
|
||||
}
|
||||
bool error = false;
|
||||
auto get_int_from_form = [&](FormElement* elt, const std::string& ptr_name, int offset) {
|
||||
auto as_set = dynamic_cast<SetFormFormElement*>(elt);
|
||||
if (as_set) {
|
||||
auto mr_set = match(
|
||||
Matcher::set(
|
||||
Matcher::deref(
|
||||
Matcher::match_or({Matcher::cast("(pointer int64)", Matcher::any_reg(0)),
|
||||
Matcher::cast("(pointer uint64)", Matcher::any_reg(0))}),
|
||||
false, {}),
|
||||
Matcher::any_integer(1)),
|
||||
as_set);
|
||||
if (!mr_set.matched || !var_name_equal(env, gsregs_ptr, mr_set.maps.regs.at(0))) {
|
||||
error = true;
|
||||
return (s64)0;
|
||||
}
|
||||
return mr_set.maps.ints.at(1);
|
||||
}
|
||||
auto as_store = dynamic_cast<StoreElement*>(elt);
|
||||
if (as_store) {
|
||||
if (!as_store->op()->value().is_int() ||
|
||||
!check_vifcode_set(as_store, ptr_name, 8, offset)) {
|
||||
error = true;
|
||||
return (s64)0;
|
||||
}
|
||||
return as_store->op()->value().get_int();
|
||||
}
|
||||
auto as_let = dynamic_cast<LetElement*>(elt);
|
||||
if (as_let) {
|
||||
if (as_let->entries().size() != 1 || as_let->body()->size() != 1) {
|
||||
error = true;
|
||||
return (s64)0;
|
||||
}
|
||||
auto store_in_let = dynamic_cast<StoreElement*>(as_let->body()->at(0));
|
||||
if (!store_in_let || !check_vifcode_set(store_in_let, ptr_name, 8, offset) ||
|
||||
!store_in_let->op()->value().is_var() ||
|
||||
!var_name_equal(env, env.get_variable_name(as_let->entries().at(0).dest),
|
||||
store_in_let->op()->value().var())) {
|
||||
error = true;
|
||||
return (s64)0;
|
||||
}
|
||||
auto val_as_cast = as_let->entries().at(0).src->try_as_element<CastElement>();
|
||||
if (val_as_cast) {
|
||||
auto as_atom = val_as_cast->source()->try_as_element<SimpleAtomElement>();
|
||||
if (!as_atom || !as_atom->atom().is_int()) {
|
||||
error = true;
|
||||
return (s64)0;
|
||||
}
|
||||
return as_atom->atom().get_int();
|
||||
}
|
||||
auto val_as_expr = as_let->entries().at(0).src->try_as_element<SimpleExpressionElement>();
|
||||
if (val_as_expr) {
|
||||
if (!val_as_expr->expr().is_identity() || !val_as_expr->expr().get_arg(0).is_int()) {
|
||||
error = true;
|
||||
return (s64)0;
|
||||
}
|
||||
return val_as_expr->expr().get_arg(0).get_int();
|
||||
}
|
||||
}
|
||||
error = true;
|
||||
return (s64)0;
|
||||
};
|
||||
auto get_src_form = [&](FormPool& pool, FormElement* elt, const std::string& ptr_name,
|
||||
int offset) -> Form* {
|
||||
auto as_set = dynamic_cast<SetFormFormElement*>(elt);
|
||||
if (as_set) {
|
||||
auto mr_set = match(
|
||||
Matcher::set(
|
||||
Matcher::deref(
|
||||
Matcher::match_or({Matcher::cast("(pointer int64)", Matcher::any_reg(0)),
|
||||
Matcher::cast("(pointer uint64)", Matcher::any_reg(0))}),
|
||||
false, {}),
|
||||
Matcher::any()),
|
||||
as_set);
|
||||
if (!mr_set.matched || !var_name_equal(env, gsregs_ptr, mr_set.maps.regs.at(0))) {
|
||||
return nullptr;
|
||||
}
|
||||
return as_set->src();
|
||||
}
|
||||
auto as_store = dynamic_cast<StoreElement*>(elt);
|
||||
if (as_store) {
|
||||
if (!check_vifcode_set(as_store, ptr_name, 8, offset)) {
|
||||
return nullptr;
|
||||
}
|
||||
return pool.form<SimpleAtomElement>(as_store->op()->value());
|
||||
}
|
||||
auto as_let = dynamic_cast<LetElement*>(elt);
|
||||
if (as_let) {
|
||||
if (as_let->entries().size() != 1 || as_let->body()->size() != 1) {
|
||||
return nullptr;
|
||||
}
|
||||
auto store_in_let = dynamic_cast<StoreElement*>(as_let->body()->at(0));
|
||||
if (!store_in_let || !check_vifcode_set(store_in_let, ptr_name, 8, offset) ||
|
||||
!store_in_let->op()->value().is_var() ||
|
||||
!var_name_equal(env, env.get_variable_name(as_let->entries().at(0).dest),
|
||||
store_in_let->op()->value().var())) {
|
||||
return nullptr;
|
||||
}
|
||||
return as_let->entries().at(0).src;
|
||||
}
|
||||
return nullptr;
|
||||
};
|
||||
const static std::unordered_map<std::string, std::string> reg_id_to_def_map = {
|
||||
// enum name, struct name
|
||||
{"prim", "gs-prim"},
|
||||
{"st", "gs-st"},
|
||||
{"uv", "gs-uv"},
|
||||
{"rgbaq", "gs-rgbaq"},
|
||||
{"fog", "gs-fog"},
|
||||
{"fogcol", "gs-fogcol"},
|
||||
{"miptbp1-1", "gs-miptbp"},
|
||||
{"miptbp1-2", "gs-miptbp"},
|
||||
{"miptbp2-1", "gs-miptbp"},
|
||||
{"miptbp2-2", "gs-miptbp"},
|
||||
{"texclut", "gs-texclut"},
|
||||
{"tex0-1", "gs-tex0"},
|
||||
{"tex0-2", "gs-tex0"},
|
||||
{"tex1-1", "gs-tex1"},
|
||||
{"tex1-2", "gs-tex1"},
|
||||
{"clamp-1", "gs-clamp"},
|
||||
{"clamp-2", "gs-clamp"},
|
||||
{"texa", "gs-texa"},
|
||||
{"xyoffset-1", "gs-xy-offset"},
|
||||
{"xyoffset-2", "gs-xy-offset"},
|
||||
{"prmodecont", "gs-prmode-cont"},
|
||||
{"clamp-1", "gs-clamp"},
|
||||
{"clamp-2", "gs-clamp"},
|
||||
{"test-1", "gs-test"},
|
||||
{"test-2", "gs-test"},
|
||||
{"frame-1", "gs-frame"},
|
||||
{"frame-2", "gs-frame"},
|
||||
{"scissor-1", "gs-scissor"},
|
||||
{"scissor-2", "gs-scissor"},
|
||||
{"zbuf-1", "gs-zbuf"},
|
||||
{"zbuf-2", "gs-zbuf"},
|
||||
{"alpha-1", "gs-alpha"},
|
||||
{"alpha-2", "gs-alpha"},
|
||||
{"dthe", "gs-dthe"},
|
||||
{"colclamp", "gs-color-clamp"},
|
||||
{"xyzf3", "gs-xyzf"},
|
||||
{"xyz3", "gs-xyz"},
|
||||
{"bitbltbuf", "gs-bitbltbuf"},
|
||||
{"trxpos", "gs-trxpos"},
|
||||
{"trxreg", "gs-trxreg"},
|
||||
{"trxdir", "gs-trxdir"},
|
||||
};
|
||||
const static std::unordered_set<std::string> reg_id_to_int_map = {
|
||||
"texflush",
|
||||
"pabe",
|
||||
"fba-1",
|
||||
"fba-2",
|
||||
};
|
||||
for (int i = 0; i < let2->body()->size() - 1 && !error; i += 2) {
|
||||
auto reg_val = get_int_from_form(let2->body()->at(i), gsregs_ptr, i * 8);
|
||||
bool bad_val = error;
|
||||
error = false;
|
||||
auto reg_id = get_int_from_form(let2->body()->at(i + 1), gsregs_ptr, i * 8 + 8);
|
||||
auto reg_name =
|
||||
decompiler::decompile_int_enum_from_int(TypeSpec("gs-reg"), env.dts->ts, reg_id);
|
||||
auto name_head = GenericOperator::make_function(pool.form<ConstantTokenElement>(reg_name));
|
||||
const auto& it = reg_id_to_def_map.find(reg_name);
|
||||
if (error) {
|
||||
} else if (bad_val) {
|
||||
auto reg_val_form = get_src_form(pool, let2->body()->at(i), gsregs_ptr, i * 8);
|
||||
if (reg_val_form) {
|
||||
if (it != reg_id_to_def_map.end()) {
|
||||
auto spec = TypeSpec(it->second);
|
||||
auto as_bitfield = decompiler::cast_to_bitfield(
|
||||
dynamic_cast<BitFieldType*>(env.dts->ts.lookup_type(spec)), spec, pool, env,
|
||||
reg_val_form);
|
||||
auto as_cast = as_bitfield->try_as_element<CastElement>();
|
||||
args.push_back(
|
||||
pool.form<GenericElement>(name_head, as_cast ? as_cast->source() : as_bitfield));
|
||||
} else {
|
||||
args.push_back(pool.form<GenericElement>(name_head, reg_val_form));
|
||||
}
|
||||
} else {
|
||||
error = true;
|
||||
}
|
||||
} else if (it != reg_id_to_def_map.end()) {
|
||||
auto spec = TypeSpec(it->second);
|
||||
args.push_back(pool.form<GenericElement>(
|
||||
name_head,
|
||||
pool.form<BitfieldStaticDefElement>(
|
||||
spec, decompiler::decompile_bitfield_from_int(spec, env.dts->ts, reg_val), pool)));
|
||||
} else if (const auto& it = reg_id_to_int_map.find(reg_name); it != reg_id_to_int_map.end()) {
|
||||
args.push_back(pool.form<GenericElement>(
|
||||
name_head, pool.form<SimpleAtomElement>(SimpleAtom::make_int_constant(reg_val))));
|
||||
} else {
|
||||
lg::error("unhandled gs-reg {}", reg_name);
|
||||
error = true;
|
||||
}
|
||||
}
|
||||
if (error) {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
return pool.alloc_element<GenericElement>(
|
||||
GenericOperator::make_function(pool.form<ConstantTokenElement>(
|
||||
flusha ? "dma-buffer-add-gs-set-flusha" : "dma-buffer-add-gs-set")),
|
||||
args);
|
||||
}
|
||||
|
||||
FormElement* rewrite_let_sequence(const std::vector<LetElement*>& in,
|
||||
const Env& env,
|
||||
FormPool& pool,
|
||||
LetRewriteStats& stats) {
|
||||
if (in.size() == 3) {
|
||||
auto as_dma_buffer_add_gs_set = rewrite_dma_buffer_add_gs_set(in, env, pool);
|
||||
if (as_dma_buffer_add_gs_set) {
|
||||
stats.dma_buffer_add_gs_set++;
|
||||
return as_dma_buffer_add_gs_set;
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Form* insert_cast_for_let(RegisterAccess dst,
|
||||
const TypeSpec& src_type,
|
||||
Form* src,
|
||||
@@ -2543,6 +3011,27 @@ LetStats insert_lets(const Function& func,
|
||||
});
|
||||
}
|
||||
|
||||
// Part 10: rewrite let sequences
|
||||
top_level_form->apply_form([&](Form* f) {
|
||||
auto& form_elts = f->elts();
|
||||
for (size_t i = 0; i < form_elts.size(); ++i) {
|
||||
if (i + 2 < form_elts.size() && dynamic_cast<LetElement*>(form_elts[i]) &&
|
||||
dynamic_cast<LetElement*>(form_elts[i + 1]) &&
|
||||
dynamic_cast<LetElement*>(form_elts[i + 2])) {
|
||||
auto rw = rewrite_let_sequence(
|
||||
{dynamic_cast<LetElement*>(form_elts[i]), dynamic_cast<LetElement*>(form_elts[i + 1]),
|
||||
dynamic_cast<LetElement*>(form_elts[i + 2])},
|
||||
env, pool, let_rewrite_stats);
|
||||
if (rw) {
|
||||
form_elts.erase(form_elts.begin() + i + 2);
|
||||
form_elts.erase(form_elts.begin() + i + 1);
|
||||
form_elts.at(i) = rw;
|
||||
rw->parent_form = f;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return stats;
|
||||
}
|
||||
|
||||
|
||||
@@ -3913,8 +3913,8 @@
|
||||
|
||||
;; the GS's UV register specifies the texel coordinate (UV) values of the vertex.
|
||||
(deftype gs-uv (uint64)
|
||||
((u uint16 :offset 0 :size 14) ;; Q4 fixed point
|
||||
(v uint16 :offset 16 :size 14) ;; Q4 fixed point
|
||||
((u uint16 :offset 0 :size 16) ;; Q4 fixed point
|
||||
(v uint16 :offset 16 :size 16) ;; Q4 fixed point
|
||||
)
|
||||
:flag-assert #x900000008
|
||||
)
|
||||
@@ -3985,7 +3985,7 @@
|
||||
(spsm uint8 :offset 24 :size 6)
|
||||
(dbp uint16 :offset 32 :size 14)
|
||||
(dbw uint8 :offset 48 :size 6)
|
||||
(dpsm uint8 :offset 56 :size 6)
|
||||
(dpsm gs-psm :offset 56 :size 6)
|
||||
)
|
||||
:flag-assert #x900000008
|
||||
)
|
||||
@@ -7672,7 +7672,7 @@
|
||||
(bigmap-method-19 (_type_) int 19)
|
||||
(bigmap-method-20 (_type_) int 20)
|
||||
(bigmap-method-21 (_type_ int int) int 21)
|
||||
(bigmap-method-22 (_type_ dma-buffer (pointer uint32) int int int int) none 22)
|
||||
(bigmap-method-22 (_type_ dma-buffer (pointer uint32) int int int gs-psm) none 22)
|
||||
(bigmap-method-23 (_type_) none 23)
|
||||
(bigmap-method-24 (_type_ dma-buffer) none 24)
|
||||
(bigmap-method-25 (_type_ dma-buffer) none 25)
|
||||
@@ -7999,8 +7999,9 @@
|
||||
;; capture ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(define-extern gs-set-default-store-image (function gs-store-image-packet int int int int int int int int))
|
||||
(define-extern gs-set-default-store-image (function gs-store-image-packet int int gs-psm int int int int int))
|
||||
(define-extern store-image (function screen-shot-work int))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; memory-usage-h ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -8145,12 +8146,12 @@
|
||||
(color vector4w :inline :offset-assert 160)
|
||||
(line-color uint64 :offset-assert 176)
|
||||
(scan-colors vector4w 15 :inline :offset-assert 192) ;; guesss
|
||||
(menu-mode basic :offset-assert 432)
|
||||
(screen-copied basic :offset-assert 436)
|
||||
(vu1-enable-user-menu uint64 :offset-assert 440)
|
||||
(menu-mode symbol :offset-assert 432)
|
||||
(screen-copied symbol :offset-assert 436)
|
||||
(vu1-enable-user-menu vu1-renderer-mask :offset-assert 440)
|
||||
(texture-enable-user-menu uint32 :offset-assert 448)
|
||||
(count-down uint32 :offset-assert 452)
|
||||
(horizontal-flip-flag basic :offset-assert 456)
|
||||
(horizontal-flip-flag symbol :offset-assert 456)
|
||||
(scan-alpha float :offset-assert 460)
|
||||
(scanline uint32 :offset-assert 464)
|
||||
(progress-interp float :offset-assert 468)
|
||||
@@ -10956,9 +10957,8 @@
|
||||
(add-colors! (_type_ vector ocean-vertex) none 17)
|
||||
(ocean-method-18 "Unused" (_type_ (pointer ocean-colors) (pointer ocean-colors)) none 18) ;; args are guesses
|
||||
(init-buffer!
|
||||
"Initialize [[ocean]] DMA buffer.
|
||||
@returns Pointer to the next DMA buffer"
|
||||
(_type_ dma-buffer) pointer 19)
|
||||
"Initialize [[ocean]] DMA buffer."
|
||||
(_type_ dma-buffer) none 19)
|
||||
(end-buffer! (_type_ dma-buffer) none 20)
|
||||
(set-corners! (_type_ float float) float 21)
|
||||
(ocean-near-add-call (_type_ dma-buffer int) none 22) ;; start ocean-near
|
||||
@@ -11020,7 +11020,7 @@
|
||||
(draw-ocean-texture (_type_ dma-buffer int) none 78)
|
||||
(ocean-method-79 (_type_ dma-buffer) none 79)
|
||||
(ocean-method-80 (_type_ (pointer rgba)) none 80)
|
||||
(ocean-method-81 (_type_ dma-buffer) none 81)
|
||||
(ocean-method-81 (_type_ dma-buffer) int 81)
|
||||
(draw-envmap-debug (_type_ dma-buffer) none 82)
|
||||
(ocean-method-83 (_type_ dma-buffer float) none 83)
|
||||
(ocean-method-84 (_type_ dma-buffer sky-upload-data vector4w float) none 84)
|
||||
@@ -24781,10 +24781,10 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(define-extern *blit-displays-work* blit-displays-work)
|
||||
;; (define-extern blit-disp-slow function)
|
||||
;; (define-extern blur-disp function)
|
||||
;; (define-extern filter-disp function)
|
||||
;; (define-extern hflip-disp function)
|
||||
(define-extern blit-disp-slow (function dma-buffer int int int pointer))
|
||||
(define-extern blur-disp (function dma-buffer int int int symbol))
|
||||
(define-extern filter-disp (function dma-buffer vector symbol))
|
||||
(define-extern hflip-disp (function dma-buffer object))
|
||||
(define-extern blit-displays (function none))
|
||||
(define-extern draw-color-bars (function none))
|
||||
(define-extern draw-raw-image (function bucket-id art-group int int level int none))
|
||||
@@ -30547,7 +30547,7 @@
|
||||
(define-extern scene-decode-continue (function basic continue-point))
|
||||
(define-extern scene-lookup "TODO - basic can be a string or a scene" (function basic scene))
|
||||
(define-extern *subtitle-work* subtitle-work)
|
||||
(define-extern draw-subtitle-image (function subtitle-image font-context pointer))
|
||||
(define-extern draw-subtitle-image (function subtitle-image font-context none))
|
||||
(define-extern process-drawable-draw-subtitles (function none :behavior process-drawable))
|
||||
(define-extern scene-player-init "`object` arg can be an `(array scene)`, `pair of scene` or a `scene`" (function object symbol string none :behavior scene-player))
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -141,8 +141,6 @@
|
||||
"gp-0": "dma-mem-begin",
|
||||
"s4-0": "dma-buff",
|
||||
"s5-0": "dma-bucket-begin",
|
||||
"a0-6": ["pkt1", "dma-packet"],
|
||||
"a0-8": "giftag",
|
||||
"a0-14": ["pkt2", "dma-packet"],
|
||||
"a0-16": ["pkt3", "dma-packet"],
|
||||
"a0-21": ["pkt4", "dma-packet"],
|
||||
@@ -188,6 +186,12 @@
|
||||
"v1-26": "clip-result"
|
||||
}
|
||||
},
|
||||
"draw-subtitle-image": {
|
||||
"vars": {
|
||||
"v1-29": ["v1-29", "vector4w"],
|
||||
"v1-33": ["v1-33", "vector4w"]
|
||||
}
|
||||
},
|
||||
"(method 18 mood-control)": {
|
||||
"vars": {
|
||||
"v0-3": ["lightning-sound-id", "sound-id"]
|
||||
|
||||
@@ -194,6 +194,7 @@ set(RUNTIME_SOURCE
|
||||
graphics/opengl_renderer/TextureUploadHandler.cpp
|
||||
graphics/opengl_renderer/VisDataHandler.cpp
|
||||
graphics/opengl_renderer/Warp.cpp
|
||||
graphics/opengl_renderer/BlitDisplays.cpp
|
||||
graphics/texture/jak1_tpage_dir.cpp
|
||||
graphics/texture/jak2_tpage_dir.cpp
|
||||
graphics/texture/TextureConverter.cpp
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
#include "BlitDisplays.h"
|
||||
|
||||
#include "common/log/log.h"
|
||||
|
||||
#include "game/graphics/opengl_renderer/OpenGLRenderer.h"
|
||||
#include "game/graphics/pipelines/opengl.h"
|
||||
|
||||
BlitDisplays::BlitDisplays(const std::string& name, int my_id) : BucketRenderer(name, my_id) {}
|
||||
|
||||
void BlitDisplays::init_textures(TexturePool& texture_pool, GameVersion version) {
|
||||
// set up target texture
|
||||
u32 tbp = 0;
|
||||
switch (version) {
|
||||
case GameVersion::Jak2:
|
||||
tbp = 0x3300;
|
||||
break;
|
||||
default:
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
TextureInput in;
|
||||
glGenTextures(1, &in.gpu_texture);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
in.w = 32;
|
||||
in.h = 32;
|
||||
in.debug_page_name = "PC-BLIT";
|
||||
in.debug_name = fmt::format("blit-display");
|
||||
in.id = texture_pool.allocate_pc_port_texture(version);
|
||||
m_gpu_tex = texture_pool.give_texture_and_load_to_vram(in, tbp);
|
||||
m_tbp = tbp;
|
||||
}
|
||||
|
||||
void BlitDisplays::render(DmaFollower& dma,
|
||||
SharedRenderState* render_state,
|
||||
ScopedProfilerNode& prof) {
|
||||
auto back = render_state->back_fbo;
|
||||
bool valid = back && back->valid;
|
||||
|
||||
// loop through all data
|
||||
while (dma.current_tag_offset() != render_state->next_bucket) {
|
||||
auto data = dma.read_and_advance();
|
||||
|
||||
if (data.vifcode0().kind == VifCode::Kind::PC_PORT) {
|
||||
switch (data.vifcode0().immediate) {
|
||||
case 0x10: { // copy buffer->texture (tbp in vif1)
|
||||
u32 tbp = data.vifcode1().immediate;
|
||||
ASSERT_MSG(tbp == m_tbp, fmt::format("unexpected tbp {}", tbp));
|
||||
if (valid) {
|
||||
// copy buffer texture -> custom texture
|
||||
auto my_tex_id = m_gpu_tex->gpu_textures.at(0).gl;
|
||||
int w = back->width, h = back->height;
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, my_tex_id);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
||||
|
||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, back->fbo_id);
|
||||
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, w, h, 0);
|
||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
|
||||
|
||||
m_gpu_tex->w = w;
|
||||
m_gpu_tex->h = h;
|
||||
render_state->texture_pool->move_existing_to_vram(m_gpu_tex, m_tbp);
|
||||
} else {
|
||||
lg::error("no valid back buffer to blit!");
|
||||
}
|
||||
} break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BlitDisplays::draw_debug_window() {}
|
||||
@@ -0,0 +1,19 @@
|
||||
#pragma once
|
||||
|
||||
#include "game/graphics/opengl_renderer/BucketRenderer.h"
|
||||
#include "game/graphics/texture/TexturePool.h"
|
||||
|
||||
/*!
|
||||
* The BlitDisplays renderer does various blitting and effects on the previous frame
|
||||
*/
|
||||
class BlitDisplays : public BucketRenderer {
|
||||
public:
|
||||
BlitDisplays(const std::string& name, int my_id);
|
||||
void render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof) override;
|
||||
void init_textures(TexturePool& texture_pool, GameVersion) override;
|
||||
void draw_debug_window() override;
|
||||
|
||||
private:
|
||||
GpuTexture* m_gpu_tex;
|
||||
u32 m_tbp;
|
||||
};
|
||||
@@ -11,6 +11,8 @@
|
||||
#include "game/graphics/opengl_renderer/loader/Loader.h"
|
||||
#include "game/graphics/texture/TexturePool.h"
|
||||
|
||||
struct Fbo;
|
||||
|
||||
struct LevelVis {
|
||||
bool valid = false;
|
||||
u8 data[2048];
|
||||
@@ -85,6 +87,9 @@ struct SharedRenderState {
|
||||
int draw_offset_x = 0;
|
||||
int draw_offset_y = 0;
|
||||
|
||||
// the FBO for blit buffer
|
||||
const Fbo* back_fbo = nullptr;
|
||||
|
||||
int bucket_for_vis_copy = 0;
|
||||
int num_vis_to_copy = 0;
|
||||
GameVersion version;
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
#include "third-party/fmt/core.h"
|
||||
#include "third-party/imgui/imgui.h"
|
||||
|
||||
DirectRenderer::ScissorState DirectRenderer::m_scissor;
|
||||
|
||||
constexpr PerGameVersion<int> game_height(448, 416);
|
||||
|
||||
DirectRenderer::DirectRenderer(const std::string& name, int my_id, int batch_size)
|
||||
: BucketRenderer(name, my_id), m_prim_buffer(batch_size) {
|
||||
glGenBuffers(1, &m_ogl.vertex_buffer);
|
||||
@@ -48,7 +52,7 @@ DirectRenderer::DirectRenderer(const std::string& name, int my_id, int batch_siz
|
||||
|
||||
glEnableVertexAttribArray(3);
|
||||
glVertexAttribIPointer(
|
||||
3, // location 0 in the shader
|
||||
3, // location 3 in the shader
|
||||
4, // 3 floats per vert
|
||||
GL_UNSIGNED_BYTE, // floats
|
||||
sizeof(Vertex), //
|
||||
@@ -63,6 +67,15 @@ DirectRenderer::DirectRenderer(const std::string& name, int my_id, int batch_siz
|
||||
sizeof(Vertex), //
|
||||
(void*)offsetof(Vertex, use_uv) // offset in array (why is this a pointer...)
|
||||
);
|
||||
|
||||
glEnableVertexAttribArray(5);
|
||||
glVertexAttribPointer(5, // location 5 in the shader
|
||||
4, // 4 floats per vert
|
||||
GL_FLOAT, // floats
|
||||
GL_FALSE, // normalized, ignored,
|
||||
sizeof(Vertex), //
|
||||
(void*)offsetof(Vertex, scissor) // offset in array
|
||||
);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
glBindVertexArray(0);
|
||||
}
|
||||
@@ -229,6 +242,15 @@ void DirectRenderer::flush_pending(SharedRenderState* render_state, ScopedProfil
|
||||
glBufferData(GL_ARRAY_BUFFER, m_prim_buffer.vert_count * sizeof(Vertex),
|
||||
m_prim_buffer.vertices.data(), GL_STREAM_DRAW);
|
||||
|
||||
GLint current_shader;
|
||||
GLint viewport_size[4];
|
||||
glGetIntegerv(GL_CURRENT_PROGRAM, ¤t_shader);
|
||||
glGetIntegerv(GL_VIEWPORT, viewport_size);
|
||||
glUniform1i(glGetUniformLocation(current_shader, "scissor_enable"),
|
||||
m_scissor_enable && !m_offscreen_mode);
|
||||
glUniform4f(glGetUniformLocation(current_shader, "game_sizes"), 512.0f,
|
||||
game_height[render_state->version], viewport_size[2], viewport_size[3]);
|
||||
|
||||
int draw_count = 0;
|
||||
glDrawArrays(GL_TRIANGLES, 0, m_prim_buffer.vert_count);
|
||||
draw_count++;
|
||||
@@ -549,6 +571,12 @@ void DirectRenderer::render_gif(const u8* data,
|
||||
ASSERT(size >= 16);
|
||||
}
|
||||
|
||||
if (m_blit_buf_state.expect == 5) {
|
||||
ASSERT(m_blit_buf_state.qwc * 16 == size);
|
||||
m_blit_buf_state.expect = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
bool eop = false;
|
||||
|
||||
u32 offset = 0;
|
||||
@@ -558,6 +586,7 @@ void DirectRenderer::render_gif(const u8* data,
|
||||
}
|
||||
GifTag tag(data + offset);
|
||||
offset += 16;
|
||||
eop = tag.eop();
|
||||
|
||||
// unpack registers.
|
||||
// faster to do it once outside of the nloop loop.
|
||||
@@ -630,11 +659,17 @@ void DirectRenderer::render_gif(const u8* data,
|
||||
offset += 8; // PACKED = quadwords
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ASSERT(false); // format not packed or reglist.
|
||||
}
|
||||
} else if (format == GifTag::Format::IMAGE) {
|
||||
ASSERT(m_blit_buf_state.expect == 4);
|
||||
m_blit_buf_state.expect++;
|
||||
|
||||
eop = tag.eop();
|
||||
// dont support non-eop image transfers yet
|
||||
ASSERT(eop);
|
||||
// in IMAGE mode this is the amount of 2x64-bit (1 qword) we will transfer
|
||||
m_blit_buf_state.qwc = tag.nloop();
|
||||
} else {
|
||||
ASSERT(false); // format not packed or reglist or image
|
||||
}
|
||||
}
|
||||
|
||||
if (size != UINT32_MAX) {
|
||||
@@ -703,18 +738,15 @@ void DirectRenderer::handle_ad(const u8* data,
|
||||
case GsRegisterAddress::FRAME_1:
|
||||
handle_frame(value, render_state, prof);
|
||||
break;
|
||||
case GsRegisterAddress::RGBAQ:
|
||||
// shadow scissor does this?
|
||||
{
|
||||
m_prim_building.rgba_reg[0] = data[0];
|
||||
m_prim_building.rgba_reg[1] = data[1];
|
||||
m_prim_building.rgba_reg[2] = data[2];
|
||||
m_prim_building.rgba_reg[3] = data[3];
|
||||
memcpy(&m_prim_building.Q, data + 4, 4);
|
||||
}
|
||||
break;
|
||||
case GsRegisterAddress::RGBAQ: { // shadow scissor does this?
|
||||
m_prim_building.rgba_reg[0] = data[0];
|
||||
m_prim_building.rgba_reg[1] = data[1];
|
||||
m_prim_building.rgba_reg[2] = data[2];
|
||||
m_prim_building.rgba_reg[3] = data[3];
|
||||
memcpy(&m_prim_building.Q, data + 4, 4);
|
||||
} break;
|
||||
case GsRegisterAddress::SCISSOR_1:
|
||||
// fmt::print("ignoring scissor\n");
|
||||
handle_scissor(value);
|
||||
break;
|
||||
case GsRegisterAddress::XYOFFSET_1:
|
||||
ASSERT(render_state->version == GameVersion::Jak2); // hardcoded jak 2 scissor vals in handle
|
||||
@@ -723,6 +755,22 @@ void DirectRenderer::handle_ad(const u8* data,
|
||||
case GsRegisterAddress::COLCLAMP:
|
||||
ASSERT(value == 1);
|
||||
break;
|
||||
case GsRegisterAddress::BITBLTBUF:
|
||||
ASSERT(false);
|
||||
handle_bitbltbuf(value);
|
||||
break;
|
||||
case GsRegisterAddress::TRXPOS:
|
||||
ASSERT(false);
|
||||
handle_trxpos(value);
|
||||
break;
|
||||
case GsRegisterAddress::TRXREG:
|
||||
ASSERT(false);
|
||||
handle_trxreg(value);
|
||||
break;
|
||||
case GsRegisterAddress::TRXDIR:
|
||||
ASSERT(false);
|
||||
handle_trxdir(value & 0x3, render_state, prof);
|
||||
break;
|
||||
default:
|
||||
ASSERT_MSG(false, fmt::format("Address {} is not supported", register_address_name(addr)));
|
||||
}
|
||||
@@ -730,6 +778,14 @@ void DirectRenderer::handle_ad(const u8* data,
|
||||
|
||||
void DirectRenderer::handle_frame(u64, SharedRenderState*, ScopedProfilerNode&) {}
|
||||
|
||||
void DirectRenderer::handle_scissor(u64 val) {
|
||||
m_scissor.scax0 = (val >> 0) & 0x7ff;
|
||||
m_scissor.scax1 = (val >> 16) & 0x7ff;
|
||||
m_scissor.scay0 = (val >> 32) & 0x7ff;
|
||||
m_scissor.scay1 = (val >> 48) & 0x7ff;
|
||||
m_scissor_enable = true;
|
||||
}
|
||||
|
||||
void DirectRenderer::handle_xyoffset(u64 val) {
|
||||
GsXYOffset xyo(val);
|
||||
// :ofx #x7000 :ofy #x7300
|
||||
@@ -738,6 +794,78 @@ void DirectRenderer::handle_xyoffset(u64 val) {
|
||||
m_prim_buffer.y_off = scale * ((s32)xyo.ofy() - 0x7300) / float(UINT32_MAX);
|
||||
}
|
||||
|
||||
void DirectRenderer::handle_bitbltbuf(u64 val) {
|
||||
ASSERT(m_blit_buf_state.expect == 0);
|
||||
m_blit_buf_state.expect++;
|
||||
|
||||
m_blit_buf_state.sbp = (val >> 0) & 0x3fff;
|
||||
m_blit_buf_state.sbw = (val >> 16) & 0x3f;
|
||||
m_blit_buf_state.spsm = (val >> 24) & 0x3f;
|
||||
m_blit_buf_state.dbp = (val >> 32) & 0x3fff;
|
||||
m_blit_buf_state.dbw = (val >> 48) & 0x3f;
|
||||
m_blit_buf_state.dpsm = (val >> 56) & 0x3f;
|
||||
}
|
||||
|
||||
void DirectRenderer::handle_trxpos(u64 val) {
|
||||
ASSERT(m_blit_buf_state.expect == 1);
|
||||
m_blit_buf_state.expect++;
|
||||
|
||||
m_blit_buf_state.ssax = (val >> 0) & 0x7ff;
|
||||
m_blit_buf_state.ssay = (val >> 16) & 0x7ff;
|
||||
m_blit_buf_state.dsax = (val >> 32) & 0x7ff;
|
||||
m_blit_buf_state.dsay = (val >> 48) & 0x7ff;
|
||||
m_blit_buf_state.pixel_dir = (val >> 59) & 0x3;
|
||||
}
|
||||
|
||||
void DirectRenderer::handle_trxreg(u64 val) {
|
||||
ASSERT(m_blit_buf_state.expect == 2);
|
||||
m_blit_buf_state.expect++;
|
||||
|
||||
m_blit_buf_state.width = (val >> 0) & 0xfff;
|
||||
m_blit_buf_state.height = (val >> 32) & 0xfff;
|
||||
}
|
||||
|
||||
void DirectRenderer::handle_trxdir(u64 dir,
|
||||
SharedRenderState* render_state,
|
||||
ScopedProfilerNode& prof) {
|
||||
ASSERT(m_blit_buf_state.expect == 3);
|
||||
m_blit_buf_state.expect++;
|
||||
|
||||
auto get_tex_func = [&render_state](const std::string& name, u16 tbp) {
|
||||
auto result = render_state->texture_pool->lookup(tbp);
|
||||
if (!result) {
|
||||
fmt::print("{} tbp {} not found\n", name, tbp);
|
||||
} else {
|
||||
fmt::print("{} tbp {} found\n", name, tbp);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
fmt::print("GS TEXTURE COPY --\n");
|
||||
fmt::print("src w/psm: {}/{} dst w/psm: {}/{}\n", m_blit_buf_state.sbw, m_blit_buf_state.spsm,
|
||||
m_blit_buf_state.dbw, m_blit_buf_state.dpsm);
|
||||
switch (dir) {
|
||||
case 0: { // host->local
|
||||
fmt::print("-- FROM EE\n");
|
||||
auto dst_tex = get_tex_func("dst", m_blit_buf_state.dbp);
|
||||
// ASSERT_MSG(false, "nyi trxdir host->local");
|
||||
} break;
|
||||
case 1: { // local->host
|
||||
fmt::print("-- FROM GS\n");
|
||||
auto src_tex = get_tex_func("src", m_blit_buf_state.sbp);
|
||||
// ASSERT_MSG(false, "nyi trxdir local->host");
|
||||
} break;
|
||||
case 2: { // local->local
|
||||
fmt::print("-- GS <-> GS\n");
|
||||
auto src_tex = get_tex_func("src", m_blit_buf_state.sbp);
|
||||
auto dst_tex = get_tex_func("dst", m_blit_buf_state.dbp);
|
||||
} break;
|
||||
case 3: // disable
|
||||
fmt::print("-- HUH???\n");
|
||||
ASSERT_MSG(false, "nyi trxdir disable");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void DirectRenderer::handle_tex1_1(u64 val) {
|
||||
GsTex1 reg(val);
|
||||
// for now, we aren't going to handle mipmapping. I don't think it's used with direct.
|
||||
@@ -1018,6 +1146,9 @@ void DirectRenderer::handle_xyzf2_common(u32 x,
|
||||
bool fge = m_prim_gl_state.fogging_enable;
|
||||
bool use_uv = m_prim_gl_state.use_uv;
|
||||
|
||||
math::Vector<float, 4> scissor(m_scissor.scax0, m_scissor.scax1, m_scissor.scay0,
|
||||
m_scissor.scay1);
|
||||
|
||||
switch (m_prim_building.kind) {
|
||||
case GsPrim::Kind::SPRITE: {
|
||||
if (m_prim_building.building_idx == 2) {
|
||||
@@ -1042,12 +1173,18 @@ void DirectRenderer::handle_xyzf2_common(u32 x,
|
||||
auto& corner3_rgba = corner2_rgba;
|
||||
auto& corner4_rgba = corner2_rgba;
|
||||
|
||||
m_prim_buffer.push(corner1_rgba, corner1_vert, corner1_stq, 0, tcc, decal, fge, use_uv);
|
||||
m_prim_buffer.push(corner3_rgba, corner3_vert, corner3_stq, 0, tcc, decal, fge, use_uv);
|
||||
m_prim_buffer.push(corner2_rgba, corner2_vert, corner2_stq, 0, tcc, decal, fge, use_uv);
|
||||
m_prim_buffer.push(corner2_rgba, corner2_vert, corner2_stq, 0, tcc, decal, fge, use_uv);
|
||||
m_prim_buffer.push(corner4_rgba, corner4_vert, corner4_stq, 0, tcc, decal, fge, use_uv);
|
||||
m_prim_buffer.push(corner1_rgba, corner1_vert, corner1_stq, 0, tcc, decal, fge, use_uv);
|
||||
m_prim_buffer.push(corner1_rgba, corner1_vert, corner1_stq, scissor, 0, tcc, decal, fge,
|
||||
use_uv);
|
||||
m_prim_buffer.push(corner3_rgba, corner3_vert, corner3_stq, scissor, 0, tcc, decal, fge,
|
||||
use_uv);
|
||||
m_prim_buffer.push(corner2_rgba, corner2_vert, corner2_stq, scissor, 0, tcc, decal, fge,
|
||||
use_uv);
|
||||
m_prim_buffer.push(corner2_rgba, corner2_vert, corner2_stq, scissor, 0, tcc, decal, fge,
|
||||
use_uv);
|
||||
m_prim_buffer.push(corner4_rgba, corner4_vert, corner4_stq, scissor, 0, tcc, decal, fge,
|
||||
use_uv);
|
||||
m_prim_buffer.push(corner1_rgba, corner1_vert, corner1_stq, scissor, 0, tcc, decal, fge,
|
||||
use_uv);
|
||||
m_prim_building.building_idx = 0;
|
||||
}
|
||||
} break;
|
||||
@@ -1063,7 +1200,8 @@ void DirectRenderer::handle_xyzf2_common(u32 x,
|
||||
if (advance) {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[i], m_prim_building.building_vert[i],
|
||||
m_prim_building.building_stq[i], tex_unit, tcc, decal, fge, use_uv);
|
||||
m_prim_building.building_stq[i], scissor, tex_unit, tcc, decal, fge,
|
||||
use_uv);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1075,7 +1213,8 @@ void DirectRenderer::handle_xyzf2_common(u32 x,
|
||||
m_prim_building.building_idx = 0;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[i], m_prim_building.building_vert[i],
|
||||
m_prim_building.building_stq[i], tex_unit, tcc, decal, fge, use_uv);
|
||||
m_prim_building.building_stq[i], scissor, tex_unit, tcc, decal, fge,
|
||||
use_uv);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1091,7 +1230,8 @@ void DirectRenderer::handle_xyzf2_common(u32 x,
|
||||
}
|
||||
for (int i = 0; i < 3; i++) {
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[i], m_prim_building.building_vert[i],
|
||||
m_prim_building.building_stq[i], tex_unit, tcc, decal, fge, use_uv);
|
||||
m_prim_building.building_stq[i], scissor, tex_unit, tcc, decal, fge,
|
||||
use_uv);
|
||||
}
|
||||
}
|
||||
} break;
|
||||
@@ -1116,13 +1256,19 @@ void DirectRenderer::handle_xyzf2_common(u32 x,
|
||||
math::Vector<u32, 4> di{d.x(), d.y(), d.z(), 0};
|
||||
|
||||
// ACB:
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[0], ai, {}, 0, false, false, false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[0], ci, {}, 0, false, false, false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[1], bi, {}, 0, false, false, false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[0], ai, {}, scissor, 0, false, false,
|
||||
false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[0], ci, {}, scissor, 0, false, false,
|
||||
false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[1], bi, {}, scissor, 0, false, false,
|
||||
false, false);
|
||||
// b c d
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[1], bi, {}, 0, false, false, false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[0], ci, {}, 0, false, false, false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[1], di, {}, 0, false, false, false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[1], bi, {}, scissor, 0, false, false,
|
||||
false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[0], ci, {}, scissor, 0, false, false,
|
||||
false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[1], di, {}, scissor, 0, false, false,
|
||||
false, false);
|
||||
//
|
||||
|
||||
m_prim_building.building_idx = 0;
|
||||
@@ -1157,19 +1303,19 @@ void DirectRenderer::handle_xyzf2_common(u32 x,
|
||||
math::Vector<u32, 4> di{d.x(), d.y(), d.z(), 0};
|
||||
|
||||
// ACB:
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[0], ai, {}, 0, false, false, false,
|
||||
false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[0], ci, {}, 0, false, false, false,
|
||||
false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[1], bi, {}, 0, false, false, false,
|
||||
false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[0], ai, {}, scissor, 0, false, false,
|
||||
false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[0], ci, {}, scissor, 0, false, false,
|
||||
false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[1], bi, {}, scissor, 0, false, false,
|
||||
false, false);
|
||||
// b c d
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[1], bi, {}, 0, false, false, false,
|
||||
false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[0], ci, {}, 0, false, false, false,
|
||||
false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[1], di, {}, 0, false, false, false,
|
||||
false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[1], bi, {}, scissor, 0, false, false,
|
||||
false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[0], ci, {}, scissor, 0, false, false,
|
||||
false, false);
|
||||
m_prim_buffer.push(m_prim_building.building_rgba[1], di, {}, scissor, 0, false, false,
|
||||
false, false);
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -1237,7 +1383,8 @@ DirectRenderer::PrimitiveBuffer::PrimitiveBuffer(int max_triangles) {
|
||||
|
||||
void DirectRenderer::PrimitiveBuffer::push(const math::Vector<u8, 4>& rgba,
|
||||
const math::Vector<u32, 4>& vert,
|
||||
const math::Vector<float, 3>& st,
|
||||
const math::Vector<float, 3>& stq,
|
||||
const math::Vector<float, 4>& scissor,
|
||||
int unit,
|
||||
bool tcc,
|
||||
bool decal,
|
||||
@@ -1251,11 +1398,12 @@ void DirectRenderer::PrimitiveBuffer::push(const math::Vector<u8, 4>& rgba,
|
||||
v.xyzf[1] += y_off;
|
||||
v.xyzf[2] = (float)vert[2] / (float)0xffffff;
|
||||
v.xyzf[3] = (float)vert[3];
|
||||
v.stq = st;
|
||||
v.stq = stq;
|
||||
v.tex_unit = unit;
|
||||
v.tcc = tcc;
|
||||
v.decal = decal;
|
||||
v.fog_enable = fog_enable;
|
||||
v.use_uv = use_uv;
|
||||
v.scissor = scissor;
|
||||
vert_count++;
|
||||
}
|
||||
|
||||
@@ -87,6 +87,7 @@ class DirectRenderer : public BucketRenderer {
|
||||
|
||||
protected:
|
||||
virtual void handle_frame(u64 val, SharedRenderState* render_state, ScopedProfilerNode& prof);
|
||||
void handle_scissor(u64 val);
|
||||
void handle_zbuf1(u64 val, SharedRenderState* render_state, ScopedProfilerNode& prof);
|
||||
void handle_test1(u64 val, SharedRenderState* render_state, ScopedProfilerNode& prof);
|
||||
void handle_alpha1(u64 val, SharedRenderState* render_state, ScopedProfilerNode& prof);
|
||||
@@ -96,6 +97,10 @@ class DirectRenderer : public BucketRenderer {
|
||||
void handle_tex1_1(u64 val);
|
||||
void handle_texa(u64 val, SharedRenderState* render_state, ScopedProfilerNode& prof);
|
||||
void handle_xyoffset(u64 val);
|
||||
void handle_bitbltbuf(u64 val);
|
||||
void handle_trxpos(u64 val);
|
||||
void handle_trxreg(u64 val);
|
||||
void handle_trxdir(u64 dir, SharedRenderState* render_state, ScopedProfilerNode& prof);
|
||||
void handle_xyzf2_common(u32 x,
|
||||
u32 y,
|
||||
u32 z,
|
||||
@@ -220,7 +225,9 @@ class DirectRenderer : public BucketRenderer {
|
||||
u8 decal;
|
||||
u8 fog_enable;
|
||||
u8 use_uv;
|
||||
math::Vector<u8, 27> pad;
|
||||
math::Vector<u8, 11> __pad;
|
||||
// this can be simplified to use gs coords, if needed
|
||||
math::Vector<float, 4> scissor;
|
||||
};
|
||||
static_assert(sizeof(Vertex) == 64);
|
||||
static_assert(offsetof(Vertex, tex_unit) == 32);
|
||||
@@ -237,6 +244,7 @@ class DirectRenderer : public BucketRenderer {
|
||||
void push(const math::Vector<u8, 4>& rgba,
|
||||
const math::Vector<u32, 4>& vert,
|
||||
const math::Vector<float, 3>& stq,
|
||||
const math::Vector<float, 4>& scissor,
|
||||
int unit,
|
||||
bool tcc,
|
||||
bool decal,
|
||||
@@ -244,6 +252,34 @@ class DirectRenderer : public BucketRenderer {
|
||||
bool use_uv);
|
||||
} m_prim_buffer;
|
||||
|
||||
// the scissor state tends to be shared across buckets, so it is static here
|
||||
static struct ScissorState {
|
||||
u16 scax0 = 0, scay0 = 0;
|
||||
u16 scax1 = 0, scay1 = 0;
|
||||
} m_scissor;
|
||||
// however the toggle for it is per-bucket
|
||||
bool m_scissor_enable = false;
|
||||
|
||||
struct BufferBlitState {
|
||||
// used to keep track of blit progress
|
||||
u8 expect = 0;
|
||||
|
||||
// blit buffer source+dest settings
|
||||
u16 sbp = 0, dbp = 0;
|
||||
u8 sbw = 0, dbw = 0;
|
||||
u8 spsm = 0, dpsm = 0;
|
||||
// transfer pos
|
||||
u16 ssax = 0, dsax = 0;
|
||||
u16 ssay = 0, dsay = 0;
|
||||
// transfer region
|
||||
u16 width = 0, height = 0;
|
||||
// transfer dir
|
||||
u8 pixel_dir = 0;
|
||||
|
||||
// gif IMAGE transfer size
|
||||
u16 qwc = 0;
|
||||
} m_blit_buf_state;
|
||||
|
||||
struct {
|
||||
GLuint vertex_buffer;
|
||||
GLuint vao;
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "common/log/log.h"
|
||||
#include "common/util/FileUtil.h"
|
||||
|
||||
#include "game/graphics/opengl_renderer/BlitDisplays.h"
|
||||
#include "game/graphics/opengl_renderer/DepthCue.h"
|
||||
#include "game/graphics/opengl_renderer/DirectRenderer.h"
|
||||
#include "game/graphics/opengl_renderer/EyeRenderer.h"
|
||||
@@ -32,7 +33,6 @@
|
||||
|
||||
namespace {
|
||||
std::string g_current_render;
|
||||
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -97,6 +97,7 @@ void OpenGLRenderer::init_bucket_renderers_jak2() {
|
||||
|
||||
// 0
|
||||
init_bucket_renderer<VisDataHandler>("vis", BucketCategory::OTHER, BucketId::BUCKET_2);
|
||||
init_bucket_renderer<BlitDisplays>("blit", BucketCategory::OTHER, BucketId::BUCKET_3);
|
||||
init_bucket_renderer<TextureUploadHandler>("tex-lcom-sky-pre", BucketCategory::TEX,
|
||||
BucketId::TEX_LCOM_SKY_PRE);
|
||||
init_bucket_renderer<DirectRenderer>("sky-draw", BucketCategory::OTHER, BucketId::SKY_DRAW, 1024);
|
||||
@@ -492,6 +493,125 @@ void OpenGLRenderer::init_bucket_renderers_jak1() {
|
||||
m_render_state.loader->load_common(*m_render_state.texture_pool, "GAME");
|
||||
}
|
||||
|
||||
namespace {
|
||||
Fbo make_fbo(int w, int h, int msaa, bool make_zbuf_and_stencil) {
|
||||
Fbo result;
|
||||
bool use_multisample = msaa > 1;
|
||||
|
||||
// make framebuffer object
|
||||
glGenFramebuffers(1, &result.fbo_id);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, result.fbo_id);
|
||||
result.valid = true;
|
||||
|
||||
// make texture that will hold the colors of the framebuffer
|
||||
GLuint tex;
|
||||
glGenTextures(1, &tex);
|
||||
result.tex_id = tex;
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
if (use_multisample) {
|
||||
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, tex);
|
||||
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, msaa, GL_RGBA8, w, h, GL_TRUE);
|
||||
} else {
|
||||
glBindTexture(GL_TEXTURE_2D, tex);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
||||
}
|
||||
// make depth and stencil buffers that will hold the... depth and stencil buffers
|
||||
if (make_zbuf_and_stencil) {
|
||||
GLuint zbuf;
|
||||
glGenRenderbuffers(1, &zbuf);
|
||||
result.zbuf_stencil_id = zbuf;
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, zbuf);
|
||||
if (use_multisample) {
|
||||
glRenderbufferStorageMultisample(GL_RENDERBUFFER, msaa, GL_DEPTH24_STENCIL8, w, h);
|
||||
} else {
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, w, h);
|
||||
}
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, zbuf);
|
||||
}
|
||||
// attach texture to framebuffer as target for colors
|
||||
|
||||
if (use_multisample) {
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, tex, 0);
|
||||
} else {
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0);
|
||||
}
|
||||
|
||||
GLenum render_targets[1] = {GL_COLOR_ATTACHMENT0};
|
||||
glDrawBuffers(1, render_targets);
|
||||
auto status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
||||
|
||||
if (status != GL_FRAMEBUFFER_COMPLETE) {
|
||||
lg::error("Failed to setup framebuffer: {} {} {} {}\n", w, h, msaa, make_zbuf_and_stencil);
|
||||
switch (status) {
|
||||
case GL_FRAMEBUFFER_UNDEFINED:
|
||||
printf("GL_FRAMEBUFFER_UNDEFINED\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
|
||||
printf("GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
|
||||
printf("GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER:
|
||||
printf("GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER:
|
||||
printf("GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_UNSUPPORTED:
|
||||
printf("GL_FRAMEBUFFER_UNSUPPORTED\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:
|
||||
printf("GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS:
|
||||
printf("GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS\n");
|
||||
break;
|
||||
}
|
||||
ASSERT(false);
|
||||
}
|
||||
|
||||
result.multisample_count = msaa;
|
||||
result.multisampled = use_multisample;
|
||||
result.is_window = false;
|
||||
result.width = w;
|
||||
result.height = h;
|
||||
|
||||
return result;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
void OpenGLRenderer::blit_display() {
|
||||
auto& back = m_fbo_state.resources.back_buffer;
|
||||
if (!back.valid || !back.matches(*m_fbo_state.render_fbo)) {
|
||||
back.clear();
|
||||
back = make_fbo(m_fbo_state.render_fbo->width, m_fbo_state.render_fbo->height, 1, false);
|
||||
}
|
||||
|
||||
Fbo* window_blit_src = nullptr;
|
||||
if (m_fbo_state.resources.resolve_buffer.valid) {
|
||||
// since this is called after do_pcrtc_effects, the resolve buffer is already made
|
||||
window_blit_src = &m_fbo_state.resources.resolve_buffer;
|
||||
} else {
|
||||
window_blit_src = m_fbo_state.render_fbo;
|
||||
}
|
||||
|
||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, window_blit_src->fbo_id);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, back.fbo_id);
|
||||
glBlitFramebuffer(0, // srcX0
|
||||
0, // srcY0
|
||||
window_blit_src->width, // srcX1
|
||||
window_blit_src->height, // srcY1
|
||||
0, // dstX0
|
||||
0, // dstY0
|
||||
back.width, // dstX1
|
||||
back.height, // dstY1
|
||||
GL_COLOR_BUFFER_BIT, // mask
|
||||
GL_LINEAR // filter
|
||||
);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
}
|
||||
|
||||
/*!
|
||||
* Main render function. This is called from the gfx loop with the chain passed from the game.
|
||||
*/
|
||||
@@ -535,6 +655,12 @@ void OpenGLRenderer::render(DmaFollower dma, const RenderOptions& settings) {
|
||||
}
|
||||
}
|
||||
|
||||
// blit framebuffer so that it can be used as a texture by the game later
|
||||
{
|
||||
auto prof = m_profiler.root()->make_scoped_child("blit-display");
|
||||
blit_display();
|
||||
}
|
||||
|
||||
m_last_pmode_alp = settings.pmode_alp_register;
|
||||
|
||||
if (settings.draw_render_debug_window) {
|
||||
@@ -636,94 +762,6 @@ void OpenGLRenderer::draw_renderer_selection_window() {
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
namespace {
|
||||
Fbo make_fbo(int w, int h, int msaa, bool make_zbuf_and_stencil) {
|
||||
Fbo result;
|
||||
bool use_multisample = msaa > 1;
|
||||
|
||||
// make framebuffer object
|
||||
glGenFramebuffers(1, &result.fbo_id);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, result.fbo_id);
|
||||
result.valid = true;
|
||||
|
||||
// make texture that will hold the colors of the framebuffer
|
||||
GLuint tex;
|
||||
glGenTextures(1, &tex);
|
||||
result.tex_id = tex;
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
if (use_multisample) {
|
||||
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, tex);
|
||||
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, msaa, GL_RGBA8, w, h, GL_TRUE);
|
||||
} else {
|
||||
glBindTexture(GL_TEXTURE_2D, tex);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
||||
}
|
||||
// make depth and stencil buffers that will hold the... depth and stencil buffers
|
||||
if (make_zbuf_and_stencil) {
|
||||
GLuint zbuf;
|
||||
glGenRenderbuffers(1, &zbuf);
|
||||
result.zbuf_stencil_id = zbuf;
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, zbuf);
|
||||
if (use_multisample) {
|
||||
glRenderbufferStorageMultisample(GL_RENDERBUFFER, msaa, GL_DEPTH24_STENCIL8, w, h);
|
||||
} else {
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, w, h);
|
||||
}
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, zbuf);
|
||||
}
|
||||
// attach texture to framebuffer as target for colors
|
||||
|
||||
if (use_multisample) {
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, tex, 0);
|
||||
} else {
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0);
|
||||
}
|
||||
|
||||
GLenum render_targets[1] = {GL_COLOR_ATTACHMENT0};
|
||||
glDrawBuffers(1, render_targets);
|
||||
auto status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
||||
|
||||
if (status != GL_FRAMEBUFFER_COMPLETE) {
|
||||
lg::error("Failed to setup framebuffer: {} {} {} {}\n", w, h, msaa, make_zbuf_and_stencil);
|
||||
switch (status) {
|
||||
case GL_FRAMEBUFFER_UNDEFINED:
|
||||
printf("GL_FRAMEBUFFER_UNDEFINED\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
|
||||
printf("GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
|
||||
printf("GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER:
|
||||
printf("GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER:
|
||||
printf("GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_UNSUPPORTED:
|
||||
printf("GL_FRAMEBUFFER_UNSUPPORTED\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:
|
||||
printf("GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE\n");
|
||||
break;
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS:
|
||||
printf("GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS\n");
|
||||
break;
|
||||
}
|
||||
ASSERT(false);
|
||||
}
|
||||
|
||||
result.multisample_count = msaa;
|
||||
result.multisampled = use_multisample;
|
||||
result.is_window = false;
|
||||
result.width = w;
|
||||
result.height = h;
|
||||
|
||||
return result;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
/*!
|
||||
* Pre-render frame setup.
|
||||
*/
|
||||
@@ -826,6 +864,7 @@ void OpenGLRenderer::setup_frame(const RenderOptions& settings) {
|
||||
}
|
||||
|
||||
m_render_state.render_fb = m_fbo_state.render_fbo->fbo_id;
|
||||
m_render_state.back_fbo = &m_fbo_state.resources.back_buffer;
|
||||
|
||||
if (m_render_state.draw_region_w <= 0 || m_render_state.draw_region_h <= 0) {
|
||||
// trying to draw to 0 size region... opengl doesn't like this.
|
||||
|
||||
@@ -71,6 +71,10 @@ struct Fbo {
|
||||
return valid && width == w && height == h && effective_msaa == msaa;
|
||||
}
|
||||
|
||||
bool matches(const Fbo& other) const {
|
||||
return matches(other.width, other.height, other.multisample_count);
|
||||
}
|
||||
|
||||
// Free opengl resources, if we have any.
|
||||
void clear() {
|
||||
if (valid) {
|
||||
@@ -116,6 +120,7 @@ class OpenGLRenderer {
|
||||
void dispatch_buckets_jak2(DmaFollower dma, ScopedProfilerNode& prof, bool sync_after_buckets);
|
||||
|
||||
void do_pcrtc_effects(float alp, SharedRenderState* render_state, ScopedProfilerNode& prof);
|
||||
void blit_display();
|
||||
void init_bucket_renderers_jak1();
|
||||
void init_bucket_renderers_jak2();
|
||||
void draw_renderer_selection_window();
|
||||
@@ -156,6 +161,7 @@ class OpenGLRenderer {
|
||||
Fbo window; // provided by glfw
|
||||
Fbo render_buffer; // temporary buffer to render to
|
||||
Fbo resolve_buffer; // temporary buffer to resolve to
|
||||
Fbo back_buffer; // the previous buffer we rendered
|
||||
} resources;
|
||||
|
||||
Fbo* render_fbo = nullptr; // the selected fbo from the three above to use for rendering
|
||||
|
||||
@@ -18,6 +18,7 @@ Shader::Shader(const std::string& shader_name, GameVersion version) : m_name(sha
|
||||
|
||||
vert_src = std::regex_replace(vert_src, std::regex("HEIGHT_SCALE"), height_scale);
|
||||
vert_src = std::regex_replace(vert_src, std::regex("SCISSOR_HEIGHT"), scissor_height);
|
||||
frag_src = std::regex_replace(frag_src, std::regex("SCISSOR_HEIGHT"), scissor_height);
|
||||
vert_src = std::regex_replace(vert_src, std::regex("SCISSOR_ADJUST"), "(" + scissor_adjust + ")");
|
||||
|
||||
m_vert_shader = glCreateShader(GL_VERTEX_SHADER);
|
||||
|
||||
@@ -5,11 +5,15 @@ out vec4 color;
|
||||
in vec4 fragment_color;
|
||||
in vec3 tex_coord;
|
||||
in flat uint use_uv;
|
||||
in vec4 gs_scissor;
|
||||
uniform float alpha_reject;
|
||||
uniform float color_mult;
|
||||
uniform float alpha_mult;
|
||||
uniform float alpha_sub;
|
||||
uniform float ta0;
|
||||
uniform int scissor_enable;
|
||||
// game width, game height, viewport width, viewport height
|
||||
uniform vec4 game_sizes;
|
||||
|
||||
uniform vec4 fog_color;
|
||||
|
||||
@@ -63,6 +67,19 @@ vec4 sample_tex_px(vec2 coordf, uint unit) {
|
||||
}
|
||||
|
||||
void main() {
|
||||
if (scissor_enable == 1) {
|
||||
float x = gl_FragCoord.x;
|
||||
float y = gl_FragCoord.y;
|
||||
float w = (game_sizes.z / game_sizes.x);
|
||||
float h = (game_sizes.w / game_sizes.y);
|
||||
float scax0 = gs_scissor.x * w + 0.5;
|
||||
float scax1 = gs_scissor.y * w + 0.5;
|
||||
float scay0 = (game_sizes.y - gs_scissor.w) * h + 0.5;
|
||||
float scay1 = (game_sizes.y - gs_scissor.z) * h + 0.5;
|
||||
if (x < scax0 || x > scax1) discard;
|
||||
if (y < scay0 || y > scay1) discard;
|
||||
}
|
||||
|
||||
vec4 T0;
|
||||
if (use_uv == 1) {
|
||||
T0 = sample_tex_px(tex_coord.xy, tex_info.x);
|
||||
|
||||
@@ -3,10 +3,12 @@
|
||||
layout (location = 0) in vec4 position_in;
|
||||
layout (location = 1) in vec4 rgba_in;
|
||||
layout (location = 2) in vec3 tex_coord_in;
|
||||
layout (location = 5) in vec4 gs_scissor_in;
|
||||
|
||||
out vec4 fragment_color;
|
||||
out vec3 tex_coord;
|
||||
out float fog;
|
||||
out vec4 gs_scissor;
|
||||
|
||||
// putting all texture info stuff here so it's easier to copy-paste
|
||||
layout (location = 3) in uvec4 tex_info_in;
|
||||
@@ -29,4 +31,5 @@ void main() {
|
||||
tex_info = tex_info_in;
|
||||
fog = 255 - position_in.w;
|
||||
use_uv = use_uv_in;
|
||||
gs_scissor = gs_scissor_in;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ void main() {
|
||||
color *= 2;
|
||||
|
||||
// correct texture coordinates
|
||||
vec2 texture_coords = vec2(tex_coord.x, (1.0f - tex_coord.y) - (1 - (448.0/512.0)) / 2);
|
||||
vec2 texture_coords = vec2(tex_coord.x, (1.0f - tex_coord.y) - (1 - (SCISSOR_HEIGHT / 512.0)) / 2);
|
||||
|
||||
// sample framebuffer texture
|
||||
out_color = color * texture(framebuffer_tex, texture_coords);
|
||||
|
||||
@@ -21,6 +21,7 @@ void main() {
|
||||
// correct xy scale
|
||||
transformed.x /= (256);
|
||||
transformed.y /= -(128);
|
||||
transformed.y *= HEIGHT_SCALE;
|
||||
|
||||
gl_Position = transformed;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ void main() {
|
||||
color *= 2;
|
||||
|
||||
// correct texture coordinates
|
||||
vec2 texture_coords = vec2(tex_coord.x, (1.0f - tex_coord.y) - (1 - (448.0/512.0)) / 2);
|
||||
vec2 texture_coords = vec2(tex_coord.x, (1.0f - tex_coord.y) - (1 - (SCISSOR_HEIGHT / 512.0)) / 2);
|
||||
|
||||
// sample framebuffer texture
|
||||
out_color = color * texture(framebuffer_tex, texture_coords);
|
||||
|
||||
@@ -49,6 +49,7 @@ void main() {
|
||||
// correct xy scale
|
||||
transformed.x /= (256);
|
||||
transformed.y /= -(128);
|
||||
transformed.y *= HEIGHT_SCALE;
|
||||
|
||||
gl_Position = transformed;
|
||||
}
|
||||
|
||||
@@ -143,6 +143,12 @@ void Sprite3::handle_sprite_frame_setup(DmaFollower& dma,
|
||||
auto direct_data = dma.read_and_advance();
|
||||
ASSERT(direct_data.size_bytes == 3 * 16);
|
||||
memcpy(m_sprite_direct_setup, direct_data.data, 3 * 16);
|
||||
ASSERT(m_sprite_direct_setup[0] == 0x2000000000008001);
|
||||
ASSERT(m_sprite_direct_setup[1] == 0xEEEEEEEEEEEEEEEE);
|
||||
ASSERT(m_sprite_direct_setup[2] == 0x000000000005126B);
|
||||
ASSERT(m_sprite_direct_setup[3] == 0x0000000000000047);
|
||||
ASSERT(m_sprite_direct_setup[4] == 0x0000000000000005);
|
||||
ASSERT(m_sprite_direct_setup[5] == 0x0000000000000008);
|
||||
|
||||
// next would be the program, but it's 0 size on the PC and isn't sent.
|
||||
|
||||
@@ -165,16 +171,6 @@ void Sprite3::handle_sprite_frame_setup(DmaFollower& dma,
|
||||
m_frame_data.from_jak1(jak1_data);
|
||||
} break;
|
||||
case GameVersion::Jak2: {
|
||||
// in jak 2, the DirectRenderer DMA comes right before the actual sprite data(?)
|
||||
// TODO might be different when distorter is running
|
||||
m_direct.reset_state();
|
||||
while (dma.current_tag().qwc != (int)sizeof(SpriteFrameData) / 16) {
|
||||
auto pre_frame_data = dma.read_and_advance();
|
||||
m_direct.render_vif(pre_frame_data.vif0(), pre_frame_data.vif1(), pre_frame_data.data,
|
||||
pre_frame_data.size_bytes, render_state, prof);
|
||||
}
|
||||
m_direct.flush_pending(render_state, prof);
|
||||
|
||||
render_state->shaders[ShaderId::SPRITE3].activate();
|
||||
auto frame_data = dma.read_and_advance();
|
||||
ASSERT(frame_data.size_bytes == (int)sizeof(SpriteFrameData)); // very cool
|
||||
@@ -293,6 +289,27 @@ void Sprite3::render_2d_group0(DmaFollower& dma,
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* Run the pre-sprite directrenderer.
|
||||
*/
|
||||
bool Sprite3::render_direct(DmaFollower& dma,
|
||||
SharedRenderState* render_state,
|
||||
ScopedProfilerNode& prof) {
|
||||
m_direct.reset_state();
|
||||
while (dma.current_tag().qwc != 7 && dma.current_tag_offset() != render_state->next_bucket) {
|
||||
auto direct_data = dma.read_and_advance();
|
||||
m_direct.render_vif(direct_data.vif0(), direct_data.vif1(), direct_data.data,
|
||||
direct_data.size_bytes, render_state, prof);
|
||||
}
|
||||
m_direct.flush_pending(render_state, prof);
|
||||
|
||||
// if sprites are off, after all the directrenderer dma, there is nothing left and we must exit
|
||||
if (dma.current_tag_offset() == render_state->next_bucket) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Sprite3::render_fake_shadow(DmaFollower& dma) {
|
||||
// TODO
|
||||
// nop + flushe
|
||||
@@ -387,18 +404,26 @@ void Sprite3::render_jak2(DmaFollower& dma,
|
||||
ScopedProfilerNode& prof) {
|
||||
m_debug_stats = {};
|
||||
auto data0 = dma.read_and_advance();
|
||||
ASSERT(data0.vif1() == 0 || data0.vifcode1().kind == VifCode::Kind::NOP);
|
||||
ASSERT(data0.vif0() == 0 || data0.vifcode0().kind == VifCode::Kind::MARK);
|
||||
ASSERT(data0.vif1() == 0 || data0.vifcode1().kind == VifCode::Kind::NOP);
|
||||
ASSERT(data0.size_bytes == 0);
|
||||
|
||||
if (dma.current_tag_offset() == render_state->next_bucket) {
|
||||
return;
|
||||
}
|
||||
|
||||
// First is the distorter (temporarily disabled for jak 2)
|
||||
// Before anything else, some directrenderer DMA might have been sent
|
||||
{
|
||||
// auto child = prof.make_scoped_child("distorter");
|
||||
// render_distorter(dma, render_state, child);
|
||||
auto child = prof.make_scoped_child("direct");
|
||||
if (render_direct(dma, render_state, child)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// First is the distorter
|
||||
{
|
||||
auto child = prof.make_scoped_child("distorter");
|
||||
render_distorter(dma, render_state, child);
|
||||
}
|
||||
|
||||
// next, the normal sprite stuff
|
||||
@@ -468,15 +493,12 @@ void Sprite3::render_jak1(DmaFollower& dma,
|
||||
return;
|
||||
}
|
||||
|
||||
// Before anything else, some directrenderer DMA might have been sent
|
||||
{
|
||||
// Some DirectRenderer DMA is sent before everything else from the progress menu
|
||||
m_direct.reset_state();
|
||||
while (dma.current_tag().qwc != 7) {
|
||||
auto direct_data = dma.read_and_advance();
|
||||
m_direct.render_vif(direct_data.vif0(), direct_data.vif1(), direct_data.data,
|
||||
direct_data.size_bytes, render_state, prof);
|
||||
auto child = prof.make_scoped_child("direct");
|
||||
if (render_direct(dma, render_state, child)) {
|
||||
return;
|
||||
}
|
||||
m_direct.flush_pending(render_state, prof);
|
||||
}
|
||||
|
||||
// First is the distorter
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#include "common/dma/gs.h"
|
||||
#include "common/math/Vector.h"
|
||||
#include "common/versions/versions.h"
|
||||
|
||||
#include "game/graphics/opengl_renderer/BucketRenderer.h"
|
||||
#include "game/graphics/opengl_renderer/DirectRenderer.h"
|
||||
@@ -27,10 +28,11 @@ class Sprite3 : public BucketRenderer {
|
||||
void opengl_setup_normal();
|
||||
void opengl_setup_distort();
|
||||
|
||||
bool render_direct(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof);
|
||||
void render_distorter(DmaFollower& dma,
|
||||
SharedRenderState* render_state,
|
||||
ScopedProfilerNode& prof);
|
||||
void distort_dma(DmaFollower& dma, ScopedProfilerNode& prof);
|
||||
void distort_dma(GameVersion version, DmaFollower& dma, ScopedProfilerNode& prof);
|
||||
void distort_setup(ScopedProfilerNode& prof);
|
||||
void distort_setup_instanced(ScopedProfilerNode& prof);
|
||||
void distort_draw(SharedRenderState* render_state, ScopedProfilerNode& prof);
|
||||
@@ -148,7 +150,7 @@ class Sprite3 : public BucketRenderer {
|
||||
std::vector<SpriteDistortVertex> m_sprite_distorter_vertices_instanced;
|
||||
std::map<int, std::vector<SpriteDistortInstanceData>> m_sprite_distorter_instances_by_res;
|
||||
|
||||
u8 m_sprite_direct_setup[3 * 16];
|
||||
u64 m_sprite_direct_setup[3 * 16 / 8];
|
||||
SpriteFrameData m_frame_data; // qwa: 980
|
||||
Sprite3DMatrixData m_3d_matrix_data;
|
||||
SpriteHudMatrixData m_hud_matrix_data;
|
||||
|
||||
@@ -12,7 +12,7 @@ bool looks_like_distort_frame_data(const DmaFollower& dma) {
|
||||
}
|
||||
|
||||
constexpr int SPRITE_RENDERER_MAX_DISTORT_SPRITES =
|
||||
256 * 10; // size of sprite-aux-list in GOAL code * SPRITE_MAX_AMOUNT_MULT
|
||||
256 * 12; // size of sprite-aux-list in GOAL code * SPRITE_MAX_AMOUNT_MULT
|
||||
} // namespace
|
||||
|
||||
void Sprite3::opengl_setup_distort() {
|
||||
@@ -171,7 +171,7 @@ void Sprite3::render_distorter(DmaFollower& dma,
|
||||
// Read DMA
|
||||
{
|
||||
auto prof_node = prof.make_scoped_child("dma");
|
||||
distort_dma(dma, prof_node);
|
||||
distort_dma(render_state->version, dma, prof_node);
|
||||
}
|
||||
|
||||
if (!m_enabled || !m_distort_enable) {
|
||||
@@ -203,7 +203,23 @@ void Sprite3::render_distorter(DmaFollower& dma,
|
||||
/*!
|
||||
* Reads all sprite distort related DMA packets.
|
||||
*/
|
||||
void Sprite3::distort_dma(DmaFollower& dma, ScopedProfilerNode& /*prof*/) {
|
||||
void Sprite3::distort_dma(GameVersion version, DmaFollower& dma, ScopedProfilerNode& /*prof*/) {
|
||||
// set the expected values per game version first
|
||||
int expect_zbp, expect_th;
|
||||
switch (version) {
|
||||
case GameVersion::Jak1:
|
||||
expect_zbp = 0x1c0;
|
||||
expect_th = 8;
|
||||
break;
|
||||
case GameVersion::Jak2:
|
||||
expect_zbp = 0x130;
|
||||
expect_th = 9;
|
||||
break;
|
||||
default:
|
||||
ASSERT(false);
|
||||
return;
|
||||
}
|
||||
|
||||
// First should be the GS setup
|
||||
auto sprite_distorter_direct_setup = dma.read_and_advance();
|
||||
ASSERT(sprite_distorter_direct_setup.vifcode0().kind == VifCode::Kind::NOP);
|
||||
@@ -213,22 +229,22 @@ void Sprite3::distort_dma(DmaFollower& dma, ScopedProfilerNode& /*prof*/) {
|
||||
|
||||
auto gif_tag = m_sprite_distorter_setup.gif_tag;
|
||||
ASSERT(gif_tag.nloop() == 1);
|
||||
ASSERT(gif_tag.eop() == 1);
|
||||
ASSERT(gif_tag.eop() == true);
|
||||
ASSERT(gif_tag.nreg() == 6);
|
||||
ASSERT(gif_tag.reg(0) == GifTag::RegisterDescriptor::AD);
|
||||
|
||||
auto zbuf1 = m_sprite_distorter_setup.zbuf;
|
||||
ASSERT(zbuf1.zbp() == 0x1c0);
|
||||
ASSERT(zbuf1.zbp() == expect_zbp);
|
||||
ASSERT(zbuf1.zmsk() == true);
|
||||
ASSERT(zbuf1.psm() == TextureFormat::PSMZ24);
|
||||
|
||||
auto tex0 = m_sprite_distorter_setup.tex0;
|
||||
ASSERT(tex0.tbw() == 8);
|
||||
ASSERT(tex0.tw() == 9);
|
||||
ASSERT(tex0.th() == 8);
|
||||
ASSERT(tex0.th() == expect_th);
|
||||
|
||||
auto tex1 = m_sprite_distorter_setup.tex1;
|
||||
ASSERT(tex1.mmag() == true);
|
||||
ASSERT(tex1.mmag() == 1);
|
||||
ASSERT(tex1.mmin() == 1);
|
||||
|
||||
auto alpha = m_sprite_distorter_setup.alpha;
|
||||
|
||||
@@ -315,13 +315,14 @@ void TexturePool::draw_debug_window() {
|
||||
int total_displayed_textures = 0;
|
||||
int total_uploaded_textures = 0;
|
||||
ImGui::InputText("texture search", m_regex_input, sizeof(m_regex_input));
|
||||
std::regex regex(m_regex_input[0] ? m_regex_input : ".*");
|
||||
bool use_regex = m_regex_input[0];
|
||||
std::regex regex(use_regex ? m_regex_input : ".*");
|
||||
|
||||
for (size_t i = 0; i < m_textures.size(); i++) {
|
||||
auto& record = m_textures[i];
|
||||
total_textures++;
|
||||
if (record.source) {
|
||||
if (std::regex_search(get_debug_texture_name(record.source->tex_id), regex)) {
|
||||
if (!use_regex || std::regex_search(get_debug_texture_name(record.source->tex_id), regex)) {
|
||||
ImGui::PushID(id++);
|
||||
draw_debug_for_tex(get_debug_texture_name(record.source->tex_id), record.source, i);
|
||||
ImGui::PopID();
|
||||
@@ -350,7 +351,7 @@ void TexturePool::draw_debug_for_tex(const std::string& name, GpuTexture* tex, u
|
||||
} else {
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.8, 0.8, 0.3, 1.0));
|
||||
}
|
||||
if (ImGui::TreeNode(fmt::format("{} {}", name, slot).c_str())) {
|
||||
if (ImGui::TreeNode(fmt::format("{}) {}", slot, name).c_str())) {
|
||||
ImGui::Text("P: %s sz: %d x %d", get_debug_texture_name(tex->tex_id).c_str(), tex->w, tex->h);
|
||||
if (!tex->is_placeholder) {
|
||||
ImGui::Image((void*)tex->gpu_textures.at(0).gl, ImVec2(tex->w, tex->h));
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "common/util/SmallVector.h"
|
||||
#include "common/versions/versions.h"
|
||||
|
||||
#include "game/graphics/pipelines/opengl.h"
|
||||
#include "game/graphics/texture/TextureConverter.h"
|
||||
|
||||
// verify all texture lookups.
|
||||
@@ -140,7 +141,7 @@ class TextureMap {
|
||||
* The lowest level reference to texture data.
|
||||
*/
|
||||
struct TextureData {
|
||||
u64 gl = -1; // the OpenGL texture ID
|
||||
GLuint gl = -1; // the OpenGL texture ID
|
||||
const u8* data = nullptr; // pointer to texture data (owned by the loader)
|
||||
};
|
||||
|
||||
@@ -196,7 +197,7 @@ struct GpuTexture {
|
||||
* source will be non-null and the gpu_texture will be a placeholder that is safe to use.
|
||||
*/
|
||||
struct TextureVRAMReference {
|
||||
u64 gpu_texture = -1; // the OpenGL texture to use when rendering.
|
||||
GLuint gpu_texture = -1; // the OpenGL texture to use when rendering.
|
||||
GpuTexture* source = nullptr;
|
||||
};
|
||||
|
||||
@@ -209,7 +210,7 @@ struct TextureInput {
|
||||
|
||||
PcTextureId id;
|
||||
|
||||
u64 gpu_texture = -1;
|
||||
GLuint gpu_texture = -1;
|
||||
bool common = false;
|
||||
const u8* src_data;
|
||||
u16 w, h;
|
||||
|
||||
@@ -133,7 +133,7 @@ a number of functions require a bunch of annoying casts/mips2c stuff, but are un
|
||||
|
||||
(define *collide-probe-stack* (the-as collide-probe-stack (+ 4192 #x70000000)))
|
||||
|
||||
(define collide-vu0-block (new 'static 'vu-function :length 90 :qlength 45))
|
||||
(define collide-vu0-block (new 'static 'vu-function))
|
||||
|
||||
;; definition for function collide-probe-node
|
||||
;; ERROR: function was not converted to expressions. Cannot decompile.
|
||||
|
||||
@@ -629,68 +629,68 @@ Most functions take a boolean as their first argument. If the boolean is set to
|
||||
(with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) debug-buf))
|
||||
bucket
|
||||
)
|
||||
(let ((p0 (new 'stack 'vector4w)))
|
||||
(let ((p1 (new 'stack 'vector4w)))
|
||||
(set! (-> p0 quad) (-> start quad))
|
||||
(set! (-> p1 quad) (-> end quad))
|
||||
(set! (-> p0 x) (the-as int (* (+ (-> p0 x) 2048) 16)))
|
||||
(set! (-> p0 y) (* -16 (the-as int (- 2048 (the-as int (-> p0 y))))))
|
||||
(set! (-> p0 z) #x7fffff)
|
||||
(set! (-> p1 x) (the-as int (* (+ (-> p1 x) 2048) 16)))
|
||||
(set! (-> p1 y) (* -16 (the-as int (- 2048 (the-as int (-> p1 y))))))
|
||||
(set! (-> p1 z) #x7fffff)
|
||||
(let ((a0-18 (the-as (pointer uint64) (-> buf base))))
|
||||
(let* ((a1-7 buf)
|
||||
(a2-3 (the-as dma-packet (-> a1-7 base)))
|
||||
)
|
||||
(set! (-> a2-3 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> a2-3 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a2-3 vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> a1-7 base) (&+ (the-as pointer a2-3) 16))
|
||||
)
|
||||
(let* ((a1-8 buf)
|
||||
(giftag (the-as gs-gif-tag (-> a1-8 base)))
|
||||
)
|
||||
(set! (-> giftag tag) (new 'static 'gif-tag64
|
||||
:nloop #x1
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type line) :iip #x1 :abe #x1)
|
||||
:nreg #x4
|
||||
)
|
||||
)
|
||||
(set! (-> giftag regs) (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id rgbaq)
|
||||
:regs1 (gif-reg-id xyzf2)
|
||||
:regs2 (gif-reg-id rgbaq)
|
||||
:regs3 (gif-reg-id xyzf2)
|
||||
)
|
||||
)
|
||||
(set! (-> a1-8 base) (&+ (the-as pointer giftag) 16))
|
||||
)
|
||||
(let* ((a1-9 buf)
|
||||
(v0 (the-as vector4w-2 (-> a1-9 base)))
|
||||
)
|
||||
(set! (-> v0 vector 0 quad) (-> color quad))
|
||||
(set! (-> v0 vector 1 quad) (-> p0 quad))
|
||||
(set! (-> a1-9 base) (&+ (the-as pointer v0) 32))
|
||||
)
|
||||
(let* ((a1-10 buf)
|
||||
(v1 (the-as vector4w-2 (-> a1-10 base)))
|
||||
)
|
||||
(set! (-> v1 vector 0 quad) (-> color quad))
|
||||
(set! (-> v1 vector 1 quad) (-> p1 quad))
|
||||
(set! (-> a1-10 base) (&+ (the-as pointer v1) 32))
|
||||
)
|
||||
(let ((a1-14 (/ (the-as int (+ (- -16 (the-as int a0-18)) (the-as int (-> buf base)))) 16)))
|
||||
(cond
|
||||
((nonzero? a1-14)
|
||||
(logior! (-> a0-18 0) (shr (shl a1-14 48) 48))
|
||||
(logior! (-> a0-18 1) (shl (shr (shl a1-14 48) 48) 32))
|
||||
(let ((p0 (new 'stack 'vector4w))
|
||||
(p1 (new 'stack 'vector4w))
|
||||
)
|
||||
(set! (-> p0 quad) (-> start quad))
|
||||
(set! (-> p1 quad) (-> end quad))
|
||||
(set! (-> p0 x) (* (+ (-> p0 x) 2048) 16))
|
||||
(set! (-> p0 y) (* -16 (- 2048 (-> p0 y))))
|
||||
(set! (-> p0 z) #x7fffff)
|
||||
(set! (-> p1 x) (* (+ (-> p1 x) 2048) 16))
|
||||
(set! (-> p1 y) (* -16 (- 2048 (-> p1 y))))
|
||||
(set! (-> p1 z) #x7fffff)
|
||||
(let ((a0-18 (the-as (pointer uint64) (-> buf base))))
|
||||
(let* ((a1-7 buf)
|
||||
(a2-3 (the-as dma-packet (-> a1-7 base)))
|
||||
)
|
||||
(else
|
||||
(set! (-> buf base) a0-18)
|
||||
(set! (-> a2-3 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> a2-3 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a2-3 vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> a1-7 base) (&+ (the-as pointer a2-3) 16))
|
||||
)
|
||||
(let* ((a1-8 buf)
|
||||
(giftag (the-as gs-gif-tag (-> a1-8 base)))
|
||||
)
|
||||
(set! (-> giftag tag) (new 'static 'gif-tag64
|
||||
:nloop #x1
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type line) :iip #x1 :abe #x1)
|
||||
:nreg #x4
|
||||
)
|
||||
)
|
||||
(set! (-> giftag regs) (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id rgbaq)
|
||||
:regs1 (gif-reg-id xyzf2)
|
||||
:regs2 (gif-reg-id rgbaq)
|
||||
:regs3 (gif-reg-id xyzf2)
|
||||
)
|
||||
)
|
||||
(set! (-> a1-8 base) (&+ (the-as pointer giftag) 16))
|
||||
)
|
||||
(let* ((a1-9 buf)
|
||||
(v0 (the-as vector4w-2 (-> a1-9 base)))
|
||||
)
|
||||
(set! (-> v0 vector 0 quad) (-> color quad))
|
||||
(set! (-> v0 vector 1 quad) (-> p0 quad))
|
||||
(set! (-> a1-9 base) (&+ (the-as pointer v0) 32))
|
||||
)
|
||||
(let* ((a1-10 buf)
|
||||
(v1 (the-as vector4w-2 (-> a1-10 base)))
|
||||
)
|
||||
(set! (-> v1 vector 0 quad) (-> color quad))
|
||||
(set! (-> v1 vector 1 quad) (-> p1 quad))
|
||||
(set! (-> a1-10 base) (&+ (the-as pointer v1) 32))
|
||||
)
|
||||
(let ((a1-14 (/ (the-as int (+ (- -16 (the-as int a0-18)) (the-as int (-> buf base)))) 16)))
|
||||
(cond
|
||||
((nonzero? a1-14)
|
||||
(logior! (-> a0-18 0) (shr (shl a1-14 48) 48))
|
||||
(logior! (-> a0-18 1) (shl (shr (shl a1-14 48) 48) 32))
|
||||
)
|
||||
(else
|
||||
(set! (-> buf base) a0-18)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -900,8 +900,8 @@ Most functions take a boolean as their first argument. If the boolean is set to
|
||||
(set! (-> v1-2 pos quad) (-> position quad))
|
||||
(cond
|
||||
(screen-offset
|
||||
(set! (-> v1-2 offset x) (the-as int (-> screen-offset x)))
|
||||
(set! (-> v1-2 offset y) (the-as int (-> screen-offset y)))
|
||||
(set! (-> v1-2 offset x) (-> screen-offset x))
|
||||
(set! (-> v1-2 offset y) (-> screen-offset y))
|
||||
)
|
||||
(else
|
||||
(set! (-> v1-2 offset x) 0)
|
||||
@@ -1759,39 +1759,18 @@ Most functions take a boolean as their first argument. If the boolean is set to
|
||||
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
buf
|
||||
)
|
||||
(let ((v1-16 s4-0))
|
||||
(let ((a0-3 (the-as dma-packet (-> v1-16 base))))
|
||||
(set! (-> a0-3 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-3 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-3 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-16 base) (the-as pointer (the-as dma-packet (&+ a0-3 16))))
|
||||
)
|
||||
)
|
||||
(let ((v1-17 s4-0))
|
||||
(let ((a0-5 (the-as gs-gif-tag (-> v1-17 base))))
|
||||
(set! (-> a0-5 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a0-5 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-17 base) (the-as pointer (the-as gs-gif-tag (&+ a0-5 16))))
|
||||
)
|
||||
)
|
||||
(let ((v1-18 s4-0))
|
||||
(let ((a0-7 (-> v1-18 base)))
|
||||
(set! (-> (the-as (pointer gs-zbuf) a0-7) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-7) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) a0-7) 2) (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-7) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a0-7) 4) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-7) 5) (gs-reg64 alpha-1))
|
||||
(set! (-> v1-18 base) (&+ a0-7 48))
|
||||
)
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-0
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(test-1 (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
)
|
||||
(set! sv-16 (-> s4-0 base))
|
||||
(&+! (-> s4-0 base) 16)
|
||||
(add-boundary-shader (new 'static 'texture-id :index #x3 :page #x70c) s4-0)
|
||||
|
||||
@@ -1600,46 +1600,17 @@
|
||||
(let* ((a0-8 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(a3-3 (-> a0-8 base))
|
||||
)
|
||||
(let* ((t0-0 a0-8)
|
||||
(t1-0 (the-as dma-packet (-> t0-0 base)))
|
||||
)
|
||||
(set! (-> t1-0 dma) (new 'static 'dma-tag :qwc #xa :id (dma-tag-id cnt)))
|
||||
(set! (-> t1-0 vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> t1-0 vif1) (new 'static 'vif-tag :imm #xa :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> t0-0 base) (the-as pointer (&+ t1-0 16)))
|
||||
)
|
||||
(let* ((t0-1 a0-8)
|
||||
(t1-2 (the-as object (-> t0-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t1-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x9))
|
||||
(set! (-> (the-as gs-gif-tag t1-2) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> t0-1 base) (&+ (the-as pointer t1-2) 16))
|
||||
)
|
||||
(let* ((t0-2 a0-8)
|
||||
(t1-4 (-> t0-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) t1-4) 0) arg1)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) t1-4) 2) arg2)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) t1-4) 4) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 5) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer uint64) t1-4) 6) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 7) (gs-reg64 pabe))
|
||||
(set! (-> (the-as (pointer gs-clamp) t1-4) 8)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 9) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) t1-4) 10) (new 'static 'gs-tex0 :tbp0 #x60))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 11) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-texa) t1-4) 12) (new 'static 'gs-texa :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 13) (gs-reg64 texa))
|
||||
(set! (-> (the-as (pointer gs-texclut) t1-4) 14) (new 'static 'gs-texclut :cbw #x4))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 15) (gs-reg64 texclut))
|
||||
(set! (-> (the-as (pointer uint64) t1-4) 16) (the-as uint *fog-color*))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 17) (gs-reg64 fogcol))
|
||||
(set! (-> t0-2 base) (&+ t1-4 144))
|
||||
)
|
||||
(dma-buffer-add-gs-set-flusha a0-8
|
||||
(zbuf-1 arg1)
|
||||
(test-1 arg2)
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(pabe 0)
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(texa (new 'static 'gs-texa :ta1 #x80))
|
||||
(texclut (new 'static 'gs-texclut :cbw #x4))
|
||||
(fogcol *fog-color*)
|
||||
)
|
||||
(let ((a1-18 (the-as object (-> a0-8 base))))
|
||||
(set! (-> (the-as dma-packet a1-18) dma) (new 'static 'dma-tag :id (dma-tag-id next) :addr (-> v1-6 next)))
|
||||
(set! (-> (the-as dma-packet a1-18) vif0) (new 'static 'vif-tag))
|
||||
@@ -1659,46 +1630,17 @@
|
||||
(let* ((a3-2 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(a0-8 (-> a3-2 base))
|
||||
)
|
||||
(let* ((t0-1 a3-2)
|
||||
(t1-0 (the-as dma-packet (-> t0-1 base)))
|
||||
)
|
||||
(set! (-> t1-0 dma) (new 'static 'dma-tag :qwc #xa :id (dma-tag-id cnt)))
|
||||
(set! (-> t1-0 vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> t1-0 vif1) (new 'static 'vif-tag :imm #xa :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> t0-1 base) (the-as pointer (&+ t1-0 16)))
|
||||
)
|
||||
(let* ((t0-2 a3-2)
|
||||
(t1-2 (the-as object (-> t0-2 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t1-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x9))
|
||||
(set! (-> (the-as gs-gif-tag t1-2) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> t0-2 base) (&+ (the-as pointer t1-2) 16))
|
||||
)
|
||||
(let* ((t0-3 a3-2)
|
||||
(t1-4 (-> t0-3 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) t1-4) 0) arg1)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) t1-4) 2) arg2)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) t1-4) 4) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 5) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer uint64) t1-4) 6) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 7) (gs-reg64 pabe))
|
||||
(set! (-> (the-as (pointer gs-clamp) t1-4) 8)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 9) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) t1-4) 10) (new 'static 'gs-tex0 :tbp0 #x60))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 11) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-texa) t1-4) 12) (new 'static 'gs-texa :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 13) (gs-reg64 texa))
|
||||
(set! (-> (the-as (pointer gs-texclut) t1-4) 14) (new 'static 'gs-texclut :cbw #x4))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 15) (gs-reg64 texclut))
|
||||
(set! (-> (the-as (pointer uint64) t1-4) 16) (the-as uint *fog-color*))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 17) (gs-reg64 fogcol))
|
||||
(set! (-> t0-3 base) (&+ t1-4 144))
|
||||
)
|
||||
(dma-buffer-add-gs-set-flusha a3-2
|
||||
(zbuf-1 arg1)
|
||||
(test-1 arg2)
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(pabe 0)
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(texa (new 'static 'gs-texa :ta1 #x80))
|
||||
(texclut (new 'static 'gs-texclut :cbw #x4))
|
||||
(fogcol *fog-color*)
|
||||
)
|
||||
(let ((t0-4 (-> a3-2 base)))
|
||||
(let ((a1-18 (the-as object (-> a3-2 base))))
|
||||
(set! (-> (the-as dma-packet a1-18) dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
|
||||
@@ -353,30 +353,9 @@
|
||||
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(-> obj bucket)
|
||||
)
|
||||
(let ((v1-7 s4-0))
|
||||
(let ((a0-2 (the-as object (-> v1-7 base))))
|
||||
(set! (-> (the-as dma-packet a0-2) dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-2) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-2) vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-7 base) (&+ (the-as pointer a0-2) 16))
|
||||
)
|
||||
)
|
||||
(let ((v1-8 s4-0))
|
||||
(let ((a0-4 (the-as object (-> v1-8 base))))
|
||||
(set! (-> (the-as gs-gif-tag a0-4) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> (the-as gs-gif-tag a0-4) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-8 base) (&+ (the-as pointer a0-4) 16))
|
||||
)
|
||||
)
|
||||
(let ((v1-9 s4-0))
|
||||
(let ((a0-6 (-> v1-9 base)))
|
||||
(set! (-> (the-as (pointer gs-test) a0-6) 0)
|
||||
(new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-6) 1) (gs-reg64 test-1))
|
||||
(set! (-> v1-9 base) (&+ a0-6 16))
|
||||
)
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-0
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always)))
|
||||
)
|
||||
(let ((t1-0 (new 'static 'rgba
|
||||
:r (the int (-> obj color x))
|
||||
:g (the int (-> obj color y))
|
||||
@@ -1599,7 +1578,7 @@
|
||||
)
|
||||
|
||||
;; generate DMA data for doing the main blit
|
||||
; (blit-displays)
|
||||
(blit-displays)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; END of normal frame
|
||||
|
||||
@@ -1215,7 +1215,7 @@
|
||||
(set! (-> *video-params* display-dy) (* (/ (-> s4-0 display-dy) 2) 2))
|
||||
)
|
||||
(set! (-> *blit-displays-work* horizontal-flip-flag)
|
||||
(the-as basic (logtest? (-> *game-info* secrets) (game-secrets hflip-screen)))
|
||||
(logtest? (-> *game-info* secrets) (game-secrets hflip-screen))
|
||||
)
|
||||
(set! (-> s5-0 allow-blackout) (-> s4-0 allow-blackout))
|
||||
(set! (-> s5-0 bg-a-speed) (-> s4-0 bg-a-speed))
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
(define *background-work* (new 'global 'background-work))
|
||||
|
||||
;; identical to Jak 1's VU0 program here.
|
||||
(define background-vu0-block (new 'static 'vu-function :length 59 :qlength 30))
|
||||
(define background-vu0-block (new 'static 'vu-function))
|
||||
|
||||
(defun background-upload-vu0 ()
|
||||
;; (upload-vu0-program background-vu0-block (&-> *background-work* wait-to-vu0))
|
||||
|
||||
@@ -12,25 +12,25 @@
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(deftype blit-displays-work (structure)
|
||||
((adgif-tmpl dma-gif-packet :inline :offset-assert 0)
|
||||
(sprite-tmpl dma-gif-packet :inline :offset-assert 32)
|
||||
(sprite-slow-tmpl dma-gif-packet :inline :offset-assert 64)
|
||||
(line-tmpl dma-gif-packet :inline :offset-assert 96)
|
||||
(scan-tmpl dma-gif-packet :inline :offset-assert 128)
|
||||
(color vector4w :inline :offset-assert 160)
|
||||
(line-color uint64 :offset-assert 176)
|
||||
(scan-colors vector4w 15 :inline :offset-assert 192)
|
||||
(menu-mode basic :offset-assert 432)
|
||||
(screen-copied basic :offset-assert 436)
|
||||
(vu1-enable-user-menu uint64 :offset-assert 440)
|
||||
(texture-enable-user-menu uint32 :offset-assert 448)
|
||||
(count-down uint32 :offset-assert 452)
|
||||
(horizontal-flip-flag basic :offset-assert 456)
|
||||
(scan-alpha float :offset-assert 460)
|
||||
(scanline uint32 :offset-assert 464)
|
||||
(progress-interp float :offset-assert 468)
|
||||
(progress-interp-dest float :offset-assert 472)
|
||||
(progress-interp-speed float :offset-assert 476)
|
||||
((adgif-tmpl dma-gif-packet :inline :offset-assert 0)
|
||||
(sprite-tmpl dma-gif-packet :inline :offset-assert 32)
|
||||
(sprite-slow-tmpl dma-gif-packet :inline :offset-assert 64)
|
||||
(line-tmpl dma-gif-packet :inline :offset-assert 96)
|
||||
(scan-tmpl dma-gif-packet :inline :offset-assert 128)
|
||||
(color vector4w :inline :offset-assert 160)
|
||||
(line-color uint64 :offset-assert 176)
|
||||
(scan-colors vector4w 15 :inline :offset-assert 192)
|
||||
(menu-mode symbol :offset-assert 432)
|
||||
(screen-copied symbol :offset-assert 436)
|
||||
(vu1-enable-user-menu vu1-renderer-mask :offset-assert 440)
|
||||
(texture-enable-user-menu uint32 :offset-assert 448)
|
||||
(count-down uint32 :offset-assert 452)
|
||||
(horizontal-flip-flag symbol :offset-assert 456)
|
||||
(scan-alpha float :offset-assert 460)
|
||||
(scanline uint32 :offset-assert 464)
|
||||
(progress-interp float :offset-assert 468)
|
||||
(progress-interp-dest float :offset-assert 472)
|
||||
(progress-interp-speed float :offset-assert 476)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x1e0
|
||||
|
||||
@@ -5,66 +5,114 @@
|
||||
;; name in dgo: blit-displays
|
||||
;; dgos: ENGINE, GAME
|
||||
|
||||
(define *blit-displays-work* (new 'static 'blit-displays-work
|
||||
:adgif-tmpl (new 'static 'dma-gif-packet
|
||||
:dma-vif (new 'static 'dma-packet
|
||||
:dma (new 'static 'dma-tag :qwc #x6 :id (dma-tag-id cnt))
|
||||
:vif1 (new 'static 'vif-tag :imm #x6 :cmd (vif-cmd direct) :msk #x1)
|
||||
)
|
||||
:gif (new 'static 'array uint64 2 #x1000000000008005 #xe)
|
||||
)
|
||||
:sprite-tmpl (new 'static 'dma-gif-packet
|
||||
:dma-vif (new 'static 'dma-packet
|
||||
:dma (new 'static 'dma-tag :qwc #x51 :id (dma-tag-id cnt))
|
||||
:vif1 (new 'static 'vif-tag :imm #x51 :cmd (vif-cmd direct) :msk #x1)
|
||||
)
|
||||
:gif (new 'static 'array uint64 2 #x508b400000008010 #x53531)
|
||||
)
|
||||
:sprite-slow-tmpl (new 'static 'dma-gif-packet
|
||||
:dma-vif (new 'static 'dma-packet
|
||||
:dma (new 'static 'dma-tag :qwc #x6 :id (dma-tag-id cnt))
|
||||
:vif1 (new 'static 'vif-tag :imm #x6 :cmd (vif-cmd direct) :msk #x1)
|
||||
)
|
||||
:gif (new 'static 'array uint64 2 #x508b400000008001 #x53531)
|
||||
)
|
||||
:line-tmpl (new 'static 'dma-gif-packet
|
||||
:dma-vif (new 'static 'dma-packet
|
||||
:dma (new 'static 'dma-tag :qwc #x41 :id (dma-tag-id cnt))
|
||||
:vif1 (new 'static 'vif-tag :imm #x41 :cmd (vif-cmd direct) :msk #x1)
|
||||
)
|
||||
:gif (new 'static 'array uint64 2 #x2020c00000008020 #x55)
|
||||
)
|
||||
:scan-tmpl (new 'static 'dma-gif-packet
|
||||
:dma-vif (new 'static 'dma-packet
|
||||
:dma (new 'static 'dma-tag :qwc #x4c :id (dma-tag-id cnt))
|
||||
:vif1 (new 'static 'vif-tag :imm #x4c :cmd (vif-cmd direct) :msk #x1)
|
||||
)
|
||||
:gif (new 'static 'array uint64 2 #x5020c0000000800f #x55551)
|
||||
)
|
||||
:color (new 'static 'vector4w :x #x80 :y #x80 :z #x80 :w #x80)
|
||||
:line-color #x3f80000000000000
|
||||
:scan-colors (new 'static 'inline-array vector4w 15
|
||||
(new 'static 'vector4w :y 1 :z 1)
|
||||
(new 'static 'vector4w :y 1 :z 1)
|
||||
(new 'static 'vector4w :y 1 :z 1)
|
||||
(new 'static 'vector4w :y 1 :z 1)
|
||||
(new 'static 'vector4w :x 1 :y 3 :z 2)
|
||||
(new 'static 'vector4w :x 1 :y 4 :z 3)
|
||||
(new 'static 'vector4w :x 2 :y 6 :z 5)
|
||||
(new 'static 'vector4w :x 3 :y 8 :z 7)
|
||||
(new 'static 'vector4w :x 5 :y 11 :z 10)
|
||||
(new 'static 'vector4w :x 6 :y 14 :z 13)
|
||||
(new 'static 'vector4w :x 9 :y 20 :z 17)
|
||||
(new 'static 'vector4w :x 13 :y 27 :z 21)
|
||||
(new 'static 'vector4w :x 17 :y 36 :z 24)
|
||||
(new 'static 'vector4w :x 22 :y 45 :z 28)
|
||||
(new 'static 'vector4w :x 32 :y 63 :z 32)
|
||||
)
|
||||
:menu-mode #f
|
||||
:screen-copied #f
|
||||
:horizontal-flip-flag #f
|
||||
)
|
||||
(define *blit-displays-work*
|
||||
(new 'static 'blit-displays-work
|
||||
:adgif-tmpl (new 'static 'dma-gif-packet
|
||||
:dma-vif (new 'static 'dma-packet
|
||||
:dma (new 'static 'dma-tag :qwc #x6 :id (dma-tag-id cnt))
|
||||
:vif1 (new 'static 'vif-tag :imm #x6 :cmd (vif-cmd direct) :msk #x1)
|
||||
)
|
||||
:gif0 (new 'static 'gif-tag64 :nloop #x5 :eop #x1 :nreg #x1)
|
||||
:gif1 (new 'static 'gif-tag-regs :regs0 (gif-reg-id a+d))
|
||||
)
|
||||
:sprite-tmpl (new 'static 'dma-gif-packet
|
||||
:dma-vif (new 'static 'dma-packet
|
||||
:dma (new 'static 'dma-tag :qwc #x51 :id (dma-tag-id cnt))
|
||||
:vif1 (new 'static 'vif-tag :imm #x51 :cmd (vif-cmd direct) :msk #x1)
|
||||
)
|
||||
:gif0 (new 'static 'gif-tag64
|
||||
:nloop #x10
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type sprite) :tme #x1 :fst #x1)
|
||||
:nreg #x5
|
||||
)
|
||||
:gif1 (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id rgbaq)
|
||||
:regs1 (gif-reg-id uv)
|
||||
:regs2 (gif-reg-id xyz2)
|
||||
:regs3 (gif-reg-id uv)
|
||||
:regs4 (gif-reg-id xyz2)
|
||||
)
|
||||
)
|
||||
:sprite-slow-tmpl (new 'static 'dma-gif-packet
|
||||
:dma-vif (new 'static 'dma-packet
|
||||
:dma (new 'static 'dma-tag :qwc #x6 :id (dma-tag-id cnt))
|
||||
:vif1 (new 'static 'vif-tag :imm #x6 :cmd (vif-cmd direct) :msk #x1)
|
||||
)
|
||||
:gif0 (new 'static 'gif-tag64
|
||||
:nloop #x1
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type sprite) :tme #x1 :fst #x1)
|
||||
:nreg #x5
|
||||
)
|
||||
:gif1 (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id rgbaq)
|
||||
:regs1 (gif-reg-id uv)
|
||||
:regs2 (gif-reg-id xyz2)
|
||||
:regs3 (gif-reg-id uv)
|
||||
:regs4 (gif-reg-id xyz2)
|
||||
)
|
||||
)
|
||||
:line-tmpl (new 'static 'dma-gif-packet
|
||||
:dma-vif (new 'static 'dma-packet
|
||||
:dma (new 'static 'dma-tag :qwc #x41 :id (dma-tag-id cnt))
|
||||
:vif1 (new 'static 'vif-tag :imm #x41 :cmd (vif-cmd direct) :msk #x1)
|
||||
)
|
||||
:gif0 (new 'static 'gif-tag64
|
||||
:nloop #x20
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type line) :abe #x1)
|
||||
:nreg #x2
|
||||
)
|
||||
:gif1 (new 'static 'gif-tag-regs :regs0 (gif-reg-id xyz2) :regs1 (gif-reg-id xyz2))
|
||||
)
|
||||
:scan-tmpl (new 'static 'dma-gif-packet
|
||||
:dma-vif (new 'static 'dma-packet
|
||||
:dma (new 'static 'dma-tag :qwc #x4c :id (dma-tag-id cnt))
|
||||
:vif1 (new 'static 'vif-tag :imm #x4c :cmd (vif-cmd direct) :msk #x1)
|
||||
)
|
||||
:gif0 (new 'static 'gif-tag64
|
||||
:nloop #xf
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type line) :abe #x1)
|
||||
:nreg #x5
|
||||
)
|
||||
:gif1 (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id rgbaq)
|
||||
:regs1 (gif-reg-id xyz2)
|
||||
:regs2 (gif-reg-id xyz2)
|
||||
:regs3 (gif-reg-id xyz2)
|
||||
:regs4 (gif-reg-id xyz2)
|
||||
)
|
||||
)
|
||||
:color (new 'static 'vector4w :x #x80 :y #x80 :z #x80 :w #x80)
|
||||
:line-color #x3f80000000000000
|
||||
:scan-colors (new 'static 'inline-array vector4w 15
|
||||
(new 'static 'vector4w :y 1 :z 1)
|
||||
(new 'static 'vector4w :y 1 :z 1)
|
||||
(new 'static 'vector4w :y 1 :z 1)
|
||||
(new 'static 'vector4w :y 1 :z 1)
|
||||
(new 'static 'vector4w :x 1 :y 3 :z 2)
|
||||
(new 'static 'vector4w :x 1 :y 4 :z 3)
|
||||
(new 'static 'vector4w :x 2 :y 6 :z 5)
|
||||
(new 'static 'vector4w :x 3 :y 8 :z 7)
|
||||
(new 'static 'vector4w :x 5 :y 11 :z 10)
|
||||
(new 'static 'vector4w :x 6 :y 14 :z 13)
|
||||
(new 'static 'vector4w :x 9 :y 20 :z 17)
|
||||
(new 'static 'vector4w :x 13 :y 27 :z 21)
|
||||
(new 'static 'vector4w :x 17 :y 36 :z 24)
|
||||
(new 'static 'vector4w :x 22 :y 45 :z 28)
|
||||
(new 'static 'vector4w :x 32 :y 63 :z 32)
|
||||
)
|
||||
:menu-mode #f
|
||||
:screen-copied #f
|
||||
:horizontal-flip-flag #f
|
||||
)
|
||||
)
|
||||
|
||||
;; hack
|
||||
|
||||
@@ -74,5 +122,60 @@
|
||||
)
|
||||
|
||||
|
||||
;; not the real thing. just a temp hack.
|
||||
(defun blit-displays ()
|
||||
(local-vars (v1-182 uint) (v1-183 int))
|
||||
(let ((gp-0 *blit-displays-work*))
|
||||
(when (zero? (-> gp-0 count-down))
|
||||
(cond
|
||||
((and (-> gp-0 menu-mode) (not (-> gp-0 screen-copied)))
|
||||
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(bucket-id bucket-3)
|
||||
)
|
||||
(fx-copy-buf s4-0)
|
||||
)
|
||||
(set! (-> gp-0 vu1-enable-user-menu) (-> *display* vu1-enable-user-menu))
|
||||
(set! (-> *display* vu1-enable-user-menu) (vu1-renderer-mask merc)) ;;(vu1-renderer-mask generic))
|
||||
(set! (-> *display* vu1-enable-user) (vu1-renderer-mask merc)) ;;(vu1-renderer-mask generic))
|
||||
(set! (-> gp-0 texture-enable-user-menu) (the-as uint (-> *texture-pool* texture-enable-user-menu)))
|
||||
(set! (-> *texture-pool* texture-enable-user-menu) (texture-enable-mask shrub water map))
|
||||
(set! (-> *texture-pool* texture-enable-user) (texture-enable-mask shrub water map))
|
||||
(set! (-> gp-0 count-down) (the-as uint 3))
|
||||
(set! (-> gp-0 screen-copied) #t)
|
||||
(set! (-> gp-0 progress-interp) 0.0)
|
||||
(set! (-> gp-0 progress-interp-dest) 1.0)
|
||||
(set! (-> gp-0 progress-interp-speed) 0.033333335)
|
||||
)
|
||||
((and (not (-> gp-0 menu-mode)) (-> gp-0 screen-copied))
|
||||
(set! (-> *display* vu1-enable-user-menu) (-> gp-0 vu1-enable-user-menu))
|
||||
(set! (-> *texture-pool* texture-enable-user-menu)
|
||||
(the-as texture-enable-mask (-> gp-0 texture-enable-user-menu))
|
||||
)
|
||||
(set! (-> gp-0 count-down) (the-as uint 3))
|
||||
(set! (-> gp-0 screen-copied) #f)
|
||||
)
|
||||
)
|
||||
)
|
||||
(when (and (-> *setting-control* user-current render) (>= (the-as uint 1) (-> gp-0 count-down)))
|
||||
(when (and (-> gp-0 horizontal-flip-flag) (not (-> gp-0 menu-mode)))
|
||||
)
|
||||
)
|
||||
(let ((a1-23 (-> *time-of-day-context* filter)))
|
||||
(when (and (or (!= (-> a1-23 x) 1.0) (!= (-> a1-23 y) 1.0) (!= (-> a1-23 z) 1.0)) (not (-> gp-0 menu-mode)))
|
||||
)
|
||||
)
|
||||
(cond
|
||||
((and (-> *setting-control* user-current render) (zero? (-> gp-0 count-down)))
|
||||
)
|
||||
(else
|
||||
)
|
||||
)
|
||||
(if (nonzero? (-> gp-0 count-down))
|
||||
(+! (-> gp-0 count-down) -1)
|
||||
)
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ this is done by a linked list of "bone calculations", which is stashed in the dm
|
||||
(bone-list-init)
|
||||
|
||||
;; VU0 microprogram for bone calculations.
|
||||
(define bones-vu0-block (new 'static 'vu-function :length 54 :qlength 27))
|
||||
(define bones-vu0-block (new 'static 'vu-function))
|
||||
|
||||
(defun bones-set-sqwc ()
|
||||
"Set the sqwc register so the DMA transfer of joints skips the metadata and just transfers the bind-pose."
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -18,7 +18,7 @@
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(define foreground-vu0-block (new 'static 'vu-function :length 9 :qlength 5))
|
||||
(define foreground-vu0-block (new 'static 'vu-function))
|
||||
|
||||
(define *bucket-map* (new 'static 'array bucket-id-16 200
|
||||
(bucket-id-16 merc-l0-tfrag)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(define mercneric-vu0-block (new 'static 'vu-function #|:length #xbe :origin #x118 :qlength 95|#))
|
||||
(define mercneric-vu0-block (new 'static 'vu-function))
|
||||
|
||||
(deftype invinitdata (structure)
|
||||
((count uint8 :offset-assert 0)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(define generic-vu1-block (new 'static 'vu-function #|:length #x6de :qlength #x36f|#))
|
||||
(define generic-vu1-block (new 'static 'vu-function))
|
||||
|
||||
(defun generic-setup-constants ((arg0 generic-constants))
|
||||
(let ((v1-0 *math-camera*))
|
||||
|
||||
@@ -508,7 +508,7 @@
|
||||
|
||||
; lw v1, *display*(s7)
|
||||
; sd v0, 108(v1)
|
||||
(set! (-> *display* vblank-start-time 1) (the-as time-frame (timer-count TIMER1_BANK))) ;; not really a time-frame.
|
||||
(set! (-> *display* vblank-start-time 1) (the-as int (timer-count TIMER1_BANK))) ;; not really a time-frame.
|
||||
; addiu v0, r0, 0
|
||||
0
|
||||
; ld ra, 0(sp)
|
||||
@@ -524,129 +524,44 @@
|
||||
|
||||
(defun set-display-gs-state ((arg0 dma-buffer) (arg1 int) (arg2 int) (arg3 int) (arg4 int) (arg5 int))
|
||||
(let ((t2-0 (/ (+ arg2 63) 64)))
|
||||
(let* ((v1-1 arg0)
|
||||
(t3-0 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet t3-0) dma) (new 'static 'dma-tag :qwc #x8 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet t3-0) vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> (the-as dma-packet t3-0) vif1) (new 'static 'vif-tag :imm #x8 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer t3-0) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(t3-2 (the-as object (-> v1-2 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t3-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x7))
|
||||
(set! (-> (the-as gs-gif-tag t3-2) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-2 base) (&+ (the-as pointer t3-2) 16))
|
||||
)
|
||||
(let* ((v1-3 arg0)
|
||||
(t3-4 (-> v1-3 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-scissor) t3-4) 0)
|
||||
(new 'static 'gs-scissor :scax1 (+ arg2 -1) :scay1 (+ arg3 -1))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 1) (gs-reg64 scissor-1))
|
||||
(set! (-> (the-as (pointer gs-xy-offset) t3-4) 2) (new 'static 'gs-xy-offset))
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 3) (gs-reg64 xyoffset-1))
|
||||
(set! (-> (the-as (pointer gs-frame) t3-4) 4)
|
||||
(new 'static 'gs-frame :fbp arg1 :fbw t2-0 :psm arg5 :fbmsk arg4)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 5) (gs-reg64 frame-1))
|
||||
(set! (-> (the-as (pointer gs-test) t3-4) 6) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)))
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 7) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-texa) t3-4) 8) (new 'static 'gs-texa :ta0 #x80 :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 9) (gs-reg64 texa))
|
||||
(set! (-> (the-as (pointer gs-zbuf) t3-4) 10) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 11) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer uint64) t3-4) 12) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 13) (gs-reg64 texflush))
|
||||
(set! (-> v1-3 base) (&+ t3-4 112))
|
||||
)
|
||||
(dma-buffer-add-gs-set-flusha arg0
|
||||
(scissor-1 (new 'static 'gs-scissor :scax1 (+ arg2 -1) :scay1 (+ arg3 -1)))
|
||||
(xyoffset-1 (new 'static 'gs-xy-offset))
|
||||
(frame-1 (new 'static 'gs-frame :fbp arg1 :fbw t2-0 :psm arg5 :fbmsk arg4))
|
||||
(test-1 (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)))
|
||||
(texa (new 'static 'gs-texa :ta0 #x80 :ta1 #x80))
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(texflush 0)
|
||||
)
|
||||
)
|
||||
arg0
|
||||
)
|
||||
|
||||
(defun set-display-gs-state-offset ((arg0 dma-buffer) (arg1 int) (arg2 int) (arg3 int) (arg4 int) (arg5 int) (arg6 int) (arg7 int))
|
||||
(let ((t4-0 (/ (+ arg2 63) 64)))
|
||||
(let* ((v1-1 arg0)
|
||||
(t5-0 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet t5-0) dma) (new 'static 'dma-tag :qwc #x8 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet t5-0) vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> (the-as dma-packet t5-0) vif1) (new 'static 'vif-tag :imm #x8 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer t5-0) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(t5-2 (the-as object (-> v1-2 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t5-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x7))
|
||||
(set! (-> (the-as gs-gif-tag t5-2) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-2 base) (&+ (the-as pointer t5-2) 16))
|
||||
)
|
||||
(let* ((v1-3 arg0)
|
||||
(t5-4 (-> v1-3 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-scissor) t5-4) 0)
|
||||
(new 'static 'gs-scissor :scax1 (+ arg2 -1) :scay1 (+ arg3 -1))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 1) (gs-reg64 scissor-1))
|
||||
(set! (-> (the-as (pointer gs-xy-offset) t5-4) 2)
|
||||
(new 'static 'gs-xy-offset :ofx (* arg6 16) :ofy (* arg7 16))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 3) (gs-reg64 xyoffset-1))
|
||||
(set! (-> (the-as (pointer gs-frame) t5-4) 4)
|
||||
(new 'static 'gs-frame :fbp arg1 :fbw t4-0 :psm arg5 :fbmsk arg4)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 5) (gs-reg64 frame-1))
|
||||
(set! (-> (the-as (pointer gs-test) t5-4) 6) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)))
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 7) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-texa) t5-4) 8) (new 'static 'gs-texa :ta0 #x80 :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 9) (gs-reg64 texa))
|
||||
(set! (-> (the-as (pointer gs-zbuf) t5-4) 10) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 11) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer uint64) t5-4) 12) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 13) (gs-reg64 texflush))
|
||||
(set! (-> v1-3 base) (&+ t5-4 112))
|
||||
)
|
||||
(dma-buffer-add-gs-set-flusha arg0
|
||||
(scissor-1 (new 'static 'gs-scissor :scax1 (+ arg2 -1) :scay1 (+ arg3 -1)))
|
||||
(xyoffset-1 (new 'static 'gs-xy-offset :ofx (* arg6 16) :ofy (* arg7 16)))
|
||||
(frame-1 (new 'static 'gs-frame :fbp arg1 :fbw t4-0 :psm arg5 :fbmsk arg4))
|
||||
(test-1 (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)))
|
||||
(texa (new 'static 'gs-texa :ta0 #x80 :ta1 #x80))
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(texflush 0)
|
||||
)
|
||||
)
|
||||
arg0
|
||||
)
|
||||
|
||||
(defun reset-display-gs-state ((arg0 display) (arg1 dma-buffer))
|
||||
(let* ((v1-0 arg1)
|
||||
(a2-1 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a2-1) dma) (new 'static 'dma-tag :qwc #x8 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a2-1) vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> (the-as dma-packet a2-1) vif1) (new 'static 'vif-tag :imm #x8 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer a2-1) 16))
|
||||
)
|
||||
(let* ((v1-1 arg1)
|
||||
(a2-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a2-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x7))
|
||||
(set! (-> (the-as gs-gif-tag a2-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a2-3) 16))
|
||||
)
|
||||
(let* ((v1-2 arg1)
|
||||
(a1-1 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-scissor) a1-1) 0) (new 'static 'gs-scissor :scax1 #x1ff :scay1 #x19f))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 1) (gs-reg64 scissor-1))
|
||||
(set! (-> (the-as (pointer gs-xy-offset) a1-1) 2) (new 'static 'gs-xy-offset :ofx #x7000 :ofy #x7300))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 3) (gs-reg64 xyoffset-1))
|
||||
(set! (-> (the-as (pointer gs-frame) a1-1) 4) (new 'static 'gs-frame :fbp #x198 :fbw #x8))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 5) (gs-reg64 frame-1))
|
||||
(set! (-> (the-as (pointer gs-test) a1-1) 6) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest greater-equal)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 7) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-texa) a1-1) 8) (new 'static 'gs-texa :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 9) (gs-reg64 texa))
|
||||
(set! (-> (the-as (pointer gs-zbuf) a1-1) 10) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 11) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer uint64) a1-1) 12) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 13) (gs-reg64 texflush))
|
||||
(set! (-> v1-2 base) (&+ a1-1 112))
|
||||
)
|
||||
(dma-buffer-add-gs-set-flusha arg1
|
||||
(scissor-1 (new 'static 'gs-scissor :scax1 #x1ff :scay1 #x19f))
|
||||
(xyoffset-1 (new 'static 'gs-xy-offset :ofx #x7000 :ofy #x7300))
|
||||
(frame-1 (new 'static 'gs-frame :fbp #x198 :fbw #x8))
|
||||
(test-1 (new 'static 'gs-test :zte #x1 :ztst (gs-ztest greater-equal)))
|
||||
(texa (new 'static 'gs-texa :ta1 #x80))
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(texflush 0)
|
||||
)
|
||||
arg0
|
||||
)
|
||||
|
||||
|
||||
@@ -491,8 +491,8 @@
|
||||
|
||||
;; the GS's UV register specifies the texel coordinate (UV) values of the vertex.
|
||||
(deftype gs-uv (uint64)
|
||||
((u uint16 :offset 0 :size 14)
|
||||
(v uint16 :offset 16 :size 14)
|
||||
((u uint16 :offset 0 :size 16)
|
||||
(v uint16 :offset 16 :size 16)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x8
|
||||
@@ -586,7 +586,7 @@
|
||||
(spsm uint8 :offset 24 :size 6)
|
||||
(dbp uint16 :offset 32 :size 14)
|
||||
(dbw uint8 :offset 48 :size 6)
|
||||
(dpsm uint8 :offset 56 :size 6)
|
||||
(dpsm gs-psm :offset 56 :size 6)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x8
|
||||
|
||||
@@ -7,4 +7,4 @@
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(define emerc-vu1-block (new 'static 'vu-function :length #x56b :qlength #x2b6))
|
||||
(define emerc-vu1-block (new 'static 'vu-function))
|
||||
@@ -61,28 +61,7 @@
|
||||
(set! (-> dma-buf base)
|
||||
(the-as pointer (emerc-vu1-initialize-chain (the-as dma-gif-packet (-> dma-buf base))))
|
||||
)
|
||||
(let* ((v1-12 dma-buf)
|
||||
(a0-4 (the-as object (-> v1-12 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-4) dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-4) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-4) vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-12 base) (&+ (the-as pointer a0-4) 16))
|
||||
)
|
||||
(let* ((v1-13 dma-buf)
|
||||
(a0-6 (the-as object (-> v1-13 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-6) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> (the-as gs-gif-tag a0-6) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-13 base) (&+ (the-as pointer a0-6) 16))
|
||||
)
|
||||
(let* ((v1-14 dma-buf)
|
||||
(a0-8 (-> v1-14 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a0-8) 0) test)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-8) 1) (gs-reg64 test-1))
|
||||
(set! (-> v1-14 base) (&+ a0-8 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buf (test-1 test))
|
||||
(let ((v1-15 (the-as dma-packet (-> dma-buf base))))
|
||||
(set! (-> v1-15 dma) (new 'static 'dma-tag :id (dma-tag-id next) :addr (-> bucket next)))
|
||||
(set! (-> v1-15 vif0) (new 'static 'vif-tag))
|
||||
|
||||
@@ -7,4 +7,4 @@
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(define merc-vu1-block (new 'static 'vu-function :length 0 :qlength 0))
|
||||
(define merc-vu1-block (new 'static 'vu-function))
|
||||
@@ -21,6 +21,7 @@
|
||||
:flag-assert #x900000014
|
||||
)
|
||||
|
||||
|
||||
(define *texture-login-data* (new 'global 'texture-login-data))
|
||||
|
||||
(defmethod login art-joint-geo ((obj art-joint-geo))
|
||||
@@ -232,7 +233,7 @@
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for method 8 of type merc-ctrl
|
||||
|
||||
(defmethod mem-usage merc-ctrl ((obj merc-ctrl) (arg0 memory-usage-block) (arg1 int))
|
||||
(if (-> obj extra)
|
||||
(mem-usage (-> obj extra) arg0 arg1)
|
||||
@@ -300,7 +301,6 @@
|
||||
obj
|
||||
)
|
||||
|
||||
;; definition for method 9 of type merc-ctrl
|
||||
(defmethod login merc-ctrl ((obj merc-ctrl))
|
||||
(set! (-> *kernel-context* login-object) obj)
|
||||
(texture-usage-init obj)
|
||||
@@ -533,47 +533,23 @@
|
||||
(s3-1 (-> dma-buf base))
|
||||
)
|
||||
(set! (-> dma-buf base)
|
||||
(the-as
|
||||
pointer
|
||||
(merc-vu1-initialize-chain (the-as dma-gif-packet (the-as dma-packet (-> dma-buf base))) arg1)
|
||||
)
|
||||
(the-as pointer (merc-vu1-initialize-chain (the-as dma-gif-packet (-> dma-buf base)) arg1))
|
||||
)
|
||||
(let* ((v1-12 dma-buf)
|
||||
(a0-4 (the-as dma-packet (-> v1-12 base)))
|
||||
)
|
||||
(set! (-> a0-4 dma) (new 'static 'dma-tag :qwc #x3 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-4 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-4 vif1) (new 'static 'vif-tag :imm #x3 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-12 base) (the-as pointer (the-as dma-packet (&+ a0-4 16))))
|
||||
)
|
||||
(let* ((v1-13 dma-buf)
|
||||
(a0-6 (the-as object (-> v1-13 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-6) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x2))
|
||||
(set! (-> (the-as gs-gif-tag a0-6) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-13 base) (&+ (the-as pointer a0-6) 16))
|
||||
)
|
||||
(let* ((v1-14 dma-buf)
|
||||
(a0-8 (-> v1-14 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a0-8) 0) (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-8) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-zbuf) a0-8) 2)
|
||||
(if arg2
|
||||
(new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24))
|
||||
(new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-8) 3) (gs-reg64 zbuf-1))
|
||||
(set! (-> v1-14 base) (&+ a0-8 32))
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buf
|
||||
(test-1 (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(zbuf-1 (if arg2
|
||||
#x1000130
|
||||
(the-as int (the-as uint #x101000130))
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((v1-15 (the-as object (-> dma-buf base))))
|
||||
(set! (-> (the-as dma-packet v1-15) dma) (new 'static 'dma-tag :id (dma-tag-id next) :addr (-> bucket next)))
|
||||
(set! (-> (the-as dma-packet v1-15) vif0) (new 'static 'vif-tag))
|
||||
|
||||
@@ -520,7 +520,7 @@
|
||||
(generate-verts (_type_ ocean-vert-array ocean-height-array) none 16)
|
||||
(add-colors! (_type_ vector ocean-vertex) none 17)
|
||||
(ocean-method-18 (_type_ (pointer ocean-colors) (pointer ocean-colors)) none 18)
|
||||
(init-buffer! (_type_ dma-buffer) pointer 19)
|
||||
(init-buffer! (_type_ dma-buffer) none 19)
|
||||
(end-buffer! (_type_ dma-buffer) none 20)
|
||||
(set-corners! (_type_ float float) float 21)
|
||||
(ocean-near-add-call (_type_ dma-buffer int) none 22)
|
||||
@@ -582,7 +582,7 @@
|
||||
(draw-ocean-texture (_type_ dma-buffer int) none 78)
|
||||
(ocean-method-79 (_type_ dma-buffer) none 79)
|
||||
(ocean-method-80 (_type_ (pointer rgba)) none 80)
|
||||
(ocean-method-81 (_type_ dma-buffer) none 81)
|
||||
(ocean-method-81 (_type_ dma-buffer) int 81)
|
||||
(draw-envmap-debug (_type_ dma-buffer) none 82)
|
||||
(ocean-method-83 (_type_ dma-buffer float) none 83)
|
||||
(ocean-method-84 (_type_ dma-buffer sky-upload-data vector4w float) none 84)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(define ocean-mid-block (new 'static 'vu-function #|:length #x490 :qlength #x248|#))
|
||||
(define ocean-mid-block (new 'static 'vu-function))
|
||||
|
||||
(defmethod ocean-mid-setup-constants ocean ((obj ocean) (arg0 ocean-mid-constants))
|
||||
(let ((v1-0 *math-camera*))
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(define ocean-near-block (new 'static 'vu-function #|:length #x3dd :qlength #x1ef|#))
|
||||
(define ocean-near-block (new 'static 'vu-function))
|
||||
|
||||
(defmethod ocean-near-add-call ocean ((obj ocean) (arg0 dma-buffer) (arg1 int))
|
||||
(let* ((v1-0 arg0)
|
||||
@@ -656,30 +656,9 @@
|
||||
|
||||
(defmethod draw-ocean-near ocean ((obj ocean) (arg0 dma-buffer))
|
||||
(local-vars (sv-16 uint))
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-1) dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-1) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-1) vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer a0-1) 16))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> (the-as gs-gif-tag a0-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a0-3) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a0-5 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a0-5) 0)
|
||||
(new 'static 'gs-test :ate #x1 :afail #x1 :zte #x1 :ztst (gs-ztest greater-equal))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 test-1))
|
||||
(set! (-> v1-2 base) (&+ a0-5 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :afail #x1 :zte #x1 :ztst (gs-ztest greater-equal)))
|
||||
)
|
||||
(dma-buffer-add-vu-function arg0 ocean-near-block 1)
|
||||
(let* ((v1-3 arg0)
|
||||
(a0-8 (the-as object (-> v1-3 base)))
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(define ocean-vu0-block (new 'static 'vu-function :length 0 :qlength 0))
|
||||
(define ocean-vu0-block (new 'static 'vu-function))
|
||||
|
||||
(defmethod-mips2c "(method 16 ocean)" 16 ocean) ;; ocean-generate-verts
|
||||
(defmethod-mips2c "(method 15 ocean)" 15 ocean)
|
||||
|
||||
@@ -1036,80 +1036,23 @@
|
||||
)
|
||||
|
||||
(defmethod init-buffer! ocean ((obj ocean) (arg0 dma-buffer))
|
||||
"Initialize [[ocean]] DMA buffer.
|
||||
@returns Pointer to the next DMA buffer"
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-1) dma) (new 'static 'dma-tag :qwc #xa :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-1) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-1) vif1) (new 'static 'vif-tag :imm #xa :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer a0-1) 16))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x9))
|
||||
(set! (-> (the-as gs-gif-tag a0-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a0-3) 16))
|
||||
)
|
||||
(let* ((s5-0 arg0)
|
||||
(s4-0 (-> s5-0 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) s4-0) 0)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) s4-0) 2) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 3) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) s4-0) 4)
|
||||
(new 'static 'gs-tex0 :tbp0 #x2a0 :tbw #x2 :th (log2 128) :tw (log2 128))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 5) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) s4-0) 6) (-> obj tex1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 7) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-texa) s4-0) 8) (new 'static 'gs-texa :ta0 #x80 :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 9) (gs-reg64 texa))
|
||||
(set! (-> (the-as (pointer gs-miptbp) s4-0) 10)
|
||||
(new 'static 'gs-miptbp :tbp1 #x6a0 :tbw1 #x1 :tbp2 #x7a0 :tbp3 #x7e0)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 11) (gs-reg64 miptbp1-1))
|
||||
(set! (-> (the-as (pointer gs-miptbp) s4-0) 12) (new 'static 'gs-miptbp :tbp1 #x800 :tbp2 #x820 :tbp3 #x840))
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 13) (gs-reg64 miptbp2-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) s4-0) 14) (new 'static 'gs-clamp))
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 15) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-fogcol) s4-0) 16) (the-as gs-fogcol *fog-color*))
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 17) (gs-reg64 fogcol))
|
||||
(let ((v0-2 (&+ s4-0 144)))
|
||||
(set! (-> s5-0 base) v0-2)
|
||||
v0-2
|
||||
)
|
||||
)
|
||||
"Initialize [[ocean]] DMA buffer."
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always)))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x2a0 :tbw #x2 :th (log2 128) :tw (log2 128)))
|
||||
(tex1-1 (-> obj tex1))
|
||||
(texa (new 'static 'gs-texa :ta0 #x80 :ta1 #x80))
|
||||
(miptbp1-1 (new 'static 'gs-miptbp :tbp1 #x6a0 :tbw1 #x1 :tbp2 #x7a0 :tbp3 #x7e0))
|
||||
(miptbp2-1 (new 'static 'gs-miptbp :tbp1 #x800 :tbp2 #x820 :tbp3 #x840))
|
||||
(clamp-1 (new 'static 'gs-clamp))
|
||||
(fogcol *fog-color*)
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
(defmethod end-buffer! ocean ((obj ocean) (arg0 dma-buffer))
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-1) dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-1) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-1) vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer a0-1) 16))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> (the-as gs-gif-tag a0-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a0-3) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a0-5 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-texa) a0-5) 0) (new 'static 'gs-texa :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 texa))
|
||||
(set! (-> v1-2 base) (&+ a0-5 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0 (texa (new 'static 'gs-texa :ta1 #x80)))
|
||||
0
|
||||
(none)
|
||||
)
|
||||
@@ -1160,12 +1103,9 @@
|
||||
(let ((f0-5 1.0)
|
||||
(f30-0 1.0)
|
||||
)
|
||||
;; added check
|
||||
(when (nonzero? *bigmap*)
|
||||
(when (= (-> *bigmap* bigmap-index) 13)
|
||||
(set! f0-5 0.333)
|
||||
(set! f30-0 0.75)
|
||||
)
|
||||
(when (= (-> *bigmap* bigmap-index) 13)
|
||||
(set! f0-5 0.333)
|
||||
(set! f30-0 0.75)
|
||||
)
|
||||
(set! (-> obj frame-speed) (* (+ 4.0 (-> *setting-control* user-current rain)) f0-5))
|
||||
(set! (-> obj frame-speed2) (* (+ 5.0 (-> *setting-control* user-current rain)) f0-5))
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
;;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
(defmethod login billboard ((obj billboard))
|
||||
"Set up the billboard adgif shader"
|
||||
(adgif-shader-login (-> obj flat))
|
||||
@@ -126,16 +123,6 @@
|
||||
obj
|
||||
)
|
||||
|
||||
(defmethod inspect prototype-shrubbery ((obj prototype-shrubbery))
|
||||
"Inspect all prototypes in a prototype array."
|
||||
(format #t "[~8x] ~A~%" obj (-> obj type))
|
||||
(format #t "~Tlength: ~D~%" (-> obj length))
|
||||
(format #t "~Tdata[~D]: @ #x~X~%" (-> obj length) (-> obj data))
|
||||
(dotimes (s5-0 (-> obj length))
|
||||
(format #t "~T [~D] ~A~%" s5-0 (-> obj data s5-0))
|
||||
)
|
||||
obj
|
||||
)
|
||||
|
||||
(defmethod mem-usage prototype-shrubbery ((obj prototype-shrubbery) (arg0 memory-usage-block) (arg1 int))
|
||||
"Compute memory usage of all prototypes in a prototype array."
|
||||
@@ -247,7 +234,7 @@
|
||||
obj
|
||||
)
|
||||
|
||||
(define shrub-vu1-block (new 'static 'vu-function :length #x26a :qlength #x135))
|
||||
(define shrub-vu1-block (new 'static 'vu-function))
|
||||
|
||||
(defun shrub-num-tris ((shrub shrubbery))
|
||||
"Get the number of triangles in a shrubbery fragment."
|
||||
@@ -409,7 +396,7 @@
|
||||
;; upload the data
|
||||
(set! (-> a3-0 dma) (new 'static 'dma-tag
|
||||
:id (dma-tag-id ref)
|
||||
:addr (the-as int (-> shrub obj))
|
||||
:addr (-> shrub obj)
|
||||
:qwc (+ (-> shrub obj-qwc) (-> shrub vtx-qwc) (-> shrub col-qwc) (-> shrub stq-qwc))
|
||||
)
|
||||
)
|
||||
@@ -605,7 +592,7 @@
|
||||
(while (nonzero? s2-0)
|
||||
(+! s2-0 -1)
|
||||
(let ((a0-15 (* (shrub-num-tris (the-as shrubbery s3-0)) s4-0))
|
||||
(v1-26 (* (the-as uint (-> (the-as shrubbery s3-0) header data 2)) s4-0))
|
||||
(v1-26 (* (-> (the-as shrubbery s3-0) header data 2) s4-0))
|
||||
)
|
||||
(+! (-> *terrain-stats* shrub tris) a0-15)
|
||||
(+! (-> *terrain-stats* shrub dverts) v1-26)
|
||||
@@ -630,7 +617,7 @@
|
||||
(while (nonzero? s2-1)
|
||||
(+! s2-1 -1)
|
||||
(let ((a0-28 (* (shrub-num-tris (the-as shrubbery s3-1)) s4-1))
|
||||
(v1-44 (* (the-as uint (-> (the-as shrubbery s3-1) header data 2)) s4-1))
|
||||
(v1-44 (* (-> (the-as shrubbery s3-1) header data 2) s4-1))
|
||||
)
|
||||
(+! (-> *terrain-stats* trans-shrub tris) a0-28)
|
||||
(+! (-> *terrain-stats* trans-shrub dverts) v1-44)
|
||||
@@ -667,16 +654,6 @@
|
||||
:flag-assert #x900000650
|
||||
)
|
||||
|
||||
(defmethod inspect dma-test ((obj dma-test))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj 'dma-test)
|
||||
(format #t "~1Tdata[101] @ #x~X~%" (-> obj data))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
(define *dma-test* (new 'global 'dma-test))
|
||||
|
||||
@@ -689,17 +666,6 @@
|
||||
:flag-assert #x900000020
|
||||
)
|
||||
|
||||
(defmethod inspect dma-test-work ((obj dma-test-work))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj 'dma-test-work)
|
||||
(format #t "~1Tupload: #<dma-packet @ #x~X>~%" (-> obj upload))
|
||||
(format #t "~1Tend: #<dma-packet @ #x~X>~%" (-> obj end))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
(define *dma-test-work*
|
||||
(new 'static 'dma-test-work
|
||||
|
||||
@@ -428,57 +428,32 @@ vf31: cam 0 (premultiplied by hmge)
|
||||
)
|
||||
|
||||
;; set up for sky DMA:
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as dma-packet (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> a0-1 dma) (new 'static 'dma-tag :qwc #x7 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-1 vif1) (new 'static 'vif-tag :imm #x7 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (the-as pointer (&+ a0-1 16)))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as gs-gif-tag (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> a0-3 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x6))
|
||||
(set! (-> a0-3 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (the-as pointer (&+ a0-3 16)))
|
||||
)
|
||||
(let* ((s4-0 arg0)
|
||||
(s3-0 (-> s4-0 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) s3-0) 0) (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x50
|
||||
:afail #x1
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s3-0) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) s3-0) 2) (new 'static 'gs-tex0
|
||||
:tbp0 #x100
|
||||
:tbw #x2
|
||||
:psm #x1b
|
||||
:tcc #x1
|
||||
:cbp #x300
|
||||
:cld #x1
|
||||
:th (log2 128)
|
||||
:tw (log2 128)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s3-0) 3) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) s3-0) 4) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s3-0) 5) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) s3-0) 6) (new 'static 'gs-clamp))
|
||||
(set! (-> (the-as (pointer gs-reg64) s3-0) 7) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) s3-0) 8) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s3-0) 9) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer uint64) s3-0) 10) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) s3-0) 11) (gs-reg64 texflush))
|
||||
(set! (-> s4-0 base) (&+ s3-0 96))
|
||||
)
|
||||
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(test-1 (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x50
|
||||
:afail #x1
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(tex0-1 (new 'static 'gs-tex0
|
||||
:tbp0 #x100
|
||||
:tbw #x2
|
||||
:psm #x1b
|
||||
:tcc #x1
|
||||
:cbp #x300
|
||||
:cld #x1
|
||||
:th (log2 128)
|
||||
:tw (log2 128)
|
||||
)
|
||||
)
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(clamp-1 (new 'static 'gs-clamp))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(texflush 0)
|
||||
)
|
||||
;; set regs for large polygon renderer
|
||||
;(init-regs-for-large-polygon-draw obj) ;; hack hack hack hack hack!
|
||||
;;(.lvf vf27 (&-> obj giftag-roof quad))
|
||||
@@ -619,28 +594,7 @@ vf31: cam 0 (premultiplied by hmge)
|
||||
|
||||
;; set up dma
|
||||
(rlet ((vf27 :class vf))
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-1) dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-1) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-1) vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (the-as pointer (&+ (the-as dma-packet a0-1) 16)))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> (the-as gs-gif-tag a0-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a0-3) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a0-5 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-alpha) a0-5) 0) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 alpha-1))
|
||||
(set! (-> v1-2 base) (&+ a0-5 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0 (alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1)))
|
||||
;; set up polygon regs
|
||||
(init-regs-for-large-polygon-draw obj)
|
||||
;(.lvf vf27 (&-> obj giftag-haze quad))
|
||||
@@ -711,34 +665,11 @@ vf31: cam 0 (premultiplied by hmge)
|
||||
"Draw the roof of the sky box. Uses large-polygon renderer."
|
||||
(rlet ((vf27 :class vf))
|
||||
;; GS setup
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-1) dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-1) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-1) vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (the-as pointer (&+ (the-as dma-packet a0-1) 16)))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> (the-as gs-gif-tag a0-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a0-3) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a0-5 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) a0-5) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) a0-5) 2)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a0-5) 4) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 5) (gs-reg64 alpha-1))
|
||||
(set! (-> v1-2 base) (&+ a0-5 48))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always)))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
)
|
||||
;; large polygon reg setup
|
||||
(init-regs-for-large-polygon-draw obj)
|
||||
; (.lvf vf27 (&-> obj giftag-base quad))
|
||||
@@ -766,30 +697,9 @@ vf31: cam 0 (premultiplied by hmge)
|
||||
(defmethod draw-base sky-work ((obj sky-work) (arg0 dma-buffer))
|
||||
"Draw the base of the sky box. Uses large-polygon renderer."
|
||||
(rlet ((vf27 :class vf))
|
||||
(let* ((v1-0 arg0)
|
||||
(a1-1 (the-as dma-packet (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> a1-1 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a1-1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a1-1 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (the-as pointer (&+ a1-1 16)))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a1-3 (the-as gs-gif-tag (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> a1-3 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a1-3 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (the-as pointer (&+ a1-3 16)))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a1-5 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a1-5) 0)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-5) 1) (gs-reg64 test-1))
|
||||
(set! (-> v1-2 base) (&+ a1-5 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always)))
|
||||
)
|
||||
(let ((s5-0 (the-as object (-> arg0 base))))
|
||||
(&+! (-> arg0 base) 16)
|
||||
;(.lvf vf27 (&-> obj giftag-base quad))
|
||||
@@ -812,61 +722,34 @@ vf31: cam 0 (premultiplied by hmge)
|
||||
|
||||
(defmethod draw-fog sky-work ((obj sky-work) (arg0 dma-buffer))
|
||||
(let ((s4-0 (-> *sky-texture-anim-array* array-data 8 tex)))
|
||||
(when s4-0
|
||||
(let* ((v1-3 arg0)
|
||||
(a0-1 (the-as dma-packet (-> v1-3 base)))
|
||||
)
|
||||
(set! (-> a0-1 dma) (new 'static 'dma-tag :qwc #x6 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-1 vif1) (new 'static 'vif-tag :imm #x6 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-3 base) (the-as pointer (&+ a0-1 16)))
|
||||
(if s4-0
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(tex0-1 (new 'static 'gs-tex0
|
||||
:tcc #x1
|
||||
:cld #x1
|
||||
:psm (the-as int (-> s4-0 psm))
|
||||
:cpsm (-> s4-0 clutpsm)
|
||||
:cbp (-> s4-0 clutdest)
|
||||
:th (log2 (-> s4-0 h))
|
||||
:tw (log2 (-> s4-0 w))
|
||||
:tbw (-> s4-0 width 0)
|
||||
:tbp0 (-> s4-0 dest 0)
|
||||
)
|
||||
)
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(test-1 (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x70
|
||||
:afail #x3
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
)
|
||||
)
|
||||
(let* ((v1-4 arg0)
|
||||
(a0-3 (the-as gs-gif-tag (-> v1-4 base)))
|
||||
)
|
||||
(set! (-> a0-3 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x5))
|
||||
(set! (-> a0-3 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-4 base) (the-as pointer (the-as gs-gif-tag (&+ a0-3 16))))
|
||||
)
|
||||
(let* ((s3-0 arg0)
|
||||
(s2-0 (-> s3-0 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-tex0) s2-0) 0)
|
||||
(new 'static 'gs-tex0
|
||||
:tcc #x1
|
||||
:cld #x1
|
||||
:psm (the-as int (-> s4-0 psm))
|
||||
:cpsm (-> s4-0 clutpsm)
|
||||
:cbp (-> s4-0 clutdest)
|
||||
:th (log2 (-> s4-0 h))
|
||||
:tw (log2 (-> s4-0 w))
|
||||
:tbw (-> s4-0 width 0)
|
||||
:tbp0 (-> s4-0 dest 0)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 1) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) s2-0) 2) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 3) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-test) s2-0) 4)
|
||||
(new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x70
|
||||
:afail #x3
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 5) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) s2-0) 6)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 7) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) s2-0) 8) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 9) (gs-reg64 alpha-1))
|
||||
(set! (-> s3-0 base) (&+ s2-0 80))
|
||||
)
|
||||
)
|
||||
)
|
||||
(let* ((v1-26 (the-as (inline-array qword) (-> arg0 base)))
|
||||
(f0-0 (-> *fog-texture-work* min-corner y))
|
||||
@@ -930,9 +813,9 @@ vf31: cam 0 (premultiplied by hmge)
|
||||
(if (nonzero? (-> (the-as sky-work s4-0) star-colors 0 x))
|
||||
(stars-transform-asm (the-as sky-work s4-0))
|
||||
)
|
||||
(let* ((s3-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(s5-1 (-> s3-0 base))
|
||||
)
|
||||
(with-dma-buffer-add-bucket ((s3-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(bucket-id sky-draw)
|
||||
)
|
||||
(draw-roof (the-as sky-work s4-0) s3-0)
|
||||
(init-regs-for-sky-asm (the-as sky-work s4-0))
|
||||
(if (nonzero? (-> (the-as sky-work s4-0) star-colors 0 x))
|
||||
@@ -949,20 +832,6 @@ vf31: cam 0 (premultiplied by hmge)
|
||||
(when (nonzero? *sky-texture-anim-array*) ;; added check
|
||||
;(draw-fog (the-as sky-work s4-0) s3-0)
|
||||
)
|
||||
(let ((a3-5 (-> s3-0 base)))
|
||||
(let ((v1-45 (the-as dma-packet (-> s3-0 base))))
|
||||
(set! (-> v1-45 dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
(set! (-> v1-45 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> v1-45 vif1) (new 'static 'vif-tag))
|
||||
(set! (-> s3-0 base) (the-as pointer (&+ v1-45 16)))
|
||||
)
|
||||
(dma-bucket-insert-tag
|
||||
(-> *display* frames (-> *display* on-screen) bucket-group)
|
||||
(bucket-id sky-draw)
|
||||
s5-1
|
||||
(the-as (pointer dma-tag) a3-5)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((v1-52 *dma-mem-usage*))
|
||||
@@ -979,67 +848,36 @@ vf31: cam 0 (premultiplied by hmge)
|
||||
)
|
||||
)
|
||||
(else
|
||||
(let* ((s4-1 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(gp-1 (-> s4-1 base))
|
||||
)
|
||||
(with-dma-buffer-add-bucket ((s4-1 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(bucket-id sky-draw)
|
||||
)
|
||||
(cond
|
||||
((-> *blit-displays-work* menu-mode)
|
||||
(let ((f0-0 (-> *blit-displays-work* progress-interp)))
|
||||
(let* ((a0-43 s4-1)
|
||||
(a1-30 (the-as dma-packet (-> a0-43 base)))
|
||||
)
|
||||
(set! (-> a1-30 dma) (new 'static 'dma-tag :qwc #x8 :id (dma-tag-id cnt)))
|
||||
(set! (-> a1-30 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a1-30 vif1) (new 'static 'vif-tag :imm #x8 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> a0-43 base) (the-as pointer (&+ a1-30 16)))
|
||||
)
|
||||
(let* ((a0-44 s4-1)
|
||||
(a1-32 (the-as gs-gif-tag (-> a0-44 base)))
|
||||
)
|
||||
(set! (-> a1-32 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x7))
|
||||
(set! (-> a1-32 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> a0-44 base) (the-as pointer (&+ a1-32 16)))
|
||||
)
|
||||
(let* ((a0-45 s4-1)
|
||||
(a1-34 (-> a0-45 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) a1-34) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) a1-34) 2)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a1-34) 4) (new 'static 'gs-alpha))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 5) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) a1-34) 6)
|
||||
(new 'static 'gs-tex0 :tbp0 #x4c0 :tbw #x8 :tw #x9 :th #x9 :tcc #x1)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 7) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a1-34) 8) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 9) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) a1-34) 10)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 11) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer uint64) a1-34) 12) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 13) (gs-reg64 texflush))
|
||||
(set! (-> a0-45 base) (&+ a1-34 112))
|
||||
)
|
||||
(let ((a2-40 (the-as (inline-array qword) (-> s4-1 base)))
|
||||
(a3-7 #x7000)
|
||||
(t0-1 #x7300)
|
||||
(a0-46 #x7800)
|
||||
(a1-36 #x7980)
|
||||
)
|
||||
(set! (-> a2-40 0 quad) (-> obj draw-tmpl2 dma-vif quad))
|
||||
(set! (-> a2-40 1 quad) (-> obj draw-tmpl2 quad 1))
|
||||
(set-vector! (-> a2-40 2 vector4w) 128 128 128 128)
|
||||
(set-vector! (-> a2-40 3 vector4w) 8 8 0 0)
|
||||
(set-vector! (-> a2-40 4 vector4w) a3-7 t0-1 0 0)
|
||||
(set-vector! (-> a2-40 5 vector4w) 8200 6664 0 0)
|
||||
(set-vector! (-> a2-40 6 vector4w) a0-46 a1-36 0 0)
|
||||
)
|
||||
(&+! (-> s4-1 base) 112)
|
||||
(dma-buffer-add-gs-set s4-1
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always)))
|
||||
(alpha-1 (new 'static 'gs-alpha))
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x4c0 :tbw #x8 :tw #x9 :th #x9 :tcc #x1))
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
(texflush 0)
|
||||
)
|
||||
;; (let ((a2-40 (the-as (inline-array qword) (-> s4-1 base)))
|
||||
;; (a3-7 #x7000)
|
||||
;; (t0-1 #x7300)
|
||||
;; (a0-46 #x7800)
|
||||
;; (a1-36 #x7980)
|
||||
;; )
|
||||
;; (set! (-> a2-40 0 quad) (-> obj draw-tmpl2 dma-vif quad))
|
||||
;; (set! (-> a2-40 1 quad) (-> obj draw-tmpl2 quad 1))
|
||||
;; (set-vector! (-> a2-40 2 vector4w) 128 128 128 128)
|
||||
;; (set-vector! (-> a2-40 3 vector4w) 8 8 0 0)
|
||||
;; (set-vector! (-> a2-40 4 vector4w) a3-7 t0-1 0 0)
|
||||
;; (set-vector! (-> a2-40 5 vector4w) 8200 6664 0 0)
|
||||
;; (set-vector! (-> a2-40 6 vector4w) a0-46 a1-36 0 0)
|
||||
;; )
|
||||
;; (&+! (-> s4-1 base) 112)
|
||||
(let ((t0-4 (the-as (inline-array qword) (-> s4-1 base)))
|
||||
(a2-42 #x8000)
|
||||
(a3-9 #x8000)
|
||||
@@ -1054,34 +892,11 @@ vf31: cam 0 (premultiplied by hmge)
|
||||
(set-vector! (-> t0-4 5 vector4w) 8200 6664 0 0)
|
||||
(set-vector! (-> t0-4 6 vector4w) a0-49 a1-37 0 0)
|
||||
(&+! (-> s4-1 base) 112)
|
||||
(let* ((t0-8 s4-1)
|
||||
(t1-11 (the-as dma-packet (-> t0-8 base)))
|
||||
)
|
||||
(set! (-> t1-11 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> t1-11 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> t1-11 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> t0-8 base) (the-as pointer (&+ t1-11 16)))
|
||||
)
|
||||
(let* ((t0-9 s4-1)
|
||||
(t1-13 (the-as gs-gif-tag (-> t0-9 base)))
|
||||
)
|
||||
(set! (-> t1-13 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> t1-13 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> t0-9 base) (the-as pointer (&+ t1-13 16)))
|
||||
)
|
||||
(let* ((t0-10 s4-1)
|
||||
(t1-15 (-> t0-10 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-alpha) t1-15) 0) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-15) 1) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) t1-15) 2)
|
||||
(new 'static 'gs-tex0 :tbp0 #x3300 :tbw #x8 :tw #x9 :th #x9 :tcc #x1)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-15) 3) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer uint64) t1-15) 4) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-15) 5) (gs-reg64 texflush))
|
||||
(set! (-> t0-10 base) (&+ t1-15 48))
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-1
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x3300 :tbw #x8 :tw #x9 :th #x9 :tcc #x1))
|
||||
(texflush 0)
|
||||
)
|
||||
(let ((t0-11 (the-as (inline-array qword) (-> s4-1 base))))
|
||||
(set! (-> t0-11 0 quad) (-> obj draw-tmpl2 dma-vif quad))
|
||||
(set! (-> t0-11 1 quad) (-> obj draw-tmpl2 quad 1))
|
||||
@@ -1090,31 +905,10 @@ vf31: cam 0 (premultiplied by hmge)
|
||||
(set-vector! (-> t0-11 4 vector4w) a2-42 a3-9 0 0)
|
||||
(set-vector! (-> t0-11 5 vector4w) 2048 1664 0 0)
|
||||
(set-vector! (-> t0-11 6 vector4w) a0-49 a1-37 0 0)
|
||||
(&+! (-> s4-1 base) 112)
|
||||
)
|
||||
)
|
||||
(&+! (-> s4-1 base) 112)
|
||||
(let* ((a0-52 s4-1)
|
||||
(a1-38 (the-as dma-packet (-> a0-52 base)))
|
||||
)
|
||||
(set! (-> a1-38 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a1-38 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a1-38 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> a0-52 base) (the-as pointer (&+ a1-38 16)))
|
||||
)
|
||||
(let* ((a0-53 s4-1)
|
||||
(a1-40 (the-as gs-gif-tag (-> a0-53 base)))
|
||||
)
|
||||
(set! (-> a1-40 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a1-40 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> a0-53 base) (the-as pointer (&+ a1-40 16)))
|
||||
)
|
||||
(let* ((a0-54 s4-1)
|
||||
(a1-42 (-> a0-54 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-alpha) a1-42) 0) (new 'static 'gs-alpha))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-42) 1) (gs-reg64 alpha-1))
|
||||
(set! (-> a0-54 base) (&+ a1-42 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-1 (alpha-1 (new 'static 'gs-alpha)))
|
||||
(let ((a0-57 (the int (+ 128.0 (* 32.0 f0-0))))
|
||||
(a1-46 (the int (- 128.0 (* 16.0 f0-0))))
|
||||
(a2-55 (the int (- 128.0 (* 96.0 f0-0))))
|
||||
@@ -1124,69 +918,61 @@ vf31: cam 0 (premultiplied by hmge)
|
||||
(set! a1-46 128)
|
||||
(set! a2-55 128)
|
||||
)
|
||||
(let ((v1-57 3328)
|
||||
(a3-16 6656)
|
||||
(let ((v1-57 (* (-> *pc-settings* lbox-height) 16))
|
||||
(a3-16 0)
|
||||
)
|
||||
(dotimes (t0-12 16)
|
||||
(let ((t1-22 (the-as (inline-array qword) (-> s4-1 base)))
|
||||
(t3-0 (* (+ (* t0-12 32) 1792) 16))
|
||||
(t2-36 (* (+ (* (+ t0-12 1) 32) 1792) 16))
|
||||
)
|
||||
(let ((t5-0 (* (+ (* t0-12 16) 256) 16))
|
||||
(t4-5 (* (+ (* (+ t0-12 1) 16) 256) 16))
|
||||
)
|
||||
(set! (-> t1-22 0 quad) (-> obj draw-tmpl2 dma-vif quad))
|
||||
(set! (-> t1-22 1 quad) (-> obj draw-tmpl2 quad 1))
|
||||
(set-vector! (-> t1-22 2 vector4w) a0-57 a1-46 a2-55 128)
|
||||
(set-vector! (-> t1-22 3 vector4w) (+ t5-0 8) (+ v1-57 24) 0 0)
|
||||
(set-vector! (-> t1-22 4 vector4w) t3-0 #x7300 0 0)
|
||||
(set-vector! (-> t1-22 5 vector4w) (+ t4-5 8) (+ a3-16 24) 0 0)
|
||||
(let ((t1-22 (the-as (inline-array qword) (-> s4-1 base)))
|
||||
)
|
||||
(set-vector! (-> t1-22 6 vector4w) t2-36 #x8d00 0 0)
|
||||
)
|
||||
(set! (-> t1-22 0 quad) (-> obj draw-tmpl2 dma-vif quad))
|
||||
(set! (-> t1-22 1 quad) (-> obj draw-tmpl2 quad 1))
|
||||
(set-vector! (-> t1-22 2 vector4w) a0-57 a1-46 a2-55 128)
|
||||
(set-vector! (-> t1-22 3 vector4w) (* 0 16) v1-57 0 0)
|
||||
(set-vector! (-> t1-22 4 vector4w) (* 1792 16) #x7300 0 0)
|
||||
(set-vector! (-> t1-22 5 vector4w) (* (-> *pc-settings* lbox-width) 16) a3-16 0 0)
|
||||
(set-vector! (-> t1-22 6 vector4w) (* 2304 16) #x8d00 0 0)
|
||||
(&+! (-> s4-1 base) 112)
|
||||
)
|
||||
)
|
||||
(let* ((v1-60 s4-1)
|
||||
(a3-17 (the-as dma-packet (-> v1-60 base)))
|
||||
)
|
||||
(set! (-> a3-17 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a3-17 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a3-17 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-60 base) (the-as pointer (&+ a3-17 16)))
|
||||
)
|
||||
(let* ((v1-61 s4-1)
|
||||
(a3-19 (the-as gs-gif-tag (-> v1-61 base)))
|
||||
)
|
||||
(set! (-> a3-19 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a3-19 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-61 base) (the-as pointer (&+ a3-19 16)))
|
||||
)
|
||||
(let* ((v1-62 s4-1)
|
||||
(a3-21 (-> v1-62 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-alpha) a3-21) 0) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-21) 1) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) a3-21) 2)
|
||||
(new 'static 'gs-tex0 :tbp0 #x4c0 :tbw #x8 :tw #x9 :th #x9 :tcc #x1)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-21) 3) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer uint64) a3-21) 4) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-21) 5) (gs-reg64 texflush))
|
||||
(set! (-> v1-62 base) (&+ a3-21 48))
|
||||
)
|
||||
(let ((v1-63 (the-as (inline-array qword) (-> s4-1 base))))
|
||||
(set! (-> v1-63 0 quad) (-> obj draw-tmpl2 dma-vif quad))
|
||||
(set! (-> v1-63 1 quad) (-> obj draw-tmpl2 quad 1))
|
||||
(set-vector! (-> v1-63 2 vector4w) a0-57 a1-46 a2-55 (the int (- 128.0 (* 48.0 f0-0))))
|
||||
(set-vector! (-> v1-63 3 vector4w) 0 24 0 0)
|
||||
(set-vector! (-> v1-63 4 vector4w) #x7000 #x7300 0 0)
|
||||
(set-vector! (-> v1-63 5 vector4w) 8192 6680 0 0)
|
||||
(set-vector! (-> v1-63 6 vector4w) #x9000 #x8d00 0 0)
|
||||
)
|
||||
;; (let ((v1-57 3328)
|
||||
;; (a3-16 6656)
|
||||
;; )
|
||||
;; (dotimes (t0-12 16)
|
||||
;; (let ((t1-22 (the-as (inline-array qword) (-> s4-1 base)))
|
||||
;; (t3-0 (* (+ (* t0-12 32) 1792) 16))
|
||||
;; (t2-36 (* (+ (* (+ t0-12 1) 32) 1792) 16))
|
||||
;; )
|
||||
;; (let ((t5-0 (* (+ (* t0-12 16) 256) 16))
|
||||
;; (t4-5 (* (+ (* (+ t0-12 1) 16) 256) 16))
|
||||
;; )
|
||||
;; (set! (-> t1-22 0 quad) (-> obj draw-tmpl2 dma-vif quad))
|
||||
;; (set! (-> t1-22 1 quad) (-> obj draw-tmpl2 quad 1))
|
||||
;; (set-vector! (-> t1-22 2 vector4w) a0-57 a1-46 a2-55 128)
|
||||
;; (set-vector! (-> t1-22 3 vector4w) (+ t5-0 8) (+ v1-57 24) 0 0)
|
||||
;; (set-vector! (-> t1-22 4 vector4w) t3-0 #x7300 0 0)
|
||||
;; (set-vector! (-> t1-22 5 vector4w) (+ t4-5 8) (+ a3-16 24) 0 0)
|
||||
;; )
|
||||
;; (set-vector! (-> t1-22 6 vector4w) t2-36 #x8d00 0 0)
|
||||
;; )
|
||||
;; (&+! (-> s4-1 base) 112)
|
||||
;; )
|
||||
;; )
|
||||
;; (dma-buffer-add-gs-set s4-1
|
||||
;; (alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
;; (tex0-1 (new 'static 'gs-tex0 :tbp0 #x4c0 :tbw #x8 :tw #x9 :th #x9 :tcc #x1))
|
||||
;; (texflush 0)
|
||||
;; )
|
||||
;; (let ((v1-63 (the-as (inline-array qword) (-> s4-1 base))))
|
||||
;; (set! (-> v1-63 0 quad) (-> obj draw-tmpl2 dma-vif quad))
|
||||
;; (set! (-> v1-63 1 quad) (-> obj draw-tmpl2 quad 1))
|
||||
;; (set-vector! (-> v1-63 2 vector4w) a0-57 a1-46 a2-55 (the int (- 128.0 (* 48.0 f0-0))))
|
||||
;; (set-vector! (-> v1-63 3 vector4w) 0 24 0 0)
|
||||
;; (set-vector! (-> v1-63 4 vector4w) #x7000 #x7300 0 0)
|
||||
;; (set-vector! (-> v1-63 5 vector4w) 8192 6680 0 0)
|
||||
;; (set-vector! (-> v1-63 6 vector4w) #x9000 #x8d00 0 0)
|
||||
;; )
|
||||
;; (&+! (-> s4-1 base) 112)
|
||||
)
|
||||
)
|
||||
(&+! (-> s4-1 base) 112)
|
||||
(seek!
|
||||
(-> *blit-displays-work* progress-interp)
|
||||
(-> *blit-displays-work* progress-interp-dest)
|
||||
@@ -1194,41 +980,18 @@ vf31: cam 0 (premultiplied by hmge)
|
||||
)
|
||||
)
|
||||
(else
|
||||
(let* ((a0-66 s4-1)
|
||||
(a1-53 (the-as dma-packet (-> a0-66 base)))
|
||||
)
|
||||
(set! (-> a1-53 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a1-53 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a1-53 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> a0-66 base) (the-as pointer (&+ a1-53 16)))
|
||||
)
|
||||
(let* ((a0-67 s4-1)
|
||||
(a1-55 (the-as gs-gif-tag (-> a0-67 base)))
|
||||
)
|
||||
(set! (-> a1-55 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a1-55 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> a0-67 base) (the-as pointer (&+ a1-55 16)))
|
||||
)
|
||||
(let* ((a0-68 s4-1)
|
||||
(a1-57 (-> a0-68 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) a1-57) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-57) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) a1-57) 2)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-57) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-rgbaq) a1-57) 4) (new 'static 'gs-rgbaq
|
||||
:q 1.0
|
||||
:a (the int (-> v1-0 current-fog erase-color w))
|
||||
:b (the int (-> v1-0 current-fog erase-color z))
|
||||
:g (the int (-> v1-0 current-fog erase-color y))
|
||||
:r (the int (-> v1-0 current-fog erase-color x))
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-57) 5) (gs-reg64 rgbaq))
|
||||
(set! (-> a0-68 base) (&+ a1-57 48))
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-1
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always)))
|
||||
(rgbaq (new 'static 'gs-rgbaq
|
||||
:q 1.0
|
||||
:a (the int (-> v1-0 current-fog erase-color w))
|
||||
:b (the int (-> v1-0 current-fog erase-color z))
|
||||
:g (the int (-> v1-0 current-fog erase-color y))
|
||||
:r (the int (-> v1-0 current-fog erase-color x))
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((v1-78 (the-as (inline-array qword) (-> s4-1 base))))
|
||||
(set! (-> v1-78 0 quad) (-> obj sprite-tmpl dma-vif quad))
|
||||
(set! (-> v1-78 1 quad) (-> obj sprite-tmpl quad 1))
|
||||
@@ -1241,20 +1004,6 @@ vf31: cam 0 (premultiplied by hmge)
|
||||
(&+! (-> s4-1 base) 32)
|
||||
)
|
||||
)
|
||||
(let ((a3-35 (-> s4-1 base)))
|
||||
(let ((v1-85 (the-as dma-packet (-> s4-1 base))))
|
||||
(set! (-> v1-85 dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
(set! (-> v1-85 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> v1-85 vif1) (new 'static 'vif-tag))
|
||||
(set! (-> s4-1 base) (the-as pointer (&+ v1-85 16)))
|
||||
)
|
||||
(dma-bucket-insert-tag
|
||||
(-> *display* frames (-> *display* on-screen) bucket-group)
|
||||
(bucket-id sky-draw)
|
||||
gp-1
|
||||
(the-as (pointer dma-tag) a3-35)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -38,21 +38,6 @@ across the screen. The resolution of the circle is defined by the number of "tur
|
||||
:flag-assert #x9000008c0
|
||||
)
|
||||
|
||||
(defmethod inspect sprite-distorter-sine-tables ((obj sprite-distorter-sine-tables))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj (-> obj type))
|
||||
(format #t "~1Taspx: ~f~%" (-> obj aspx))
|
||||
(format #t "~1Taspy: ~f~%" (-> obj aspy))
|
||||
(format #t "~1Tentry[128] @ #x~X~%" (-> obj entry))
|
||||
(format #t "~1Tientry[9] @ #x~X~%" (-> obj ientry))
|
||||
(format #t "~1Tgiftag: #<qword @ #x~X>~%" (-> obj giftag))
|
||||
(format #t "~1Tcolor: #<qword @ #x~X>~%" (-> obj color))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
(kmemopen global "sprite-distort-tables")
|
||||
(define *sprite-distorter-sine-tables* (new 'global 'sprite-distorter-sine-tables))
|
||||
@@ -83,8 +68,8 @@ across the screen. The resolution of the circle is defined by the number of "tur
|
||||
(let ((entry-idx 0)
|
||||
(ientry-idx 0)
|
||||
(turns 3)
|
||||
(cam-aspx (- (-> *math-camera* perspective data 0)))
|
||||
(cam-aspy (- (-> *math-camera* perspective data 5)))
|
||||
(cam-aspx (- (-> *math-camera* perspective vector 0 x)))
|
||||
(cam-aspy (- (-> *math-camera* perspective vector 1 y)))
|
||||
)
|
||||
(when (or (!= cam-aspx (-> tbls aspx)) (!= cam-aspy (-> tbls aspy)))
|
||||
(set! (-> tbls aspx) cam-aspx)
|
||||
@@ -151,65 +136,41 @@ across the screen. The resolution of the circle is defined by the number of "tur
|
||||
(none)
|
||||
)
|
||||
|
||||
(define sprite-distort-vu1-block (new 'static 'vu-function :length 63 :qlength 32))
|
||||
(define sprite-distort-vu1-block (new 'static 'vu-function))
|
||||
|
||||
;; Sets up GS registers, adds a reference to *sprite-distorter-sine-tables*, and loads the VU program.
|
||||
(defun sprite-init-distorter ((dma-buff dma-buffer))
|
||||
(let* ((v1-0 dma-buff)
|
||||
(a1-0 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-0) dma) (new 'static 'dma-tag :qwc #x7 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a1-0) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a1-0) vif1) (new 'static 'vif-tag :imm #x7 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer a1-0) 16))
|
||||
)
|
||||
(let* ((v1-1 dma-buff)
|
||||
(a1-2 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a1-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x6))
|
||||
(set! (-> (the-as gs-gif-tag a1-2) regs) (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id a+d)
|
||||
:regs1 (gif-reg-id a+d)
|
||||
:regs2 (gif-reg-id a+d)
|
||||
:regs3 (gif-reg-id a+d)
|
||||
:regs4 (gif-reg-id a+d)
|
||||
:regs5 (gif-reg-id a+d)
|
||||
:regs6 (gif-reg-id a+d)
|
||||
:regs7 (gif-reg-id a+d)
|
||||
:regs8 (gif-reg-id a+d)
|
||||
:regs9 (gif-reg-id a+d)
|
||||
:regs10 (gif-reg-id a+d)
|
||||
:regs11 (gif-reg-id a+d)
|
||||
:regs12 (gif-reg-id a+d)
|
||||
:regs13 (gif-reg-id a+d)
|
||||
:regs14 (gif-reg-id a+d)
|
||||
:regs15 (gif-reg-id a+d)
|
||||
)
|
||||
)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a1-2) 16))
|
||||
)
|
||||
(let* ((v1-2 dma-buff)
|
||||
(a1-4 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) a1-4) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) a1-4) 2) (new 'static 'gs-tex0 :tbp0 #x3300 :tbw #x8 :tw #x9 :th #x9))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 3) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a1-4) 4) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 5) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-miptbp) a1-4) 6) (new 'static 'gs-miptbp))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 7) (gs-reg64 miptbp1-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) a1-4) 8) (new 'static 'gs-clamp
|
||||
:wms (gs-tex-wrap-mode region-clamp)
|
||||
:wmt (gs-tex-wrap-mode region-clamp)
|
||||
:maxu #x1ff
|
||||
:maxv #x19f
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 9) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a1-4) 10) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 11) (gs-reg64 alpha-1))
|
||||
(set! (-> v1-2 base) (&+ a1-4 96))
|
||||
"Sets up GS registers, adds a reference to *sprite-distorter-sine-tables*, and loads the VU program."
|
||||
(dma-buffer-add-gs-set dma-buff
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x3300 :tbw #x8 :tw #x9 :th #x9))
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(miptbp1-1 (new 'static 'gs-miptbp))
|
||||
(clamp-1 (new 'static 'gs-clamp
|
||||
:wms (gs-tex-wrap-mode region-clamp)
|
||||
:wmt (gs-tex-wrap-mode region-clamp)
|
||||
:maxu #x1ff
|
||||
:maxv #x19f
|
||||
)
|
||||
)
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
)
|
||||
;; send current aspect used by the sine tables (PC only)
|
||||
(#when PC_PORT
|
||||
(let ((packet (the-as dma-packet (-> dma-buff base))))
|
||||
(set! (-> packet dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc 1))
|
||||
(set! (-> packet vif0) (new 'static 'vif-tag))
|
||||
(set! (-> packet vif1) (new 'static 'vif-tag :cmd (vif-cmd pc-port)))
|
||||
(&+! (-> dma-buff base) 16)
|
||||
)
|
||||
(let ((aspect-vec (the-as vector (-> dma-buff base))))
|
||||
(set-vector! aspect-vec
|
||||
(-> *sprite-distorter-sine-tables* aspx)
|
||||
(-> *sprite-distorter-sine-tables* aspy)
|
||||
0.0
|
||||
0.0
|
||||
)
|
||||
(&+! (-> dma-buff base) 16)
|
||||
)
|
||||
)
|
||||
(let* ((v1-3 dma-buff)
|
||||
(a1-6 (the-as object (-> v1-3 base)))
|
||||
|
||||
@@ -262,7 +262,7 @@
|
||||
)
|
||||
)
|
||||
|
||||
(define sprite-glow-vu1-block (new 'static 'vu-function #|:length #x86 :qlength 67|#))
|
||||
(define sprite-glow-vu1-block (new 'static 'vu-function))
|
||||
|
||||
;; WARN: Return type mismatch vector vs none.
|
||||
(defun sprite-glow-init-consts ((arg0 sprite-glow-consts))
|
||||
|
||||
@@ -9,9 +9,6 @@
|
||||
the sprite renderer draw 2D or 3D sprites
|
||||
|#
|
||||
|
||||
;; TODO: glow is commented out.
|
||||
;; TODO: distort is commented out.
|
||||
|
||||
(defenum sprite-aux-type
|
||||
:bitfield #f
|
||||
:type uint32
|
||||
@@ -37,20 +34,9 @@ the sprite renderer draw 2D or 3D sprites
|
||||
:flag-assert #x900000010
|
||||
)
|
||||
|
||||
(defmethod inspect sprite-header ((obj sprite-header))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj 'sprite-header)
|
||||
(format #t "~1Theader[1] @ #x~X~%" (-> obj header))
|
||||
(format #t "~1Tnum-sprites: ~D~%" (-> obj num-sprites))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
(defun sprite-setup-header ((hdr sprite-header) (num-sprites int))
|
||||
"Setup a sprite-header for the given number of sprites"
|
||||
"Setup a sprite-header for the given number of sprites"
|
||||
(set! (-> hdr num-sprites) num-sprites)
|
||||
(none)
|
||||
)
|
||||
@@ -69,16 +55,6 @@ the sprite renderer draw 2D or 3D sprites
|
||||
:flag-assert #x9000004c0
|
||||
)
|
||||
|
||||
(defmethod inspect sprite-hvdf-data ((obj sprite-hvdf-data))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj 'sprite-hvdf-data)
|
||||
(format #t "~1Tdata[76] @ #x~X~%" (-> obj data))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
;; Each byte indicates if the corresponding entry in
|
||||
;; sprite-hvdf-data is allocated or not.
|
||||
@@ -90,17 +66,6 @@ the sprite renderer draw 2D or 3D sprites
|
||||
:flag-assert #x90000004c
|
||||
)
|
||||
|
||||
(defmethod inspect sprite-hvdf-control ((obj sprite-hvdf-control))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj 'sprite-hvdf-control)
|
||||
(format #t "~1Talloc[76] @ #x~X~%" (-> obj alloc))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
(define *sprite-hvdf-data* (new 'global 'sprite-hvdf-data))
|
||||
(define *sprite-hvdf-control* (new 'global 'sprite-hvdf-control))
|
||||
|
||||
@@ -156,16 +121,6 @@ the sprite renderer draw 2D or 3D sprites
|
||||
)
|
||||
)
|
||||
|
||||
(defmethod inspect sprite-aux-list ((obj sprite-aux-list))
|
||||
(format #t "[~X] sprite-aux-list:~%" obj)
|
||||
(format #t "~Tnum-entries: ~D~%" (-> obj num-entries))
|
||||
(format #t "~Tentry: ~D~%" (-> obj entry))
|
||||
(dotimes (s5-0 (-> obj entry))
|
||||
(format #t "~T~D : ~X~%" s5-0 (-> obj data s5-0))
|
||||
)
|
||||
(the-as sprite-aux-list #f)
|
||||
)
|
||||
|
||||
(define *sprite-aux-list* (new 'global 'sprite-aux-list 256))
|
||||
|
||||
(defun clear-sprite-aux-list ()
|
||||
@@ -426,7 +381,7 @@ the sprite renderer draw 2D or 3D sprites
|
||||
(none)
|
||||
)
|
||||
|
||||
(define sprite-vu1-block (new 'static 'vu-function :length 0 :qlength 0))
|
||||
(define sprite-vu1-block (new 'static 'vu-function))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;
|
||||
;; sprite-arrays
|
||||
@@ -475,8 +430,8 @@ the sprite renderer draw 2D or 3D sprites
|
||||
)
|
||||
|
||||
(let* ((sprite-count (+ group-0-size group-1-size))
|
||||
(vec-data-size (* 3 sprite-count))
|
||||
(adgif-data-size (* 5 sprite-count))
|
||||
(vec-data-size (* 3 sprite-count)) ;; 3 quadwords of vec-data per sprite
|
||||
(adgif-data-size (* 5 sprite-count)) ;; 5 quadwords of adgif data per sprite
|
||||
(v0-0 (object-new
|
||||
allocation
|
||||
type-to-make
|
||||
@@ -596,9 +551,9 @@ the sprite renderer draw 2D or 3D sprites
|
||||
(set! (-> a1-10 base) (&+ (the-as pointer pkt2) 16))
|
||||
)
|
||||
(let ((mtx2 (the-as matrix (-> dma-buff base)))
|
||||
(f1-0 (-> *math-camera* perspective data 0))
|
||||
(f2-0 (-> *math-camera* perspective data 5))
|
||||
(f0-1 (* -1.9996 (-> *math-camera* perspective data 0)))
|
||||
(f1-0 (-> *math-camera* perspective vector 0 x))
|
||||
(f2-0 (-> *math-camera* perspective vector 1 y))
|
||||
(f0-1 (* -1.9996 (-> *math-camera* perspective vector 0 x)))
|
||||
)
|
||||
(set-vector! (the-as vector (&+ (the-as pointer mtx2) 0)) f0-1 0.0 0.0 0.0)
|
||||
(set-vector! (the-as vector (&+ (the-as pointer mtx2) 16)) 0.0 (- (* (/ f2-0 f1-0) f0-1)) 0.0 0.0)
|
||||
@@ -828,53 +783,29 @@ the sprite renderer draw 2D or 3D sprites
|
||||
"Main sprite draw function."
|
||||
;; start of our DMA for all the sprite data
|
||||
(let ((dma-mem-begin (-> *display* frames (-> *display* on-screen) global-buf base)))
|
||||
;; draw in global-buf
|
||||
(let* ((dma-buff (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(dma-bucket-begin (-> dma-buff base))
|
||||
)
|
||||
(with-dma-buffer-add-bucket ((dma-buff (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(bucket-id particles)
|
||||
)
|
||||
|
||||
;; run the distorters
|
||||
; (when (or (zero? *screen-shot-work*) (= (-> *screen-shot-work* count) -1))
|
||||
; (sprite-init-distorter dma-buff)
|
||||
; (sprite-draw-distorters dma-buff)
|
||||
; )
|
||||
(when (or (zero? *screen-shot-work*) (= (-> *screen-shot-work* count) -1))
|
||||
(sprite-init-distorter dma-buff)
|
||||
(sprite-draw-distorters dma-buff)
|
||||
)
|
||||
|
||||
;; first packet - set up the GS registers
|
||||
(let* ((v1-17 dma-buff)
|
||||
(pkt1 (the-as dma-packet (-> v1-17 base)))
|
||||
)
|
||||
(set! (-> pkt1 dma) (new 'static 'dma-tag :qwc #x3 :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt1 vif1) (new 'static 'vif-tag :imm #x3 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-17 base) (&+ (the-as pointer pkt1) 16))
|
||||
)
|
||||
(let* ((v1-18 dma-buff)
|
||||
(giftag (the-as gs-gif-tag (-> v1-18 base)))
|
||||
)
|
||||
(set! (-> giftag tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x2))
|
||||
(set! (-> giftag regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-18 base) (the-as pointer (&+ giftag 16)))
|
||||
)
|
||||
(let* ((v1-19 dma-buff)
|
||||
(a0-10 (-> v1-19 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a0-10) 0)
|
||||
(new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:afail #x1
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-10) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) a0-10) 2)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-10) 3) (gs-reg64 clamp-1))
|
||||
(set! (-> v1-19 base) (&+ a0-10 32))
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buff
|
||||
(test-1 (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:afail #x1
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
)
|
||||
|
||||
;; load the VU1 code
|
||||
(dma-buffer-add-vu-function dma-buff sprite-vu1-block 1)
|
||||
@@ -959,20 +890,6 @@ the sprite renderer draw 2D or 3D sprites
|
||||
(set! (-> pkt6 vif1) (new 'static 'vif-tag :cmd (vif-cmd flushe) :msk #x1))
|
||||
(set! (-> v1-26 base) (&+ (the-as pointer pkt6) 16))
|
||||
)
|
||||
(let ((a3-0 (-> dma-buff base)))
|
||||
(let ((pkt7 (the-as dma-packet (-> dma-buff base))))
|
||||
(set! (-> pkt7 dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
(set! (-> pkt7 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt7 vif1) (new 'static 'vif-tag))
|
||||
(set! (-> dma-buff base) (&+ (the-as pointer pkt7) 16))
|
||||
)
|
||||
(dma-bucket-insert-tag
|
||||
(-> *display* frames (-> *display* on-screen) bucket-group)
|
||||
(bucket-id particles)
|
||||
dma-bucket-begin
|
||||
(the-as (pointer dma-tag) a3-0)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; update memory usage
|
||||
|
||||
@@ -937,34 +937,12 @@ additionally, some texture pages have a chunk system that allows more specific c
|
||||
The texture data itself is referenced, not copied into the dma-buffer."
|
||||
(while (> height 0)
|
||||
(let ((height-this-time (min 2048 height)))
|
||||
(let* ((v1-1 buf)
|
||||
(a0-1 (the-as dma-packet (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> a0-1 dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-1 vif1) (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-1 base) (the-as pointer (&+ a0-1 16)))
|
||||
)
|
||||
(let* ((v1-2 buf)
|
||||
(a0-3 (the-as gs-gif-tag (-> v1-2 base)))
|
||||
)
|
||||
(set! (-> a0-3 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x4))
|
||||
(set! (-> a0-3 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-2 base) (the-as pointer (&+ a0-3 16)))
|
||||
)
|
||||
(let* ((v1-3 buf)
|
||||
(a0-5 (-> v1-3 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-bitbltbuf) a0-5) 0) (new 'static 'gs-bitbltbuf :dbw (/ width 64) :dbp dest))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 bitbltbuf))
|
||||
(set! (-> (the-as (pointer gs-trxpos) a0-5) 2) (new 'static 'gs-trxpos))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 3) (gs-reg64 trxpos))
|
||||
(set! (-> (the-as (pointer gs-trxreg) a0-5) 4) (new 'static 'gs-trxreg :rrw width :rrh height-this-time))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 5) (gs-reg64 trxreg))
|
||||
(set! (-> (the-as (pointer gs-trxdir) a0-5) 6) (new 'static 'gs-trxdir))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 7) (gs-reg64 trxdir))
|
||||
(set! (-> v1-3 base) (&+ a0-5 64))
|
||||
)
|
||||
(dma-buffer-add-gs-set buf
|
||||
(bitbltbuf (new 'static 'gs-bitbltbuf :dbw (/ width 64) :dbp dest))
|
||||
(trxpos (new 'static 'gs-trxpos))
|
||||
(trxreg (new 'static 'gs-trxreg :rrw width :rrh height-this-time))
|
||||
(trxdir (new 'static 'gs-trxdir))
|
||||
)
|
||||
(dma-buffer-add-ref-texture buf data width height-this-time (gs-psm ct32))
|
||||
)
|
||||
(+! dest 4096)
|
||||
@@ -1092,28 +1070,7 @@ additionally, some texture pages have a chunk system that allows more specific c
|
||||
)
|
||||
|
||||
;; add a texflush.
|
||||
(let* ((v1-51 dma-buf)
|
||||
(a0-24 (the-as dma-packet (-> v1-51 base)))
|
||||
)
|
||||
(set! (-> a0-24 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-24 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-24 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-51 base) (the-as pointer (&+ a0-24 16)))
|
||||
)
|
||||
(let* ((v1-52 dma-buf)
|
||||
(a0-26 (the-as gs-gif-tag (-> v1-52 base)))
|
||||
)
|
||||
(set! (-> a0-26 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-26 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-52 base) (the-as pointer (&+ a0-26 16)))
|
||||
)
|
||||
(let* ((v1-53 dma-buf)
|
||||
(a0-28 (-> v1-53 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-28) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-28) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-53 base) (&+ a0-28 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buf (texflush 1))
|
||||
|
||||
(#when PC_PORT
|
||||
(dma-buffer-add-cnt-vif2 dma-buf 1 (new 'static 'vif-tag :cmd (vif-cmd pc-port)) (the-as vif-tag 3))
|
||||
@@ -1288,9 +1245,9 @@ additionally, some texture pages have a chunk system that allows more specific c
|
||||
(return 0)
|
||||
)
|
||||
(let ((total-chunks-uploaded 0))
|
||||
(let* ((dma-buf (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(s4-0 (-> dma-buf base))
|
||||
)
|
||||
(with-dma-buffer-add-bucket ((dma-buf (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
bucket
|
||||
)
|
||||
(set! data-ptr (-> tpage segment 0 block-data))
|
||||
(set! vram-ptr (shr (-> tpage segment 0 dest) 12))
|
||||
(set! tpage-num-chunks (the-as int (-> tpage size)))
|
||||
@@ -1344,43 +1301,7 @@ additionally, some texture pages have a chunk system that allows more specific c
|
||||
)
|
||||
(+! total-chunks-uploaded chunks-pending)
|
||||
)
|
||||
(let* ((v1-40 dma-buf)
|
||||
(a0-27 (the-as dma-packet (-> v1-40 base)))
|
||||
)
|
||||
(set! (-> a0-27 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-27 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-27 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-40 base) (the-as pointer (&+ a0-27 16)))
|
||||
)
|
||||
(let* ((v1-41 dma-buf)
|
||||
(a0-29 (the-as gs-gif-tag (-> v1-41 base)))
|
||||
)
|
||||
(set! (-> a0-29 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-29 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-41 base) (the-as pointer (&+ a0-29 16)))
|
||||
)
|
||||
(let* ((v1-42 dma-buf)
|
||||
(a0-31 (-> v1-42 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-31) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-31) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-42 base) (&+ a0-31 16))
|
||||
)
|
||||
|
||||
(let ((a3-5 (-> dma-buf base)))
|
||||
(let ((v1-43 (the-as dma-packet (-> dma-buf base))))
|
||||
(set! (-> v1-43 dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
(set! (-> v1-43 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> v1-43 vif1) (new 'static 'vif-tag))
|
||||
(set! (-> dma-buf base) (the-as pointer (&+ v1-43 16)))
|
||||
)
|
||||
(dma-bucket-insert-tag
|
||||
(-> *display* frames (-> *display* on-screen) bucket-group)
|
||||
bucket
|
||||
s4-0
|
||||
(the-as (pointer dma-tag) a3-5)
|
||||
)
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buf (texflush 1))
|
||||
)
|
||||
(shl total-chunks-uploaded 14)
|
||||
)
|
||||
@@ -1624,7 +1545,7 @@ additionally, some texture pages have a chunk system that allows more specific c
|
||||
)
|
||||
)
|
||||
(((tpage-category shrub))
|
||||
;; shrub: works just light tfrag
|
||||
;; shrub: works just like tfrag
|
||||
(let ((v1-11 (-> lev texture-mask 2))
|
||||
(a0-6 (-> lev texture-mask 13))
|
||||
)
|
||||
@@ -1645,7 +1566,7 @@ additionally, some texture pages have a chunk system that allows more specific c
|
||||
;; alpha has some special cases
|
||||
(cond
|
||||
((= (-> lev index) LEVEL_MAX) ;; default level
|
||||
;; if the auto-save-icon-flag is set, upload the alpha texture and clear flag.
|
||||
;; if the auto-save-icon-flag is set, clear flag and upload next time.
|
||||
(if (not (-> *bigmap* auto-save-icon-flag))
|
||||
(set! (-> lev upload-size 8)
|
||||
(upload-vram-pages pool (-> pool segment-common) tpage (tex-upload-mode seg0-1-2) bucket)
|
||||
@@ -1876,7 +1797,7 @@ additionally, some texture pages have a chunk system that allows more specific c
|
||||
)
|
||||
)
|
||||
(else
|
||||
;; otherwise, only upload level textures if not in mneu-mode.
|
||||
;; otherwise, only upload level textures if not in menu-mode.
|
||||
(if (not (-> *blit-displays-work* menu-mode))
|
||||
(add-level-tpage-dma
|
||||
arg0
|
||||
@@ -1933,28 +1854,7 @@ additionally, some texture pages have a chunk system that allows more specific c
|
||||
(set! (-> v1-0 end) (&-> v1-0 data-buffer (-> v1-0 allocated-length)))
|
||||
)
|
||||
(add-to-dma-buffer obj gp-0 arg0)
|
||||
(let* ((v1-3 gp-0)
|
||||
(a0-1 (the-as dma-packet (-> v1-3 base)))
|
||||
)
|
||||
(set! (-> a0-1 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-1 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-3 base) (the-as pointer (&+ a0-1 16)))
|
||||
)
|
||||
(let* ((v1-4 gp-0)
|
||||
(a0-3 (the-as gs-gif-tag (-> v1-4 base)))
|
||||
)
|
||||
(set! (-> a0-3 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-3 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-4 base) (the-as pointer (&+ a0-3 16)))
|
||||
)
|
||||
(let* ((v1-5 gp-0)
|
||||
(a0-5 (-> v1-5 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-5) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-5 base) (&+ a0-5 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set gp-0 (texflush 1))
|
||||
(let* ((v1-6 gp-0)
|
||||
(a0-7 (the-as object (-> v1-6 base)))
|
||||
)
|
||||
@@ -2016,42 +1916,20 @@ additionally, some texture pages have a chunk system that allows more specific c
|
||||
(let ((t1-1 (ash (-> tex w) (- v1-0)))
|
||||
(t2-3 (ash (-> tex h) (- v1-0)))
|
||||
)
|
||||
(let* ((t3-2 dma-buff)
|
||||
(t4-0 (the-as object (-> t3-2 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet t4-0) dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet t4-0) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet t4-0) vif1) (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> t3-2 base) (&+ (the-as pointer t4-0) 16))
|
||||
)
|
||||
(let* ((t3-3 dma-buff)
|
||||
(t4-2 (the-as object (-> t3-3 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t4-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x4))
|
||||
(set! (-> (the-as gs-gif-tag t4-2) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> t3-3 base) (&+ (the-as pointer t4-2) 16))
|
||||
)
|
||||
(let* ((t3-4 dma-buff)
|
||||
(t4-4 (-> t3-4 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-bitbltbuf) t4-4) 0) (new 'static 'gs-bitbltbuf
|
||||
:sbp (-> tex dest v1-0)
|
||||
:sbw (-> tex width v1-0)
|
||||
:spsm (the-as int (-> tex psm))
|
||||
:dbp (/ dest-loc 64)
|
||||
:dbw (-> tex width v1-0)
|
||||
:dpsm (the-as int dest-fmt)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t4-4) 1) (gs-reg64 bitbltbuf))
|
||||
(set! (-> (the-as (pointer gs-trxpos) t4-4) 2) (new 'static 'gs-trxpos))
|
||||
(set! (-> (the-as (pointer gs-reg64) t4-4) 3) (gs-reg64 trxpos))
|
||||
(set! (-> (the-as (pointer gs-trxreg) t4-4) 4) (new 'static 'gs-trxreg :rrw t1-1 :rrh t2-3))
|
||||
(set! (-> (the-as (pointer gs-reg64) t4-4) 5) (gs-reg64 trxreg))
|
||||
(set! (-> (the-as (pointer gs-trxdir) t4-4) 6) (new 'static 'gs-trxdir :xdir #x2))
|
||||
(set! (-> (the-as (pointer gs-reg64) t4-4) 7) (gs-reg64 trxdir))
|
||||
(set! (-> t3-4 base) (&+ t4-4 64))
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buff
|
||||
(bitbltbuf (new 'static 'gs-bitbltbuf
|
||||
:sbp (-> tex dest v1-0)
|
||||
:sbw (-> tex width v1-0)
|
||||
:spsm (the-as int (-> tex psm))
|
||||
:dbp (/ dest-loc 64)
|
||||
:dbw (-> tex width v1-0)
|
||||
:dpsm (the-as int dest-fmt)
|
||||
)
|
||||
)
|
||||
(trxpos (new 'static 'gs-trxpos))
|
||||
(trxreg (new 'static 'gs-trxreg :rrw t1-1 :rrh t2-3))
|
||||
(trxdir (new 'static 'gs-trxdir :xdir #x2))
|
||||
)
|
||||
)
|
||||
(set! (-> tex dest v1-0) (the-as uint (/ dest-loc 64)))
|
||||
)
|
||||
@@ -2059,81 +1937,37 @@ additionally, some texture pages have a chunk system that allows more specific c
|
||||
((< clut-dst 0)
|
||||
)
|
||||
((= (-> tex psm) (gs-psm mt4))
|
||||
(let* ((v1-7 dma-buff)
|
||||
(a2-2 (the-as object (-> v1-7 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a2-2) dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a2-2) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a2-2) vif1) (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-7 base) (&+ (the-as pointer a2-2) 16))
|
||||
)
|
||||
(let* ((v1-8 dma-buff)
|
||||
(a2-4 (the-as object (-> v1-8 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a2-4) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x4))
|
||||
(set! (-> (the-as gs-gif-tag a2-4) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-8 base) (&+ (the-as pointer a2-4) 16))
|
||||
)
|
||||
(let* ((v1-9 dma-buff)
|
||||
(a2-6 (-> v1-9 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-bitbltbuf) a2-6) 0) (new 'static 'gs-bitbltbuf
|
||||
:sbw #x1
|
||||
:dbw #x1
|
||||
:dpsm (-> tex clutpsm)
|
||||
:dbp (/ clut-dst 64)
|
||||
:spsm (-> tex clutpsm)
|
||||
:sbp (-> tex clutdest)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-6) 1) (gs-reg64 bitbltbuf))
|
||||
(set! (-> (the-as (pointer gs-trxpos) a2-6) 2) (new 'static 'gs-trxpos))
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-6) 3) (gs-reg64 trxpos))
|
||||
(set! (-> (the-as (pointer gs-trxreg) a2-6) 4) (new 'static 'gs-trxreg :rrw #x8 :rrh #x2))
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-6) 5) (gs-reg64 trxreg))
|
||||
(set! (-> (the-as (pointer gs-trxdir) a2-6) 6) (new 'static 'gs-trxdir :xdir #x2))
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-6) 7) (gs-reg64 trxdir))
|
||||
(set! (-> v1-9 base) (&+ a2-6 64))
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buff
|
||||
(bitbltbuf (new 'static 'gs-bitbltbuf
|
||||
:sbw #x1
|
||||
:dbw #x1
|
||||
:dpsm (-> tex clutpsm)
|
||||
:dbp (/ clut-dst 64)
|
||||
:spsm (-> tex clutpsm)
|
||||
:sbp (-> tex clutdest)
|
||||
)
|
||||
)
|
||||
(trxpos (new 'static 'gs-trxpos))
|
||||
(trxreg (new 'static 'gs-trxreg :rrw #x8 :rrh #x2))
|
||||
(trxdir (new 'static 'gs-trxdir :xdir #x2))
|
||||
)
|
||||
(set! (-> tex clutdest) (the-as uint (/ clut-dst 64)))
|
||||
)
|
||||
((= (-> tex psm) (gs-psm mt8))
|
||||
(let* ((v1-13 dma-buff)
|
||||
(a2-9 (the-as object (-> v1-13 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a2-9) dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a2-9) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a2-9) vif1) (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-13 base) (&+ (the-as pointer a2-9) 16))
|
||||
)
|
||||
(let* ((v1-14 dma-buff)
|
||||
(a2-11 (the-as object (-> v1-14 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a2-11) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x4))
|
||||
(set! (-> (the-as gs-gif-tag a2-11) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-14 base) (&+ (the-as pointer a2-11) 16))
|
||||
)
|
||||
(let* ((v1-15 dma-buff)
|
||||
(a2-13 (-> v1-15 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-bitbltbuf) a2-13) 0) (new 'static 'gs-bitbltbuf
|
||||
:sbw #x2
|
||||
:dbw #x2
|
||||
:dpsm (-> tex clutpsm)
|
||||
:dbp (/ clut-dst 64)
|
||||
:spsm (-> tex clutpsm)
|
||||
:sbp (-> tex clutdest)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-13) 1) (gs-reg64 bitbltbuf))
|
||||
(set! (-> (the-as (pointer gs-trxpos) a2-13) 2) (new 'static 'gs-trxpos))
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-13) 3) (gs-reg64 trxpos))
|
||||
(set! (-> (the-as (pointer gs-trxreg) a2-13) 4) (new 'static 'gs-trxreg :rrw #x10 :rrh #x10))
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-13) 5) (gs-reg64 trxreg))
|
||||
(set! (-> (the-as (pointer gs-trxdir) a2-13) 6) (new 'static 'gs-trxdir :xdir #x2))
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-13) 7) (gs-reg64 trxdir))
|
||||
(set! (-> v1-15 base) (&+ a2-13 64))
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buff
|
||||
(bitbltbuf (new 'static 'gs-bitbltbuf
|
||||
:sbw #x2
|
||||
:dbw #x2
|
||||
:dpsm (-> tex clutpsm)
|
||||
:dbp (/ clut-dst 64)
|
||||
:spsm (-> tex clutpsm)
|
||||
:sbp (-> tex clutdest)
|
||||
)
|
||||
)
|
||||
(trxpos (new 'static 'gs-trxpos))
|
||||
(trxreg (new 'static 'gs-trxreg :rrw #x10 :rrh #x10))
|
||||
(trxdir (new 'static 'gs-trxdir :xdir #x2))
|
||||
)
|
||||
(set! (-> tex clutdest) (the-as uint (/ clut-dst 64)))
|
||||
)
|
||||
)
|
||||
@@ -2209,28 +2043,7 @@ additionally, some texture pages have a chunk system that allows more specific c
|
||||
(texture-relocate s4-0 s3-5 s2-5 (the-as gs-psm s1-5) -1)
|
||||
(font-set-tex0 (the-as (pointer gs-tex0) (-> *font-work* large-font-3-tmpl)) s3-5 s2-5 s1-5 sv-20)
|
||||
)
|
||||
(let* ((v1-28 s4-0)
|
||||
(a0-26 (the-as dma-packet (-> v1-28 base)))
|
||||
)
|
||||
(set! (-> a0-26 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-26 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-26 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-28 base) (the-as pointer (&+ a0-26 16)))
|
||||
)
|
||||
(let* ((v1-29 s4-0)
|
||||
(a0-28 (the-as gs-gif-tag (-> v1-29 base)))
|
||||
)
|
||||
(set! (-> a0-28 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-28 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-29 base) (the-as pointer (&+ a0-28 16)))
|
||||
)
|
||||
(let* ((v1-30 s4-0)
|
||||
(a0-30 (-> v1-30 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-30) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-30) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-30 base) (&+ a0-30 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-0 (texflush 1))
|
||||
(let* ((v1-31 s4-0)
|
||||
(a0-32 (the-as object (-> v1-31 base)))
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(define tnear-vu1-block (new 'static 'vu-function :length #x38b :qlength #x1c6))
|
||||
(define tnear-vu1-block (new 'static 'vu-function))
|
||||
|
||||
(defun-debug tfrag-details ((arg0 tfragment))
|
||||
(format 0 "id = ~d~%" (-> arg0 id))
|
||||
|
||||
@@ -186,7 +186,7 @@
|
||||
|
||||
(define *tfrag-display-stats* #f)
|
||||
|
||||
(define tfrag-vu1-block (new 'static 'vu-function :length 0 :qlength 0))
|
||||
(define tfrag-vu1-block (new 'static 'vu-function))
|
||||
|
||||
(defun tfrag-data-setup ((arg0 tfrag-data) (arg1 int) (arg2 int))
|
||||
(let ((v1-0 *math-camera*))
|
||||
|
||||
@@ -274,7 +274,7 @@
|
||||
:flag-assert #x9000000a0
|
||||
)
|
||||
|
||||
(define tie-vu1-block (new 'static 'vu-function :length 0 :qlength 0))
|
||||
(define tie-vu1-block (new 'static 'vu-function))
|
||||
|
||||
(defun tie-init-consts ((arg0 tie-consts) (arg1 gs-alpha) (arg2 gs-test) (arg3 gs-test))
|
||||
(set! (-> arg0 adgif tag) (new 'static 'gif-tag64 :nloop #x5 :nreg #x1))
|
||||
@@ -395,28 +395,7 @@
|
||||
)
|
||||
|
||||
(defun tie-end-buffer ((arg0 dma-buffer))
|
||||
(let* ((v1-0 arg0)
|
||||
(a1-0 (the-as dma-packet (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> a1-0 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a1-0 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a1-0 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (the-as pointer (&+ a1-0 16)))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a1-2 (the-as gs-gif-tag (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> a1-2 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a1-2 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (the-as pointer (&+ a1-2 16)))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a1-4 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a1-4) 0) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest greater-equal)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 1) (gs-reg64 test-1))
|
||||
(set! (-> v1-2 base) (&+ a1-4 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0 (test-1 (new 'static 'gs-test :zte #x1 :ztst (gs-ztest greater-equal))))
|
||||
(let* ((v1-3 arg0)
|
||||
(a1-6 (the-as dma-packet (-> v1-3 base)))
|
||||
)
|
||||
@@ -432,10 +411,10 @@
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 1) (new 'static 'vif-tag :cmd (vif-cmd stmod)))
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 2) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 3) (new 'static 'vif-tag :cmd (vif-cmd strow) :msk #x1))
|
||||
(set! (-> (the-as (pointer int32) a0-1) 4) 0)
|
||||
(set! (-> (the-as (pointer int32) a0-1) 5) 0)
|
||||
(set! (-> (the-as (pointer int32) a0-1) 6) 0)
|
||||
(set! (-> (the-as (pointer int32) a0-1) 7) 0)
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 4) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 5) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 6) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 7) (new 'static 'vif-tag))
|
||||
(set! (-> v1-4 base) (&+ a0-1 32))
|
||||
)
|
||||
0
|
||||
|
||||
@@ -7,6 +7,18 @@
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(defun fx-copy-buf ((arg0 dma-buffer))
|
||||
"draw the current framebuffer to tbp #x3300 (13056)"
|
||||
(#when PC_PORT
|
||||
(dma-buffer-add-cnt-vif2 arg0 1 (new 'static 'vif-tag :cmd (vif-cmd pc-port) :imm #x10) ;; kind - buffer->texture
|
||||
(new 'static 'vif-tag :cmd (vif-cmd pc-port) :imm #x3300))
|
||||
(dma-buffer-add-uint128 arg0 0)
|
||||
)
|
||||
(set-dirty-mask! (-> *level* default-level) 5 #xd0000 #x4c000)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
(define *warp-shader* (new 'static 'adgif-shader
|
||||
:reg-0 #x6
|
||||
:reg-1 #x14
|
||||
|
||||
@@ -594,41 +594,17 @@
|
||||
(unpack-comp-rle (the-as (pointer int8) sv-16) (the-as (pointer int8) (-> arg0 data)))
|
||||
(&+! (-> s4-0 base) (logand -16 (+ (shr (* gp-0 s5-0) 1) 15)))
|
||||
)
|
||||
(let* ((s3-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(s4-1 (-> s3-0 base))
|
||||
)
|
||||
(with-dma-buffer-add-bucket ((s3-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(bucket-id subtitle)
|
||||
)
|
||||
(upload-vram-data s3-0 0 (-> arg0 palette) 2 8)
|
||||
(let ((s0-0 20))
|
||||
(let* ((v1-13 s3-0)
|
||||
(a0-7 (the-as object (-> v1-13 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-7) dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-7) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-7) vif1) (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-13 base) (the-as pointer (the-as gs-gif-tag (&+ (the-as pointer a0-7) 16))))
|
||||
)
|
||||
(let* ((v1-14 s3-0)
|
||||
(a0-9 (the-as gs-gif-tag (-> v1-14 base)))
|
||||
)
|
||||
(set! (-> a0-9 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x4))
|
||||
(set! (-> a0-9 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-14 base) (the-as pointer (&+ a0-9 16)))
|
||||
)
|
||||
(let* ((v1-15 s3-0)
|
||||
(a0-11 (-> v1-15 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-bitbltbuf) a0-11) 0)
|
||||
(new 'static 'gs-bitbltbuf :dbp #x1 :dbw (shr gp-0 6) :dpsm s0-0)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-11) 1) (gs-reg64 bitbltbuf))
|
||||
(set! (-> (the-as (pointer gs-trxpos) a0-11) 2) (new 'static 'gs-trxpos))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-11) 3) (gs-reg64 trxpos))
|
||||
(set! (-> (the-as (pointer gs-trxreg) a0-11) 4) (new 'static 'gs-trxreg :rrw gp-0 :rrh s5-0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-11) 5) (gs-reg64 trxreg))
|
||||
(set! (-> (the-as (pointer gs-trxdir) a0-11) 6) (new 'static 'gs-trxdir))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-11) 7) (gs-reg64 trxdir))
|
||||
(set! (-> v1-15 base) (&+ a0-11 64))
|
||||
)
|
||||
(dma-buffer-add-gs-set s3-0
|
||||
(bitbltbuf (new 'static 'gs-bitbltbuf :dbp #x1 :dbw (shr gp-0 6) :dpsm s0-0))
|
||||
(trxpos (new 'static 'gs-trxpos))
|
||||
(trxreg (new 'static 'gs-trxreg :rrw gp-0 :rrh s5-0))
|
||||
(trxdir (new 'static 'gs-trxdir))
|
||||
)
|
||||
(let ((t9-2 dma-buffer-add-ref-texture)
|
||||
(a0-13 s3-0)
|
||||
(a2-8 gp-0)
|
||||
@@ -639,44 +615,14 @@
|
||||
)
|
||||
(set! sv-32 (+ (log2 (the-as int (+ gp-0 -1))) 1))
|
||||
(let ((v1-17 (+ (log2 (the-as int (+ s5-0 -1))) 1)))
|
||||
(let* ((a0-16 s3-0)
|
||||
(a1-23 (the-as object (-> a0-16 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-23) dma) (new 'static 'dma-tag :qwc #x7 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a1-23) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a1-23) vif1) (new 'static 'vif-tag :imm #x7 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> a0-16 base) (the-as pointer (the-as gs-gif-tag (&+ (the-as pointer a1-23) 16))))
|
||||
)
|
||||
(let* ((a0-17 s3-0)
|
||||
(a1-25 (the-as object (-> a0-17 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a1-25) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x6))
|
||||
(set! (-> (the-as gs-gif-tag a1-25) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> a0-17 base) (&+ (the-as pointer a1-25) 16))
|
||||
)
|
||||
(let* ((a0-18 s3-0)
|
||||
(a1-27 (-> a0-18 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a1-27) 0)
|
||||
(new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-27) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a1-27) 2) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-27) 3) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) a1-27) 4)
|
||||
(new 'static 'gs-tex0 :tbp0 #x1 :tcc #x1 :cld #x1 :psm s0-0 :th v1-17 :tw sv-32 :tbw (shr gp-0 6))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-27) 5) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a1-27) 6) (new 'static 'gs-tex1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-27) 7) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) a1-27) 8)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-27) 9) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer uint64) a1-27) 10) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-27) 11) (gs-reg64 texflush))
|
||||
(set! (-> a0-18 base) (&+ a1-27 96))
|
||||
)
|
||||
(dma-buffer-add-gs-set s3-0
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always)))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x1 :tcc #x1 :cld #x1 :psm s0-0 :th v1-17 :tw sv-32 :tbw (shr gp-0 6)))
|
||||
(tex1-1 (new 'static 'gs-tex1))
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
(texflush 0)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let* ((v1-28 (-> s3-0 base))
|
||||
@@ -690,30 +636,10 @@
|
||||
(set! (-> (the-as (pointer uint128) v1-28) 0) (-> *subtitle-work* draw-tmpl dma-vif quad))
|
||||
(set! (-> (the-as (pointer uint128) v1-28) 1) (-> *subtitle-work* draw-tmpl quad 1))
|
||||
(set! (-> (the-as (pointer uint128) v1-28) 2) (-> *subtitle-work* color0 quad))
|
||||
(let ((t0-8 (the-as gs-gif-tag (&+ v1-28 48))))
|
||||
(set! (-> t0-8 word 0) (the-as uint 0))
|
||||
(set! (-> t0-8 word 1) (the-as uint 0))
|
||||
(set! (-> t0-8 word 2) (the-as uint 0))
|
||||
(set! (-> t0-8 word 3) (the-as uint 0))
|
||||
)
|
||||
(let ((t0-9 (the-as object (&+ v1-28 64))))
|
||||
(set! (-> (the-as gs-gif-tag t0-9) word 0) (* a2-23 16))
|
||||
(set! (-> (the-as gs-gif-tag t0-9) word 1) (the-as uint (* a3-8 16)))
|
||||
(set! (-> (the-as gs-gif-tag t0-9) word 2) (the-as uint 0))
|
||||
(set! (-> (the-as gs-gif-tag t0-9) word 3) (the-as uint 0))
|
||||
)
|
||||
(let ((a2-26 (the-as object (&+ v1-28 80))))
|
||||
(set! (-> (the-as gs-gif-tag a2-26) word 0) (* gp-0 16))
|
||||
(set! (-> (the-as gs-gif-tag a2-26) word 1) (* s5-0 16))
|
||||
(set! (-> (the-as gs-gif-tag a2-26) word 2) (the-as uint 0))
|
||||
(set! (-> (the-as gs-gif-tag a2-26) word 3) (the-as uint 0))
|
||||
)
|
||||
(let ((v1-29 (the-as object (&+ v1-28 96))))
|
||||
(set! (-> (the-as gs-gif-tag v1-29) word 0) (* a0-23 16))
|
||||
(set! (-> (the-as gs-gif-tag v1-29) word 1) (the-as uint (* a1-33 16)))
|
||||
(set! (-> (the-as gs-gif-tag v1-29) word 2) (the-as uint 0))
|
||||
(set! (-> (the-as gs-gif-tag v1-29) word 3) (the-as uint 0))
|
||||
)
|
||||
(set-vector! (the-as vector4w (&+ v1-28 48)) 0 0 0 0)
|
||||
(set-vector! (the-as vector4w (&+ v1-28 64)) (the-as int (* a2-23 16)) (* a3-8 16) 0 0)
|
||||
(set-vector! (the-as vector4w (&+ v1-28 80)) (the-as int (* gp-0 16)) (the-as int (* s5-0 16)) 0 0)
|
||||
(set-vector! (the-as vector4w (&+ v1-28 96)) (the-as int (* a0-23 16)) (* a1-33 16) 0 0)
|
||||
)
|
||||
(&+! (-> s3-0 base) 112)
|
||||
(let* ((v1-32 (-> s3-0 base))
|
||||
@@ -727,49 +653,16 @@
|
||||
(set! (-> (the-as (pointer uint128) v1-32) 0) (-> *subtitle-work* draw-tmpl dma-vif quad))
|
||||
(set! (-> (the-as (pointer uint128) v1-32) 1) (-> *subtitle-work* draw-tmpl quad 1))
|
||||
(set! (-> (the-as (pointer uint128) v1-32) 2) (-> *subtitle-work* color1 quad))
|
||||
(let ((t0-16 (the-as gs-gif-tag (&+ v1-32 48))))
|
||||
(set! (-> t0-16 word 0) (the-as uint 0))
|
||||
(set! (-> t0-16 word 1) (the-as uint 0))
|
||||
(set! (-> t0-16 word 2) (the-as uint 0))
|
||||
(set! (-> t0-16 word 3) (the-as uint 0))
|
||||
)
|
||||
(let ((t0-17 (the-as object (&+ v1-32 64))))
|
||||
(set! (-> (the-as gs-gif-tag t0-17) word 0) (* a1-38 16))
|
||||
(set! (-> (the-as gs-gif-tag t0-17) word 1) (the-as uint (* a3-11 16)))
|
||||
(set! (-> (the-as gs-gif-tag t0-17) word 2) (the-as uint 0))
|
||||
(set! (-> (the-as gs-gif-tag t0-17) word 3) (the-as uint 0))
|
||||
)
|
||||
(let ((a1-41 (the-as object (&+ v1-32 80))))
|
||||
(set! (-> (the-as gs-gif-tag a1-41) word 0) (* gp-0 16))
|
||||
(set! (-> (the-as gs-gif-tag a1-41) word 1) (* s5-0 16))
|
||||
(set! (-> (the-as gs-gif-tag a1-41) word 2) (the-as uint 0))
|
||||
(set! (-> (the-as gs-gif-tag a1-41) word 3) (the-as uint 0))
|
||||
)
|
||||
(let ((v1-33 (the-as object (&+ v1-32 96))))
|
||||
(set! (-> (the-as gs-gif-tag v1-33) word 0) (* a0-30 16))
|
||||
(set! (-> (the-as gs-gif-tag v1-33) word 1) (the-as uint (* a2-28 16)))
|
||||
(set! (-> (the-as gs-gif-tag v1-33) word 2) (the-as uint 0))
|
||||
(set! (-> (the-as gs-gif-tag v1-33) word 3) (the-as uint 0))
|
||||
)
|
||||
(set-vector! (the-as vector4w (&+ v1-32 48)) 0 0 0 0)
|
||||
(set-vector! (the-as vector4w (&+ v1-32 64)) (the-as int (* a1-38 16)) (* a3-11 16) 0 0)
|
||||
(set-vector! (the-as vector4w (&+ v1-32 80)) (the-as int (* gp-0 16)) (the-as int (* s5-0 16)) 0 0)
|
||||
(set-vector! (the-as vector4w (&+ v1-32 96)) (the-as int (* a0-30 16)) (* a2-28 16) 0 0)
|
||||
)
|
||||
(&+! (-> s3-0 base) 112)
|
||||
(set-dirty-mask! (-> *level* default-level) 8 (the-as int (* gp-0 s5-0)) 256)
|
||||
(let ((a3-15 (-> s3-0 base)))
|
||||
(let ((v1-37 (the-as object (-> s3-0 base))))
|
||||
(set! (-> (the-as dma-packet v1-37) dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
(set! (-> (the-as dma-packet v1-37) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet v1-37) vif1) (new 'static 'vif-tag))
|
||||
(set! (-> s3-0 base) (&+ (the-as pointer v1-37) 16))
|
||||
)
|
||||
(dma-bucket-insert-tag
|
||||
(-> *display* frames (-> *display* on-screen) bucket-group)
|
||||
(bucket-id subtitle)
|
||||
s4-1
|
||||
(the-as (pointer dma-tag) a3-15)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
(defbehavior process-drawable-draw-subtitles process-drawable ()
|
||||
@@ -984,8 +877,7 @@
|
||||
(!= (-> *setting-control* user-current movie) (process->ppointer self))
|
||||
)
|
||||
*progress-process*
|
||||
;; modified
|
||||
(#if STREAM_PLAY_HACK #f (!= (get-status *gui-control* (the-as sound-id (-> self gui-id))) 3))
|
||||
(!= (get-status *gui-control* (the-as sound-id (-> self gui-id))) 3)
|
||||
)
|
||||
)
|
||||
(suspend)
|
||||
@@ -1062,7 +954,7 @@
|
||||
)
|
||||
(v1-167 (get-status *gui-control* (the-as sound-id a1-26)))
|
||||
)
|
||||
(#if STREAM_PLAY_HACK #f (not (or (= v1-167 (gui-status ready)) (= v1-167 (gui-status active)))))
|
||||
(not (or (= v1-167 (gui-status ready)) (= v1-167 (gui-status active))))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
(bigmap-method-19 (_type_) int 19)
|
||||
(bigmap-method-20 (_type_) int 20)
|
||||
(bigmap-method-21 (_type_ int int) int 21)
|
||||
(bigmap-method-22 (_type_ dma-buffer (pointer uint32) int int int int) none 22)
|
||||
(bigmap-method-22 (_type_ dma-buffer (pointer uint32) int int int gs-psm) none 22)
|
||||
(bigmap-method-23 (_type_) none 23)
|
||||
(bigmap-method-24 (_type_ dma-buffer) none 24)
|
||||
(bigmap-method-25 (_type_ dma-buffer) none 25)
|
||||
|
||||
@@ -219,40 +219,16 @@
|
||||
(none)
|
||||
)
|
||||
|
||||
(defmethod bigmap-method-22 bigmap ((obj bigmap) (arg0 dma-buffer) (arg1 (pointer uint32)) (arg2 int) (arg3 int) (arg4 int) (arg5 int))
|
||||
(defmethod bigmap-method-22 bigmap ((obj bigmap) (arg0 dma-buffer) (arg1 (pointer uint32)) (arg2 int) (arg3 int) (arg4 int) (arg5 gs-psm))
|
||||
(local-vars (sv-16 int))
|
||||
(set! sv-16 arg2)
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as dma-packet (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> a0-1 dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-1 vif1) (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (the-as pointer (&+ a0-1 16)))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x4))
|
||||
(set! (-> (the-as gs-gif-tag a0-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a0-3) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a0-5 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-bitbltbuf) a0-5) 0)
|
||||
(new 'static 'gs-bitbltbuf :dpsm arg5 :dbp sv-16 :dbw (/ arg3 64))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 bitbltbuf))
|
||||
(set! (-> (the-as (pointer gs-trxpos) a0-5) 2) (new 'static 'gs-trxpos))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 3) (gs-reg64 trxpos))
|
||||
(set! (-> (the-as (pointer gs-trxreg) a0-5) 4) (new 'static 'gs-trxreg :rrw arg3 :rrh arg4))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 5) (gs-reg64 trxreg))
|
||||
(set! (-> (the-as (pointer gs-trxdir) a0-5) 6) (new 'static 'gs-trxdir))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 7) (gs-reg64 trxdir))
|
||||
(set! (-> v1-2 base) (&+ a0-5 64))
|
||||
)
|
||||
(dma-buffer-add-ref-texture arg0 arg1 arg3 arg4 (the-as gs-psm arg5))
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(bitbltbuf (new 'static 'gs-bitbltbuf :dpsm (the-as int arg5) :dbp sv-16 :dbw (/ arg3 64)))
|
||||
(trxpos (new 'static 'gs-trxpos))
|
||||
(trxreg (new 'static 'gs-trxreg :rrw arg3 :rrh arg4))
|
||||
(trxdir (new 'static 'gs-trxdir))
|
||||
)
|
||||
(dma-buffer-add-ref-texture arg0 arg1 arg3 arg4 arg5)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
@@ -277,234 +253,60 @@
|
||||
(let ((v1-1 (-> s4-0 0))
|
||||
(s3-0 (-> s4-0 1))
|
||||
)
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ v1-1 16) (the-as uint s4-0))) 0 16 16 0)
|
||||
(let* ((v1-4 arg0)
|
||||
(a0-2 (the-as dma-packet (-> v1-4 base)))
|
||||
)
|
||||
(set! (-> a0-2 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-2 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-2 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-4 base) (the-as pointer (&+ a0-2 16)))
|
||||
)
|
||||
(let* ((v1-5 arg0)
|
||||
(a0-4 (the-as gs-gif-tag (-> v1-5 base)))
|
||||
)
|
||||
(set! (-> a0-4 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-4 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-5 base) (the-as pointer (&+ a0-4 16)))
|
||||
)
|
||||
(let* ((v1-6 arg0)
|
||||
(a0-6 (-> v1-6 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-6) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-6) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-6 base) (&+ a0-6 16))
|
||||
)
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ s3-0 16) (the-as uint s4-0))) 8 512 208 19)
|
||||
)
|
||||
(let* ((v1-10 arg0)
|
||||
(a0-9 (the-as dma-packet (-> v1-10 base)))
|
||||
)
|
||||
(set! (-> a0-9 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-9 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-9 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-10 base) (the-as pointer (&+ a0-9 16)))
|
||||
)
|
||||
(let* ((v1-11 arg0)
|
||||
(a0-11 (the-as gs-gif-tag (-> v1-11 base)))
|
||||
)
|
||||
(set! (-> a0-11 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a0-11 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-11 base) (the-as pointer (&+ a0-11 16)))
|
||||
)
|
||||
(let* ((v1-12 arg0)
|
||||
(a0-13 (-> v1-12 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-tex0) a0-13) 0)
|
||||
(new 'static 'gs-tex0 :tbp0 #x8 :tbw #x8 :psm #x13 :tw #x9 :th #x9 :cld #x1)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-13) 1) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a0-13) 2) (new 'static 'gs-tex1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-13) 3) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer int64) a0-13) 4) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-13) 5) (gs-reg64 texflush))
|
||||
(set! (-> v1-12 base) (&+ a0-13 48))
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ v1-1 16) (the-as uint s4-0))) 0 16 16 (gs-psm ct32))
|
||||
(dma-buffer-add-gs-set arg0 (texflush 1))
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ s3-0 16) (the-as uint s4-0))) 8 512 208 (gs-psm mt8))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x8 :tbw #x8 :psm #x13 :tw #x9 :th #x9 :cld #x1))
|
||||
(tex1-1 (new 'static 'gs-tex1))
|
||||
(texflush 1)
|
||||
)
|
||||
(bigmap-method-26 obj arg0 (-> obj x0) (-> obj y0) (-> obj x1) (-> obj y2))
|
||||
(let ((v1-16 (+ #x1a000 (-> s4-0 1))))
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ v1-16 16) (the-as uint s4-0))) 8 512 208 19)
|
||||
)
|
||||
(let* ((v1-19 arg0)
|
||||
(a0-18 (the-as dma-packet (-> v1-19 base)))
|
||||
)
|
||||
(set! (-> a0-18 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-18 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-18 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-19 base) (the-as pointer (&+ a0-18 16)))
|
||||
)
|
||||
(let* ((v1-20 arg0)
|
||||
(a0-20 (the-as gs-gif-tag (-> v1-20 base)))
|
||||
)
|
||||
(set! (-> a0-20 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-20 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-20 base) (the-as pointer (&+ a0-20 16)))
|
||||
)
|
||||
(let* ((v1-21 arg0)
|
||||
(a0-22 (-> v1-21 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-22) 0) 0)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-22) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-21 base) (&+ a0-22 16))
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ v1-16 16) (the-as uint s4-0))) 8 512 208 (gs-psm mt8))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0 (texflush 0))
|
||||
(bigmap-method-26 obj arg0 (-> obj x0) (-> obj y2) (-> obj x1) (-> obj y1))
|
||||
(let ((v1-25 (+ (-> s4-0 0) 1024))
|
||||
(s3-1 (+ #x34000 (-> s4-0 1)))
|
||||
)
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ v1-25 16) (the-as uint s4-0))) 0 16 16 0)
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ s3-1 16) (the-as uint s4-0))) 8 512 208 19)
|
||||
)
|
||||
(let* ((v1-31 arg0)
|
||||
(a0-28 (the-as dma-packet (-> v1-31 base)))
|
||||
)
|
||||
(set! (-> a0-28 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-28 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-28 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-31 base) (the-as pointer (&+ a0-28 16)))
|
||||
)
|
||||
(let* ((v1-32 arg0)
|
||||
(a0-30 (the-as gs-gif-tag (-> v1-32 base)))
|
||||
)
|
||||
(set! (-> a0-30 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a0-30 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-32 base) (the-as pointer (&+ a0-30 16)))
|
||||
)
|
||||
(let* ((v1-33 arg0)
|
||||
(a0-32 (-> v1-33 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-tex0) a0-32) 0)
|
||||
(new 'static 'gs-tex0 :tbp0 #x8 :tbw #x8 :psm #x13 :tw #x9 :th #x9 :tcc #x1 :cld #x1)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-32) 1) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a0-32) 2) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-32) 3) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer int64) a0-32) 4) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-32) 5) (gs-reg64 texflush))
|
||||
(set! (-> v1-33 base) (&+ a0-32 48))
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ v1-25 16) (the-as uint s4-0))) 0 16 16 (gs-psm ct32))
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ s3-1 16) (the-as uint s4-0))) 8 512 208 (gs-psm mt8))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x8 :tbw #x8 :psm #x13 :tw #x9 :th #x9 :tcc #x1 :cld #x1))
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(texflush 1)
|
||||
)
|
||||
(bigmap-method-26 obj arg0 (-> obj x0) (-> obj y0) (-> obj x1) (-> obj y2))
|
||||
(let ((v1-37 (+ #x4e000 (-> s4-0 1))))
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ v1-37 16) (the-as uint s4-0))) 8 512 208 19)
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ v1-37 16) (the-as uint s4-0))) 8 512 208 (gs-psm mt8))
|
||||
)
|
||||
)
|
||||
(let* ((v1-40 arg0)
|
||||
(a0-37 (the-as dma-packet (-> v1-40 base)))
|
||||
)
|
||||
(set! (-> a0-37 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-37 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-37 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-40 base) (the-as pointer (&+ a0-37 16)))
|
||||
)
|
||||
(let* ((v1-41 arg0)
|
||||
(a0-39 (the-as gs-gif-tag (-> v1-41 base)))
|
||||
)
|
||||
(set! (-> a0-39 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-39 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-41 base) (the-as pointer (&+ a0-39 16)))
|
||||
)
|
||||
(let* ((v1-42 arg0)
|
||||
(a0-41 (-> v1-42 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-41) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-41) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-42 base) (&+ a0-41 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0 (texflush 1))
|
||||
(bigmap-method-26 obj arg0 (-> obj x0) (-> obj y2) (-> obj x1) (-> obj y1))
|
||||
(none)
|
||||
)
|
||||
|
||||
(defmethod bigmap-method-25 bigmap ((obj bigmap) (arg0 dma-buffer))
|
||||
(let ((s4-0 (the-as (pointer uint32) (-> obj bigmap-image art-group))))
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ (-> s4-0 0) 16) (the-as uint s4-0))) 0 16 16 0)
|
||||
(let* ((v1-5 arg0)
|
||||
(a0-2 (the-as dma-packet (-> v1-5 base)))
|
||||
)
|
||||
(set! (-> a0-2 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-2 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-2 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-5 base) (the-as pointer (&+ a0-2 16)))
|
||||
)
|
||||
(let* ((v1-6 arg0)
|
||||
(a0-4 (the-as gs-gif-tag (-> v1-6 base)))
|
||||
)
|
||||
(set! (-> a0-4 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-4 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-6 base) (the-as pointer (&+ a0-4 16)))
|
||||
)
|
||||
(let* ((v1-7 arg0)
|
||||
(a0-6 (-> v1-7 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-6) 0) 0)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-6) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-7 base) (&+ a0-6 16))
|
||||
)
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ (-> s4-0 0) 16) (the-as uint s4-0))) 0 16 16 (gs-psm ct32))
|
||||
(dma-buffer-add-gs-set arg0 (texflush 0))
|
||||
(let ((v1-10 (+ (* (the int (-> obj scroll y)) 512) (-> s4-0 1))))
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ v1-10 16) (the-as int s4-0))) 8 512 208 19)
|
||||
)
|
||||
(let* ((v1-13 arg0)
|
||||
(a0-10 (the-as dma-packet (-> v1-13 base)))
|
||||
)
|
||||
(set! (-> a0-10 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-10 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-10 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-13 base) (the-as pointer (&+ a0-10 16)))
|
||||
)
|
||||
(let* ((v1-14 arg0)
|
||||
(a0-12 (the-as gs-gif-tag (-> v1-14 base)))
|
||||
)
|
||||
(set! (-> a0-12 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a0-12 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-14 base) (the-as pointer (&+ a0-12 16)))
|
||||
)
|
||||
(let* ((v1-15 arg0)
|
||||
(a0-14 (-> v1-15 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-tex0) a0-14) 0)
|
||||
(new 'static 'gs-tex0 :tbp0 #x8 :tbw #x8 :psm #x13 :tw #x9 :th #x9 :cld #x1)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-14) 1) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a0-14) 2) (new 'static 'gs-tex1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-14) 3) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer int64) a0-14) 4) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-14) 5) (gs-reg64 texflush))
|
||||
(set! (-> v1-15 base) (&+ a0-14 48))
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ v1-10 16) (the-as int s4-0))) 8 512 208 (gs-psm mt8))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x8 :tbw #x8 :psm #x13 :tw #x9 :th #x9 :cld #x1))
|
||||
(tex1-1 (new 'static 'gs-tex1))
|
||||
(texflush 1)
|
||||
)
|
||||
(bigmap-method-26 obj arg0 (-> obj x0) (-> obj y0) (-> obj x1) (-> obj y2))
|
||||
(let ((v1-21 (+ (* (+ (the int (-> obj scroll y)) 208) 512) (-> s4-0 1))))
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ v1-21 16) (the-as int s4-0))) 8 512 208 19)
|
||||
(bigmap-method-22 obj arg0 (the-as (pointer uint32) (+ (+ v1-21 16) (the-as int s4-0))) 8 512 208 (gs-psm mt8))
|
||||
)
|
||||
)
|
||||
(let* ((v1-24 arg0)
|
||||
(a0-19 (the-as dma-packet (-> v1-24 base)))
|
||||
)
|
||||
(set! (-> a0-19 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-19 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-19 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-24 base) (the-as pointer (&+ a0-19 16)))
|
||||
)
|
||||
(let* ((v1-25 arg0)
|
||||
(a0-21 (the-as gs-gif-tag (-> v1-25 base)))
|
||||
)
|
||||
(set! (-> a0-21 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-21 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-25 base) (the-as pointer (&+ a0-21 16)))
|
||||
)
|
||||
(let* ((v1-26 arg0)
|
||||
(a0-23 (-> v1-26 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-23) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-23) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-26 base) (&+ a0-23 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0 (texflush 1))
|
||||
(bigmap-method-26 obj arg0 (-> obj x0) (-> obj y2) (-> obj x1) (-> obj y1))
|
||||
(none)
|
||||
)
|
||||
@@ -781,34 +583,11 @@
|
||||
(with-dma-buffer-add-bucket ((s4-1 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(bucket-id tex-all-map)
|
||||
)
|
||||
(let ((v1-27 s4-1))
|
||||
(let ((a0-5 (the-as dma-packet (-> v1-27 base))))
|
||||
(set! (-> a0-5 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-5 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-5 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-27 base) (the-as pointer (&+ a0-5 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-28 s4-1))
|
||||
(let ((a0-7 (the-as gs-gif-tag (-> v1-28 base))))
|
||||
(set! (-> a0-7 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a0-7 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-28 base) (the-as pointer (&+ a0-7 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-29 s4-1))
|
||||
(let ((a0-9 (-> v1-29 base)))
|
||||
(set! (-> (the-as (pointer gs-test) a0-9) 0)
|
||||
(new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-9) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer int64) a0-9) 2) 68)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-9) 3) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer int64) a0-9) 4) 5)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-9) 5) (gs-reg64 clamp-1))
|
||||
(set! (-> v1-29 base) (&+ a0-9 48))
|
||||
)
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-1
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always)))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
)
|
||||
(if (= (-> obj bigmap-index) 20)
|
||||
(bigmap-method-25 obj s4-1)
|
||||
(bigmap-method-24 obj s4-1)
|
||||
|
||||
@@ -1905,34 +1905,11 @@
|
||||
)
|
||||
)
|
||||
(&+! (-> s5-0 base) 112)
|
||||
(let* ((v1-8 s5-0)
|
||||
(a0-4 (the-as dma-packet (-> v1-8 base)))
|
||||
)
|
||||
(set! (-> a0-4 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-4 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-4 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-8 base) (the-as pointer (&+ a0-4 16)))
|
||||
)
|
||||
(let* ((v1-9 s5-0)
|
||||
(a0-6 (the-as gs-gif-tag (-> v1-9 base)))
|
||||
)
|
||||
(set! (-> a0-6 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a0-6 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-9 base) (the-as pointer (&+ a0-6 16)))
|
||||
)
|
||||
(let* ((v1-10 s5-0)
|
||||
(a0-8 (-> v1-10 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-clamp) a0-8) 0) (new 'static 'gs-clamp))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-8) 1) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-test) a0-8) 2)
|
||||
(new 'static 'gs-test :ate #x1 :afail #x1 :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-8) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-texa) a0-8) 4) (new 'static 'gs-texa :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-8) 5) (gs-reg64 texa))
|
||||
(set! (-> v1-10 base) (&+ a0-8 48))
|
||||
)
|
||||
(dma-buffer-add-gs-set s5-0
|
||||
(clamp-1 (new 'static 'gs-clamp))
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :afail #x1 :zte #x1 :ztst (gs-ztest always)))
|
||||
(texa (new 'static 'gs-texa :ta1 #x80))
|
||||
)
|
||||
(let ((s3-1 (the-as object (-> s5-0 base))))
|
||||
;; PC PORT note : this fixes minimap stretching at non-4x3 aspeect ratio
|
||||
(let ((f30-0 (#if PC_PORT 1.0 (-> *video-params* relative-x-scale))))
|
||||
@@ -1999,28 +1976,7 @@
|
||||
)
|
||||
(seek! (-> obj frustum-alpha) f0-57 (-> pp clock seconds-per-frame))
|
||||
)
|
||||
(let* ((v1-55 s5-0)
|
||||
(a0-44 (the-as dma-packet (-> v1-55 base)))
|
||||
)
|
||||
(set! (-> a0-44 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-44 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-44 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-55 base) (the-as pointer (&+ a0-44 16)))
|
||||
)
|
||||
(let* ((v1-56 s5-0)
|
||||
(a0-46 (the-as gs-gif-tag (-> v1-56 base)))
|
||||
)
|
||||
(set! (-> a0-46 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-46 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-56 base) (the-as pointer (&+ a0-46 16)))
|
||||
)
|
||||
(let* ((v1-57 s5-0)
|
||||
(a0-48 (-> v1-57 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-xy-offset) a0-48) 0) (new 'static 'gs-xy-offset :ofx #x640 :ofy #x640))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-48) 1) (gs-reg64 xyoffset-1))
|
||||
(set! (-> v1-57 base) (&+ a0-48 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set s5-0 (xyoffset-1 (new 'static 'gs-xy-offset :ofx #x640 :ofy #x640)))
|
||||
(when (!= (-> obj frustum-alpha) 0.0)
|
||||
(let ((s3-2 (the-as connection-pers (-> *minimap* engine alive-list-override))))
|
||||
(while s3-2
|
||||
@@ -2076,34 +2032,11 @@
|
||||
(set! s3-6 (-> s3-6 next))
|
||||
)
|
||||
)
|
||||
(let* ((v1-105 s5-0)
|
||||
(a0-60 (the-as dma-packet (-> v1-105 base)))
|
||||
)
|
||||
(set! (-> a0-60 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-60 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-60 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-105 base) (the-as pointer (&+ a0-60 16)))
|
||||
)
|
||||
(let* ((v1-106 s5-0)
|
||||
(a0-62 (the-as gs-gif-tag (-> v1-106 base)))
|
||||
)
|
||||
(set! (-> a0-62 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a0-62 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-106 base) (the-as pointer (&+ a0-62 16)))
|
||||
)
|
||||
(let* ((v1-107 s5-0)
|
||||
(a0-64 (-> v1-107 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-frame) a0-64) 0)
|
||||
(new 'static 'gs-frame :fbw #x2 :fbmsk #xffffff :fbp (-> *map-texture-base* vram-page))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-64) 1) (gs-reg64 frame-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a0-64) 2) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-64) 3) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-xy-offset) a0-64) 4) (new 'static 'gs-xy-offset))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-64) 5) (gs-reg64 xyoffset-1))
|
||||
(set! (-> v1-107 base) (&+ a0-64 48))
|
||||
)
|
||||
(dma-buffer-add-gs-set s5-0
|
||||
(frame-1 (new 'static 'gs-frame :fbw #x2 :fbmsk #xffffff :fbp (-> *map-texture-base* vram-page)))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(xyoffset-1 (new 'static 'gs-xy-offset))
|
||||
)
|
||||
(let ((s3-7 (the-as object (-> s5-0 base))))
|
||||
(set! (-> (the-as (pointer uint128) s3-7)) (-> obj adgif-tmpl dma-vif quad))
|
||||
(set! (-> (the-as (pointer uint128) s3-7) 1) (-> obj adgif-tmpl quad 1))
|
||||
@@ -2131,48 +2064,21 @@
|
||||
(local-vars (a3-4 int) (t0-4 int) (sv-48 vector) (sv-52 matrix) (sv-56 vector))
|
||||
(let ((s5-0 (-> arg0 buf)))
|
||||
(reset-display-gs-state *display* s5-0)
|
||||
(let* ((v1-0 s5-0)
|
||||
(a0-2 (the-as dma-packet (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> a0-2 dma) (new 'static 'dma-tag :qwc #x7 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-2 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-2 vif1) (new 'static 'vif-tag :imm #x7 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (the-as pointer (&+ a0-2 16)))
|
||||
)
|
||||
(let* ((v1-1 s5-0)
|
||||
(a0-4 (the-as gs-gif-tag (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> a0-4 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x6))
|
||||
(set! (-> a0-4 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (the-as pointer (&+ a0-4 16)))
|
||||
)
|
||||
(let* ((s3-0 s5-0)
|
||||
(s2-0 (-> s3-0 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) s2-0) 0) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest greater-equal)))
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) s2-0) 2) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 3) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) s2-0) 4)
|
||||
(new 'static 'gs-tex0
|
||||
:tbw #x2
|
||||
:tcc #x1
|
||||
:th (log2 128)
|
||||
:tw (log2 128)
|
||||
:tbp0 (-> *map-texture-base* vram-block)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 5) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) s2-0) 6) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 7) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) s2-0) 8)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 9) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer uint64) s2-0) 10) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 11) (gs-reg64 texflush))
|
||||
(set! (-> s3-0 base) (&+ s2-0 96))
|
||||
)
|
||||
(dma-buffer-add-gs-set s5-0
|
||||
(test-1 (new 'static 'gs-test :zte #x1 :ztst (gs-ztest greater-equal)))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(tex0-1 (new 'static 'gs-tex0
|
||||
:tbw #x2
|
||||
:tcc #x1
|
||||
:th (log2 128)
|
||||
:tw (log2 128)
|
||||
:tbp0 (-> *map-texture-base* vram-block)
|
||||
)
|
||||
)
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
(texflush 0)
|
||||
)
|
||||
(let ((f30-0 (-> *video-params* relative-x-scale)))
|
||||
(let ((v1-20 (the-as object (-> s5-0 base)))
|
||||
(t0-0 (the int (* 112.0 f30-0)))
|
||||
@@ -2220,30 +2126,9 @@
|
||||
)
|
||||
)
|
||||
(&+! (-> s5-0 base) 112)
|
||||
(let* ((v1-25 s5-0)
|
||||
(a0-20 (the-as dma-packet (-> v1-25 base)))
|
||||
)
|
||||
(set! (-> a0-20 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-20 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-20 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-25 base) (the-as pointer (&+ a0-20 16)))
|
||||
)
|
||||
(let* ((v1-26 s5-0)
|
||||
(a0-22 (the-as gs-gif-tag (-> v1-26 base)))
|
||||
)
|
||||
(set! (-> a0-22 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-22 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-26 base) (the-as pointer (&+ a0-22 16)))
|
||||
)
|
||||
(let* ((v1-27 s5-0)
|
||||
(a0-24 (-> v1-27 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a0-24) 0)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest greater) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-24) 1) (gs-reg64 test-1))
|
||||
(set! (-> v1-27 base) (&+ a0-24 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set s5-0
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest greater) :zte #x1 :ztst (gs-ztest always)))
|
||||
)
|
||||
(set! sv-48 (new-stack-vector0))
|
||||
(let ((v1-29 (new 'stack-no-clear 'matrix)))
|
||||
(set! (-> v1-29 quad 0) (the-as uint128 0))
|
||||
|
||||
@@ -459,7 +459,7 @@
|
||||
(cond
|
||||
(*progress-process*
|
||||
(deactivate (-> *progress-process* 0))
|
||||
(set! (-> *blit-displays-work* menu-mode) (the-as basic #t))
|
||||
(set! (-> *blit-displays-work* menu-mode) #t)
|
||||
(set! *progress-process* (process-spawn progress arg1 :to arg0 :stack (&-> *progress-stack* DPROCESS_STACK_SIZE)))
|
||||
(set-master-mode 'progress)
|
||||
)
|
||||
@@ -1412,7 +1412,7 @@
|
||||
)
|
||||
)
|
||||
(when (hud-hidden?)
|
||||
(set! (-> *blit-displays-work* menu-mode) (the-as basic #t))
|
||||
(set! (-> *blit-displays-work* menu-mode) #t)
|
||||
(set! (-> self pos-transition) (seek-ease
|
||||
(-> self pos-transition)
|
||||
f30-0
|
||||
|
||||
@@ -7,17 +7,16 @@
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
;; this file is debug only
|
||||
(declare-file (debug))
|
||||
|
||||
|
||||
|
||||
(defun gs-set-default-store-image ((arg0 gs-store-image-packet) (arg1 int) (arg2 int) (arg3 int) (arg4 int) (arg5 int) (arg6 int) (arg7 int))
|
||||
(defun gs-set-default-store-image ((arg0 gs-store-image-packet) (arg1 int) (arg2 int) (arg3 gs-psm) (arg4 int) (arg5 int) (arg6 int) (arg7 int))
|
||||
(set! (-> arg0 vifcode 0) (new 'static 'vif-tag))
|
||||
(set! (-> arg0 vifcode 1) (new 'static 'vif-tag :imm #x8000 :cmd (vif-cmd mskpath3)))
|
||||
(set! (-> arg0 vifcode 2) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> arg0 vifcode 3) (new 'static 'vif-tag :imm #x6 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> arg0 giftag) (new 'static 'gif-tag :nloop #x5 :eop #x1 :nreg #x1 :regs0 (gif-reg-id a+d)))
|
||||
(set! (-> arg0 bitbltbuf) (new 'static 'gs-bitbltbuf :sbp arg1 :sbw arg2 :spsm arg3))
|
||||
(set! (-> arg0 bitbltbuf) (new 'static 'gs-bitbltbuf :sbp arg1 :sbw arg2 :spsm (the-as int arg3)))
|
||||
(set! (-> arg0 bitbltbuf-addr) (gs-reg64 bitbltbuf))
|
||||
(set! (-> arg0 trxpos) (new 'static 'gs-trxpos :ssax arg4 :ssay arg5))
|
||||
(set! (-> arg0 trxpos-addr) (gs-reg64 trxpos))
|
||||
@@ -45,7 +44,7 @@
|
||||
(let ((s4-0 (new 'stack 'file-stream *image-name* 'write)))
|
||||
(let ((s3-0 (-> *display* frames (-> *display* on-screen) global-buf data)))
|
||||
(let ((s2-0 (new 'static 'gs-store-image-packet)))
|
||||
(gs-set-default-store-image s2-0 #x3300 (/ gp-0 64) 0 0 0 gp-0 s5-0)
|
||||
(gs-set-default-store-image s2-0 #x3300 (/ gp-0 64) (gs-psm ct32) 0 0 gp-0 s5-0)
|
||||
(flush-cache 0)
|
||||
(gs-store-image s2-0 s3-0)
|
||||
)
|
||||
@@ -57,6 +56,3 @@
|
||||
)
|
||||
0
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -553,46 +553,17 @@
|
||||
(defmethod draw-bars! profile-array ((obj profile-array) (arg0 dma-buffer) (arg1 int))
|
||||
"Draw the two bars at the top."
|
||||
(local-vars (sv-16 (function _varargs_ object)) (sv-32 (function _varargs_ object)))
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-1) dma) (new 'static 'dma-tag :qwc #xa :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-1) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-1) vif1) (new 'static 'vif-tag :imm #xa :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer a0-1) 16))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x9))
|
||||
(set! (-> (the-as gs-gif-tag a0-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a0-3) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a0-5 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-alpha) a0-5) 0) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-zbuf) a0-5) 2) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 3) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) a0-5) 4) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 5) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer uint64) a0-5) 6) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 7) (gs-reg64 pabe))
|
||||
(set! (-> (the-as (pointer gs-clamp) a0-5) 8)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 9) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a0-5) 10) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 11) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-texa) a0-5) 12) (new 'static 'gs-texa :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 13) (gs-reg64 texa))
|
||||
(set! (-> (the-as (pointer gs-texclut) a0-5) 14) (new 'static 'gs-texclut :cbw #x4))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 15) (gs-reg64 texclut))
|
||||
(set! (-> (the-as (pointer uint64) a0-5) 16) (the-as uint *fog-color*))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 17) (gs-reg64 fogcol))
|
||||
(set! (-> v1-2 base) (&+ a0-5 144))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(test-1 (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)))
|
||||
(pabe 0)
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(texa (new 'static 'gs-texa :ta1 #x80))
|
||||
(texclut (new 'static 'gs-texclut :cbw #x4))
|
||||
(fogcol *fog-color*)
|
||||
)
|
||||
(let ((v1-5 (* (+ *profile-x* (/ *profile-w* 2)) 16))
|
||||
(a0-9 (-> arg0 base))
|
||||
)
|
||||
|
||||
@@ -37,34 +37,11 @@
|
||||
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(bucket-id sky-draw)
|
||||
)
|
||||
(let ((v1-17 s4-0))
|
||||
(let ((a0-6 (the-as dma-packet (-> v1-17 base))))
|
||||
(set! (-> a0-6 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-6 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-6 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-17 base) (the-as pointer (&+ a0-6 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-18 s4-0))
|
||||
(let ((a0-8 (the-as gs-gif-tag (-> v1-18 base))))
|
||||
(set! (-> a0-8 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a0-8 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-18 base) (the-as pointer (&+ a0-8 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-19 s4-0))
|
||||
(let ((a0-10 (-> v1-19 base)))
|
||||
(set! (-> (the-as (pointer gs-zbuf) a0-10) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-10) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) a0-10) 2)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-10) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-rgbaq) a0-10) 4) (new 'static 'gs-rgbaq :b #x40 :q 1.0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-10) 5) (gs-reg64 rgbaq))
|
||||
(set! (-> v1-19 base) (&+ a0-10 48))
|
||||
)
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-0
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always)))
|
||||
(rgbaq (new 'static 'gs-rgbaq :b #x40 :q 1.0))
|
||||
)
|
||||
(let ((v1-20 (-> s4-0 base)))
|
||||
(set! (-> (the-as (pointer uint128) v1-20)) (-> *sky-work* sprite-tmpl dma-vif quad))
|
||||
(set! (-> (the-as (pointer uint128) v1-20) 1) (-> *sky-work* sprite-tmpl quad 1))
|
||||
@@ -75,46 +52,24 @@
|
||||
(set-vector! (the-as vector4w (&+ v1-23 16)) #x9000 #x8d00 0 0)
|
||||
)
|
||||
(&+! (-> s4-0 base) 32)
|
||||
(let ((v1-27 s4-0))
|
||||
(let ((a0-19 (the-as dma-packet (-> v1-27 base))))
|
||||
(set! (-> a0-19 dma) (new 'static 'dma-tag :qwc #x6 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-19 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-19 vif1) (new 'static 'vif-tag :imm #x6 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-27 base) (the-as pointer (&+ a0-19 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-28 s4-0))
|
||||
(let ((a0-21 (the-as gs-gif-tag (-> v1-28 base))))
|
||||
(set! (-> a0-21 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x5))
|
||||
(set! (-> a0-21 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-28 base) (the-as pointer (&+ a0-21 16)))
|
||||
)
|
||||
)
|
||||
(let ((s3-0 s4-0))
|
||||
(let ((s2-0 (-> s3-0 base)))
|
||||
(set! (-> (the-as (pointer gs-tex0) s2-0) 0) (new 'static 'gs-tex0
|
||||
:tbp0 #x100
|
||||
:tbw #x2
|
||||
:psm #x1b
|
||||
:tcc #x1
|
||||
:cbp #x300
|
||||
:cld #x1
|
||||
:th (log2 128)
|
||||
:tw (log2 128)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 1) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) s2-0) 2) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 3) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) s2-0) 4) (new 'static 'gs-clamp))
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 5) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) s2-0) 6) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 7) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer uint64) s2-0) 8) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 9) (gs-reg64 texflush))
|
||||
(set! (-> s3-0 base) (&+ s2-0 80))
|
||||
)
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-0
|
||||
(tex0-1
|
||||
(new 'static 'gs-tex0
|
||||
:tbp0 #x100
|
||||
:tbw #x2
|
||||
:psm #x1b
|
||||
:tcc #x1
|
||||
:cbp #x300
|
||||
:cld #x1
|
||||
:th (log2 128)
|
||||
:tw (log2 128)
|
||||
)
|
||||
)
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(clamp-1 (new 'static 'gs-clamp))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(texflush 0)
|
||||
)
|
||||
(init-vortex-regs)
|
||||
;;(.lvf vf27 (&-> *vortex-work* giftag quad))
|
||||
(set-sky-vf27 (&-> *vortex-work* giftag quad))
|
||||
@@ -134,30 +89,10 @@
|
||||
(set! (-> s3-1 vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1 :imm v1-54))
|
||||
)
|
||||
)
|
||||
(let ((v1-58 s4-0))
|
||||
(let ((a0-32 (the-as dma-packet (-> v1-58 base))))
|
||||
(set! (-> a0-32 dma) (new 'static 'dma-tag :qwc #x3 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-32 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-32 vif1) (new 'static 'vif-tag :imm #x3 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-58 base) (the-as pointer (&+ a0-32 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-59 s4-0))
|
||||
(let ((a0-34 (the-as gs-gif-tag (-> v1-59 base))))
|
||||
(set! (-> a0-34 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x2))
|
||||
(set! (-> a0-34 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-59 base) (the-as pointer (&+ a0-34 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-60 s4-0))
|
||||
(let ((a0-36 (-> v1-60 base)))
|
||||
(set! (-> (the-as (pointer gs-alpha) a0-36) 0) (new 'static 'gs-alpha :b #x2 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-36) 1) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer uint64) a0-36) 2) (the-as uint 1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-36) 3) (gs-reg64 colclamp))
|
||||
(set! (-> v1-60 base) (&+ a0-36 32))
|
||||
)
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-0
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x2 :d #x1))
|
||||
(colclamp (new 'static 'gs-color-clamp :clamp #x1))
|
||||
)
|
||||
(set-tex-offset (the-as int (-> *vortex-work* off-s-1)) (the-as int (-> *vortex-work* off-t-1)))
|
||||
(let ((s3-2 (the-as dma-packet (-> s4-0 base))))
|
||||
(&+! (-> s4-0 base) 16)
|
||||
|
||||
@@ -767,10 +767,8 @@
|
||||
(function "2560 x 1440" #f ,(lambda () (set-size! *pc-settings* 2560 1440)))
|
||||
(function "2880 x 2160" #f ,(lambda () (set-size! *pc-settings* 2880 2160)))
|
||||
(function "3840 x 2160" #f ,(lambda () (set-size! *pc-settings* 3840 2160)))
|
||||
(function "512 x 224" #f ,(lambda () (set-size! *pc-settings* 512 224)))
|
||||
(function "512 x 256" #f ,(lambda () (set-size! *pc-settings* 512 256)))
|
||||
(function "512 x 448" #f ,(lambda () (set-size! *pc-settings* 512 448)))
|
||||
(function "512 x 512" #f ,(lambda () (set-size! *pc-settings* 512 512)))
|
||||
(function "512 x 416" #f ,(lambda () (set-size! *pc-settings* 512 416)))
|
||||
(function "512 x 208" #f ,(lambda () (set-size! *pc-settings* 512 208)))
|
||||
)
|
||||
(flag "Letterbox" #f ,(dm-lambda-boolean-flag (-> *pc-settings* letterbox?)))
|
||||
(flag "Hinttitles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* hinttitles?)))
|
||||
|
||||
+200
@@ -1364,8 +1364,208 @@
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro gs-reg-list (&rest reg-ids)
|
||||
"Generate a giftag register descriptor list from reg-ids."
|
||||
|
||||
(let ((reg-count (length reg-ids)))
|
||||
(when (> (length reg-ids) 16)
|
||||
(ferror "too many regs passed to gs-reg-list")
|
||||
)
|
||||
(let ((list-to-splice '())
|
||||
(cur-lst reg-ids)
|
||||
(i -1))
|
||||
|
||||
;; this is questionable.
|
||||
(while (and (not (null? cur-lst)) (< i 15))
|
||||
(push! list-to-splice (cons 'gif-reg-id (cons (car cur-lst) '())))
|
||||
(push! list-to-splice (string->symbol-format ":regs{}" (inc! i)))
|
||||
(pop! cur-lst)
|
||||
)
|
||||
|
||||
`(new 'static 'gif-tag-regs
|
||||
,@list-to-splice
|
||||
)
|
||||
)
|
||||
#| ;; the opengoal compiler does not have enough constant propagation for this for now
|
||||
(let ((i -1))
|
||||
|
||||
`(the-as gif-tag-regs (logior ,@(apply (lambda (x)
|
||||
`(shl (the-as uint (gif-reg-id ,x)) ,(* 4 (inc! i)))
|
||||
) reg-ids)
|
||||
))
|
||||
|
||||
)|#
|
||||
)
|
||||
)
|
||||
|
||||
;; dma-buffer
|
||||
|
||||
(defmacro dma-buffer-add-base-type (buf pkt dma-type &rest body)
|
||||
"Base macro for adding stuff to a dma-buffer. Don't use this directly!"
|
||||
|
||||
(with-gensyms (dma-buf)
|
||||
`(let* ((,dma-buf ,buf)
|
||||
(,pkt (the-as ,dma-type (-> ,dma-buf base))))
|
||||
|
||||
,@body
|
||||
|
||||
(set! (-> ,dma-buf base) (&+ (the-as pointer ,pkt) (size-of ,dma-type)))
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-base-data (buf data-type forms)
|
||||
"Base macro for adding data words to a dma-buffer.
|
||||
Each form in forms is converted into data-type and added to the buffer. NO TYPE CHECKING is performed, so be careful!"
|
||||
|
||||
(with-gensyms (dma-buf ptr)
|
||||
`(let* ((,dma-buf ,buf)
|
||||
(,ptr (the-as (pointer ,data-type) (-> ,dma-buf base))))
|
||||
|
||||
,@(apply-i (lambda (x i) `(set! (-> ,ptr ,i) (the-as ,data-type ,x))) forms)
|
||||
|
||||
(set! (-> ,dma-buf base) (&+ (the-as pointer ,ptr) (* ,(length forms) (size-of ,data-type))))
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
(defmacro dma-buffer-add-cnt-vif2 (buf qwc vif0 vif1)
|
||||
"Add a dma-packet to a dma-buffer.
|
||||
The packet is made up of a 'cnt' DMAtag (transfer qwc qwords of data after the tag and continue from after that point)
|
||||
and includes two vif-tags for vifcode, or something else if needed."
|
||||
|
||||
(with-gensyms (pkt)
|
||||
`(dma-buffer-add-base-type ,buf ,pkt dma-packet
|
||||
|
||||
(set! (-> ,pkt dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc ,qwc))
|
||||
|
||||
(set! (-> ,pkt vif0) ,vif0)
|
||||
(set! (-> ,pkt vif1) ,vif1)
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-ref-vif2 (buf qwc addr vif0 vif1)
|
||||
"Add a dma-packet to a dma-buffer.
|
||||
The packet is made up of a 'cnt' DMAtag (transfer qwc qwords of data at addr and continue from after the tag)
|
||||
and includes two vif-tags for vifcode, or something else if needed."
|
||||
|
||||
(with-gensyms (pkt)
|
||||
`(dma-buffer-add-base-type ,buf ,pkt dma-packet
|
||||
|
||||
(set! (-> ,pkt dma) (new 'static 'dma-tag :id (dma-tag-id ref) :qwc ,qwc :addr (the-as int ,addr)))
|
||||
|
||||
(set! (-> ,pkt vif0) ,vif0)
|
||||
(set! (-> ,pkt vif1) ,vif1)
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-ret (buf)
|
||||
"Add a dma-packet to a dma-buffer. This packet simply does a DMA 'return' "
|
||||
|
||||
(with-gensyms (pkt)
|
||||
`(dma-buffer-add-base-type ,buf ,pkt dma-packet
|
||||
|
||||
(set! (-> ,pkt dma) (new 'static 'dma-tag :id (dma-tag-id ret) :qwc 0))
|
||||
|
||||
(set! (-> ,pkt vif0) (new 'static 'vif-tag :cmd (vif-cmd nop)))
|
||||
(set! (-> ,pkt vif1) (new 'static 'vif-tag :cmd (vif-cmd nop)))
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-gif-tag (buf giftag gifregs)
|
||||
"Add a giftag to a dma-buffer."
|
||||
|
||||
(with-gensyms (pkt)
|
||||
`(dma-buffer-add-base-type ,buf ,pkt gs-gif-tag
|
||||
|
||||
(set! (-> ,pkt tag) ,giftag)
|
||||
|
||||
(set! (-> ,pkt regs) ,gifregs)
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-uint64 (buf &rest body)
|
||||
"Add 64-bit words to a dma-buffer. See dma-buffer-add-base-data"
|
||||
|
||||
`(dma-buffer-add-base-data ,buf uint64 ,body)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-uint128 (buf &rest body)
|
||||
"Add 128-bit words to a dma-buffer. See dma-buffer-add-base-data"
|
||||
|
||||
`(dma-buffer-add-base-data ,buf uint128 ,body)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-gs-set-flusha (buf &rest reg-list)
|
||||
"Add a gif cnt dma packet to a dma-buffer for setting GS registers. Up to 16 can be set at once.
|
||||
The packet runs the flusha command which waits for GIF transfer to end and VU1 microprogram to stop.
|
||||
reg-list is a list of pairs where the car is the register name and the cadr is the value to be set for that register."
|
||||
|
||||
(let ((reg-count (length reg-list))
|
||||
(qwc (+ (length reg-list) 1))
|
||||
(reg-names (apply first reg-list))
|
||||
(reg-datas (apply second reg-list))
|
||||
)
|
||||
`(begin
|
||||
;; dma tag
|
||||
(dma-buffer-add-cnt-vif2 ,buf ,qwc
|
||||
(new 'static 'vif-tag :cmd (vif-cmd flusha))
|
||||
(new 'static 'vif-tag :cmd (vif-cmd direct) :imm ,qwc)
|
||||
)
|
||||
|
||||
;; gif tag for editing gs regs
|
||||
(dma-buffer-add-gif-tag ,buf (new 'static 'gif-tag64 :nloop 1 :eop 1 :nreg ,reg-count)
|
||||
(gs-reg-list a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d)
|
||||
)
|
||||
|
||||
;; gs regs
|
||||
(dma-buffer-add-uint64 ,buf
|
||||
,@(apply2 (lambda (x) x) (lambda (x) `(gs-reg64 ,x)) reg-datas reg-names)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-gs-set (buf &rest reg-list)
|
||||
"Add a gif cnt dma packet to a dma-buffer for setting GS registers. Up to 16 can be set at once.
|
||||
reg-list is a list of pairs where the car is the register name and the cadr is the value to be set for that register."
|
||||
|
||||
(let ((reg-count (length reg-list))
|
||||
(qwc (+ (length reg-list) 1))
|
||||
(reg-names (apply first reg-list))
|
||||
(reg-datas (apply second reg-list))
|
||||
)
|
||||
`(begin
|
||||
;; dma tag
|
||||
(dma-buffer-add-cnt-vif2 ,buf ,qwc
|
||||
(new 'static 'vif-tag :cmd (vif-cmd nop))
|
||||
(new 'static 'vif-tag :cmd (vif-cmd direct) :imm ,qwc)
|
||||
)
|
||||
|
||||
;; gif tag for editing gs regs
|
||||
(dma-buffer-add-gif-tag ,buf (new 'static 'gif-tag64 :nloop 1 :eop 1 :nreg ,reg-count)
|
||||
(gs-reg-list a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d)
|
||||
)
|
||||
|
||||
;; gs regs
|
||||
(dma-buffer-add-uint64 ,buf
|
||||
,@(apply2 (lambda (x) x) (lambda (x) `(gs-reg64 ,x)) reg-datas reg-names)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro with-dma-bucket (bindings &rest body)
|
||||
"Start a new dma-bucket in body that will be finished at the end.
|
||||
The bindings are the dma-buffer, dma-bucket and bucket-id respectively."
|
||||
|
||||
+11
-54
@@ -129,19 +129,7 @@
|
||||
|
||||
;; definition for function tie-near-init-engine
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
;; WARN: Failed store: (s.w! (+ a0-2 8) a1-4) at op 19
|
||||
;; WARN: Failed store: (s.w! (+ a0-2 12) a1-6) at op 24
|
||||
;; WARN: Failed store: (s.w! (+ a0-6 8) a1-9) at op 40
|
||||
;; WARN: Failed store: (s.w! (+ a0-6 12) a1-10) at op 42
|
||||
;; WARN: Failed store: (s.w! (+ a0-8 8) 0) at op 49
|
||||
;; WARN: Failed store: (s.w! (+ a0-8 12) a1-12) at op 51
|
||||
;; WARN: Failed store: (s.w! (+ v1-7 4) a0-11) at op 58
|
||||
;; WARN: Failed store: (s.w! (+ v1-7 8) a0-12) at op 60
|
||||
;; WARN: Failed store: (s.w! (+ v1-7 12) a0-13) at op 62
|
||||
;; WARN: Failed store: (s.w! (+ v1-7 16) a0-14) at op 64
|
||||
;; WARN: Failed store: (s.w! (+ v1-7 20) a0-15) at op 66
|
||||
;; WARN: Failed store: (s.w! (+ v1-7 24) a0-16) at op 68
|
||||
;; WARN: Failed store: (s.w! (+ v1-7 28) a0-17) at op 70
|
||||
;; ERROR: Failed store: (s.w! (+ a0-2 8) a1-4) at op 19
|
||||
(defun tie-near-init-engine ((arg0 dma-buffer) (arg1 gs-test) (arg2 int))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask tie-near))
|
||||
(dma-buffer-add-vu-function arg0 tie-near-vu1-block 1)
|
||||
@@ -215,49 +203,18 @@
|
||||
|
||||
;; definition for function tie-near-end-buffer
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
;; WARN: Failed store: (s.w! (+ a1-0 8) 0) at op 7
|
||||
;; WARN: Failed store: (s.w! (+ a1-0 12) a2-1) at op 9
|
||||
;; WARN: Failed store: (s.d! (+ a1-2 8) a2-4) at op 18
|
||||
;; WARN: Failed store: (s.d! (+ a1-4 8) a2-6) at op 26
|
||||
;; WARN: Failed store: (s.w! (+ a1-6 8) a2-8) at op 34
|
||||
;; WARN: Failed store: (s.w! (+ a1-6 12) 0) at op 35
|
||||
;; WARN: Failed store: (s.w! (+ a0-1 4) a1-9) at op 43
|
||||
;; WARN: Failed store: (s.w! (+ a0-1 8) a1-10) at op 45
|
||||
;; WARN: Failed store: (s.w! (+ a0-1 12) a1-11) at op 47
|
||||
;; WARN: Failed store: (s.w! (+ a0-1 16) 0) at op 48
|
||||
;; WARN: Failed store: (s.w! (+ a0-1 20) 0) at op 49
|
||||
;; WARN: Failed store: (s.w! (+ a0-1 24) 0) at op 50
|
||||
;; WARN: Failed store: (s.w! (+ a0-1 28) 0) at op 51
|
||||
;; ERROR: Failed store: (s.w! (+ a1-0 8) 0) at op 7
|
||||
(defun tie-near-end-buffer ((arg0 dma-buffer))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask tie-near))
|
||||
(let* ((v1-2 arg0)
|
||||
(a1-0 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a1-0)) #x10000002)
|
||||
(s.w! (+ a1-0 8) 0)
|
||||
(let ((a2-1 #x50000002))
|
||||
(s.w! (+ a1-0 12) a2-1)
|
||||
)
|
||||
(set! (-> v1-2 base) (&+ a1-0 16))
|
||||
)
|
||||
(let* ((v1-3 arg0)
|
||||
(a1-2 (-> v1-3 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer uint64) a1-2)) (make-u128 0 (the-as uint #x1000000000008001)))
|
||||
(let ((a2-4 (the-as uint #xeeeeeeeeeeeeeeee)))
|
||||
(s.d! (+ a1-2 8) a2-4)
|
||||
)
|
||||
(set! (-> v1-3 base) (&+ a1-2 16))
|
||||
)
|
||||
(let* ((v1-4 arg0)
|
||||
(a1-4 (-> v1-4 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a1-4)) #x5026b)
|
||||
(let ((a2-6 71))
|
||||
(s.d! (+ a1-4 8) a2-6)
|
||||
)
|
||||
(set! (-> v1-4 base) (&+ a1-4 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0 (test-1 (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let* ((v1-5 arg0)
|
||||
(a1-6 (-> v1-5 base))
|
||||
)
|
||||
|
||||
+200
@@ -1284,6 +1284,206 @@
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro gs-reg-list (&rest reg-ids)
|
||||
"Generate a giftag register descriptor list from reg-ids."
|
||||
|
||||
(let ((reg-count (length reg-ids)))
|
||||
(when (> (length reg-ids) 16)
|
||||
(ferror "too many regs passed to gs-reg-list")
|
||||
)
|
||||
(let ((list-to-splice '())
|
||||
(cur-lst reg-ids)
|
||||
(i -1))
|
||||
|
||||
;; this is questionable.
|
||||
(while (and (not (null? cur-lst)) (< i 15))
|
||||
(push! list-to-splice (cons 'gif-reg-id (cons (car cur-lst) '())))
|
||||
(push! list-to-splice (string->symbol-format ":regs{}" (inc! i)))
|
||||
(pop! cur-lst)
|
||||
)
|
||||
|
||||
`(new 'static 'gif-tag-regs
|
||||
,@list-to-splice
|
||||
)
|
||||
)
|
||||
#| ;; the opengoal compiler does not have enough constant propagation for this for now
|
||||
(let ((i -1))
|
||||
|
||||
`(the-as gif-tag-regs (logior ,@(apply (lambda (x)
|
||||
`(shl (the-as uint (gif-reg-id ,x)) ,(* 4 (inc! i)))
|
||||
) reg-ids)
|
||||
))
|
||||
|
||||
)|#
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-base-type (buf pkt dma-type &rest body)
|
||||
"Base macro for adding stuff to a dma-buffer. Don't use this directly!"
|
||||
|
||||
(with-gensyms (dma-buf)
|
||||
`(let* ((,dma-buf ,buf)
|
||||
(,pkt (the-as ,dma-type (-> ,dma-buf base))))
|
||||
|
||||
,@body
|
||||
|
||||
(set! (-> ,dma-buf base) (&+ (the-as pointer ,pkt) (size-of ,dma-type)))
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-base-data (buf data-type forms)
|
||||
"Base macro for adding data words to a dma-buffer.
|
||||
Each form in forms is converted into data-type and added to the buffer. NO TYPE CHECKING is performed, so be careful!"
|
||||
|
||||
(with-gensyms (dma-buf ptr)
|
||||
`(let* ((,dma-buf ,buf)
|
||||
(,ptr (the-as (pointer ,data-type) (-> ,dma-buf base))))
|
||||
|
||||
,@(apply-i (lambda (x i) `(set! (-> ,ptr ,i) (the-as ,data-type ,x))) forms)
|
||||
|
||||
(set! (-> ,dma-buf base) (&+ (the-as pointer ,ptr) (* ,(length forms) (size-of ,data-type))))
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
(defmacro dma-buffer-add-cnt-vif2 (buf qwc vif0 vif1)
|
||||
"Add a dma-packet to a dma-buffer.
|
||||
The packet is made up of a 'cnt' DMAtag (transfer qwc qwords of data after the tag and continue from after that point)
|
||||
and includes two vif-tags for vifcode, or something else if needed."
|
||||
|
||||
(with-gensyms (pkt)
|
||||
`(dma-buffer-add-base-type ,buf ,pkt dma-packet
|
||||
|
||||
(set! (-> ,pkt dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc ,qwc))
|
||||
|
||||
(set! (-> ,pkt vif0) ,vif0)
|
||||
(set! (-> ,pkt vif1) ,vif1)
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-ref-vif2 (buf qwc addr vif0 vif1)
|
||||
"Add a dma-packet to a dma-buffer.
|
||||
The packet is made up of a 'cnt' DMAtag (transfer qwc qwords of data at addr and continue from after the tag)
|
||||
and includes two vif-tags for vifcode, or something else if needed."
|
||||
|
||||
(with-gensyms (pkt)
|
||||
`(dma-buffer-add-base-type ,buf ,pkt dma-packet
|
||||
|
||||
(set! (-> ,pkt dma) (new 'static 'dma-tag :id (dma-tag-id ref) :qwc ,qwc :addr (the-as int ,addr)))
|
||||
|
||||
(set! (-> ,pkt vif0) ,vif0)
|
||||
(set! (-> ,pkt vif1) ,vif1)
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-ret (buf)
|
||||
"Add a dma-packet to a dma-buffer. This packet simply does a DMA 'return' "
|
||||
|
||||
(with-gensyms (pkt)
|
||||
`(dma-buffer-add-base-type ,buf ,pkt dma-packet
|
||||
|
||||
(set! (-> ,pkt dma) (new 'static 'dma-tag :id (dma-tag-id ret) :qwc 0))
|
||||
|
||||
(set! (-> ,pkt vif0) (new 'static 'vif-tag :cmd (vif-cmd nop)))
|
||||
(set! (-> ,pkt vif1) (new 'static 'vif-tag :cmd (vif-cmd nop)))
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-gif-tag (buf giftag gifregs)
|
||||
"Add a giftag to a dma-buffer."
|
||||
|
||||
(with-gensyms (pkt)
|
||||
`(dma-buffer-add-base-type ,buf ,pkt gs-gif-tag
|
||||
|
||||
(set! (-> ,pkt tag) ,giftag)
|
||||
|
||||
(set! (-> ,pkt regs) ,gifregs)
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-uint64 (buf &rest body)
|
||||
"Add 64-bit words to a dma-buffer. See dma-buffer-add-base-data"
|
||||
|
||||
`(dma-buffer-add-base-data ,buf uint64 ,body)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-uint128 (buf &rest body)
|
||||
"Add 128-bit words to a dma-buffer. See dma-buffer-add-base-data"
|
||||
|
||||
`(dma-buffer-add-base-data ,buf uint128 ,body)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-gs-set-flusha (buf &rest reg-list)
|
||||
"Add a gif cnt dma packet to a dma-buffer for setting GS registers. Up to 16 can be set at once.
|
||||
The packet runs the flusha command which waits for GIF transfer to end and VU1 microprogram to stop.
|
||||
reg-list is a list of pairs where the car is the register name and the cadr is the value to be set for that register."
|
||||
|
||||
(let ((reg-count (length reg-list))
|
||||
(qwc (+ (length reg-list) 1))
|
||||
(reg-names (apply first reg-list))
|
||||
(reg-datas (apply second reg-list))
|
||||
)
|
||||
`(begin
|
||||
;; dma tag
|
||||
(dma-buffer-add-cnt-vif2 ,buf ,qwc
|
||||
(new 'static 'vif-tag :cmd (vif-cmd flusha))
|
||||
(new 'static 'vif-tag :cmd (vif-cmd direct) :imm ,qwc)
|
||||
)
|
||||
|
||||
;; gif tag for editing gs regs
|
||||
(dma-buffer-add-gif-tag ,buf (new 'static 'gif-tag64 :nloop 1 :eop 1 :nreg ,reg-count)
|
||||
(gs-reg-list a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d)
|
||||
)
|
||||
|
||||
;; gs regs
|
||||
(dma-buffer-add-uint64 ,buf
|
||||
,@(apply2 (lambda (x) x) (lambda (x) `(gs-reg64 ,x)) reg-datas reg-names)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dma-buffer-add-gs-set (buf &rest reg-list)
|
||||
"Add a gif cnt dma packet to a dma-buffer for setting GS registers. Up to 16 can be set at once.
|
||||
reg-list is a list of pairs where the car is the register name and the cadr is the value to be set for that register."
|
||||
|
||||
(let ((reg-count (length reg-list))
|
||||
(qwc (+ (length reg-list) 1))
|
||||
(reg-names (apply first reg-list))
|
||||
(reg-datas (apply second reg-list))
|
||||
)
|
||||
`(begin
|
||||
;; dma tag
|
||||
(dma-buffer-add-cnt-vif2 ,buf ,qwc
|
||||
(new 'static 'vif-tag :cmd (vif-cmd nop))
|
||||
(new 'static 'vif-tag :cmd (vif-cmd direct) :imm ,qwc)
|
||||
)
|
||||
|
||||
;; gif tag for editing gs regs
|
||||
(dma-buffer-add-gif-tag ,buf (new 'static 'gif-tag64 :nloop 1 :eop 1 :nreg ,reg-count)
|
||||
(gs-reg-list a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d a+d)
|
||||
)
|
||||
|
||||
;; gs regs
|
||||
(dma-buffer-add-uint64 ,buf
|
||||
,@(apply2 (lambda (x) x) (lambda (x) `(gs-reg64 ,x)) reg-datas reg-names)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro with-dma-bucket (bindings &rest body)
|
||||
"Start a new dma-bucket in body that will be finished at the end.
|
||||
The bindings are the dma-buffer, dma-bucket and bucket-id respectively."
|
||||
|
||||
+73
-94
@@ -664,68 +664,68 @@
|
||||
(with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) debug-buf))
|
||||
bucket
|
||||
)
|
||||
(let ((p0 (new 'stack 'vector4w)))
|
||||
(let ((p1 (new 'stack 'vector4w)))
|
||||
(set! (-> p0 quad) (-> start quad))
|
||||
(set! (-> p1 quad) (-> end quad))
|
||||
(set! (-> p0 x) (* (+ (-> p0 x) 2048) 16))
|
||||
(set! (-> p0 y) (* -16 (- 2048 (-> p0 y))))
|
||||
(set! (-> p0 z) #x7fffff)
|
||||
(set! (-> p1 x) (* (+ (-> p1 x) 2048) 16))
|
||||
(set! (-> p1 y) (* -16 (- 2048 (-> p1 y))))
|
||||
(set! (-> p1 z) #x7fffff)
|
||||
(let ((a0-18 (the-as (pointer uint64) (-> buf base))))
|
||||
(let* ((a1-7 buf)
|
||||
(a2-3 (the-as dma-packet (-> a1-7 base)))
|
||||
)
|
||||
(set! (-> a2-3 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> a2-3 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a2-3 vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> a1-7 base) (&+ (the-as pointer a2-3) 16))
|
||||
)
|
||||
(let* ((a1-8 buf)
|
||||
(giftag (the-as gs-gif-tag (-> a1-8 base)))
|
||||
)
|
||||
(set! (-> giftag tag) (new 'static 'gif-tag64
|
||||
:nloop #x1
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type line) :iip #x1 :abe #x1)
|
||||
:nreg #x4
|
||||
)
|
||||
)
|
||||
(set! (-> giftag regs) (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id rgbaq)
|
||||
:regs1 (gif-reg-id xyzf2)
|
||||
:regs2 (gif-reg-id rgbaq)
|
||||
:regs3 (gif-reg-id xyzf2)
|
||||
)
|
||||
)
|
||||
(set! (-> a1-8 base) (&+ (the-as pointer giftag) 16))
|
||||
)
|
||||
(let* ((a1-9 buf)
|
||||
(v0 (the-as vector4w-2 (-> a1-9 base)))
|
||||
)
|
||||
(set! (-> v0 vector 0 quad) (-> color quad))
|
||||
(set! (-> v0 vector 1 quad) (-> p0 quad))
|
||||
(set! (-> a1-9 base) (&+ (the-as pointer v0) 32))
|
||||
)
|
||||
(let* ((a1-10 buf)
|
||||
(v1 (the-as vector4w-2 (-> a1-10 base)))
|
||||
)
|
||||
(set! (-> v1 vector 0 quad) (-> color quad))
|
||||
(set! (-> v1 vector 1 quad) (-> p1 quad))
|
||||
(set! (-> a1-10 base) (&+ (the-as pointer v1) 32))
|
||||
)
|
||||
(let ((a1-14 (/ (the-as int (+ (- -16 (the-as int a0-18)) (the-as int (-> buf base)))) 16)))
|
||||
(cond
|
||||
((nonzero? a1-14)
|
||||
(logior! (-> a0-18 0) (shr (shl a1-14 48) 48))
|
||||
(logior! (-> a0-18 1) (shl (shr (shl a1-14 48) 48) 32))
|
||||
(let ((p0 (new 'stack 'vector4w))
|
||||
(p1 (new 'stack 'vector4w))
|
||||
)
|
||||
(set! (-> p0 quad) (-> start quad))
|
||||
(set! (-> p1 quad) (-> end quad))
|
||||
(set! (-> p0 x) (* (+ (-> p0 x) 2048) 16))
|
||||
(set! (-> p0 y) (* -16 (- 2048 (-> p0 y))))
|
||||
(set! (-> p0 z) #x7fffff)
|
||||
(set! (-> p1 x) (* (+ (-> p1 x) 2048) 16))
|
||||
(set! (-> p1 y) (* -16 (- 2048 (-> p1 y))))
|
||||
(set! (-> p1 z) #x7fffff)
|
||||
(let ((a0-18 (the-as (pointer uint64) (-> buf base))))
|
||||
(let* ((a1-7 buf)
|
||||
(a2-3 (the-as dma-packet (-> a1-7 base)))
|
||||
)
|
||||
(else
|
||||
(set! (-> buf base) a0-18)
|
||||
(set! (-> a2-3 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> a2-3 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a2-3 vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> a1-7 base) (&+ (the-as pointer a2-3) 16))
|
||||
)
|
||||
(let* ((a1-8 buf)
|
||||
(giftag (the-as gs-gif-tag (-> a1-8 base)))
|
||||
)
|
||||
(set! (-> giftag tag) (new 'static 'gif-tag64
|
||||
:nloop #x1
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type line) :iip #x1 :abe #x1)
|
||||
:nreg #x4
|
||||
)
|
||||
)
|
||||
(set! (-> giftag regs) (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id rgbaq)
|
||||
:regs1 (gif-reg-id xyzf2)
|
||||
:regs2 (gif-reg-id rgbaq)
|
||||
:regs3 (gif-reg-id xyzf2)
|
||||
)
|
||||
)
|
||||
(set! (-> a1-8 base) (&+ (the-as pointer giftag) 16))
|
||||
)
|
||||
(let* ((a1-9 buf)
|
||||
(v0 (the-as vector4w-2 (-> a1-9 base)))
|
||||
)
|
||||
(set! (-> v0 vector 0 quad) (-> color quad))
|
||||
(set! (-> v0 vector 1 quad) (-> p0 quad))
|
||||
(set! (-> a1-9 base) (&+ (the-as pointer v0) 32))
|
||||
)
|
||||
(let* ((a1-10 buf)
|
||||
(v1 (the-as vector4w-2 (-> a1-10 base)))
|
||||
)
|
||||
(set! (-> v1 vector 0 quad) (-> color quad))
|
||||
(set! (-> v1 vector 1 quad) (-> p1 quad))
|
||||
(set! (-> a1-10 base) (&+ (the-as pointer v1) 32))
|
||||
)
|
||||
(let ((a1-14 (/ (the-as int (+ (- -16 (the-as int a0-18)) (the-as int (-> buf base)))) 16)))
|
||||
(cond
|
||||
((nonzero? a1-14)
|
||||
(logior! (-> a0-18 0) (shr (shl a1-14 48) 48))
|
||||
(logior! (-> a0-18 1) (shl (shr (shl a1-14 48) 48) 32))
|
||||
)
|
||||
(else
|
||||
(set! (-> buf base) a0-18)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -1894,7 +1894,7 @@
|
||||
;; definition (debug) for function add-debug-bound
|
||||
;; INFO: Used lq/sq
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ v1-29 8) 0) at op 110
|
||||
;; ERROR: Failed store: (s.w! (+ a0-3 8) 0) at op 36
|
||||
;; WARN: Function add-debug-bound has a return type of none, but the expression builder found a return statement.
|
||||
(defun-debug add-debug-bound ((buf bucket-id) (pts (inline-array vector)) (c0 int) (c1 rgba) (flash rgba) (arg5 int))
|
||||
(local-vars (sv-16 pointer) (sv-32 int))
|
||||
@@ -1914,39 +1914,18 @@
|
||||
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
buf
|
||||
)
|
||||
(let ((v1-16 s4-0))
|
||||
(let ((a0-3 (the-as dma-packet (-> v1-16 base))))
|
||||
(set! (-> a0-3 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-3 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-3 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-16 base) (the-as pointer (the-as dma-packet (&+ a0-3 16))))
|
||||
)
|
||||
)
|
||||
(let ((v1-17 s4-0))
|
||||
(let ((a0-5 (the-as gs-gif-tag (-> v1-17 base))))
|
||||
(set! (-> a0-5 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a0-5 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-17 base) (the-as pointer (the-as gs-gif-tag (&+ a0-5 16))))
|
||||
)
|
||||
)
|
||||
(let ((v1-18 s4-0))
|
||||
(let ((a0-7 (-> v1-18 base)))
|
||||
(set! (-> (the-as (pointer gs-zbuf) a0-7) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-7) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) a0-7) 2) (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-7) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a0-7) 4) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-7) 5) (gs-reg64 alpha-1))
|
||||
(set! (-> v1-18 base) (&+ a0-7 48))
|
||||
)
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-0
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(test-1 (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
)
|
||||
(set! sv-16 (-> s4-0 base))
|
||||
(&+! (-> s4-0 base) 16)
|
||||
(add-boundary-shader (new 'static 'texture-id :index #x3 :page #x70c) s4-0)
|
||||
|
||||
+24
-80
@@ -1717,52 +1717,24 @@
|
||||
|
||||
;; definition for function default-init-buffer
|
||||
;; WARN: Return type mismatch symbol vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ t1-0 8) t2-1) at op 24
|
||||
(defun default-init-buffer ((arg0 bucket-id) (arg1 gs-zbuf) (arg2 gs-test))
|
||||
(let ((v1-6 (-> *display* frames (-> *display* on-screen) bucket-group arg0)))
|
||||
(when (!= v1-6 (-> v1-6 last))
|
||||
(let* ((a0-8 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(a3-3 (-> a0-8 base))
|
||||
)
|
||||
(let* ((t0-0 a0-8)
|
||||
(t1-0 (the-as dma-packet (-> t0-0 base)))
|
||||
)
|
||||
(set! (-> t1-0 dma) (new 'static 'dma-tag :qwc #xa :id (dma-tag-id cnt)))
|
||||
(set! (-> t1-0 vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> t1-0 vif1) (new 'static 'vif-tag :imm #xa :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> t0-0 base) (the-as pointer (&+ t1-0 16)))
|
||||
)
|
||||
(let* ((t0-1 a0-8)
|
||||
(t1-2 (the-as object (-> t0-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t1-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x9))
|
||||
(set! (-> (the-as gs-gif-tag t1-2) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> t0-1 base) (&+ (the-as pointer t1-2) 16))
|
||||
)
|
||||
(let* ((t0-2 a0-8)
|
||||
(t1-4 (-> t0-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) t1-4) 0) arg1)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) t1-4) 2) arg2)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) t1-4) 4) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 5) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer uint64) t1-4) 6) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 7) (gs-reg64 pabe))
|
||||
(set! (-> (the-as (pointer gs-clamp) t1-4) 8)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 9) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) t1-4) 10) (new 'static 'gs-tex0 :tbp0 #x60))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 11) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-texa) t1-4) 12) (new 'static 'gs-texa :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 13) (gs-reg64 texa))
|
||||
(set! (-> (the-as (pointer gs-texclut) t1-4) 14) (new 'static 'gs-texclut :cbw #x4))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 15) (gs-reg64 texclut))
|
||||
(set! (-> (the-as (pointer uint64) t1-4) 16) (the-as uint *fog-color*))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 17) (gs-reg64 fogcol))
|
||||
(set! (-> t0-2 base) (&+ t1-4 144))
|
||||
)
|
||||
(dma-buffer-add-gs-set-flusha a0-8
|
||||
(zbuf-1 arg1)
|
||||
(test-1 arg2)
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(pabe 0)
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(texa (new 'static 'gs-texa :ta1 #x80))
|
||||
(texclut (new 'static 'gs-texclut :cbw #x4))
|
||||
(fogcol *fog-color*)
|
||||
)
|
||||
(let ((a1-18 (the-as object (-> a0-8 base))))
|
||||
(set! (-> (the-as dma-packet a1-18) dma) (new 'static 'dma-tag :id (dma-tag-id next) :addr (-> v1-6 next)))
|
||||
(set! (-> (the-as dma-packet a1-18) vif0) (new 'static 'vif-tag))
|
||||
@@ -1778,52 +1750,24 @@
|
||||
|
||||
;; definition for function default-end-buffer
|
||||
;; WARN: Return type mismatch symbol vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ t1-0 8) t2-1) at op 24
|
||||
(defun default-end-buffer ((arg0 bucket-id) (arg1 gs-zbuf) (arg2 gs-test))
|
||||
(let ((v1-6 (-> *display* frames (-> *display* on-screen) bucket-group arg0)))
|
||||
(when (!= v1-6 (-> v1-6 last))
|
||||
(let* ((a3-2 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(a0-8 (-> a3-2 base))
|
||||
)
|
||||
(let* ((t0-1 a3-2)
|
||||
(t1-0 (the-as dma-packet (-> t0-1 base)))
|
||||
)
|
||||
(set! (-> t1-0 dma) (new 'static 'dma-tag :qwc #xa :id (dma-tag-id cnt)))
|
||||
(set! (-> t1-0 vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> t1-0 vif1) (new 'static 'vif-tag :imm #xa :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> t0-1 base) (the-as pointer (&+ t1-0 16)))
|
||||
)
|
||||
(let* ((t0-2 a3-2)
|
||||
(t1-2 (the-as object (-> t0-2 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t1-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x9))
|
||||
(set! (-> (the-as gs-gif-tag t1-2) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> t0-2 base) (&+ (the-as pointer t1-2) 16))
|
||||
)
|
||||
(let* ((t0-3 a3-2)
|
||||
(t1-4 (-> t0-3 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) t1-4) 0) arg1)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) t1-4) 2) arg2)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) t1-4) 4) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 5) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer uint64) t1-4) 6) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 7) (gs-reg64 pabe))
|
||||
(set! (-> (the-as (pointer gs-clamp) t1-4) 8)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 9) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) t1-4) 10) (new 'static 'gs-tex0 :tbp0 #x60))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 11) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-texa) t1-4) 12) (new 'static 'gs-texa :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 13) (gs-reg64 texa))
|
||||
(set! (-> (the-as (pointer gs-texclut) t1-4) 14) (new 'static 'gs-texclut :cbw #x4))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 15) (gs-reg64 texclut))
|
||||
(set! (-> (the-as (pointer uint64) t1-4) 16) (the-as uint *fog-color*))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-4) 17) (gs-reg64 fogcol))
|
||||
(set! (-> t0-3 base) (&+ t1-4 144))
|
||||
)
|
||||
(dma-buffer-add-gs-set-flusha a3-2
|
||||
(zbuf-1 arg1)
|
||||
(test-1 arg2)
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(pabe 0)
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(texa (new 'static 'gs-texa :ta1 #x80))
|
||||
(texclut (new 'static 'gs-texclut :cbw #x4))
|
||||
(fogcol *fog-color*)
|
||||
)
|
||||
(let ((t0-4 (-> a3-2 base)))
|
||||
(let ((a1-18 (the-as object (-> a3-2 base))))
|
||||
(set! (-> (the-as dma-packet a1-18) dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
|
||||
+4
-25
@@ -261,7 +261,7 @@
|
||||
|
||||
;; definition for method 9 of type screen-filter
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ v1-16 8) 0) at op 85
|
||||
;; ERROR: Failed store: (s.w! (+ a0-2 8) 0) at op 28
|
||||
(defmethod draw screen-filter ((obj screen-filter))
|
||||
(local-vars (v1-1 float))
|
||||
(rlet ((vf0 :class vf)
|
||||
@@ -288,30 +288,9 @@
|
||||
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(-> obj bucket)
|
||||
)
|
||||
(let ((v1-7 s4-0))
|
||||
(let ((a0-2 (the-as object (-> v1-7 base))))
|
||||
(set! (-> (the-as dma-packet a0-2) dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-2) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-2) vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-7 base) (&+ (the-as pointer a0-2) 16))
|
||||
)
|
||||
)
|
||||
(let ((v1-8 s4-0))
|
||||
(let ((a0-4 (the-as object (-> v1-8 base))))
|
||||
(set! (-> (the-as gs-gif-tag a0-4) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> (the-as gs-gif-tag a0-4) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-8 base) (&+ (the-as pointer a0-4) 16))
|
||||
)
|
||||
)
|
||||
(let ((v1-9 s4-0))
|
||||
(let ((a0-6 (-> v1-9 base)))
|
||||
(set! (-> (the-as (pointer gs-test) a0-6) 0)
|
||||
(new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-6) 1) (gs-reg64 test-1))
|
||||
(set! (-> v1-9 base) (&+ a0-6 16))
|
||||
)
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-0
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always)))
|
||||
)
|
||||
(let ((t1-0 (new 'static 'rgba
|
||||
:r (the int (-> obj color x))
|
||||
:g (the int (-> obj color y))
|
||||
|
||||
+1
-1
@@ -1229,7 +1229,7 @@
|
||||
(set! (-> *video-params* display-dy) (* (/ (-> s4-0 display-dy) 2) 2))
|
||||
)
|
||||
(set! (-> *blit-displays-work* horizontal-flip-flag)
|
||||
(the-as basic (logtest? (-> *game-info* secrets) (game-secrets hflip-screen)))
|
||||
(logtest? (-> *game-info* secrets) (game-secrets hflip-screen))
|
||||
)
|
||||
(set! (-> s5-0 allow-blackout) (-> s4-0 allow-blackout))
|
||||
(set! (-> s5-0 bg-a-speed) (-> s4-0 bg-a-speed))
|
||||
|
||||
+19
-23
@@ -3,25 +3,25 @@
|
||||
|
||||
;; definition of type blit-displays-work
|
||||
(deftype blit-displays-work (structure)
|
||||
((adgif-tmpl dma-gif-packet :inline :offset-assert 0)
|
||||
(sprite-tmpl dma-gif-packet :inline :offset-assert 32)
|
||||
(sprite-slow-tmpl dma-gif-packet :inline :offset-assert 64)
|
||||
(line-tmpl dma-gif-packet :inline :offset-assert 96)
|
||||
(scan-tmpl dma-gif-packet :inline :offset-assert 128)
|
||||
(color vector4w :inline :offset-assert 160)
|
||||
(line-color uint64 :offset-assert 176)
|
||||
(scan-colors vector4w 15 :inline :offset-assert 192)
|
||||
(menu-mode basic :offset-assert 432)
|
||||
(screen-copied basic :offset-assert 436)
|
||||
(vu1-enable-user-menu uint64 :offset-assert 440)
|
||||
(texture-enable-user-menu uint32 :offset-assert 448)
|
||||
(count-down uint32 :offset-assert 452)
|
||||
(horizontal-flip-flag basic :offset-assert 456)
|
||||
(scan-alpha float :offset-assert 460)
|
||||
(scanline uint32 :offset-assert 464)
|
||||
(progress-interp float :offset-assert 468)
|
||||
(progress-interp-dest float :offset-assert 472)
|
||||
(progress-interp-speed float :offset-assert 476)
|
||||
((adgif-tmpl dma-gif-packet :inline :offset-assert 0)
|
||||
(sprite-tmpl dma-gif-packet :inline :offset-assert 32)
|
||||
(sprite-slow-tmpl dma-gif-packet :inline :offset-assert 64)
|
||||
(line-tmpl dma-gif-packet :inline :offset-assert 96)
|
||||
(scan-tmpl dma-gif-packet :inline :offset-assert 128)
|
||||
(color vector4w :inline :offset-assert 160)
|
||||
(line-color uint64 :offset-assert 176)
|
||||
(scan-colors vector4w 15 :inline :offset-assert 192)
|
||||
(menu-mode symbol :offset-assert 432)
|
||||
(screen-copied symbol :offset-assert 436)
|
||||
(vu1-enable-user-menu vu1-renderer-mask :offset-assert 440)
|
||||
(texture-enable-user-menu uint32 :offset-assert 448)
|
||||
(count-down uint32 :offset-assert 452)
|
||||
(horizontal-flip-flag symbol :offset-assert 456)
|
||||
(scan-alpha float :offset-assert 460)
|
||||
(scanline uint32 :offset-assert 464)
|
||||
(progress-interp float :offset-assert 468)
|
||||
(progress-interp-dest float :offset-assert 472)
|
||||
(progress-interp-speed float :offset-assert 476)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x1e0
|
||||
@@ -60,7 +60,3 @@
|
||||
|
||||
;; failed to figure out what this is:
|
||||
0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+106
-1054
File diff suppressed because it is too large
Load Diff
+30
-112
@@ -292,133 +292,51 @@
|
||||
;; ERROR: function was not converted to expressions. Cannot decompile.
|
||||
|
||||
;; definition for function set-display-gs-state
|
||||
;; ERROR: Failed store: (s.w! (+ t3-0 8) t4-1) at op 7
|
||||
(defun set-display-gs-state ((arg0 dma-buffer) (arg1 int) (arg2 int) (arg3 int) (arg4 int) (arg5 int))
|
||||
(let ((t2-0 (/ (+ arg2 63) 64)))
|
||||
(let* ((v1-1 arg0)
|
||||
(t3-0 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet t3-0) dma) (new 'static 'dma-tag :qwc #x8 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet t3-0) vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> (the-as dma-packet t3-0) vif1) (new 'static 'vif-tag :imm #x8 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer t3-0) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(t3-2 (the-as object (-> v1-2 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t3-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x7))
|
||||
(set! (-> (the-as gs-gif-tag t3-2) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-2 base) (&+ (the-as pointer t3-2) 16))
|
||||
)
|
||||
(let* ((v1-3 arg0)
|
||||
(t3-4 (-> v1-3 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-scissor) t3-4) 0)
|
||||
(new 'static 'gs-scissor :scax1 (+ arg2 -1) :scay1 (+ arg3 -1))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 1) (gs-reg64 scissor-1))
|
||||
(set! (-> (the-as (pointer gs-xy-offset) t3-4) 2) (new 'static 'gs-xy-offset))
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 3) (gs-reg64 xyoffset-1))
|
||||
(set! (-> (the-as (pointer gs-frame) t3-4) 4)
|
||||
(new 'static 'gs-frame :fbp arg1 :fbw t2-0 :psm arg5 :fbmsk arg4)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 5) (gs-reg64 frame-1))
|
||||
(set! (-> (the-as (pointer gs-test) t3-4) 6) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)))
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 7) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-texa) t3-4) 8) (new 'static 'gs-texa :ta0 #x80 :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 9) (gs-reg64 texa))
|
||||
(set! (-> (the-as (pointer gs-zbuf) t3-4) 10) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 11) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer uint64) t3-4) 12) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 13) (gs-reg64 texflush))
|
||||
(set! (-> v1-3 base) (&+ t3-4 112))
|
||||
)
|
||||
(dma-buffer-add-gs-set-flusha arg0
|
||||
(scissor-1 (new 'static 'gs-scissor :scax1 (+ arg2 -1) :scay1 (+ arg3 -1)))
|
||||
(xyoffset-1 (new 'static 'gs-xy-offset))
|
||||
(frame-1 (new 'static 'gs-frame :fbp arg1 :fbw t2-0 :psm arg5 :fbmsk arg4))
|
||||
(test-1 (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)))
|
||||
(texa (new 'static 'gs-texa :ta0 #x80 :ta1 #x80))
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(texflush 0)
|
||||
)
|
||||
)
|
||||
arg0
|
||||
)
|
||||
|
||||
;; definition for function set-display-gs-state-offset
|
||||
;; ERROR: Failed store: (s.w! (+ t5-0 8) t6-1) at op 7
|
||||
(defun set-display-gs-state-offset ((arg0 dma-buffer) (arg1 int) (arg2 int) (arg3 int) (arg4 int) (arg5 int) (arg6 int) (arg7 int))
|
||||
(let ((t4-0 (/ (+ arg2 63) 64)))
|
||||
(let* ((v1-1 arg0)
|
||||
(t5-0 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet t5-0) dma) (new 'static 'dma-tag :qwc #x8 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet t5-0) vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> (the-as dma-packet t5-0) vif1) (new 'static 'vif-tag :imm #x8 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer t5-0) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(t5-2 (the-as object (-> v1-2 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t5-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x7))
|
||||
(set! (-> (the-as gs-gif-tag t5-2) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-2 base) (&+ (the-as pointer t5-2) 16))
|
||||
)
|
||||
(let* ((v1-3 arg0)
|
||||
(t5-4 (-> v1-3 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-scissor) t5-4) 0)
|
||||
(new 'static 'gs-scissor :scax1 (+ arg2 -1) :scay1 (+ arg3 -1))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 1) (gs-reg64 scissor-1))
|
||||
(set! (-> (the-as (pointer gs-xy-offset) t5-4) 2)
|
||||
(new 'static 'gs-xy-offset :ofx (* arg6 16) :ofy (* arg7 16))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 3) (gs-reg64 xyoffset-1))
|
||||
(set! (-> (the-as (pointer gs-frame) t5-4) 4)
|
||||
(new 'static 'gs-frame :fbp arg1 :fbw t4-0 :psm arg5 :fbmsk arg4)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 5) (gs-reg64 frame-1))
|
||||
(set! (-> (the-as (pointer gs-test) t5-4) 6) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)))
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 7) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-texa) t5-4) 8) (new 'static 'gs-texa :ta0 #x80 :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 9) (gs-reg64 texa))
|
||||
(set! (-> (the-as (pointer gs-zbuf) t5-4) 10) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 11) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer uint64) t5-4) 12) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) t5-4) 13) (gs-reg64 texflush))
|
||||
(set! (-> v1-3 base) (&+ t5-4 112))
|
||||
)
|
||||
(dma-buffer-add-gs-set-flusha arg0
|
||||
(scissor-1 (new 'static 'gs-scissor :scax1 (+ arg2 -1) :scay1 (+ arg3 -1)))
|
||||
(xyoffset-1 (new 'static 'gs-xy-offset :ofx (* arg6 16) :ofy (* arg7 16)))
|
||||
(frame-1 (new 'static 'gs-frame :fbp arg1 :fbw t4-0 :psm arg5 :fbmsk arg4))
|
||||
(test-1 (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)))
|
||||
(texa (new 'static 'gs-texa :ta0 #x80 :ta1 #x80))
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(texflush 0)
|
||||
)
|
||||
)
|
||||
arg0
|
||||
)
|
||||
|
||||
;; definition for function reset-display-gs-state
|
||||
;; ERROR: Failed store: (s.w! (+ a2-0 8) a3-1) at op 5
|
||||
(defun reset-display-gs-state ((arg0 display) (arg1 dma-buffer))
|
||||
(let* ((v1-0 arg1)
|
||||
(a2-0 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a2-0) dma) (new 'static 'dma-tag :qwc #x8 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a2-0) vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> (the-as dma-packet a2-0) vif1) (new 'static 'vif-tag :imm #x8 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer a2-0) 16))
|
||||
)
|
||||
(let* ((v1-1 arg1)
|
||||
(a2-2 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a2-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x7))
|
||||
(set! (-> (the-as gs-gif-tag a2-2) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a2-2) 16))
|
||||
)
|
||||
(let* ((v1-2 arg1)
|
||||
(a1-1 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-scissor) a1-1) 0) (new 'static 'gs-scissor :scax1 #x1ff :scay1 #x19f))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 1) (gs-reg64 scissor-1))
|
||||
(set! (-> (the-as (pointer gs-xy-offset) a1-1) 2) (new 'static 'gs-xy-offset :ofx #x7000 :ofy #x7300))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 3) (gs-reg64 xyoffset-1))
|
||||
(set! (-> (the-as (pointer gs-frame) a1-1) 4) (new 'static 'gs-frame :fbp #x198 :fbw #x8))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 5) (gs-reg64 frame-1))
|
||||
(set! (-> (the-as (pointer gs-test) a1-1) 6) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest greater-equal)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 7) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-texa) a1-1) 8) (new 'static 'gs-texa :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 9) (gs-reg64 texa))
|
||||
(set! (-> (the-as (pointer gs-zbuf) a1-1) 10) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 11) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer uint64) a1-1) 12) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-1) 13) (gs-reg64 texflush))
|
||||
(set! (-> v1-2 base) (&+ a1-1 112))
|
||||
)
|
||||
(dma-buffer-add-gs-set-flusha arg1
|
||||
(scissor-1 (new 'static 'gs-scissor :scax1 #x1ff :scay1 #x19f))
|
||||
(xyoffset-1 (new 'static 'gs-xy-offset :ofx #x7000 :ofy #x7300))
|
||||
(frame-1 (new 'static 'gs-frame :fbp #x198 :fbw #x8))
|
||||
(test-1 (new 'static 'gs-test :zte #x1 :ztst (gs-ztest greater-equal)))
|
||||
(texa (new 'static 'gs-texa :ta1 #x80))
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(texflush 0)
|
||||
)
|
||||
arg0
|
||||
)
|
||||
|
||||
|
||||
+3
-3
@@ -355,8 +355,8 @@ bits 5 and 6 (0x20 and 0x40) should be zero"
|
||||
|
||||
;; definition of type gs-uv
|
||||
(deftype gs-uv (uint64)
|
||||
((u uint16 :offset 0 :size 14)
|
||||
(v uint16 :offset 16 :size 14)
|
||||
((u uint16 :offset 0 :size 16)
|
||||
(v uint16 :offset 16 :size 16)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x8
|
||||
@@ -462,7 +462,7 @@ bits 5 and 6 (0x20 and 0x40) should be zero"
|
||||
(spsm uint8 :offset 24 :size 6)
|
||||
(dbp uint16 :offset 32 :size 14)
|
||||
(dbw uint8 :offset 48 :size 6)
|
||||
(dpsm uint8 :offset 56 :size 6)
|
||||
(dpsm gs-psm :offset 56 :size 6)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x8
|
||||
|
||||
+2
-22
@@ -48,6 +48,7 @@
|
||||
|
||||
;; definition for function emerc-vu1-init-buffer
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ a0-4 8) 0) at op 28
|
||||
(defun emerc-vu1-init-buffer ((dma-bucket bucket-id) (test gs-test) (arg2 int))
|
||||
(let ((bucket (-> *display* frames (-> *display* on-screen) bucket-group dma-bucket)))
|
||||
(when (!= bucket (-> bucket last))
|
||||
@@ -57,28 +58,7 @@
|
||||
(set! (-> dma-buf base)
|
||||
(the-as pointer (emerc-vu1-initialize-chain (the-as dma-gif-packet (-> dma-buf base))))
|
||||
)
|
||||
(let* ((v1-12 dma-buf)
|
||||
(a0-4 (the-as object (-> v1-12 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-4) dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-4) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-4) vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-12 base) (&+ (the-as pointer a0-4) 16))
|
||||
)
|
||||
(let* ((v1-13 dma-buf)
|
||||
(a0-6 (the-as object (-> v1-13 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-6) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> (the-as gs-gif-tag a0-6) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-13 base) (&+ (the-as pointer a0-6) 16))
|
||||
)
|
||||
(let* ((v1-14 dma-buf)
|
||||
(a0-8 (-> v1-14 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a0-8) 0) test)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-8) 1) (gs-reg64 test-1))
|
||||
(set! (-> v1-14 base) (&+ a0-8 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buf (test-1 test))
|
||||
(let ((v1-15 (the-as dma-packet (-> dma-buf base))))
|
||||
(set! (-> v1-15 dma) (new 'static 'dma-tag :id (dma-tag-id next) :addr (-> bucket next)))
|
||||
(set! (-> v1-15 vif0) (new 'static 'vif-tag))
|
||||
|
||||
+19
-41
@@ -213,6 +213,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 3 of type merc-fragment-control
|
||||
;; INFO: this function exists in multiple non-identical object files
|
||||
(defmethod inspect merc-fragment-control ((obj merc-fragment-control))
|
||||
(format #t "[~8x] ~A~%" obj 'merc-fragment-control)
|
||||
(format #t "~Tunsigned-four-count: ~D~%" (-> obj unsigned-four-count))
|
||||
@@ -269,6 +270,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 3 of type merc-ctrl
|
||||
;; INFO: this function exists in multiple non-identical object files
|
||||
(defmethod inspect merc-ctrl ((obj merc-ctrl))
|
||||
(format #t "[~8x] ~A~%" obj (-> obj type))
|
||||
(format #t "~Tname: ~A~%" (-> obj name))
|
||||
@@ -582,6 +584,7 @@
|
||||
)
|
||||
|
||||
;; definition for function merc-vu1-init-buffer
|
||||
;; ERROR: Failed store: (s.w! (+ a0-4 8) 0) at op 28
|
||||
(defun merc-vu1-init-buffer ((dma-bucket bucket-id) (arg1 int) (arg2 symbol))
|
||||
(let ((bucket (-> *display* frames (-> *display* on-screen) bucket-group dma-bucket)))
|
||||
(when (!= bucket (-> bucket last))
|
||||
@@ -589,48 +592,23 @@
|
||||
(s3-1 (-> dma-buf base))
|
||||
)
|
||||
(set! (-> dma-buf base)
|
||||
(the-as
|
||||
pointer
|
||||
(merc-vu1-initialize-chain (the-as dma-gif-packet (the-as dma-packet (-> dma-buf base))) arg1)
|
||||
)
|
||||
(the-as pointer (merc-vu1-initialize-chain (the-as dma-gif-packet (-> dma-buf base)) arg1))
|
||||
)
|
||||
(let* ((v1-12 dma-buf)
|
||||
(a0-4 (the-as dma-packet (-> v1-12 base)))
|
||||
)
|
||||
(set! (-> a0-4 dma) (new 'static 'dma-tag :qwc #x3 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-4 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-4 vif1) (new 'static 'vif-tag :imm #x3 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-12 base) (the-as pointer (the-as dma-packet (&+ a0-4 16))))
|
||||
)
|
||||
(let* ((v1-13 dma-buf)
|
||||
(a0-6 (the-as object (-> v1-13 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-6) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x2))
|
||||
(set! (-> (the-as gs-gif-tag a0-6) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-13 base) (&+ (the-as pointer a0-6) 16))
|
||||
)
|
||||
(let* ((v1-14 dma-buf)
|
||||
(a0-8 (-> v1-14 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a0-8) 0)
|
||||
(new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-8) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-zbuf) a0-8) 2)
|
||||
(if arg2
|
||||
(new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24))
|
||||
(new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-8) 3) (gs-reg64 zbuf-1))
|
||||
(set! (-> v1-14 base) (&+ a0-8 32))
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buf
|
||||
(test-1 (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(zbuf-1 (if arg2
|
||||
#x1000130
|
||||
(the-as int (the-as uint #x101000130))
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((v1-15 (the-as object (-> dma-buf base))))
|
||||
(set! (-> (the-as dma-packet v1-15) dma) (new 'static 'dma-tag :id (dma-tag-id next) :addr (-> bucket next)))
|
||||
(set! (-> (the-as dma-packet v1-15) vif0) (new 'static 'vif-tag))
|
||||
|
||||
+2
-2
@@ -1002,7 +1002,7 @@
|
||||
(generate-verts (_type_ ocean-vert-array ocean-height-array) none 16)
|
||||
(add-colors! (_type_ vector ocean-vertex) none 17)
|
||||
(ocean-method-18 (_type_ (pointer ocean-colors) (pointer ocean-colors)) none 18)
|
||||
(init-buffer! (_type_ dma-buffer) pointer 19)
|
||||
(init-buffer! (_type_ dma-buffer) none 19)
|
||||
(end-buffer! (_type_ dma-buffer) none 20)
|
||||
(set-corners! (_type_ float float) float 21)
|
||||
(ocean-near-add-call (_type_ dma-buffer int) none 22)
|
||||
@@ -1064,7 +1064,7 @@
|
||||
(draw-ocean-texture (_type_ dma-buffer int) none 78)
|
||||
(ocean-method-79 (_type_ dma-buffer) none 79)
|
||||
(ocean-method-80 (_type_ (pointer rgba)) none 80)
|
||||
(ocean-method-81 (_type_ dma-buffer) none 81)
|
||||
(ocean-method-81 (_type_ dma-buffer) int 81)
|
||||
(draw-envmap-debug (_type_ dma-buffer) none 82)
|
||||
(ocean-method-83 (_type_ dma-buffer float) none 83)
|
||||
(ocean-method-84 (_type_ dma-buffer sky-upload-data vector4w float) none 84)
|
||||
|
||||
+4
-24
@@ -668,32 +668,12 @@
|
||||
;; definition for method 29 of type ocean
|
||||
;; INFO: Used lq/sq
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ a0-1 8) 0) at op 6
|
||||
(defmethod draw-ocean-near ocean ((obj ocean) (arg0 dma-buffer))
|
||||
(local-vars (sv-16 uint))
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-1) dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-1) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-1) vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer a0-1) 16))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> (the-as gs-gif-tag a0-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a0-3) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a0-5 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a0-5) 0)
|
||||
(new 'static 'gs-test :ate #x1 :afail #x1 :zte #x1 :ztst (gs-ztest greater-equal))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 test-1))
|
||||
(set! (-> v1-2 base) (&+ a0-5 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :afail #x1 :zte #x1 :ztst (gs-ztest greater-equal)))
|
||||
)
|
||||
(dma-buffer-add-vu-function arg0 ocean-near-block 1)
|
||||
(let* ((v1-3 arg0)
|
||||
(a0-8 (the-as object (-> v1-3 base)))
|
||||
|
||||
+207
-786
File diff suppressed because it is too large
Load Diff
+17
-75
@@ -1114,83 +1114,29 @@
|
||||
)
|
||||
|
||||
;; definition for method 19 of type ocean
|
||||
;; WARN: Return type mismatch pointer vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ a0-1 8) 0) at op 5
|
||||
(defmethod init-buffer! ocean ((obj ocean) (arg0 dma-buffer))
|
||||
"Initialize [[ocean]] DMA buffer.
|
||||
@returns Pointer to the next DMA buffer"
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-1) dma) (new 'static 'dma-tag :qwc #xa :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-1) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-1) vif1) (new 'static 'vif-tag :imm #xa :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer a0-1) 16))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x9))
|
||||
(set! (-> (the-as gs-gif-tag a0-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a0-3) 16))
|
||||
)
|
||||
(let* ((s5-0 arg0)
|
||||
(s4-0 (-> s5-0 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) s4-0) 0)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) s4-0) 2) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 3) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) s4-0) 4)
|
||||
(new 'static 'gs-tex0 :tbp0 #x2a0 :tbw #x2 :th (log2 128) :tw (log2 128))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 5) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) s4-0) 6) (-> obj tex1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 7) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-texa) s4-0) 8) (new 'static 'gs-texa :ta0 #x80 :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 9) (gs-reg64 texa))
|
||||
(set! (-> (the-as (pointer gs-miptbp) s4-0) 10)
|
||||
(new 'static 'gs-miptbp :tbp1 #x6a0 :tbw1 #x1 :tbp2 #x7a0 :tbp3 #x7e0)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 11) (gs-reg64 miptbp1-1))
|
||||
(set! (-> (the-as (pointer gs-miptbp) s4-0) 12) (new 'static 'gs-miptbp :tbp1 #x800 :tbp2 #x820 :tbp3 #x840))
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 13) (gs-reg64 miptbp2-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) s4-0) 14) (new 'static 'gs-clamp))
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 15) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-fogcol) s4-0) 16) (the-as gs-fogcol *fog-color*))
|
||||
(set! (-> (the-as (pointer gs-reg64) s4-0) 17) (gs-reg64 fogcol))
|
||||
(let ((v0-2 (&+ s4-0 144)))
|
||||
(set! (-> s5-0 base) v0-2)
|
||||
v0-2
|
||||
)
|
||||
)
|
||||
"Initialize [[ocean]] DMA buffer."
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always)))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x2a0 :tbw #x2 :th (log2 128) :tw (log2 128)))
|
||||
(tex1-1 (-> obj tex1))
|
||||
(texa (new 'static 'gs-texa :ta0 #x80 :ta1 #x80))
|
||||
(miptbp1-1 (new 'static 'gs-miptbp :tbp1 #x6a0 :tbw1 #x1 :tbp2 #x7a0 :tbp3 #x7e0))
|
||||
(miptbp2-1 (new 'static 'gs-miptbp :tbp1 #x800 :tbp2 #x820 :tbp3 #x840))
|
||||
(clamp-1 (new 'static 'gs-clamp))
|
||||
(fogcol *fog-color*)
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for method 20 of type ocean
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ a0-1 8) 0) at op 4
|
||||
(defmethod end-buffer! ocean ((obj ocean) (arg0 dma-buffer))
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-1) dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-1) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-1) vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer a0-1) 16))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> (the-as gs-gif-tag a0-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a0-3) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a0-5 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-texa) a0-5) 0) (new 'static 'gs-texa :ta1 #x80))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 texa))
|
||||
(set! (-> v1-2 base) (&+ a0-5 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0 (texa (new 'static 'gs-texa :ta1 #x80)))
|
||||
0
|
||||
(none)
|
||||
)
|
||||
@@ -1613,7 +1559,3 @@
|
||||
|
||||
;; definition (debug) for function test-to-from-spr
|
||||
;; ERROR: function was not converted to expressions. Cannot decompile.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+12
-57
@@ -672,36 +672,9 @@
|
||||
s2-2
|
||||
(the-as int (-> *instance-shrub-work* start-bank (-> (the-as prototype-bucket-shrub s1-0) mod-count 1)))
|
||||
)
|
||||
(when (zero? sv-80)
|
||||
(let* ((v1-94 s2-2)
|
||||
(a0-36 (-> v1-94 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-36)) #x10000002)
|
||||
(s.w! (+ a0-36 8) 0)
|
||||
(let ((a1-44 #x50000002))
|
||||
(s.w! (+ a0-36 12) a1-44)
|
||||
)
|
||||
(set! (-> v1-94 base) (&+ a0-36 16))
|
||||
(if (zero? sv-80)
|
||||
(dma-buffer-add-gs-set s2-2 (test-1 sv-48))
|
||||
)
|
||||
(let* ((v1-95 s2-2)
|
||||
(a0-38 (-> v1-95 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer uint64) a0-38)) (make-u128 0 (the-as uint #x1000000000008001)))
|
||||
(let ((a1-47 (the-as uint #xeeeeeeeeeeeeeeee)))
|
||||
(s.d! (+ a0-38 8) a1-47)
|
||||
)
|
||||
(set! (-> v1-95 base) (&+ a0-38 16))
|
||||
)
|
||||
(let* ((v1-96 s2-2)
|
||||
(a0-40 (-> v1-96 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-40)) sv-48)
|
||||
(let ((a1-49 71))
|
||||
(s.d! (+ a0-40 8) a1-49)
|
||||
)
|
||||
(set! (-> v1-96 base) (&+ a0-40 16))
|
||||
)
|
||||
)
|
||||
(let* ((v1-97 s2-2)
|
||||
(a0-42 (-> v1-97 base))
|
||||
)
|
||||
@@ -869,34 +842,16 @@
|
||||
(v1-168 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(a2-70 (-> v1-168 base))
|
||||
)
|
||||
(let* ((a0-68 v1-168)
|
||||
(a1-84 (-> a0-68 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a1-84)) #x10000002)
|
||||
(s.w! (+ a1-84 8) 0)
|
||||
(let ((a3-35 #x50000002))
|
||||
(s.w! (+ a1-84 12) a3-35)
|
||||
)
|
||||
(set! (-> a0-68 base) (&+ a1-84 16))
|
||||
)
|
||||
(let* ((a0-69 v1-168)
|
||||
(a1-86 (-> a0-69 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer uint64) a1-86)) (make-u128 0 (the-as uint #x1000000000008001)))
|
||||
(let ((a3-38 (the-as uint #xeeeeeeeeeeeeeeee)))
|
||||
(s.d! (+ a1-86 8) a3-38)
|
||||
)
|
||||
(set! (-> a0-69 base) (&+ a1-86 16))
|
||||
)
|
||||
(let* ((a0-70 v1-168)
|
||||
(a1-88 (-> a0-70 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a1-88)) #x5180b)
|
||||
(let ((a3-40 71))
|
||||
(s.d! (+ a1-88 8) a3-40)
|
||||
)
|
||||
(set! (-> a0-70 base) (&+ a1-88 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set v1-168 (test-1 (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x80
|
||||
:afail #x1
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((a0-71 (-> v1-168 base)))
|
||||
(while (nonzero? proto-array-len)
|
||||
(+! proto-array-len -1)
|
||||
|
||||
+100
-365
@@ -309,56 +309,32 @@
|
||||
(rlet ((vf23 :class vf)
|
||||
(vf27 :class vf)
|
||||
)
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as dma-packet (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> a0-1 dma) (new 'static 'dma-tag :qwc #x7 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-1 vif1) (new 'static 'vif-tag :imm #x7 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (the-as pointer (&+ a0-1 16)))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as gs-gif-tag (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> a0-3 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x6))
|
||||
(set! (-> a0-3 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (the-as pointer (&+ a0-3 16)))
|
||||
)
|
||||
(let* ((s4-0 arg0)
|
||||
(s3-0 (-> s4-0 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) s3-0) 0) (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x50
|
||||
:afail #x1
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s3-0) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) s3-0) 2) (new 'static 'gs-tex0
|
||||
:tbp0 #x100
|
||||
:tbw #x2
|
||||
:psm #x1b
|
||||
:tcc #x1
|
||||
:cbp #x300
|
||||
:cld #x1
|
||||
:th (log2 128)
|
||||
:tw (log2 128)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s3-0) 3) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) s3-0) 4) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s3-0) 5) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) s3-0) 6) (new 'static 'gs-clamp))
|
||||
(set! (-> (the-as (pointer gs-reg64) s3-0) 7) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) s3-0) 8) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s3-0) 9) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer uint64) s3-0) 10) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) s3-0) 11) (gs-reg64 texflush))
|
||||
(set! (-> s4-0 base) (&+ s3-0 96))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(test-1 (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x50
|
||||
:afail #x1
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(tex0-1 (new 'static 'gs-tex0
|
||||
:tbp0 #x100
|
||||
:tbw #x2
|
||||
:psm #x1b
|
||||
:tcc #x1
|
||||
:cbp #x300
|
||||
:cld #x1
|
||||
:th (log2 128)
|
||||
:tw (log2 128)
|
||||
)
|
||||
)
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(clamp-1 (new 'static 'gs-clamp))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(texflush 0)
|
||||
)
|
||||
(.lvf vf27 (&-> obj giftag-roof quad))
|
||||
(let ((v1-18 #x43c80000))
|
||||
(.mov vf23 v1-18)
|
||||
@@ -495,28 +471,7 @@
|
||||
(defmethod draw-haze sky-work ((obj sky-work) (arg0 dma-buffer))
|
||||
(local-vars (sv-16 haze-vert-array) (sv-20 (inline-array sky-vertex)))
|
||||
(rlet ((vf27 :class vf))
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-1) dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-1) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-1) vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (the-as pointer (&+ (the-as dma-packet a0-1) 16)))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> (the-as gs-gif-tag a0-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a0-3) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a0-5 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-alpha) a0-5) 0) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 alpha-1))
|
||||
(set! (-> v1-2 base) (&+ a0-5 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0 (alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1)))
|
||||
(init-regs-for-large-polygon-draw obj)
|
||||
(.lvf vf27 (&-> obj giftag-haze quad))
|
||||
(let ((s4-0 (the-as object (-> arg0 base))))
|
||||
@@ -593,34 +548,11 @@
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod draw-roof sky-work ((obj sky-work) (arg0 dma-buffer))
|
||||
(rlet ((vf27 :class vf))
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-1) dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-1) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-1) vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (the-as pointer (&+ (the-as dma-packet a0-1) 16)))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> (the-as gs-gif-tag a0-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a0-3) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a0-5 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) a0-5) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) a0-5) 2)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a0-5) 4) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 5) (gs-reg64 alpha-1))
|
||||
(set! (-> v1-2 base) (&+ a0-5 48))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always)))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
)
|
||||
(init-regs-for-large-polygon-draw obj)
|
||||
(.lvf vf27 (&-> obj giftag-base quad))
|
||||
(let ((s5-1 (the-as object (-> arg0 base))))
|
||||
@@ -645,30 +577,9 @@
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod draw-base sky-work ((obj sky-work) (arg0 dma-buffer))
|
||||
(rlet ((vf27 :class vf))
|
||||
(let* ((v1-0 arg0)
|
||||
(a1-1 (the-as dma-packet (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> a1-1 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a1-1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a1-1 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (the-as pointer (&+ a1-1 16)))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a1-3 (the-as gs-gif-tag (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> a1-3 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a1-3 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (the-as pointer (&+ a1-3 16)))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a1-5 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a1-5) 0)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-5) 1) (gs-reg64 test-1))
|
||||
(set! (-> v1-2 base) (&+ a1-5 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always)))
|
||||
)
|
||||
(let ((s5-0 (the-as object (-> arg0 base))))
|
||||
(&+! (-> arg0 base) 16)
|
||||
(.lvf vf27 (&-> obj giftag-base quad))
|
||||
@@ -693,61 +604,34 @@
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod draw-fog sky-work ((obj sky-work) (arg0 dma-buffer))
|
||||
(let ((s4-0 (-> *sky-texture-anim-array* array-data 8 tex)))
|
||||
(when s4-0
|
||||
(let* ((v1-3 arg0)
|
||||
(a0-1 (the-as dma-packet (-> v1-3 base)))
|
||||
)
|
||||
(set! (-> a0-1 dma) (new 'static 'dma-tag :qwc #x6 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-1 vif1) (new 'static 'vif-tag :imm #x6 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-3 base) (the-as pointer (&+ a0-1 16)))
|
||||
(if s4-0
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(tex0-1 (new 'static 'gs-tex0
|
||||
:tcc #x1
|
||||
:cld #x1
|
||||
:psm (the-as int (-> s4-0 psm))
|
||||
:cpsm (-> s4-0 clutpsm)
|
||||
:cbp (-> s4-0 clutdest)
|
||||
:th (log2 (-> s4-0 h))
|
||||
:tw (log2 (-> s4-0 w))
|
||||
:tbw (-> s4-0 width 0)
|
||||
:tbp0 (-> s4-0 dest 0)
|
||||
)
|
||||
)
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(test-1 (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x70
|
||||
:afail #x3
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
)
|
||||
)
|
||||
(let* ((v1-4 arg0)
|
||||
(a0-3 (the-as gs-gif-tag (-> v1-4 base)))
|
||||
)
|
||||
(set! (-> a0-3 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x5))
|
||||
(set! (-> a0-3 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-4 base) (the-as pointer (the-as gs-gif-tag (&+ a0-3 16))))
|
||||
)
|
||||
(let* ((s3-0 arg0)
|
||||
(s2-0 (-> s3-0 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-tex0) s2-0) 0)
|
||||
(new 'static 'gs-tex0
|
||||
:tcc #x1
|
||||
:cld #x1
|
||||
:psm (the-as int (-> s4-0 psm))
|
||||
:cpsm (-> s4-0 clutpsm)
|
||||
:cbp (-> s4-0 clutdest)
|
||||
:th (log2 (-> s4-0 h))
|
||||
:tw (log2 (-> s4-0 w))
|
||||
:tbw (-> s4-0 width 0)
|
||||
:tbp0 (-> s4-0 dest 0)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 1) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) s2-0) 2) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 3) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-test) s2-0) 4)
|
||||
(new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x70
|
||||
:afail #x3
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 5) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) s2-0) 6)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 7) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) s2-0) 8) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) s2-0) 9) (gs-reg64 alpha-1))
|
||||
(set! (-> s3-0 base) (&+ s2-0 80))
|
||||
)
|
||||
)
|
||||
)
|
||||
(let* ((v1-26 (the-as (inline-array qword) (-> arg0 base)))
|
||||
(f0-0 (-> *fog-texture-work* min-corner y))
|
||||
@@ -814,9 +698,9 @@
|
||||
(if (nonzero? (-> (the-as sky-work s4-0) star-colors 0 x))
|
||||
(stars-transform-asm (the-as sky-work s4-0))
|
||||
)
|
||||
(let* ((s3-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(s5-1 (-> s3-0 base))
|
||||
)
|
||||
(with-dma-buffer-add-bucket ((s3-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(bucket-id sky-draw)
|
||||
)
|
||||
(draw-roof (the-as sky-work s4-0) s3-0)
|
||||
(init-regs-for-sky-asm (the-as sky-work s4-0))
|
||||
(if (nonzero? (-> (the-as sky-work s4-0) star-colors 0 x))
|
||||
@@ -829,20 +713,6 @@
|
||||
(draw-clouds (the-as sky-work s4-0) s3-0)
|
||||
(draw-base (the-as sky-work s4-0) s3-0)
|
||||
(draw-fog (the-as sky-work s4-0) s3-0)
|
||||
(let ((a3-5 (-> s3-0 base)))
|
||||
(let ((v1-45 (the-as dma-packet (-> s3-0 base))))
|
||||
(set! (-> v1-45 dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
(set! (-> v1-45 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> v1-45 vif1) (new 'static 'vif-tag))
|
||||
(set! (-> s3-0 base) (the-as pointer (&+ v1-45 16)))
|
||||
)
|
||||
(dma-bucket-insert-tag
|
||||
(-> *display* frames (-> *display* on-screen) bucket-group)
|
||||
(bucket-id sky-draw)
|
||||
s5-1
|
||||
(the-as (pointer dma-tag) a3-5)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((v1-52 *dma-mem-usage*))
|
||||
@@ -859,52 +729,21 @@
|
||||
)
|
||||
)
|
||||
(else
|
||||
(let* ((s4-1 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(gp-1 (-> s4-1 base))
|
||||
)
|
||||
(with-dma-buffer-add-bucket ((s4-1 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(bucket-id sky-draw)
|
||||
)
|
||||
(cond
|
||||
((-> *blit-displays-work* menu-mode)
|
||||
(let ((f0-0 (-> *blit-displays-work* progress-interp)))
|
||||
(let* ((a0-43 s4-1)
|
||||
(a1-30 (the-as dma-packet (-> a0-43 base)))
|
||||
)
|
||||
(set! (-> a1-30 dma) (new 'static 'dma-tag :qwc #x8 :id (dma-tag-id cnt)))
|
||||
(set! (-> a1-30 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a1-30 vif1) (new 'static 'vif-tag :imm #x8 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> a0-43 base) (the-as pointer (&+ a1-30 16)))
|
||||
)
|
||||
(let* ((a0-44 s4-1)
|
||||
(a1-32 (the-as gs-gif-tag (-> a0-44 base)))
|
||||
)
|
||||
(set! (-> a1-32 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x7))
|
||||
(set! (-> a1-32 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> a0-44 base) (the-as pointer (&+ a1-32 16)))
|
||||
)
|
||||
(let* ((a0-45 s4-1)
|
||||
(a1-34 (-> a0-45 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) a1-34) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) a1-34) 2)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a1-34) 4) (new 'static 'gs-alpha))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 5) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) a1-34) 6)
|
||||
(new 'static 'gs-tex0 :tbp0 #x4c0 :tbw #x8 :tw #x9 :th #x9 :tcc #x1)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 7) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a1-34) 8) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 9) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) a1-34) 10)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 11) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer uint64) a1-34) 12) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-34) 13) (gs-reg64 texflush))
|
||||
(set! (-> a0-45 base) (&+ a1-34 112))
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-1
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always)))
|
||||
(alpha-1 (new 'static 'gs-alpha))
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x4c0 :tbw #x8 :tw #x9 :th #x9 :tcc #x1))
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
(texflush 0)
|
||||
)
|
||||
(let ((a2-40 (the-as (inline-array qword) (-> s4-1 base)))
|
||||
(a3-7 #x7000)
|
||||
(t0-1 #x7300)
|
||||
@@ -934,34 +773,11 @@
|
||||
(set-vector! (-> t0-4 5 vector4w) 8200 6664 0 0)
|
||||
(set-vector! (-> t0-4 6 vector4w) a0-49 a1-37 0 0)
|
||||
(&+! (-> s4-1 base) 112)
|
||||
(let* ((t0-8 s4-1)
|
||||
(t1-11 (the-as dma-packet (-> t0-8 base)))
|
||||
)
|
||||
(set! (-> t1-11 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> t1-11 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> t1-11 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> t0-8 base) (the-as pointer (&+ t1-11 16)))
|
||||
)
|
||||
(let* ((t0-9 s4-1)
|
||||
(t1-13 (the-as gs-gif-tag (-> t0-9 base)))
|
||||
)
|
||||
(set! (-> t1-13 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> t1-13 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> t0-9 base) (the-as pointer (&+ t1-13 16)))
|
||||
)
|
||||
(let* ((t0-10 s4-1)
|
||||
(t1-15 (-> t0-10 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-alpha) t1-15) 0) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-15) 1) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) t1-15) 2)
|
||||
(new 'static 'gs-tex0 :tbp0 #x3300 :tbw #x8 :tw #x9 :th #x9 :tcc #x1)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-15) 3) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer uint64) t1-15) 4) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) t1-15) 5) (gs-reg64 texflush))
|
||||
(set! (-> t0-10 base) (&+ t1-15 48))
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-1
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x3300 :tbw #x8 :tw #x9 :th #x9 :tcc #x1))
|
||||
(texflush 0)
|
||||
)
|
||||
(let ((t0-11 (the-as (inline-array qword) (-> s4-1 base))))
|
||||
(set! (-> t0-11 0 quad) (-> obj draw-tmpl2 dma-vif quad))
|
||||
(set! (-> t0-11 1 quad) (-> obj draw-tmpl2 quad 1))
|
||||
@@ -973,28 +789,7 @@
|
||||
)
|
||||
)
|
||||
(&+! (-> s4-1 base) 112)
|
||||
(let* ((a0-52 s4-1)
|
||||
(a1-38 (the-as dma-packet (-> a0-52 base)))
|
||||
)
|
||||
(set! (-> a1-38 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a1-38 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a1-38 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> a0-52 base) (the-as pointer (&+ a1-38 16)))
|
||||
)
|
||||
(let* ((a0-53 s4-1)
|
||||
(a1-40 (the-as gs-gif-tag (-> a0-53 base)))
|
||||
)
|
||||
(set! (-> a1-40 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a1-40 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> a0-53 base) (the-as pointer (&+ a1-40 16)))
|
||||
)
|
||||
(let* ((a0-54 s4-1)
|
||||
(a1-42 (-> a0-54 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-alpha) a1-42) 0) (new 'static 'gs-alpha))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-42) 1) (gs-reg64 alpha-1))
|
||||
(set! (-> a0-54 base) (&+ a1-42 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-1 (alpha-1 (new 'static 'gs-alpha)))
|
||||
(let ((a0-57 (the int (+ 128.0 (* 32.0 f0-0))))
|
||||
(a1-46 (the int (- 128.0 (* 16.0 f0-0))))
|
||||
(a2-55 (the int (- 128.0 (* 96.0 f0-0))))
|
||||
@@ -1027,34 +822,11 @@
|
||||
(&+! (-> s4-1 base) 112)
|
||||
)
|
||||
)
|
||||
(let* ((v1-60 s4-1)
|
||||
(a3-17 (the-as dma-packet (-> v1-60 base)))
|
||||
)
|
||||
(set! (-> a3-17 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a3-17 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a3-17 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-60 base) (the-as pointer (&+ a3-17 16)))
|
||||
)
|
||||
(let* ((v1-61 s4-1)
|
||||
(a3-19 (the-as gs-gif-tag (-> v1-61 base)))
|
||||
)
|
||||
(set! (-> a3-19 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a3-19 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-61 base) (the-as pointer (&+ a3-19 16)))
|
||||
)
|
||||
(let* ((v1-62 s4-1)
|
||||
(a3-21 (-> v1-62 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-alpha) a3-21) 0) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-21) 1) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) a3-21) 2)
|
||||
(new 'static 'gs-tex0 :tbp0 #x4c0 :tbw #x8 :tw #x9 :th #x9 :tcc #x1)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-21) 3) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer uint64) a3-21) 4) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-21) 5) (gs-reg64 texflush))
|
||||
(set! (-> v1-62 base) (&+ a3-21 48))
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-1
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x4c0 :tbw #x8 :tw #x9 :th #x9 :tcc #x1))
|
||||
(texflush 0)
|
||||
)
|
||||
(let ((v1-63 (the-as (inline-array qword) (-> s4-1 base))))
|
||||
(set! (-> v1-63 0 quad) (-> obj draw-tmpl2 dma-vif quad))
|
||||
(set! (-> v1-63 1 quad) (-> obj draw-tmpl2 quad 1))
|
||||
@@ -1074,41 +846,18 @@
|
||||
)
|
||||
)
|
||||
(else
|
||||
(let* ((a0-66 s4-1)
|
||||
(a1-53 (the-as dma-packet (-> a0-66 base)))
|
||||
)
|
||||
(set! (-> a1-53 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a1-53 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a1-53 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> a0-66 base) (the-as pointer (&+ a1-53 16)))
|
||||
)
|
||||
(let* ((a0-67 s4-1)
|
||||
(a1-55 (the-as gs-gif-tag (-> a0-67 base)))
|
||||
)
|
||||
(set! (-> a1-55 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a1-55 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> a0-67 base) (the-as pointer (&+ a1-55 16)))
|
||||
)
|
||||
(let* ((a0-68 s4-1)
|
||||
(a1-57 (-> a0-68 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) a1-57) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-57) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-test) a1-57) 2)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-57) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-rgbaq) a1-57) 4) (new 'static 'gs-rgbaq
|
||||
:q 1.0
|
||||
:a (the int (-> v1-0 current-fog erase-color w))
|
||||
:b (the int (-> v1-0 current-fog erase-color z))
|
||||
:g (the int (-> v1-0 current-fog erase-color y))
|
||||
:r (the int (-> v1-0 current-fog erase-color x))
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-57) 5) (gs-reg64 rgbaq))
|
||||
(set! (-> a0-68 base) (&+ a1-57 48))
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-1
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always)))
|
||||
(rgbaq (new 'static 'gs-rgbaq
|
||||
:q 1.0
|
||||
:a (the int (-> v1-0 current-fog erase-color w))
|
||||
:b (the int (-> v1-0 current-fog erase-color z))
|
||||
:g (the int (-> v1-0 current-fog erase-color y))
|
||||
:r (the int (-> v1-0 current-fog erase-color x))
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((v1-78 (the-as (inline-array qword) (-> s4-1 base))))
|
||||
(set! (-> v1-78 0 quad) (-> obj sprite-tmpl dma-vif quad))
|
||||
(set! (-> v1-78 1 quad) (-> obj sprite-tmpl quad 1))
|
||||
@@ -1121,20 +870,6 @@
|
||||
(&+! (-> s4-1 base) 32)
|
||||
)
|
||||
)
|
||||
(let ((a3-35 (-> s4-1 base)))
|
||||
(let ((v1-85 (the-as dma-packet (-> s4-1 base))))
|
||||
(set! (-> v1-85 dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
(set! (-> v1-85 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> v1-85 vif1) (new 'static 'vif-tag))
|
||||
(set! (-> s4-1 base) (the-as pointer (&+ v1-85 16)))
|
||||
)
|
||||
(dma-bucket-insert-tag
|
||||
(-> *display* frames (-> *display* on-screen) bucket-group)
|
||||
(bucket-id sky-draw)
|
||||
gp-1
|
||||
(the-as (pointer dma-tag) a3-35)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
+15
-38
@@ -121,45 +121,22 @@
|
||||
|
||||
;; definition for function sprite-init-distorter
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ a1-0 8) 0) at op 4
|
||||
(defun sprite-init-distorter ((dma-buff dma-buffer))
|
||||
(let* ((v1-0 dma-buff)
|
||||
(a1-0 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-0) dma) (new 'static 'dma-tag :qwc #x7 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a1-0) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a1-0) vif1) (new 'static 'vif-tag :imm #x7 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer a1-0) 16))
|
||||
)
|
||||
(let* ((v1-1 dma-buff)
|
||||
(a1-2 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a1-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x6))
|
||||
(set! (-> (the-as gs-gif-tag a1-2) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a1-2) 16))
|
||||
)
|
||||
(let* ((v1-2 dma-buff)
|
||||
(a1-4 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) a1-4) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) a1-4) 2) (new 'static 'gs-tex0 :tbp0 #x3300 :tbw #x8 :tw #x9 :th #x9))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 3) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a1-4) 4) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 5) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-miptbp) a1-4) 6) (new 'static 'gs-miptbp))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 7) (gs-reg64 miptbp1-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) a1-4) 8) (new 'static 'gs-clamp
|
||||
:wms (gs-tex-wrap-mode region-clamp)
|
||||
:wmt (gs-tex-wrap-mode region-clamp)
|
||||
:maxu #x1ff
|
||||
:maxv #x19f
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 9) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a1-4) 10) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 11) (gs-reg64 alpha-1))
|
||||
(set! (-> v1-2 base) (&+ a1-4 96))
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buff
|
||||
(zbuf-1 (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x3300 :tbw #x8 :tw #x9 :th #x9))
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(miptbp1-1 (new 'static 'gs-miptbp))
|
||||
(clamp-1 (new 'static 'gs-clamp
|
||||
:wms (gs-tex-wrap-mode region-clamp)
|
||||
:wmt (gs-tex-wrap-mode region-clamp)
|
||||
:maxu #x1ff
|
||||
:maxv #x19f
|
||||
)
|
||||
)
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
)
|
||||
(let* ((v1-3 dma-buff)
|
||||
(a1-6 (the-as object (-> v1-3 base)))
|
||||
)
|
||||
|
||||
+48
-71
@@ -791,7 +791,7 @@
|
||||
|
||||
;; definition for function sprite-draw
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ v1-27 8) 0) at op 160
|
||||
;; ERROR: Failed store: (s.w! (+ a0-6 8) 0) at op 35
|
||||
(defun sprite-draw ((disp display))
|
||||
(let ((dma-mem-begin (-> *display* frames (-> *display* on-screen) global-buf base)))
|
||||
(with-dma-buffer-add-bucket ((dma-buff (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
@@ -801,90 +801,67 @@
|
||||
(sprite-init-distorter dma-buff)
|
||||
(sprite-draw-distorters dma-buff)
|
||||
)
|
||||
(let ((v1-17 dma-buff))
|
||||
(let ((pkt1 (the-as dma-packet (-> v1-17 base))))
|
||||
(set! (-> pkt1 dma) (new 'static 'dma-tag :qwc #x3 :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt1 vif1) (new 'static 'vif-tag :imm #x3 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-17 base) (&+ (the-as pointer pkt1) 16))
|
||||
)
|
||||
)
|
||||
(let ((v1-18 dma-buff))
|
||||
(let ((giftag (the-as gs-gif-tag (-> v1-18 base))))
|
||||
(set! (-> giftag tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x2))
|
||||
(set! (-> giftag regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-18 base) (the-as pointer (&+ giftag 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-19 dma-buff))
|
||||
(let ((a0-10 (-> v1-19 base)))
|
||||
(set! (-> (the-as (pointer gs-test) a0-10) 0)
|
||||
(new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:afail #x1
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-10) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) a0-10) 2)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-10) 3) (gs-reg64 clamp-1))
|
||||
(set! (-> v1-19 base) (&+ a0-10 32))
|
||||
)
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buff
|
||||
(test-1 (new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:afail #x1
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
)
|
||||
(dma-buffer-add-vu-function dma-buff sprite-vu1-block 1)
|
||||
(sprite-add-frame-data dma-buff (the-as uint 408))
|
||||
(let ((v1-20 dma-buff))
|
||||
(let ((pkt2 (the-as dma-packet (-> v1-20 base))))
|
||||
(set! (-> pkt2 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt2 vif0) (new 'static 'vif-tag :cmd (vif-cmd mscalf) :msk #x1 :imm #x0))
|
||||
(set! (-> pkt2 vif1) (new 'static 'vif-tag :cmd (vif-cmd flushe) :msk #x1))
|
||||
(set! (-> v1-20 base) (&+ (the-as pointer pkt2) 16))
|
||||
)
|
||||
(let* ((v1-20 dma-buff)
|
||||
(pkt2 (the-as dma-packet (-> v1-20 base)))
|
||||
)
|
||||
(set! (-> pkt2 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt2 vif0) (new 'static 'vif-tag :cmd (vif-cmd mscalf) :msk #x1 :imm #x0))
|
||||
(set! (-> pkt2 vif1) (new 'static 'vif-tag :cmd (vif-cmd flushe) :msk #x1))
|
||||
(set! (-> v1-20 base) (&+ (the-as pointer pkt2) 16))
|
||||
)
|
||||
(let ((v1-21 dma-buff))
|
||||
(let ((pkt3 (the-as dma-packet (-> v1-21 base))))
|
||||
(set! (-> pkt3 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt3 vif0) (new 'static 'vif-tag :cmd (vif-cmd base)))
|
||||
(set! (-> pkt3 vif1) (new 'static 'vif-tag :imm #x190 :cmd (vif-cmd offset)))
|
||||
(set! (-> v1-21 base) (&+ (the-as pointer pkt3) 16))
|
||||
)
|
||||
(let* ((v1-21 dma-buff)
|
||||
(pkt3 (the-as dma-packet (-> v1-21 base)))
|
||||
)
|
||||
(set! (-> pkt3 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt3 vif0) (new 'static 'vif-tag :cmd (vif-cmd base)))
|
||||
(set! (-> pkt3 vif1) (new 'static 'vif-tag :imm #x190 :cmd (vif-cmd offset)))
|
||||
(set! (-> v1-21 base) (&+ (the-as pointer pkt3) 16))
|
||||
)
|
||||
(sprite-add-matrix-data dma-buff (the-as uint 0))
|
||||
(sprite-add-3d-all *sprite-array-3d* dma-buff 0)
|
||||
(sprite-add-2d-all *sprite-array-2d* dma-buff 0)
|
||||
(let ((v1-22 dma-buff))
|
||||
(let ((pkt4 (the-as dma-packet (-> v1-22 base))))
|
||||
(set! (-> pkt4 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt4 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt4 vif1) (new 'static 'vif-tag :cmd (vif-cmd flushe) :msk #x1))
|
||||
(set! (-> v1-22 base) (&+ (the-as pointer pkt4) 16))
|
||||
)
|
||||
(let* ((v1-22 dma-buff)
|
||||
(pkt4 (the-as dma-packet (-> v1-22 base)))
|
||||
)
|
||||
(set! (-> pkt4 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt4 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt4 vif1) (new 'static 'vif-tag :cmd (vif-cmd flushe) :msk #x1))
|
||||
(set! (-> v1-22 base) (&+ (the-as pointer pkt4) 16))
|
||||
)
|
||||
(sprite-add-matrix-data dma-buff (the-as uint 1))
|
||||
(sprite-add-2d-all *sprite-array-2d* dma-buff 1)
|
||||
(let ((v1-23 dma-buff))
|
||||
(let ((pkt5 (the-as dma-packet (-> v1-23 base))))
|
||||
(set! (-> pkt5 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt5 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt5 vif1) (new 'static 'vif-tag :cmd (vif-cmd flushe) :msk #x1))
|
||||
(set! (-> v1-23 base) (&+ (the-as pointer pkt5) 16))
|
||||
)
|
||||
(let* ((v1-23 dma-buff)
|
||||
(pkt5 (the-as dma-packet (-> v1-23 base)))
|
||||
)
|
||||
(set! (-> pkt5 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt5 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt5 vif1) (new 'static 'vif-tag :cmd (vif-cmd flushe) :msk #x1))
|
||||
(set! (-> v1-23 base) (&+ (the-as pointer pkt5) 16))
|
||||
)
|
||||
(sprite-glow-init-engine dma-buff)
|
||||
(sprite-glow-draw dma-buff)
|
||||
(draw-all-sprites! *simple-sprite-system* dma-buff)
|
||||
(let ((v1-26 dma-buff))
|
||||
(let ((pkt6 (the-as dma-packet (-> v1-26 base))))
|
||||
(set! (-> pkt6 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt6 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt6 vif1) (new 'static 'vif-tag :cmd (vif-cmd flushe) :msk #x1))
|
||||
(set! (-> v1-26 base) (&+ (the-as pointer pkt6) 16))
|
||||
)
|
||||
(let* ((v1-26 dma-buff)
|
||||
(pkt6 (the-as dma-packet (-> v1-26 base)))
|
||||
)
|
||||
(set! (-> pkt6 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt6 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt6 vif1) (new 'static 'vif-tag :cmd (vif-cmd flushe) :msk #x1))
|
||||
(set! (-> v1-26 base) (&+ (the-as pointer pkt6) 16))
|
||||
)
|
||||
)
|
||||
(let ((mem-use *dma-mem-usage*))
|
||||
|
||||
+62
-228
@@ -682,37 +682,16 @@
|
||||
|
||||
;; definition for function upload-vram-data
|
||||
;; WARN: Return type mismatch symbol vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ a0-1 8) 0) at op 13
|
||||
(defun upload-vram-data ((buf dma-buffer) (dest int) (data pointer) (height int) (width int))
|
||||
(while (> height 0)
|
||||
(let ((height-this-time (min 2048 height)))
|
||||
(let* ((v1-1 buf)
|
||||
(a0-1 (the-as dma-packet (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> a0-1 dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-1 vif1) (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-1 base) (the-as pointer (&+ a0-1 16)))
|
||||
)
|
||||
(let* ((v1-2 buf)
|
||||
(a0-3 (the-as gs-gif-tag (-> v1-2 base)))
|
||||
)
|
||||
(set! (-> a0-3 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x4))
|
||||
(set! (-> a0-3 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-2 base) (the-as pointer (&+ a0-3 16)))
|
||||
)
|
||||
(let* ((v1-3 buf)
|
||||
(a0-5 (-> v1-3 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-bitbltbuf) a0-5) 0) (new 'static 'gs-bitbltbuf :dbw (/ width 64) :dbp dest))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 bitbltbuf))
|
||||
(set! (-> (the-as (pointer gs-trxpos) a0-5) 2) (new 'static 'gs-trxpos))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 3) (gs-reg64 trxpos))
|
||||
(set! (-> (the-as (pointer gs-trxreg) a0-5) 4) (new 'static 'gs-trxreg :rrw width :rrh height-this-time))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 5) (gs-reg64 trxreg))
|
||||
(set! (-> (the-as (pointer gs-trxdir) a0-5) 6) (new 'static 'gs-trxdir))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 7) (gs-reg64 trxdir))
|
||||
(set! (-> v1-3 base) (&+ a0-5 64))
|
||||
)
|
||||
(dma-buffer-add-gs-set buf
|
||||
(bitbltbuf (new 'static 'gs-bitbltbuf :dbw (/ width 64) :dbp dest))
|
||||
(trxpos (new 'static 'gs-trxpos))
|
||||
(trxreg (new 'static 'gs-trxreg :rrw width :rrh height-this-time))
|
||||
(trxdir (new 'static 'gs-trxdir))
|
||||
)
|
||||
(dma-buffer-add-ref-texture buf data width height-this-time (gs-psm ct32))
|
||||
)
|
||||
(+! dest 4096)
|
||||
@@ -723,8 +702,7 @@
|
||||
)
|
||||
|
||||
;; definition for function upload-vram-pages
|
||||
;; WARN: Failed store: (s.w! (+ v1-54 8) 0) at op 169
|
||||
;; WARN: Failed store: (s.w! (+ v1-54 12) 0) at op 170
|
||||
;; ERROR: Failed store: (s.w! (+ a0-24 8) 0) at op 143
|
||||
(defun upload-vram-pages ((pool texture-pool)
|
||||
(dest-seg texture-pool-segment)
|
||||
(tpage texture-page)
|
||||
@@ -810,28 +788,7 @@
|
||||
)
|
||||
(+! num-chunks chunks-pending)
|
||||
)
|
||||
(let ((v1-51 dma-buf))
|
||||
(let ((a0-24 (the-as dma-packet (-> v1-51 base))))
|
||||
(set! (-> a0-24 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-24 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-24 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-51 base) (the-as pointer (&+ a0-24 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-52 dma-buf))
|
||||
(let ((a0-26 (the-as gs-gif-tag (-> v1-52 base))))
|
||||
(set! (-> a0-26 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-26 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-52 base) (the-as pointer (&+ a0-26 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-53 dma-buf))
|
||||
(let ((a0-28 (-> v1-53 base)))
|
||||
(set! (-> (the-as (pointer int64) a0-28) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-28) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-53 base) (&+ a0-28 16))
|
||||
)
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buf (texflush 1))
|
||||
)
|
||||
(shl num-chunks 14)
|
||||
)
|
||||
@@ -891,8 +848,7 @@
|
||||
)
|
||||
|
||||
;; definition for function upload-vram-pages-pris
|
||||
;; WARN: Failed store: (s.w! (+ v1-43 8) 0) at op 163
|
||||
;; WARN: Failed store: (s.w! (+ v1-43 12) 0) at op 164
|
||||
;; ERROR: Failed store: (s.w! (+ a0-27 8) 0) at op 137
|
||||
(defun upload-vram-pages-pris ((pool texture-pool)
|
||||
(dest-seg texture-pool-segment)
|
||||
(tpage texture-page)
|
||||
@@ -964,28 +920,7 @@
|
||||
)
|
||||
(+! total-chunks-uploaded chunks-pending)
|
||||
)
|
||||
(let ((v1-40 dma-buf))
|
||||
(let ((a0-27 (the-as dma-packet (-> v1-40 base))))
|
||||
(set! (-> a0-27 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-27 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-27 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-40 base) (the-as pointer (&+ a0-27 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-41 dma-buf))
|
||||
(let ((a0-29 (the-as gs-gif-tag (-> v1-41 base))))
|
||||
(set! (-> a0-29 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-29 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-41 base) (the-as pointer (&+ a0-29 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-42 dma-buf))
|
||||
(let ((a0-31 (-> v1-42 base)))
|
||||
(set! (-> (the-as (pointer int64) a0-31) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-31) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-42 base) (&+ a0-31 16))
|
||||
)
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buf (texflush 1))
|
||||
)
|
||||
(shl total-chunks-uploaded 14)
|
||||
)
|
||||
@@ -1474,6 +1409,7 @@
|
||||
|
||||
;; definition for method 13 of type texture-page
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ a0-1 8) 0) at op 19
|
||||
(defmethod upload-now! texture-page ((obj texture-page) (arg0 tex-upload-mode))
|
||||
(let ((gp-0 *txt-dma-list*))
|
||||
(let ((v1-0 gp-0))
|
||||
@@ -1481,28 +1417,7 @@
|
||||
(set! (-> v1-0 end) (&-> v1-0 data-buffer (-> v1-0 allocated-length)))
|
||||
)
|
||||
(add-to-dma-buffer obj gp-0 arg0)
|
||||
(let* ((v1-3 gp-0)
|
||||
(a0-1 (the-as dma-packet (-> v1-3 base)))
|
||||
)
|
||||
(set! (-> a0-1 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-1 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-3 base) (the-as pointer (&+ a0-1 16)))
|
||||
)
|
||||
(let* ((v1-4 gp-0)
|
||||
(a0-3 (the-as gs-gif-tag (-> v1-4 base)))
|
||||
)
|
||||
(set! (-> a0-3 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-3 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-4 base) (the-as pointer (&+ a0-3 16)))
|
||||
)
|
||||
(let* ((v1-5 gp-0)
|
||||
(a0-5 (-> v1-5 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-5) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-5 base) (&+ a0-5 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set gp-0 (texflush 1))
|
||||
(let* ((v1-6 gp-0)
|
||||
(a0-7 (the-as object (-> v1-6 base)))
|
||||
)
|
||||
@@ -1547,47 +1462,26 @@
|
||||
)
|
||||
|
||||
;; definition for function texture-relocate
|
||||
;; ERROR: Failed store: (s.w! (+ t4-0 8) 0) at op 18
|
||||
(defun texture-relocate ((dma-buff dma-buffer) (tex texture) (dest-loc int) (dest-fmt gs-psm) (clut-dst int))
|
||||
(dotimes (v1-0 (the-as int (-> tex num-mips)))
|
||||
(let ((t1-1 (ash (-> tex w) (- v1-0)))
|
||||
(t2-3 (ash (-> tex h) (- v1-0)))
|
||||
)
|
||||
(let* ((t3-2 dma-buff)
|
||||
(t4-0 (the-as object (-> t3-2 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet t4-0) dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet t4-0) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet t4-0) vif1) (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> t3-2 base) (&+ (the-as pointer t4-0) 16))
|
||||
)
|
||||
(let* ((t3-3 dma-buff)
|
||||
(t4-2 (the-as object (-> t3-3 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t4-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x4))
|
||||
(set! (-> (the-as gs-gif-tag t4-2) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> t3-3 base) (&+ (the-as pointer t4-2) 16))
|
||||
)
|
||||
(let* ((t3-4 dma-buff)
|
||||
(t4-4 (-> t3-4 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-bitbltbuf) t4-4) 0) (new 'static 'gs-bitbltbuf
|
||||
:sbp (-> tex dest v1-0)
|
||||
:sbw (-> tex width v1-0)
|
||||
:spsm (the-as int (-> tex psm))
|
||||
:dbp (/ dest-loc 64)
|
||||
:dbw (-> tex width v1-0)
|
||||
:dpsm (the-as int dest-fmt)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t4-4) 1) (gs-reg64 bitbltbuf))
|
||||
(set! (-> (the-as (pointer gs-trxpos) t4-4) 2) (new 'static 'gs-trxpos))
|
||||
(set! (-> (the-as (pointer gs-reg64) t4-4) 3) (gs-reg64 trxpos))
|
||||
(set! (-> (the-as (pointer gs-trxreg) t4-4) 4) (new 'static 'gs-trxreg :rrw t1-1 :rrh t2-3))
|
||||
(set! (-> (the-as (pointer gs-reg64) t4-4) 5) (gs-reg64 trxreg))
|
||||
(set! (-> (the-as (pointer gs-trxdir) t4-4) 6) (new 'static 'gs-trxdir :xdir #x2))
|
||||
(set! (-> (the-as (pointer gs-reg64) t4-4) 7) (gs-reg64 trxdir))
|
||||
(set! (-> t3-4 base) (&+ t4-4 64))
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buff
|
||||
(bitbltbuf (new 'static 'gs-bitbltbuf
|
||||
:sbp (-> tex dest v1-0)
|
||||
:sbw (-> tex width v1-0)
|
||||
:spsm (the-as int (-> tex psm))
|
||||
:dbp (/ dest-loc 64)
|
||||
:dbw (-> tex width v1-0)
|
||||
:dpsm (the-as int dest-fmt)
|
||||
)
|
||||
)
|
||||
(trxpos (new 'static 'gs-trxpos))
|
||||
(trxreg (new 'static 'gs-trxreg :rrw t1-1 :rrh t2-3))
|
||||
(trxdir (new 'static 'gs-trxdir :xdir #x2))
|
||||
)
|
||||
)
|
||||
(set! (-> tex dest v1-0) (the-as uint (/ dest-loc 64)))
|
||||
)
|
||||
@@ -1595,81 +1489,37 @@
|
||||
((< clut-dst 0)
|
||||
)
|
||||
((= (-> tex psm) (gs-psm mt4))
|
||||
(let* ((v1-7 dma-buff)
|
||||
(a2-2 (the-as object (-> v1-7 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a2-2) dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a2-2) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a2-2) vif1) (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-7 base) (&+ (the-as pointer a2-2) 16))
|
||||
)
|
||||
(let* ((v1-8 dma-buff)
|
||||
(a2-4 (the-as object (-> v1-8 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a2-4) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x4))
|
||||
(set! (-> (the-as gs-gif-tag a2-4) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-8 base) (&+ (the-as pointer a2-4) 16))
|
||||
)
|
||||
(let* ((v1-9 dma-buff)
|
||||
(a2-6 (-> v1-9 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-bitbltbuf) a2-6) 0) (new 'static 'gs-bitbltbuf
|
||||
:sbw #x1
|
||||
:dbw #x1
|
||||
:dpsm (-> tex clutpsm)
|
||||
:dbp (/ clut-dst 64)
|
||||
:spsm (-> tex clutpsm)
|
||||
:sbp (-> tex clutdest)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-6) 1) (gs-reg64 bitbltbuf))
|
||||
(set! (-> (the-as (pointer gs-trxpos) a2-6) 2) (new 'static 'gs-trxpos))
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-6) 3) (gs-reg64 trxpos))
|
||||
(set! (-> (the-as (pointer gs-trxreg) a2-6) 4) (new 'static 'gs-trxreg :rrw #x8 :rrh #x2))
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-6) 5) (gs-reg64 trxreg))
|
||||
(set! (-> (the-as (pointer gs-trxdir) a2-6) 6) (new 'static 'gs-trxdir :xdir #x2))
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-6) 7) (gs-reg64 trxdir))
|
||||
(set! (-> v1-9 base) (&+ a2-6 64))
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buff
|
||||
(bitbltbuf (new 'static 'gs-bitbltbuf
|
||||
:sbw #x1
|
||||
:dbw #x1
|
||||
:dpsm (-> tex clutpsm)
|
||||
:dbp (/ clut-dst 64)
|
||||
:spsm (-> tex clutpsm)
|
||||
:sbp (-> tex clutdest)
|
||||
)
|
||||
)
|
||||
(trxpos (new 'static 'gs-trxpos))
|
||||
(trxreg (new 'static 'gs-trxreg :rrw #x8 :rrh #x2))
|
||||
(trxdir (new 'static 'gs-trxdir :xdir #x2))
|
||||
)
|
||||
(set! (-> tex clutdest) (the-as uint (/ clut-dst 64)))
|
||||
)
|
||||
((= (-> tex psm) (gs-psm mt8))
|
||||
(let* ((v1-13 dma-buff)
|
||||
(a2-9 (the-as object (-> v1-13 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a2-9) dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a2-9) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a2-9) vif1) (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-13 base) (&+ (the-as pointer a2-9) 16))
|
||||
)
|
||||
(let* ((v1-14 dma-buff)
|
||||
(a2-11 (the-as object (-> v1-14 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a2-11) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x4))
|
||||
(set! (-> (the-as gs-gif-tag a2-11) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-14 base) (&+ (the-as pointer a2-11) 16))
|
||||
)
|
||||
(let* ((v1-15 dma-buff)
|
||||
(a2-13 (-> v1-15 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-bitbltbuf) a2-13) 0) (new 'static 'gs-bitbltbuf
|
||||
:sbw #x2
|
||||
:dbw #x2
|
||||
:dpsm (-> tex clutpsm)
|
||||
:dbp (/ clut-dst 64)
|
||||
:spsm (-> tex clutpsm)
|
||||
:sbp (-> tex clutdest)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-13) 1) (gs-reg64 bitbltbuf))
|
||||
(set! (-> (the-as (pointer gs-trxpos) a2-13) 2) (new 'static 'gs-trxpos))
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-13) 3) (gs-reg64 trxpos))
|
||||
(set! (-> (the-as (pointer gs-trxreg) a2-13) 4) (new 'static 'gs-trxreg :rrw #x10 :rrh #x10))
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-13) 5) (gs-reg64 trxreg))
|
||||
(set! (-> (the-as (pointer gs-trxdir) a2-13) 6) (new 'static 'gs-trxdir :xdir #x2))
|
||||
(set! (-> (the-as (pointer gs-reg64) a2-13) 7) (gs-reg64 trxdir))
|
||||
(set! (-> v1-15 base) (&+ a2-13 64))
|
||||
)
|
||||
(dma-buffer-add-gs-set dma-buff
|
||||
(bitbltbuf (new 'static 'gs-bitbltbuf
|
||||
:sbw #x2
|
||||
:dbw #x2
|
||||
:dpsm (-> tex clutpsm)
|
||||
:dbp (/ clut-dst 64)
|
||||
:spsm (-> tex clutpsm)
|
||||
:sbp (-> tex clutdest)
|
||||
)
|
||||
)
|
||||
(trxpos (new 'static 'gs-trxpos))
|
||||
(trxreg (new 'static 'gs-trxreg :rrw #x10 :rrh #x10))
|
||||
(trxdir (new 'static 'gs-trxdir :xdir #x2))
|
||||
)
|
||||
(set! (-> tex clutdest) (the-as uint (/ clut-dst 64)))
|
||||
)
|
||||
)
|
||||
@@ -1701,6 +1551,7 @@
|
||||
;; WARN: Stack slot offset 16 signed mismatch
|
||||
;; WARN: Stack slot offset 16 signed mismatch
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ a0-26 8) 0) at op 192
|
||||
(defmethod setup-font-texture texture-pool ((obj texture-pool))
|
||||
(local-vars (sv-16 int) (sv-20 int))
|
||||
(let ((s3-0 (-> obj font-palette)))
|
||||
@@ -1768,28 +1619,7 @@
|
||||
(texture-relocate s4-0 s3-5 s2-5 (the-as gs-psm s1-5) -1)
|
||||
(font-set-tex0 (the-as (pointer gs-tex0) (-> *font-work* large-font-3-tmpl)) s3-5 s2-5 s1-5 sv-20)
|
||||
)
|
||||
(let* ((v1-28 s4-0)
|
||||
(a0-26 (the-as dma-packet (-> v1-28 base)))
|
||||
)
|
||||
(set! (-> a0-26 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-26 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-26 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-28 base) (the-as pointer (&+ a0-26 16)))
|
||||
)
|
||||
(let* ((v1-29 s4-0)
|
||||
(a0-28 (the-as gs-gif-tag (-> v1-29 base)))
|
||||
)
|
||||
(set! (-> a0-28 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-28 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-29 base) (the-as pointer (&+ a0-28 16)))
|
||||
)
|
||||
(let* ((v1-30 s4-0)
|
||||
(a0-30 (-> v1-30 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-30) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-30) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-30 base) (&+ a0-30 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-0 (texflush 1))
|
||||
(let* ((v1-31 s4-0)
|
||||
(a0-32 (the-as object (-> v1-31 base)))
|
||||
)
|
||||
@@ -2440,3 +2270,7 @@
|
||||
|
||||
;; definition for symbol *texture-pool*, type texture-pool
|
||||
(define *texture-pool* (new 'global 'texture-pool))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+6
-26
@@ -438,29 +438,9 @@
|
||||
|
||||
;; definition for function tie-end-buffer
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ a1-0 8) 0) at op 4
|
||||
(defun tie-end-buffer ((arg0 dma-buffer))
|
||||
(let* ((v1-0 arg0)
|
||||
(a1-0 (the-as dma-packet (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> a1-0 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a1-0 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a1-0 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (the-as pointer (&+ a1-0 16)))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a1-2 (the-as gs-gif-tag (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> a1-2 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a1-2 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (the-as pointer (&+ a1-2 16)))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a1-4 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a1-4) 0) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest greater-equal)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 1) (gs-reg64 test-1))
|
||||
(set! (-> v1-2 base) (&+ a1-4 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0 (test-1 (new 'static 'gs-test :zte #x1 :ztst (gs-ztest greater-equal))))
|
||||
(let* ((v1-3 arg0)
|
||||
(a1-6 (the-as dma-packet (-> v1-3 base)))
|
||||
)
|
||||
@@ -476,10 +456,10 @@
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 1) (new 'static 'vif-tag :cmd (vif-cmd stmod)))
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 2) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 3) (new 'static 'vif-tag :cmd (vif-cmd strow) :msk #x1))
|
||||
(set! (-> (the-as (pointer int32) a0-1) 4) 0)
|
||||
(set! (-> (the-as (pointer int32) a0-1) 5) 0)
|
||||
(set! (-> (the-as (pointer int32) a0-1) 6) 0)
|
||||
(set! (-> (the-as (pointer int32) a0-1) 7) 0)
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 4) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 5) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 6) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as (pointer vif-tag) a0-1) 7) (new 'static 'vif-tag))
|
||||
(set! (-> v1-4 base) (&+ a0-1 32))
|
||||
)
|
||||
0
|
||||
|
||||
+28
-133
@@ -746,6 +746,8 @@
|
||||
|
||||
;; definition for function draw-subtitle-image
|
||||
;; INFO: Used lq/sq
|
||||
;; WARN: Return type mismatch pointer vs none.
|
||||
;; ERROR: Failed store: (s.w! (+ a0-7 8) 0) at op 45
|
||||
(defun draw-subtitle-image ((arg0 subtitle-image) (arg1 font-context))
|
||||
(local-vars (sv-16 pointer) (sv-32 int))
|
||||
(let ((gp-0 (-> arg0 width))
|
||||
@@ -756,41 +758,17 @@
|
||||
(unpack-comp-rle (the-as (pointer int8) sv-16) (the-as (pointer int8) (-> arg0 data)))
|
||||
(&+! (-> s4-0 base) (logand -16 (+ (shr (* gp-0 s5-0) 1) 15)))
|
||||
)
|
||||
(let* ((s3-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(s4-1 (-> s3-0 base))
|
||||
)
|
||||
(with-dma-buffer-add-bucket ((s3-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(bucket-id subtitle)
|
||||
)
|
||||
(upload-vram-data s3-0 0 (-> arg0 palette) 2 8)
|
||||
(let ((s0-0 20))
|
||||
(let* ((v1-13 s3-0)
|
||||
(a0-7 (the-as object (-> v1-13 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-7) dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-7) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-7) vif1) (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-13 base) (the-as pointer (the-as gs-gif-tag (&+ (the-as pointer a0-7) 16))))
|
||||
)
|
||||
(let* ((v1-14 s3-0)
|
||||
(a0-9 (the-as gs-gif-tag (-> v1-14 base)))
|
||||
)
|
||||
(set! (-> a0-9 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x4))
|
||||
(set! (-> a0-9 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-14 base) (the-as pointer (&+ a0-9 16)))
|
||||
)
|
||||
(let* ((v1-15 s3-0)
|
||||
(a0-11 (-> v1-15 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-bitbltbuf) a0-11) 0)
|
||||
(new 'static 'gs-bitbltbuf :dbp #x1 :dbw (shr gp-0 6) :dpsm s0-0)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-11) 1) (gs-reg64 bitbltbuf))
|
||||
(set! (-> (the-as (pointer gs-trxpos) a0-11) 2) (new 'static 'gs-trxpos))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-11) 3) (gs-reg64 trxpos))
|
||||
(set! (-> (the-as (pointer gs-trxreg) a0-11) 4) (new 'static 'gs-trxreg :rrw gp-0 :rrh s5-0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-11) 5) (gs-reg64 trxreg))
|
||||
(set! (-> (the-as (pointer gs-trxdir) a0-11) 6) (new 'static 'gs-trxdir))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-11) 7) (gs-reg64 trxdir))
|
||||
(set! (-> v1-15 base) (&+ a0-11 64))
|
||||
)
|
||||
(dma-buffer-add-gs-set s3-0
|
||||
(bitbltbuf (new 'static 'gs-bitbltbuf :dbp #x1 :dbw (shr gp-0 6) :dpsm s0-0))
|
||||
(trxpos (new 'static 'gs-trxpos))
|
||||
(trxreg (new 'static 'gs-trxreg :rrw gp-0 :rrh s5-0))
|
||||
(trxdir (new 'static 'gs-trxdir))
|
||||
)
|
||||
(let ((t9-2 dma-buffer-add-ref-texture)
|
||||
(a0-13 s3-0)
|
||||
(a2-8 gp-0)
|
||||
@@ -801,44 +779,14 @@
|
||||
)
|
||||
(set! sv-32 (+ (log2 (the-as int (+ gp-0 -1))) 1))
|
||||
(let ((v1-17 (+ (log2 (the-as int (+ s5-0 -1))) 1)))
|
||||
(let* ((a0-16 s3-0)
|
||||
(a1-23 (the-as object (-> a0-16 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-23) dma) (new 'static 'dma-tag :qwc #x7 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a1-23) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a1-23) vif1) (new 'static 'vif-tag :imm #x7 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> a0-16 base) (the-as pointer (the-as gs-gif-tag (&+ (the-as pointer a1-23) 16))))
|
||||
)
|
||||
(let* ((a0-17 s3-0)
|
||||
(a1-25 (the-as object (-> a0-17 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a1-25) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x6))
|
||||
(set! (-> (the-as gs-gif-tag a1-25) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> a0-17 base) (&+ (the-as pointer a1-25) 16))
|
||||
)
|
||||
(let* ((a0-18 s3-0)
|
||||
(a1-27 (-> a0-18 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a1-27) 0)
|
||||
(new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-27) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a1-27) 2) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-27) 3) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) a1-27) 4)
|
||||
(new 'static 'gs-tex0 :tbp0 #x1 :tcc #x1 :cld #x1 :psm s0-0 :th v1-17 :tw sv-32 :tbw (shr gp-0 6))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-27) 5) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a1-27) 6) (new 'static 'gs-tex1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-27) 7) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) a1-27) 8)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-27) 9) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer uint64) a1-27) 10) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-27) 11) (gs-reg64 texflush))
|
||||
(set! (-> a0-18 base) (&+ a1-27 96))
|
||||
)
|
||||
(dma-buffer-add-gs-set s3-0
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always)))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x1 :tcc #x1 :cld #x1 :psm s0-0 :th v1-17 :tw sv-32 :tbw (shr gp-0 6)))
|
||||
(tex1-1 (new 'static 'gs-tex1))
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
(texflush 0)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let* ((v1-28 (-> s3-0 base))
|
||||
@@ -852,30 +800,10 @@
|
||||
(set! (-> (the-as (pointer uint128) v1-28) 0) (-> *subtitle-work* draw-tmpl dma-vif quad))
|
||||
(set! (-> (the-as (pointer uint128) v1-28) 1) (-> *subtitle-work* draw-tmpl quad 1))
|
||||
(set! (-> (the-as (pointer uint128) v1-28) 2) (-> *subtitle-work* color0 quad))
|
||||
(let ((t0-8 (the-as gs-gif-tag (&+ v1-28 48))))
|
||||
(set! (-> t0-8 word 0) (the-as uint 0))
|
||||
(set! (-> t0-8 word 1) (the-as uint 0))
|
||||
(set! (-> t0-8 word 2) (the-as uint 0))
|
||||
(set! (-> t0-8 word 3) (the-as uint 0))
|
||||
)
|
||||
(let ((t0-9 (the-as object (&+ v1-28 64))))
|
||||
(set! (-> (the-as gs-gif-tag t0-9) word 0) (* a2-23 16))
|
||||
(set! (-> (the-as gs-gif-tag t0-9) word 1) (the-as uint (* a3-8 16)))
|
||||
(set! (-> (the-as gs-gif-tag t0-9) word 2) (the-as uint 0))
|
||||
(set! (-> (the-as gs-gif-tag t0-9) word 3) (the-as uint 0))
|
||||
)
|
||||
(let ((a2-26 (the-as object (&+ v1-28 80))))
|
||||
(set! (-> (the-as gs-gif-tag a2-26) word 0) (* gp-0 16))
|
||||
(set! (-> (the-as gs-gif-tag a2-26) word 1) (* s5-0 16))
|
||||
(set! (-> (the-as gs-gif-tag a2-26) word 2) (the-as uint 0))
|
||||
(set! (-> (the-as gs-gif-tag a2-26) word 3) (the-as uint 0))
|
||||
)
|
||||
(let ((v1-29 (the-as object (&+ v1-28 96))))
|
||||
(set! (-> (the-as gs-gif-tag v1-29) word 0) (* a0-23 16))
|
||||
(set! (-> (the-as gs-gif-tag v1-29) word 1) (the-as uint (* a1-33 16)))
|
||||
(set! (-> (the-as gs-gif-tag v1-29) word 2) (the-as uint 0))
|
||||
(set! (-> (the-as gs-gif-tag v1-29) word 3) (the-as uint 0))
|
||||
)
|
||||
(set-vector! (the-as vector4w (&+ v1-28 48)) 0 0 0 0)
|
||||
(set-vector! (the-as vector4w (&+ v1-28 64)) (the-as int (* a2-23 16)) (* a3-8 16) 0 0)
|
||||
(set-vector! (the-as vector4w (&+ v1-28 80)) (the-as int (* gp-0 16)) (the-as int (* s5-0 16)) 0 0)
|
||||
(set-vector! (the-as vector4w (&+ v1-28 96)) (the-as int (* a0-23 16)) (* a1-33 16) 0 0)
|
||||
)
|
||||
(&+! (-> s3-0 base) 112)
|
||||
(let* ((v1-32 (-> s3-0 base))
|
||||
@@ -889,49 +817,16 @@
|
||||
(set! (-> (the-as (pointer uint128) v1-32) 0) (-> *subtitle-work* draw-tmpl dma-vif quad))
|
||||
(set! (-> (the-as (pointer uint128) v1-32) 1) (-> *subtitle-work* draw-tmpl quad 1))
|
||||
(set! (-> (the-as (pointer uint128) v1-32) 2) (-> *subtitle-work* color1 quad))
|
||||
(let ((t0-16 (the-as gs-gif-tag (&+ v1-32 48))))
|
||||
(set! (-> t0-16 word 0) (the-as uint 0))
|
||||
(set! (-> t0-16 word 1) (the-as uint 0))
|
||||
(set! (-> t0-16 word 2) (the-as uint 0))
|
||||
(set! (-> t0-16 word 3) (the-as uint 0))
|
||||
)
|
||||
(let ((t0-17 (the-as object (&+ v1-32 64))))
|
||||
(set! (-> (the-as gs-gif-tag t0-17) word 0) (* a1-38 16))
|
||||
(set! (-> (the-as gs-gif-tag t0-17) word 1) (the-as uint (* a3-11 16)))
|
||||
(set! (-> (the-as gs-gif-tag t0-17) word 2) (the-as uint 0))
|
||||
(set! (-> (the-as gs-gif-tag t0-17) word 3) (the-as uint 0))
|
||||
)
|
||||
(let ((a1-41 (the-as object (&+ v1-32 80))))
|
||||
(set! (-> (the-as gs-gif-tag a1-41) word 0) (* gp-0 16))
|
||||
(set! (-> (the-as gs-gif-tag a1-41) word 1) (* s5-0 16))
|
||||
(set! (-> (the-as gs-gif-tag a1-41) word 2) (the-as uint 0))
|
||||
(set! (-> (the-as gs-gif-tag a1-41) word 3) (the-as uint 0))
|
||||
)
|
||||
(let ((v1-33 (the-as object (&+ v1-32 96))))
|
||||
(set! (-> (the-as gs-gif-tag v1-33) word 0) (* a0-30 16))
|
||||
(set! (-> (the-as gs-gif-tag v1-33) word 1) (the-as uint (* a2-28 16)))
|
||||
(set! (-> (the-as gs-gif-tag v1-33) word 2) (the-as uint 0))
|
||||
(set! (-> (the-as gs-gif-tag v1-33) word 3) (the-as uint 0))
|
||||
)
|
||||
(set-vector! (the-as vector4w (&+ v1-32 48)) 0 0 0 0)
|
||||
(set-vector! (the-as vector4w (&+ v1-32 64)) (the-as int (* a1-38 16)) (* a3-11 16) 0 0)
|
||||
(set-vector! (the-as vector4w (&+ v1-32 80)) (the-as int (* gp-0 16)) (the-as int (* s5-0 16)) 0 0)
|
||||
(set-vector! (the-as vector4w (&+ v1-32 96)) (the-as int (* a0-30 16)) (* a2-28 16) 0 0)
|
||||
)
|
||||
(&+! (-> s3-0 base) 112)
|
||||
(set-dirty-mask! (-> *level* default-level) 8 (the-as int (* gp-0 s5-0)) 256)
|
||||
(let ((a3-15 (-> s3-0 base)))
|
||||
(let ((v1-37 (the-as object (-> s3-0 base))))
|
||||
(set! (-> (the-as dma-packet v1-37) dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
(set! (-> (the-as dma-packet v1-37) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet v1-37) vif1) (new 'static 'vif-tag))
|
||||
(set! (-> s3-0 base) (&+ (the-as pointer v1-37) 16))
|
||||
)
|
||||
(dma-bucket-insert-tag
|
||||
(-> *display* frames (-> *display* on-screen) bucket-group)
|
||||
(bucket-id subtitle)
|
||||
s4-1
|
||||
(the-as (pointer dma-tag) a3-15)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function process-drawable-draw-subtitles
|
||||
|
||||
+1
-5
@@ -242,7 +242,7 @@
|
||||
(bigmap-method-19 (_type_) int 19)
|
||||
(bigmap-method-20 (_type_) int 20)
|
||||
(bigmap-method-21 (_type_ int int) int 21)
|
||||
(bigmap-method-22 (_type_ dma-buffer (pointer uint32) int int int int) none 22)
|
||||
(bigmap-method-22 (_type_ dma-buffer (pointer uint32) int int int gs-psm) none 22)
|
||||
(bigmap-method-23 (_type_) none 23)
|
||||
(bigmap-method-24 (_type_ dma-buffer) none 24)
|
||||
(bigmap-method-25 (_type_ dma-buffer) none 25)
|
||||
@@ -406,7 +406,3 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+46
-268
@@ -226,40 +226,17 @@
|
||||
|
||||
;; definition for method 22 of type bigmap
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod bigmap-method-22 bigmap ((obj bigmap) (arg0 dma-buffer) (arg1 (pointer uint32)) (arg2 int) (arg3 int) (arg4 int) (arg5 int))
|
||||
;; ERROR: Failed store: (s.w! (+ a0-1 8) 0) at op 5
|
||||
(defmethod bigmap-method-22 bigmap ((obj bigmap) (arg0 dma-buffer) (arg1 (pointer uint32)) (arg2 int) (arg3 int) (arg4 int) (arg5 gs-psm))
|
||||
(local-vars (sv-16 int))
|
||||
(set! sv-16 arg2)
|
||||
(let* ((v1-0 arg0)
|
||||
(a0-1 (the-as dma-packet (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> a0-1 dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-1 vif1) (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (the-as pointer (&+ a0-1 16)))
|
||||
)
|
||||
(let* ((v1-1 arg0)
|
||||
(a0-3 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a0-3) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x4))
|
||||
(set! (-> (the-as gs-gif-tag a0-3) regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a0-3) 16))
|
||||
)
|
||||
(let* ((v1-2 arg0)
|
||||
(a0-5 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-bitbltbuf) a0-5) 0)
|
||||
(new 'static 'gs-bitbltbuf :dpsm arg5 :dbp sv-16 :dbw (/ arg3 64))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 1) (gs-reg64 bitbltbuf))
|
||||
(set! (-> (the-as (pointer gs-trxpos) a0-5) 2) (new 'static 'gs-trxpos))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 3) (gs-reg64 trxpos))
|
||||
(set! (-> (the-as (pointer gs-trxreg) a0-5) 4) (new 'static 'gs-trxreg :rrw arg3 :rrh arg4))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 5) (gs-reg64 trxreg))
|
||||
(set! (-> (the-as (pointer gs-trxdir) a0-5) 6) (new 'static 'gs-trxdir))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-5) 7) (gs-reg64 trxdir))
|
||||
(set! (-> v1-2 base) (&+ a0-5 64))
|
||||
)
|
||||
(dma-buffer-add-ref-texture arg0 arg1 arg3 arg4 (the-as gs-psm arg5))
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(bitbltbuf (new 'static 'gs-bitbltbuf :dpsm (the-as int arg5) :dbp sv-16 :dbw (/ arg3 64)))
|
||||
(trxpos (new 'static 'gs-trxpos))
|
||||
(trxreg (new 'static 'gs-trxreg :rrw arg3 :rrh arg4))
|
||||
(trxdir (new 'static 'gs-trxdir))
|
||||
)
|
||||
(dma-buffer-add-ref-texture arg0 arg1 arg3 arg4 arg5)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
@@ -282,240 +259,68 @@
|
||||
)
|
||||
|
||||
;; definition for method 24 of type bigmap
|
||||
;; ERROR: Failed store: (s.w! (+ a0-2 8) 0) at op 22
|
||||
(defmethod bigmap-method-24 bigmap ((obj bigmap) (arg0 dma-buffer))
|
||||
(let ((s4-0 (the-as (pointer uint32) (-> obj bigmap-image art-group))))
|
||||
(let ((v1-1 (-> s4-0 0))
|
||||
(s3-0 (-> s4-0 1))
|
||||
)
|
||||
(bigmap-method-22 obj arg0 (+ (+ v1-1 16) (the-as uint s4-0)) 0 16 16 0)
|
||||
(let* ((v1-4 arg0)
|
||||
(a0-2 (the-as dma-packet (-> v1-4 base)))
|
||||
)
|
||||
(set! (-> a0-2 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-2 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-2 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-4 base) (the-as pointer (&+ a0-2 16)))
|
||||
)
|
||||
(let* ((v1-5 arg0)
|
||||
(a0-4 (the-as gs-gif-tag (-> v1-5 base)))
|
||||
)
|
||||
(set! (-> a0-4 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-4 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-5 base) (the-as pointer (&+ a0-4 16)))
|
||||
)
|
||||
(let* ((v1-6 arg0)
|
||||
(a0-6 (-> v1-6 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-6) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-6) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-6 base) (&+ a0-6 16))
|
||||
)
|
||||
(bigmap-method-22 obj arg0 (+ (+ s3-0 16) (the-as uint s4-0)) 8 512 208 19)
|
||||
)
|
||||
(let* ((v1-10 arg0)
|
||||
(a0-9 (the-as dma-packet (-> v1-10 base)))
|
||||
)
|
||||
(set! (-> a0-9 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-9 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-9 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-10 base) (the-as pointer (&+ a0-9 16)))
|
||||
)
|
||||
(let* ((v1-11 arg0)
|
||||
(a0-11 (the-as gs-gif-tag (-> v1-11 base)))
|
||||
)
|
||||
(set! (-> a0-11 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a0-11 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-11 base) (the-as pointer (&+ a0-11 16)))
|
||||
)
|
||||
(let* ((v1-12 arg0)
|
||||
(a0-13 (-> v1-12 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-tex0) a0-13) 0)
|
||||
(new 'static 'gs-tex0 :tbp0 #x8 :tbw #x8 :psm #x13 :tw #x9 :th #x9 :cld #x1)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-13) 1) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a0-13) 2) (new 'static 'gs-tex1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-13) 3) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer int64) a0-13) 4) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-13) 5) (gs-reg64 texflush))
|
||||
(set! (-> v1-12 base) (&+ a0-13 48))
|
||||
(bigmap-method-22 obj arg0 (+ (+ v1-1 16) (the-as uint s4-0)) 0 16 16 (gs-psm ct32))
|
||||
(dma-buffer-add-gs-set arg0 (texflush 1))
|
||||
(bigmap-method-22 obj arg0 (+ (+ s3-0 16) (the-as uint s4-0)) 8 512 208 (gs-psm mt8))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x8 :tbw #x8 :psm #x13 :tw #x9 :th #x9 :cld #x1))
|
||||
(tex1-1 (new 'static 'gs-tex1))
|
||||
(texflush 1)
|
||||
)
|
||||
(bigmap-method-26 obj arg0 (-> obj x0) (-> obj y0) (-> obj x1) (-> obj y2))
|
||||
(let ((v1-16 (+ #x1a000 (-> s4-0 1))))
|
||||
(bigmap-method-22 obj arg0 (+ (+ v1-16 16) (the-as uint s4-0)) 8 512 208 19)
|
||||
)
|
||||
(let* ((v1-19 arg0)
|
||||
(a0-18 (the-as dma-packet (-> v1-19 base)))
|
||||
)
|
||||
(set! (-> a0-18 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-18 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-18 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-19 base) (the-as pointer (&+ a0-18 16)))
|
||||
)
|
||||
(let* ((v1-20 arg0)
|
||||
(a0-20 (the-as gs-gif-tag (-> v1-20 base)))
|
||||
)
|
||||
(set! (-> a0-20 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-20 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-20 base) (the-as pointer (&+ a0-20 16)))
|
||||
)
|
||||
(let* ((v1-21 arg0)
|
||||
(a0-22 (-> v1-21 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-22) 0) 0)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-22) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-21 base) (&+ a0-22 16))
|
||||
(bigmap-method-22 obj arg0 (+ (+ v1-16 16) (the-as uint s4-0)) 8 512 208 (gs-psm mt8))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0 (texflush 0))
|
||||
(bigmap-method-26 obj arg0 (-> obj x0) (-> obj y2) (-> obj x1) (-> obj y1))
|
||||
(let ((v1-25 (+ (-> s4-0 0) 1024))
|
||||
(s3-1 (+ #x34000 (-> s4-0 1)))
|
||||
)
|
||||
(bigmap-method-22 obj arg0 (+ (+ v1-25 16) (the-as uint s4-0)) 0 16 16 0)
|
||||
(bigmap-method-22 obj arg0 (+ (+ s3-1 16) (the-as uint s4-0)) 8 512 208 19)
|
||||
)
|
||||
(let* ((v1-31 arg0)
|
||||
(a0-28 (the-as dma-packet (-> v1-31 base)))
|
||||
)
|
||||
(set! (-> a0-28 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-28 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-28 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-31 base) (the-as pointer (&+ a0-28 16)))
|
||||
)
|
||||
(let* ((v1-32 arg0)
|
||||
(a0-30 (the-as gs-gif-tag (-> v1-32 base)))
|
||||
)
|
||||
(set! (-> a0-30 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a0-30 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-32 base) (the-as pointer (&+ a0-30 16)))
|
||||
)
|
||||
(let* ((v1-33 arg0)
|
||||
(a0-32 (-> v1-33 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-tex0) a0-32) 0)
|
||||
(new 'static 'gs-tex0 :tbp0 #x8 :tbw #x8 :psm #x13 :tw #x9 :th #x9 :tcc #x1 :cld #x1)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-32) 1) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a0-32) 2) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-32) 3) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer int64) a0-32) 4) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-32) 5) (gs-reg64 texflush))
|
||||
(set! (-> v1-33 base) (&+ a0-32 48))
|
||||
(bigmap-method-22 obj arg0 (+ (+ v1-25 16) (the-as uint s4-0)) 0 16 16 (gs-psm ct32))
|
||||
(bigmap-method-22 obj arg0 (+ (+ s3-1 16) (the-as uint s4-0)) 8 512 208 (gs-psm mt8))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x8 :tbw #x8 :psm #x13 :tw #x9 :th #x9 :tcc #x1 :cld #x1))
|
||||
(tex1-1 (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(texflush 1)
|
||||
)
|
||||
(bigmap-method-26 obj arg0 (-> obj x0) (-> obj y0) (-> obj x1) (-> obj y2))
|
||||
(let ((v1-37 (+ #x4e000 (-> s4-0 1))))
|
||||
(bigmap-method-22 obj arg0 (+ (+ v1-37 16) (the-as uint s4-0)) 8 512 208 19)
|
||||
(bigmap-method-22 obj arg0 (+ (+ v1-37 16) (the-as uint s4-0)) 8 512 208 (gs-psm mt8))
|
||||
)
|
||||
)
|
||||
(let* ((v1-40 arg0)
|
||||
(a0-37 (the-as dma-packet (-> v1-40 base)))
|
||||
)
|
||||
(set! (-> a0-37 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-37 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-37 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-40 base) (the-as pointer (&+ a0-37 16)))
|
||||
)
|
||||
(let* ((v1-41 arg0)
|
||||
(a0-39 (the-as gs-gif-tag (-> v1-41 base)))
|
||||
)
|
||||
(set! (-> a0-39 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-39 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-41 base) (the-as pointer (&+ a0-39 16)))
|
||||
)
|
||||
(let* ((v1-42 arg0)
|
||||
(a0-41 (-> v1-42 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-41) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-41) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-42 base) (&+ a0-41 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0 (texflush 1))
|
||||
(bigmap-method-26 obj arg0 (-> obj x0) (-> obj y2) (-> obj x1) (-> obj y1))
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for method 25 of type bigmap
|
||||
;; ERROR: Failed store: (s.w! (+ a0-2 8) 0) at op 21
|
||||
(defmethod bigmap-method-25 bigmap ((obj bigmap) (arg0 dma-buffer))
|
||||
(let ((s4-0 (the-as (pointer uint32) (-> obj bigmap-image art-group))))
|
||||
(bigmap-method-22 obj arg0 (+ (+ (-> s4-0 0) 16) (the-as uint s4-0)) 0 16 16 0)
|
||||
(let* ((v1-5 arg0)
|
||||
(a0-2 (the-as dma-packet (-> v1-5 base)))
|
||||
)
|
||||
(set! (-> a0-2 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-2 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-2 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-5 base) (the-as pointer (&+ a0-2 16)))
|
||||
)
|
||||
(let* ((v1-6 arg0)
|
||||
(a0-4 (the-as gs-gif-tag (-> v1-6 base)))
|
||||
)
|
||||
(set! (-> a0-4 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-4 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-6 base) (the-as pointer (&+ a0-4 16)))
|
||||
)
|
||||
(let* ((v1-7 arg0)
|
||||
(a0-6 (-> v1-7 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-6) 0) 0)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-6) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-7 base) (&+ a0-6 16))
|
||||
)
|
||||
(bigmap-method-22 obj arg0 (+ (+ (-> s4-0 0) 16) (the-as uint s4-0)) 0 16 16 (gs-psm ct32))
|
||||
(dma-buffer-add-gs-set arg0 (texflush 0))
|
||||
(let ((v1-10 (+ (* (the int (-> obj scroll y)) 512) (-> s4-0 1))))
|
||||
(bigmap-method-22 obj arg0 (+ (+ v1-10 16) (the-as int s4-0)) 8 512 208 19)
|
||||
)
|
||||
(let* ((v1-13 arg0)
|
||||
(a0-10 (the-as dma-packet (-> v1-13 base)))
|
||||
)
|
||||
(set! (-> a0-10 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-10 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-10 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-13 base) (the-as pointer (&+ a0-10 16)))
|
||||
)
|
||||
(let* ((v1-14 arg0)
|
||||
(a0-12 (the-as gs-gif-tag (-> v1-14 base)))
|
||||
)
|
||||
(set! (-> a0-12 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a0-12 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-14 base) (the-as pointer (&+ a0-12 16)))
|
||||
)
|
||||
(let* ((v1-15 arg0)
|
||||
(a0-14 (-> v1-15 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-tex0) a0-14) 0)
|
||||
(new 'static 'gs-tex0 :tbp0 #x8 :tbw #x8 :psm #x13 :tw #x9 :th #x9 :cld #x1)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-14) 1) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a0-14) 2) (new 'static 'gs-tex1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-14) 3) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer int64) a0-14) 4) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-14) 5) (gs-reg64 texflush))
|
||||
(set! (-> v1-15 base) (&+ a0-14 48))
|
||||
(bigmap-method-22 obj arg0 (+ (+ v1-10 16) (the-as int s4-0)) 8 512 208 (gs-psm mt8))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0
|
||||
(tex0-1 (new 'static 'gs-tex0 :tbp0 #x8 :tbw #x8 :psm #x13 :tw #x9 :th #x9 :cld #x1))
|
||||
(tex1-1 (new 'static 'gs-tex1))
|
||||
(texflush 1)
|
||||
)
|
||||
(bigmap-method-26 obj arg0 (-> obj x0) (-> obj y0) (-> obj x1) (-> obj y2))
|
||||
(let ((v1-21 (+ (* (+ (the int (-> obj scroll y)) 208) 512) (-> s4-0 1))))
|
||||
(bigmap-method-22 obj arg0 (+ (+ v1-21 16) (the-as int s4-0)) 8 512 208 19)
|
||||
(bigmap-method-22 obj arg0 (+ (+ v1-21 16) (the-as int s4-0)) 8 512 208 (gs-psm mt8))
|
||||
)
|
||||
)
|
||||
(let* ((v1-24 arg0)
|
||||
(a0-19 (the-as dma-packet (-> v1-24 base)))
|
||||
)
|
||||
(set! (-> a0-19 dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-19 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-19 vif1) (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-24 base) (the-as pointer (&+ a0-19 16)))
|
||||
)
|
||||
(let* ((v1-25 arg0)
|
||||
(a0-21 (the-as gs-gif-tag (-> v1-25 base)))
|
||||
)
|
||||
(set! (-> a0-21 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1))
|
||||
(set! (-> a0-21 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-25 base) (the-as pointer (&+ a0-21 16)))
|
||||
)
|
||||
(let* ((v1-26 arg0)
|
||||
(a0-23 (-> v1-26 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-23) 0) 1)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-23) 1) (gs-reg64 texflush))
|
||||
(set! (-> v1-26 base) (&+ a0-23 16))
|
||||
)
|
||||
(dma-buffer-add-gs-set arg0 (texflush 1))
|
||||
(bigmap-method-26 obj arg0 (-> obj x0) (-> obj y2) (-> obj x1) (-> obj y1))
|
||||
(none)
|
||||
)
|
||||
@@ -776,7 +581,7 @@
|
||||
|
||||
;; definition for method 11 of type bigmap
|
||||
;; INFO: Used lq/sq
|
||||
;; ERROR: Failed store: (s.w! (+ v1-35 8) 0) at op 125
|
||||
;; ERROR: Failed store: (s.w! (+ a0-5 8) 0) at op 75
|
||||
(defmethod bigmap-method-11 bigmap ((obj bigmap) (arg0 int) (arg1 int) (arg2 int) (arg3 int))
|
||||
(local-vars (sv-96 pointer) (sv-100 texture) (sv-104 matrix) (sv-112 int))
|
||||
(with-pp
|
||||
@@ -801,34 +606,11 @@
|
||||
(with-dma-buffer-add-bucket ((s4-1 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(bucket-id tex-all-map)
|
||||
)
|
||||
(let ((v1-27 s4-1))
|
||||
(let ((a0-5 (the-as dma-packet (-> v1-27 base))))
|
||||
(set! (-> a0-5 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> a0-5 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> a0-5 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-27 base) (the-as pointer (&+ a0-5 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-28 s4-1))
|
||||
(let ((a0-7 (the-as gs-gif-tag (-> v1-28 base))))
|
||||
(set! (-> a0-7 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> a0-7 regs) GIF_REGS_ALL_AD)
|
||||
(set! (-> v1-28 base) (the-as pointer (&+ a0-7 16)))
|
||||
)
|
||||
)
|
||||
(let ((v1-29 s4-1))
|
||||
(let ((a0-9 (-> v1-29 base)))
|
||||
(set! (-> (the-as (pointer gs-test) a0-9) 0)
|
||||
(new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-9) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer int64) a0-9) 2) 68)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-9) 3) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer int64) a0-9) 4) 5)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-9) 5) (gs-reg64 clamp-1))
|
||||
(set! (-> v1-29 base) (&+ a0-9 48))
|
||||
)
|
||||
)
|
||||
(dma-buffer-add-gs-set s4-1
|
||||
(test-1 (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always)))
|
||||
(alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(clamp-1 (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)))
|
||||
)
|
||||
(if (= (-> obj bigmap-index) 20)
|
||||
(bigmap-method-25 obj s4-1)
|
||||
(bigmap-method-24 obj s4-1)
|
||||
@@ -1117,7 +899,3 @@
|
||||
|
||||
;; failed to figure out what this is:
|
||||
(kmemclose)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user