m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/harddoomdev.c
diff options
context:
space:
mode:
authorMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2018-05-23 17:56:46 +0200
committerMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2018-05-23 17:56:46 +0200
commit6bf3072194c3353d37c0a7575dbcac77c797598c (patch)
tree87e7b0d76fa248b1d0a35fd742c6bda11817844c /harddoomdev.c
parentaaf3b5b832aa1803918aa8653a9e397a7ed3b1e5 (diff)
Impelement copy rects
Diffstat (limited to 'harddoomdev.c')
-rw-r--r--harddoomdev.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/harddoomdev.c b/harddoomdev.c
index 9b327c0..38c32dd 100644
--- a/harddoomdev.c
+++ b/harddoomdev.c
@@ -43,6 +43,11 @@ void ping_sync(void __iomem *iomem)
send_command(iomem, HARDDOOM_CMD_PING_SYNC);
}
+void set_surf_src_pt(void __iomem *iomem, dma_addr_t page_table)
+{
+ send_command(iomem, HARDDOOM_CMD_SURF_SRC_PT(page_table));
+}
+
void set_surf_dst_pt(void __iomem *iomem, dma_addr_t page_table)
{
send_command(iomem, HARDDOOM_CMD_SURF_DST_PT(page_table));
@@ -97,6 +102,22 @@ void draw_line(struct surface_data *surface_data, struct doomdev_line line)
send_command(iomem, HARDDOOM_CMD_DRAW_LINE);
}
+void copy_rect(struct surface_data *dst_data, struct surface_data *src_data,
+ struct doomdev_copy_rect rect)
+{
+ void __iomem *iomem;
+
+ iomem = dst_data->doom_data->iomem;
+
+ set_surf_dst_pt(iomem, dst_data->page_table_dev);
+ set_surf_src_pt(iomem, src_data->page_table_dev);
+ set_surf_dims(iomem, dst_data->width, dst_data->height);
+ set_xy_a(iomem, rect.pos_dst_x, rect.pos_dst_y);
+ set_xy_b(iomem, rect.pos_src_x, rect.pos_src_y);
+
+ send_command(iomem, HARDDOOM_CMD_COPY_RECT(rect.width, rect.height));
+}
+
uint32_t doomdev_read_stat(void __iomem *iomem, size_t stat)
{
return doomdev_read(iomem, HARDDOOM_STATS(stat));