m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/harddoomdev.c
diff options
context:
space:
mode:
authorMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2018-05-27 14:46:02 +0200
committerMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2018-05-27 14:46:02 +0200
commit9eb310afc4a96304b47d4897c58ca3bb733362a9 (patch)
tree1da74a221faa69ca78ab1676e94b6cda4da62fc5 /harddoomdev.c
parente1d57f01b2112a6415313c83fc300f94475db382 (diff)
Add missing draw columns features
Diffstat (limited to 'harddoomdev.c')
-rw-r--r--harddoomdev.c55
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)