diff options
author | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2018-05-27 14:46:02 +0200 |
---|---|---|
committer | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2018-05-27 14:46:02 +0200 |
commit | 9eb310afc4a96304b47d4897c58ca3bb733362a9 (patch) | |
tree | 1da74a221faa69ca78ab1676e94b6cda4da62fc5 /harddoomdev.c | |
parent | e1d57f01b2112a6415313c83fc300f94475db382 (diff) |
Add missing draw columns features
Diffstat (limited to 'harddoomdev.c')
-rw-r--r-- | harddoomdev.c | 55 |
1 files changed, 49 insertions, 6 deletions
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) |