From 9eb310afc4a96304b47d4897c58ca3bb733362a9 Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Sun, 27 May 2018 14:46:02 +0200 Subject: Add missing draw columns features --- harddoomdev.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 6 deletions(-) (limited to 'harddoomdev.c') diff --git a/harddoomdev.c b/harddoomdev.c index c4489aa..067293e 100644 --- a/harddoomdev.c +++ b/harddoomdev.c @@ -149,6 +149,22 @@ void set_flat(struct doom_data *doom_data, dma_addr_t flat_dev) } } +void set_colormap(struct doom_data *doom_data, dma_addr_t colors_dev) +{ + if (doom_data->colors_addr != colors_dev) { + doom_data->colors_addr = colors_dev; + send_command(doom_data, HARDDOOM_CMD_COLORMAP_ADDR(colors_dev)); + } +} + +void set_trans(struct doom_data *doom_data, dma_addr_t colors_dev) +{ + if (doom_data->trans_addr != colors_dev) { + doom_data->trans_addr = colors_dev; + send_command(doom_data, HARDDOOM_CMD_TRANSLATION_ADDR(colors_dev)); + } +} + void set_ustart(struct doom_data *doom_data, uint32_t ustart) { send_command(doom_data, HARDDOOM_CMD_USTART(ustart)); @@ -211,17 +227,35 @@ void copy_rect(struct surface_data *dst_data, struct surface_data *src_data, } void draw_column(struct surface_data *surface_data, - struct texture_data *texture_data, struct doomdev_column column) + struct texture_data *texture_data, struct doomdev_column column, + struct colors_data *colors_data, struct colors_data *trans_data, + uint8_t flags, uint8_t trans_idx) { set_surf_dst_pt(surface_data->doom_data, surface_data->page_table_dev); set_surf_dims(surface_data->doom_data, surface_data->width, surface_data->height); - set_texture_pt(surface_data->doom_data, texture_data->page_table_dev); - set_texture_dims(surface_data->doom_data, texture_data->size, texture_data->height); + set_draw_params(surface_data->doom_data, flags); set_xy_a(surface_data->doom_data, column.x, column.y1); set_xy_b(surface_data->doom_data, column.x, column.y2); - set_ustart(surface_data->doom_data, column.ustart); - set_ustep(surface_data->doom_data, column.ustep); - set_draw_params(surface_data->doom_data, 0); + + if (!(flags & HARDDOOM_DRAW_PARAMS_FUZZ)) { + set_texture_pt(surface_data->doom_data, + texture_data->page_table_dev); + set_texture_dims(surface_data->doom_data, + texture_data->size, texture_data->height); + set_ustart(surface_data->doom_data, column.ustart); + set_ustep(surface_data->doom_data, column.ustep); + } + + if (flags & HARDDOOM_DRAW_PARAMS_FUZZ || + flags & HARDDOOM_DRAW_PARAMS_COLORMAP) { + set_colormap(surface_data->doom_data, colors_data->colors_dev + + HARDDOOM_COLORMAP_SIZE * column.colormap_idx); + } + + if (flags & HARDDOOM_DRAW_PARAMS_TRANSLATE) { + set_trans(surface_data->doom_data, trans_data->colors_dev + + HARDDOOM_COLORMAP_SIZE * trans_idx); + } send_command(surface_data->doom_data, HARDDOOM_CMD_DRAW_COLUMN(column.texture_offset)); @@ -284,6 +318,15 @@ void start_dev(struct pci_dev *dev) doomdev_write(iomem, HARDDOOM_INTR_ENABLE, HARDDOOM_INTR_MASK); doomdev_write(iomem, HARDDOOM_ENABLE, HARDDOOM_ENABLE_ALL ^ HARDDOOM_ENABLE_FETCH_CMD); + + set_surf_dst_pt(data, 0); + set_surf_src_pt(data, 0); + set_texture_pt(data, 0); + set_flat(data, 0); + set_colormap(data, 0); + set_surf_dims(data, 0, 0); + set_texture_dims(data, 0, 0); + set_draw_params(data, 0); } void shutdown_dev(struct pci_dev *dev) -- cgit v1.2.3