More refactoring + implement screen2screen blits

This commit is contained in:
starfrost013
2025-03-23 19:12:02 +00:00
parent 160e8a8071
commit 0b0e6c5256
10 changed files with 216 additions and 52 deletions

View File

@@ -113,6 +113,11 @@ typedef enum nv3_pgraph_class_e
#define NV3_RECTANGLE_MAX 16
#define NV3_RECTANGLE_END 0x0480
// blit
#define NV3_BLIT_POSITION_IN 0x0300
#define NV3_BLIT_POSITION_OUT 0x0304
#define NV3_BLIT_SIZE 0x0308
// image_from_cpu
#define NV3_IMAGE_START_POSITION 0x0304 // starting position of image from cpu
#define NV3_IMAGE_SIZE 0x0308

View File

@@ -18,15 +18,25 @@
#pragma once
/* Core */
void nv3_render_pixel(nv3_position_16_t position, uint32_t color, nv3_grobj_t grobj);
void nv3_render_write_pixel(nv3_position_16_t position, uint32_t color, nv3_grobj_t grobj);
uint8_t nv3_render_read_pixel_8(nv3_position_16_t position, nv3_grobj_t grobj);
uint16_t nv3_render_read_pixel_16(nv3_position_16_t position, nv3_grobj_t grobj);
uint32_t nv3_render_read_pixel_32(nv3_position_16_t position, nv3_grobj_t grobj);
uint32_t nv3_render_to_chroma(nv3_color_expanded_t expanded);
nv3_color_expanded_t nv3_render_expand_color(nv3_grobj_t grobj, uint32_t color); // Convert a colour to full RGB10 format from the current working format.
uint32_t nv3_render_downconvert_color(nv3_grobj_t grobj, nv3_color_expanded_t color); // Convert a colour from the current working format to RGB10 format.
/* Pattern */
uint32_t nv3_render_set_pattern_color(nv3_color_expanded_t pattern_colour, bool use_color1);
/* Primitives */
void nv3_render_rect(nv3_position_16_t position, nv3_size_16_t size, uint32_t color, nv3_grobj_t grobj);
void nv3_render_chroma_test(nv3_grobj_t grobj);
/* Chroma */
void nv3_render_chroma_test(nv3_grobj_t grobj);
/* Blit */
void nv3_render_blit_screen2screen(nv3_grobj_t grobj);

View File

@@ -569,10 +569,10 @@ extern const device_config_t nv3_config[];
#define NV3_PGRAPH_SRC_CANVAS_MAX 0x400554 // Maximum Source Canvas for Blit, Y=30:16, X=10:0
#define NV3_PGRAPH_DST_CANVAS_MIN 0x400558 // Minimum Destination Canvas for Blit, Y=30:16, X=10:0
#define NV3_PGRAPH_DST_CANVAS_MAX 0x40055C // Maximum Destination Canvas for Blit, Y=30:16, X=10:0
#define NV3_PGRAPH_pattern_color_0_rgb 0x400600
#define NV3_PGRAPH_pattern_color_0_alpha 0x400604
#define NV3_PGRAPH_pattern_color_1_rgb 0x400608
#define NV3_PGRAPH_pattern_color_1_alpha 0x40060C // pattern color
#define NV3_PGRAPH_PATTERN_COLOR_0_RGB 0x400600
#define NV3_PGRAPH_PATTERN_COLOR_0_ALPHA 0x400604
#define NV3_PGRAPH_PATTERN_COLOR_1_RGB 0x400608
#define NV3_PGRAPH_PATTERN_COLOR_1_ALPHA 0x40060C // pattern color
#define NV3_PGRAPH_PATTERN_BITMAP_HIGH 0x400610 // pattern bitmap [31:0]
#define NV3_PGRAPH_PATTERN_BITMAP_LOW 0x400614 // pattern bitmap [63:32]
#define NV3_PGRAPH_PATTERN_SHAPE 0x400618
@@ -1183,7 +1183,7 @@ typedef struct nv3_pgraph_s
uint64_t pattern_bitmap; // pattern bitmap for blit. it's alwaus 64 bits to simplify pixel rendering code
uint32_t pattern_shape; // may need to be an enum - 0=8x8, 1=64x1, 2=1x64
uint32_t plane_mask; // only 7:0 relevant
uint32_t chroma_key; // color key
uint32_t chroma_key; // color key
uint32_t beta_factor;
nv3_pgraph_dma_settings_t dma_settings;
uint8_t rop; // Current GDI Ternary Render Operation