From 9b7eae231a2e94acaecbde9bc029fada8d5d0b12 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Thu, 28 Aug 2025 13:27:59 -0500 Subject: [PATCH] dreamcast2: add sierpinski_tetrahedron_fsaa --- dreamcast2/example/example.mk | 7 + dreamcast2/example/sierpinski_tetrahedron.cpp | 3 + .../example/sierpinski_tetrahedron_fsaa.cpp | 496 ++++++++++++++++++ dreamcast2/holly/holly_bits.hpp | 2 +- dreamcast2/regs/holly/holly_bits.ods | Bin 24403 -> 27868 bytes 5 files changed, 507 insertions(+), 1 deletion(-) create mode 100644 dreamcast2/example/sierpinski_tetrahedron_fsaa.cpp diff --git a/dreamcast2/example/example.mk b/dreamcast2/example/example.mk index fef3b7f..c848b71 100644 --- a/dreamcast2/example/example.mk +++ b/dreamcast2/example/example.mk @@ -59,3 +59,10 @@ SIERPINSKI_TETRAHEDRON_OBJ = \ example/sierpinski_tetrahedron.elf: LDSCRIPT = $(LIB)/main.lds example/sierpinski_tetrahedron.elf: $(START_OBJ) $(SIERPINSKI_TETRAHEDRON_OBJ) + +SIERPINSKI_TETRAHEDRON_FSAA_OBJ = \ + holly/core/region_array.o \ + example/sierpinski_tetrahedron_fsaa.o + +example/sierpinski_tetrahedron_fsaa.elf: LDSCRIPT = $(LIB)/main.lds +example/sierpinski_tetrahedron_fsaa.elf: $(START_OBJ) $(SIERPINSKI_TETRAHEDRON_FSAA_OBJ) diff --git a/dreamcast2/example/sierpinski_tetrahedron.cpp b/dreamcast2/example/sierpinski_tetrahedron.cpp index 0a1d1a4..0c13c9d 100644 --- a/dreamcast2/example/sierpinski_tetrahedron.cpp +++ b/dreamcast2/example/sierpinski_tetrahedron.cpp @@ -464,6 +464,9 @@ void main() systembus.ISTNRM = istnrm::end_of_transferring_opaque_list; holly.FB_W_SOF1 = framebuffer_start[i & 1]; + + holly.SCALER_CTL = scaler_ctl::vertical_scale_factor(0x0400); + // start the actual render--the rendering process begins by interpreting the // region array holly.STARTRENDER = 1; diff --git a/dreamcast2/example/sierpinski_tetrahedron_fsaa.cpp b/dreamcast2/example/sierpinski_tetrahedron_fsaa.cpp new file mode 100644 index 0000000..481b66f --- /dev/null +++ b/dreamcast2/example/sierpinski_tetrahedron_fsaa.cpp @@ -0,0 +1,496 @@ +#include "memorymap.hpp" + +#include "holly/core/object_list_bits.hpp" +#include "holly/core/region_array.hpp" +#include "holly/core/region_array_bits.hpp" +#include "holly/core/parameter_bits.hpp" +#include "holly/core/parameter.hpp" +#include "holly/ta/global_parameter.hpp" +#include "holly/ta/vertex_parameter.hpp" +#include "holly/ta/parameter_bits.hpp" +#include "holly/holly.hpp" +#include "holly/holly_bits.hpp" + +#include "sh7091/sh7091.hpp" +#include "sh7091/sh7091_bits.hpp" +#include "sh7091/pref.hpp" +#include "sh7091/store_queue_transfer.hpp" + +#include "systembus/systembus.hpp" +#include "systembus/systembus_bits.hpp" + +// A blue +// B black +// C red +// D green +// A blue +// B black + +struct vec3 { + union { + float x; + float r; + }; + union { + float y; + float g; + }; + union { + float z; + float b; + }; +}; + +struct vertex { + vec3 position; + vec3 color; +}; + +constexpr float s = 2.5; + +static const vertex tetrahedron_vertex[] = { + {{ 0.500000 * s, -0.204124 * s, 0.288675 * s}, {0.0000, 0.0000, 1.0000}}, + {{ 0.000000 * s, -0.204124 * s, -0.577350 * s}, {0.0000, 0.0000, 0.0000}}, + {{-0.500000 * s, -0.204124 * s, 0.288675 * s}, {1.0000, 0.0000, 0.0000}}, + {{ 0.000000 * s, 0.612372 * s, 0.000000 * s}, {0.0000, 1.0000, 0.0000}}, +}; + +void transfer_background_polygon(uint32_t isp_tsp_parameter_start) +{ + using namespace holly::core::parameter; + + using parameter = isp_tsp_parameter<3>; + + volatile parameter * polygon = (volatile parameter *)&texture_memory32[isp_tsp_parameter_start]; + + polygon->isp_tsp_instruction_word = isp_tsp_instruction_word::depth_compare_mode::always + | isp_tsp_instruction_word::culling_mode::no_culling; + + polygon->tsp_instruction_word = tsp_instruction_word::src_alpha_instr::one + | tsp_instruction_word::dst_alpha_instr::zero + | tsp_instruction_word::fog_control::no_fog; + + polygon->texture_control_word = 0; + + polygon->vertex[0].x = 0.0f; + polygon->vertex[0].y = 0.0f; + polygon->vertex[0].z = 0.00001f; + polygon->vertex[0].base_color = 0xff00ff; + + polygon->vertex[1].x = 32.0f; + polygon->vertex[1].y = 0.0f; + polygon->vertex[1].z = 0.00001f; + polygon->vertex[1].base_color = 0xff00ff; + + polygon->vertex[2].x = 32.0f; + polygon->vertex[2].y = 32.0f; + polygon->vertex[2].z = 0.00001f; + polygon->vertex[2].base_color = 0xff00ff; +} + +static inline uint32_t transfer_ta_global_end_of_list(uint32_t store_queue_ix) +{ + using namespace holly::ta; + using namespace holly::ta::parameter; + + // + // TA "end of list" global transfer + // + volatile global_parameter::end_of_list * end_of_list = (volatile global_parameter::end_of_list *)&store_queue[store_queue_ix]; + store_queue_ix += (sizeof (global_parameter::end_of_list)); + + end_of_list->parameter_control_word = parameter_control_word::para_type::end_of_list; + + // start store queue transfer of `end_of_list` to the TA + pref(end_of_list); + + return store_queue_ix; +} + +static inline uint32_t transfer_ta_global_polygon(uint32_t store_queue_ix) +{ + using namespace holly::core::parameter; + using namespace holly::ta; + using namespace holly::ta::parameter; + + // + // TA polygon global transfer + // + + volatile global_parameter::polygon_type_0 * polygon = (volatile global_parameter::polygon_type_0 *)&store_queue[store_queue_ix]; + store_queue_ix += (sizeof (global_parameter::polygon_type_0)); + + polygon->parameter_control_word = parameter_control_word::para_type::polygon_or_modifier_volume + | parameter_control_word::list_type::opaque + | parameter_control_word::col_type::floating_color + | parameter_control_word::gouraud; + + polygon->isp_tsp_instruction_word = isp_tsp_instruction_word::depth_compare_mode::greater + | isp_tsp_instruction_word::culling_mode::cull_if_negative; + // Note that it is not possible to use + // ISP_TSP_INSTRUCTION_WORD::GOURAUD_SHADING in this isp_tsp_instruction_word, + // because `gouraud` is one of the bits overwritten by the value in + // parameter_control_word. See DCDBSysArc990907E.pdf page 200. + + polygon->tsp_instruction_word = tsp_instruction_word::src_alpha_instr::one + | tsp_instruction_word::dst_alpha_instr::zero + | tsp_instruction_word::fog_control::no_fog; + + polygon->texture_control_word = 0; + + polygon->data_size_for_sort_dma = 0; + polygon->next_address_for_sort_dma = 0; + + // start store queue transfer of `polygon` to the TA + pref(polygon); + + return store_queue_ix; +} + +static inline uint32_t transfer_ta_vertex_tetrahedron(uint32_t store_queue_ix, + const vec3& ap, const vec3& ac, + const vec3& bp, const vec3& bc, + const vec3& cp, const vec3& cc, + const vec3& dp, const vec3& dc) +{ + using namespace holly::ta; + using namespace holly::ta::parameter; + + if (ap.z <= 0 || bp.z <= 0 || cp.z <= 0 || dp.z <= 0) + return store_queue_ix; + + // + // TA polygon vertex transfer + // + + volatile vertex_parameter::polygon_type_1 * vertex = (volatile vertex_parameter::polygon_type_1 *)&store_queue[store_queue_ix]; + store_queue_ix += (sizeof (vertex_parameter::polygon_type_1)) * 6; + +#define transfer_vertex(n, p, c, pcw) \ + vertex[n].parameter_control_word = pcw; \ + vertex[n].x = p.x; \ + vertex[n].y = p.y; \ + vertex[n].z = p.z; \ + vertex[n].base_color_r = c.r; \ + vertex[n].base_color_g = c.g; \ + vertex[n].base_color_b = c.b; \ + pref(&vertex[n]); + + transfer_vertex(0, ap, ac, parameter_control_word::para_type::vertex_parameter); + transfer_vertex(1, bp, bc, parameter_control_word::para_type::vertex_parameter); + transfer_vertex(2, cp, cc, parameter_control_word::para_type::vertex_parameter); + transfer_vertex(3, dp, dc, parameter_control_word::para_type::vertex_parameter); + transfer_vertex(4, ap, ac, parameter_control_word::para_type::vertex_parameter); + transfer_vertex(5, bp, bc, parameter_control_word::para_type::vertex_parameter | parameter_control_word::end_of_strip); + +#undef transfer_vertex + + return store_queue_ix; +} + +#define cos(n) __builtin_cosf(n) +#define sin(n) __builtin_sinf(n) + +static float theta = 0; + +static inline vec3 vertex_rotate(vec3 v, float cost, float sint) +{ + // to make the cube's appearance more interesting, rotate the vertex on two + // axes + + float x0 = v.x; + float y0 = v.y; + float z0 = v.z; + + float x1 = x0 * cost - z0 * sint; + float y1 = y0; + float z1 = x0 * sint + z0 * cost; + + float x2 = x1; + float y2 = y1 * cost - z1 * sint; + float z2 = y1 * sint + z1 * cost; + + return (vec3){x2, y2, z2}; +} + +static inline vec3 vertex_perspective_divide(vec3 v) +{ + float w = 1.0f / (v.z + 1.f); + return (vec3){v.x * w, v.y * w, w}; +} + +static inline vec3 vertex_screen_space(vec3 v) +{ + return (vec3){ + v.x * 480.f + 640.f, + v.y * 240.f + 240.f, + v.z, + }; +} + +static uint32_t store_queue_ix = 0; +static float cost; +static float sint; + +static inline void tetrahedron(vec3 a, vec3 b, vec3 c, vec3 d) +{ + vec3 ap = vertex_screen_space( + vertex_perspective_divide( + vertex_rotate(a, cost, sint))); + + vec3 bp = vertex_screen_space( + vertex_perspective_divide( + vertex_rotate(b, cost, sint))); + + vec3 cp = vertex_screen_space( + vertex_perspective_divide( + vertex_rotate(c, cost, sint))); + + vec3 dp = vertex_screen_space( + vertex_perspective_divide( + vertex_rotate(d, cost, sint))); + + const vec3& ac = tetrahedron_vertex[0].color; + const vec3& bc = tetrahedron_vertex[1].color; + const vec3& cc = tetrahedron_vertex[2].color; + const vec3& dc = tetrahedron_vertex[3].color; + + store_queue_ix = transfer_ta_vertex_tetrahedron(store_queue_ix, + ap, ac, + bp, bc, + cp, cc, + dp, dc); +} + +static inline vec3 midpoint(const vec3& a, const vec3& b) +{ + return {(a.x + b.x) * 0.5f, + (a.y + b.y) * 0.5f, + (a.z + b.z) * 0.5f}; +} + +static void subdivide(vec3 a, vec3 b, vec3 c, vec3 d, + int depth) +{ + if (depth == 0) { + tetrahedron(a, b, c, d); + } else { + /* + B + / \ + A---C + */ + + vec3 ab = midpoint(a, b); + vec3 ac = midpoint(a, c); + vec3 ad = midpoint(a, d); + vec3 bc = midpoint(b, c); + vec3 bd = midpoint(b, d); + vec3 cd = midpoint(c, d); + + /* + b ---- + / \ \ + ab bc \ + / \ \ + a---ac---c--cd--d + */ + + + subdivide( a, ab, ac, ad, depth - 1); + subdivide(ab, b, bc, bd, depth - 1); + subdivide(ac, bc, c, cd, depth - 1); + subdivide(ad, bd, cd, d, depth - 1); + } +} + +void transfer_ta_sierpinski_tetrahedron() +{ + { + using namespace sh7091; + using sh7091::sh7091; + + // set the store queue destination address to the TA Polygon Converter FIFO + sh7091.CCN.QACR0 = sh7091::ccn::qacr0::address(ta_fifo_polygon_converter); + sh7091.CCN.QACR1 = sh7091::ccn::qacr1::address(ta_fifo_polygon_converter); + } + + store_queue_ix = 0; + + store_queue_ix = transfer_ta_global_polygon(store_queue_ix); + + cost = cos(theta); + sint = sin(theta); + + subdivide(tetrahedron_vertex[0].position, + tetrahedron_vertex[1].position, + tetrahedron_vertex[2].position, + tetrahedron_vertex[3].position, + 6); + + store_queue_ix = transfer_ta_global_end_of_list(store_queue_ix); +} + +void main() +{ + /* + a very simple memory map: + + the ordering within texture memory is not significant, and could be + anything + */ + uint32_t framebuffer_start[2] = {0x000000, 0x12c000}; + uint32_t region_array_start = 0x258000; + uint32_t isp_tsp_parameter_start = 0x400000; + uint32_t object_list_start = 0x300000; + + const int tile_y_num = 480 / 32; + const int tile_x_num = 1280 / 32; + + using namespace holly::core; + + region_array::list_block_size list_block_size = { + .opaque = 8 * 4, + }; + + region_array::transfer(tile_x_num, + tile_y_num, + list_block_size, + region_array_start, + object_list_start); + + transfer_background_polygon(isp_tsp_parameter_start); + + ////////////////////////////////////////////////////////////////////////////// + // configure the TA + ////////////////////////////////////////////////////////////////////////////// + + using namespace holly; + using holly::holly; + + // TA_GLOB_TILE_CLIP restricts which "object pointer blocks" are written + // to. + // + // This can also be used to implement "windowing", as long as the desired + // window size happens to be a multiple of 32 pixels. The "User Tile Clip" TA + // control parameter can also ~equivalently be used as many times as desired + // within a single TA initialization to produce an identical effect. + // + // See DCDBSysArc990907E.pdf page 183. + holly.TA_GLOB_TILE_CLIP = ta_glob_tile_clip::tile_y_num(tile_y_num - 1) + | ta_glob_tile_clip::tile_x_num(tile_x_num - 1); + + // While CORE supports arbitrary-length object lists, the TA uses "object + // pointer blocks" as a memory allocation strategy. These fixed-length blocks + // can still have infinite length via "object pointer block links". This + // mechanism is illustrated in DCDBSysArc990907E.pdf page 188. + holly.TA_ALLOC_CTRL = ta_alloc_ctrl::opb_mode::increasing_addresses + | ta_alloc_ctrl::o_opb::_8x4byte; + + // While building object lists, the TA contains an internal index (exposed as + // the read-only TA_ITP_CURRENT) for the next address that new ISP/TSP will be + // stored at. The initial value of this index is TA_ISP_BASE. + + // reserve space in ISP/TSP parameters for the background parameter + using polygon = holly::core::parameter::isp_tsp_parameter<3>; + uint32_t ta_isp_base_offset = (sizeof (polygon)) * 1; + + holly.TA_ISP_BASE = isp_tsp_parameter_start + ta_isp_base_offset; + holly.TA_ISP_LIMIT = isp_tsp_parameter_start + 0x400000; + + // Similarly, the TA also contains, for up to 600 tiles, an internal index for + // the next address that an object list entry will be stored for each + // tile. These internal indicies are partially exposed via the read-only + // TA_OL_POINTERS. + holly.TA_OL_BASE = object_list_start; + + // TA_OL_LIMIT, DCDBSysArc990907E.pdf page 385: + // + // > Because the TA may automatically store data in the address that is + // > specified by this register, it must not be used for other data. For + // > example, the address specified here must not be the same as the address + // > in the TA_ISP_BASE register. + holly.TA_OL_LIMIT = object_list_start + 0x200000 - 32; + + holly.TA_NEXT_OPB_INIT = (object_list_start + 8 * 4 * tile_y_num * tile_x_num); + + ////////////////////////////////////////////////////////////////////////////// + // configure CORE + ////////////////////////////////////////////////////////////////////////////// + + // REGION_BASE is the (texture memory-relative) address of the region array. + holly.REGION_BASE = region_array_start; + + // PARAM_BASE is the (texture memory-relative) address of ISP/TSP parameters. + // Anything that references an ISP/TSP parameter does so relative to this + // address (and not relative to the beginning of texture memory). + holly.PARAM_BASE = isp_tsp_parameter_start; + + // Set the offset of the background ISP/TSP parameter, relative to PARAM_BASE + // SKIP is related to the size of each vertex + uint32_t background_offset = 0; + + holly.ISP_BACKGND_T = isp_backgnd_t::tag_address(background_offset / 4) + | isp_backgnd_t::tag_offset(0) + | isp_backgnd_t::skip(1); + + theta = 0; + + // draw 500 frames of cube rotation + for (int i = 0; i < 1000; i++) { + ////////////////////////////////////////////////////////////////////////////// + // transfer cube to texture memory via the TA polygon converter FIFO + ////////////////////////////////////////////////////////////////////////////// + + // TA_LIST_INIT needs to be written (every frame) prior to the first FIFO + // write. + holly.TA_LIST_INIT = ta_list_init::list_init; + + // dummy TA_LIST_INIT read; DCDBSysArc990907E.pdf in multiple places says this + // step is required. + volatile uint32_t init = holly.TA_LIST_INIT; + (void)init; + + transfer_ta_sierpinski_tetrahedron(); + + ////////////////////////////////////////////////////////////////////////////// + // start the actual rasterization + ////////////////////////////////////////////////////////////////////////////// + + using systembus::systembus; + using namespace systembus; + + while ((systembus.ISTNRM & istnrm::end_of_transferring_opaque_list) == 0); + systembus.ISTNRM = istnrm::end_of_transferring_opaque_list; + + holly.FB_W_SOF1 = framebuffer_start[i & 1]; + + holly.SCALER_CTL = scaler_ctl::horizontal_scaling_enable + | scaler_ctl::vertical_scale_factor(0x0400); + + // start the actual render--the rendering process begins by interpreting the + // region array + holly.STARTRENDER = 1; + + while ((systembus.ISTNRM & istnrm::end_of_render_tsp) == 0); + systembus.ISTNRM = istnrm::end_of_render_tsp + | istnrm::end_of_render_isp + | istnrm::end_of_render_video; + + + // increment theta for the cube rotation animation + // (used by the `vertex_rotate` function) + theta += 0.001f; + + ////////////////////////////////////////////////////////////////////////////// + // wait for vertical synchronization + ////////////////////////////////////////////////////////////////////////////// + + while ((spg_status::vsync(holly.SPG_STATUS))); + while (!(spg_status::vsync(holly.SPG_STATUS))); + + holly.FB_R_SOF1 = framebuffer_start[i & 1]; + } + + // return from main; this will effectively jump back to the serial loader +} diff --git a/dreamcast2/holly/holly_bits.hpp b/dreamcast2/holly/holly_bits.hpp index b4b674b..1936e38 100644 --- a/dreamcast2/holly/holly_bits.hpp +++ b/dreamcast2/holly/holly_bits.hpp @@ -526,7 +526,7 @@ namespace holly { namespace ta_glob_tile_clip { constexpr inline uint32_t tile_y_num(uint32_t num) { return (num & 0xf) << 16; } - constexpr inline uint32_t tile_x_num(uint32_t num) { return (num & 0x1f) << 0; } + constexpr inline uint32_t tile_x_num(uint32_t num) { return (num & 0x3f) << 0; } } namespace ta_alloc_ctrl { diff --git a/dreamcast2/regs/holly/holly_bits.ods b/dreamcast2/regs/holly/holly_bits.ods index 4705d53b0336eaaa970e5fdbb2efeb6dfb1c3474..414818d5178de7ea7e5f15fdec9e2fc622d9e3fa 100644 GIT binary patch delta 25992 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