From a2d05131f0515e5c53c12c26549f5be2ef7777e7 Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Wed, 23 May 2018 21:24:03 +0200 Subject: Implement draw columns --- harddoomdev.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'harddoomdev.c') diff --git a/harddoomdev.c b/harddoomdev.c index 38c32dd..823e868 100644 --- a/harddoomdev.c +++ b/harddoomdev.c @@ -73,6 +73,31 @@ void set_fill_color(void __iomem *iomem, uint8_t color) send_command(iomem, HARDDOOM_CMD_FILL_COLOR(color)); } +void set_texture_pt(void __iomem *iomem, dma_addr_t page_table_dev) +{ + send_command(iomem, HARDDOOM_CMD_TEXTURE_PT(page_table_dev)); +} + +void set_texture_dims(void __iomem *iomem, uint32_t size, uint16_t height) +{ + send_command(iomem, HARDDOOM_CMD_TEXTURE_DIMS(size,height)); +} + +void set_ustart(void __iomem *iomem, uint32_t ustart) +{ + send_command(iomem, HARDDOOM_CMD_USTART(ustart)); +} + +void set_ustep(void __iomem *iomem, uint32_t ustep) +{ + send_command(iomem, HARDDOOM_CMD_USTEP(ustep)); +} + +void set_draw_params(void __iomem *iomem, uint8_t flags) +{ + send_command(iomem, HARDDOOM_CMD_DRAW_PARAMS(flags)); +} + void fill_rect(struct surface_data *surface_data, struct doomdev_fill_rect rect) { void __iomem *iomem; @@ -118,6 +143,26 @@ void copy_rect(struct surface_data *dst_data, struct surface_data *src_data, send_command(iomem, HARDDOOM_CMD_COPY_RECT(rect.width, rect.height)); } +void draw_column(struct surface_data *surface_data, + struct texture_data *texture_data, struct doomdev_column column) +{ + void __iomem *iomem; + + iomem = surface_data->doom_data->iomem; + + set_surf_dst_pt(iomem, surface_data->page_table_dev); + set_surf_dims(iomem, surface_data->width, surface_data->height); + set_texture_pt(iomem, texture_data->page_table_dev); + set_texture_dims(iomem, texture_data->size, texture_data->height); + set_xy_a(iomem, column.x, column.y1); + set_xy_b(iomem, column.x, column.y2); + set_ustart(iomem, column.ustart); + set_ustep(iomem, column.ustep); + set_draw_params(iomem, 0); + + send_command(iomem, HARDDOOM_CMD_DRAW_COLUMN(column.texture_offset)); +} + uint32_t doomdev_read_stat(void __iomem *iomem, size_t stat) { return doomdev_read(iomem, HARDDOOM_STATS(stat)); -- cgit v1.2.3