m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/harddoomdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'harddoomdev.c')
-rw-r--r--harddoomdev.c45
1 files changed, 45 insertions, 0 deletions
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));