summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/k001005.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/k001005.cpp')
-rw-r--r--src/mame/video/k001005.cpp90
1 files changed, 45 insertions, 45 deletions
diff --git a/src/mame/video/k001005.cpp b/src/mame/video/k001005.cpp
index e562ff3aecb..e23fccc9fd1 100644
--- a/src/mame/video/k001005.cpp
+++ b/src/mame/video/k001005.cpp
@@ -16,7 +16,7 @@
/*
TODO:
- Winding Heat (and maybe others) have slight Z-fighting problems.
- - Player car shadow not visible in Winding Heat. Hidden by road, needs polygon priority or something similar?
+ - Player car shadow not visible in Winding Heat. Hidden by road, needs polygon priority or something similar?
*/
@@ -226,7 +226,7 @@ void k001005_renderer::draw_scanline_generic(int32_t scanline, const extent_t& e
texel = rgbaint_t::bilinear_filter(tex00, tex01, tex10, tex11, ufrac * 16, vfrac * 16);
texel_alpha = tex00 >> 24;
- }
+ }
}
int idiff = std::clamp((int)(diff), 0, 255);
@@ -250,7 +250,7 @@ void k001005_renderer::draw_scanline_generic(int32_t scanline, const extent_t& e
rgbaint_t color(ia, ir, ig, ib);
if (UseTexture && texel_alpha != 0)
- {
+ {
color.set(texel);
}
@@ -286,7 +286,7 @@ void k001005_renderer::draw_scanline_generic(int32_t scanline, const extent_t& e
if (UseBilinear && texel_alpha < 0xff)
{
rgbaint_t fb_color(fb[x]);
- texel_color.blend(fb_color, texel_alpha);
+ texel_color.blend(fb_color, texel_alpha);
}
if (UseFog)
@@ -356,33 +356,33 @@ void k001005_renderer::draw_scanline_generic(int32_t scanline, const extent_t& e
/*
- Command
- 0x00: xxxxxxxx xxxxxxxx xxxxxxx- -------- 0x80000000 (exact number of bits unknown)
- 0x00: -------- -------- -------x -------- 0 = per-poly color, 1 = per-vertex color
- 0x00: -------- -------- -------- x------- ? Texture related
- 0x00: -------- -------- -------- -x------ Unused?
- 0x00: -------- -------- -------- --x----- 1 = enable smooth shading?
- 0x00: -------- -------- -------- ---x---- 1 = texture mirroring
- 0x00: -------- -------- -------- ----x--- ? Texture related
- 0x00: -------- -------- -------- -----x-- 1 = enable Z-buffer read
- 0x00: -------- -------- -------- ------x- 0 = blend enabled, 1 = disabled
- 0x00: -------- -------- -------- -------x 0 = per-vertex Z, 1 = per-poly Z (0x80000121 seems like an exception)
-
- Texture header
- 0x01: -xxx---- -------- -------- -------- Texture palette
- 0x01: ----xx-- -------- -------- -------- Unknown flags, set by commands 0x7b...0x7e. Used mostly on polygons further away from camera. Some kind of depth-based effect?
- 0x01: ------xx x------- -------- -------- Texture width / 8 - 1
- 0x01: -------- -xxx---- -------- -------- Texture height / 8 - 1
- 0x01: -------- -------x xxxx---- -------- Texture page
- 0x01: -------- -------- ----x-x- x-x-x-x- Texture X / 8
- 0x01: -------- -------- -----x-x -x-x-x-x Texture Y / 8
+ Command
+ 0x00: xxxxxxxx xxxxxxxx xxxxxxx- -------- 0x80000000 (exact number of bits unknown)
+ 0x00: -------- -------- -------x -------- 0 = per-poly color, 1 = per-vertex color
+ 0x00: -------- -------- -------- x------- ? Texture related
+ 0x00: -------- -------- -------- -x------ Unused?
+ 0x00: -------- -------- -------- --x----- 1 = enable smooth shading?
+ 0x00: -------- -------- -------- ---x---- 1 = texture mirroring
+ 0x00: -------- -------- -------- ----x--- ? Texture related
+ 0x00: -------- -------- -------- -----x-- 1 = enable Z-buffer read
+ 0x00: -------- -------- -------- ------x- 0 = blend enabled, 1 = disabled
+ 0x00: -------- -------- -------- -------x 0 = per-vertex Z, 1 = per-poly Z (0x80000121 seems like an exception)
+
+ Texture header
+ 0x01: -xxx---- -------- -------- -------- Texture palette
+ 0x01: ----xx-- -------- -------- -------- Unknown flags, set by commands 0x7b...0x7e. Used mostly on polygons further away from camera. Some kind of depth-based effect?
+ 0x01: ------xx x------- -------- -------- Texture width / 8 - 1
+ 0x01: -------- -xxx---- -------- -------- Texture height / 8 - 1
+ 0x01: -------- -------x xxxx---- -------- Texture page
+ 0x01: -------- -------- ----x-x- x-x-x-x- Texture X / 8
+ 0x01: -------- -------- -----x-x -x-x-x-x Texture Y / 8
*/
int k001005_renderer::parse_polygon(int index, uint32_t cmd)
{
render_delegate rd_scan_tex = render_delegate(&k001005_renderer::draw_scanline_generic<true, false>, this);
render_delegate rd_scan_vertex_color = render_delegate(&k001005_renderer::draw_scanline_generic<false, true>, this);
- render_delegate rd_scan_vertex_color_tex = render_delegate(&k001005_renderer::draw_scanline_generic<true, true>, this);
+ render_delegate rd_scan_vertex_color_tex = render_delegate(&k001005_renderer::draw_scanline_generic<true, true>, this);
render_delegate rd_scan_color = render_delegate(&k001005_renderer::draw_scanline_generic<false, false>, this);
int viewport_min_x = std::clamp(256 + m_viewport_min_x + m_viewport_center_x, m_cliprect.min_x, m_cliprect.max_x);
@@ -391,7 +391,7 @@ int k001005_renderer::parse_polygon(int index, uint32_t cmd)
int viewport_max_y = std::clamp(200 + m_viewport_max_y - m_viewport_center_y + 1, m_cliprect.min_y, m_cliprect.max_y);
rectangle cliprect(viewport_min_x, viewport_max_x, viewport_min_y, viewport_max_y);
-
+
int start_index = index;
@@ -399,7 +399,7 @@ int k001005_renderer::parse_polygon(int index, uint32_t cmd)
bool has_texture = (cmd & 0x18) != 0;
bool has_vertex_color = (cmd & 0x100) != 0;
- bool has_vertex_z = !(cmd & 1) || has_vertex_color; // command 0x121 breaks the logic here, maybe vertex color enforces vertex z too?
+ bool has_vertex_z = !(cmd & 1) || has_vertex_color; // command 0x121 breaks the logic here, maybe vertex color enforces vertex z too?
uint32_t texture_x = 0;
uint32_t texture_y = 0;
@@ -460,7 +460,7 @@ int k001005_renderer::parse_polygon(int index, uint32_t cmd)
// -------------------------------------------------------------------------
if (has_vertex_z)
{
- uint32_t z = fifo[index] & 0xffffff00; // 32-bit float with low 8-bits of mantissa masked out
+ uint32_t z = fifo[index] & 0xffffff00; // 32-bit float with low 8-bits of mantissa masked out
int diffuse = fifo[index] & 0xff;
index++;
@@ -477,10 +477,10 @@ int k001005_renderer::parse_polygon(int index, uint32_t cmd)
// -------------------------------------------------------------------------
if (last_vertex && has_texture)
{
- // polygon Z comes before the last UV coords for textured polygons
+ // polygon Z comes before the last UV coords for textured polygons
if (!has_vertex_z)
{
- uint32_t z = (fifo[index] & 0x07ffff00) | 0x48000000; // like fog values, these seem to be missing the 4 upper bits of exponent
+ uint32_t z = (fifo[index] & 0x07ffff00) | 0x48000000; // like fog values, these seem to be missing the 4 upper bits of exponent
polygon_diffuse = fifo[index] & 0xff;
index++;
polygon_z = u2f(z);
@@ -540,7 +540,7 @@ int k001005_renderer::parse_polygon(int index, uint32_t cmd)
// polygon Z
if (!has_vertex_z)
{
- uint32_t z = (fifo[index] & 0x07ffff00) | 0x48000000; // like fog values, these seem to be missing the 4 upper bits of exponent
+ uint32_t z = (fifo[index] & 0x07ffff00) | 0x48000000; // like fog values, these seem to be missing the 4 upper bits of exponent
polygon_diffuse = fifo[index] & 0xff;
index++;
@@ -574,7 +574,7 @@ int k001005_renderer::parse_polygon(int index, uint32_t cmd)
extra.texture_mirror = (cmd & 0x10);
extra.diffuse_light = rgb_t(m_light_r, m_light_g, m_light_b);
extra.ambient_light = rgb_t(m_ambient_r, m_ambient_g, m_ambient_b);
- extra.fog_color = rgb_t(m_fog_r, m_fog_g, m_fog_b);
+ extra.fog_color = rgb_t(m_fog_r, m_fog_g, m_fog_b);
extra.fog_enable = (m_reg_fog_start != 0xffff) && !(cmd & 1);
extra.cmd = cmd;
@@ -594,7 +594,7 @@ int k001005_renderer::parse_polygon(int index, uint32_t cmd)
int v2 = (m_vertexb_ptr - 2) & 3;
int v3 = (m_vertexb_ptr - 1) & 3;
-
+
// This fixes shading issues in the Konami logo in Solar Assault.
// Some triangle strips have different shading values compared to reused vertices, causing unintended smooth shading.
// This ensures all vertices have the same shading value.
@@ -613,7 +613,7 @@ int k001005_renderer::parse_polygon(int index, uint32_t cmd)
if (is_quad)
{
if (has_vertex_color)
- {
+ {
render_triangle<10>(cliprect, has_texture ? rd_scan_vertex_color_tex : rd_scan_vertex_color, m_vertexb[v0], m_vertexb[v1], m_vertexb[v2]);
render_triangle<10>(cliprect, has_texture ? rd_scan_vertex_color_tex : rd_scan_vertex_color, m_vertexb[v2], m_vertexb[v3], m_vertexb[v0]);
}
@@ -629,7 +629,7 @@ int k001005_renderer::parse_polygon(int index, uint32_t cmd)
}
}
else
- {
+ {
if (has_vertex_color)
{
render_triangle<10>(cliprect, has_texture ? rd_scan_vertex_color_tex : rd_scan_vertex_color, m_vertexb[v1], m_vertexb[v2], m_vertexb[v3]);
@@ -817,7 +817,7 @@ uint32_t k001005_device::read(address_space &space, offs_t offset, uint32_t mem_
return m_ram[0][(m_ram_ptr++) & 0x3fffff];
}
- default:
+ default:
//osd_printf_debug("%s m_r: %08X, %08X\n", machine().describe_context(), offset, mem_mask);
break;
}
@@ -875,19 +875,19 @@ void k001005_device::write(address_space &space, offs_t offset, uint32_t data, u
case 0x100: break;
case 0x101: break; // framebuffer width?
- case 0x102: break; // framebuffer height?
+ case 0x102: break; // framebuffer height?
- case 0x103: m_renderer->m_viewport_min_x = data & 0xffff; break;
+ case 0x103: m_renderer->m_viewport_min_x = data & 0xffff; break;
case 0x104: m_renderer->m_viewport_max_x = data & 0xffff; break;
case 0x105: m_renderer->m_viewport_max_y = data & 0xffff; break;
- case 0x106: m_renderer->m_viewport_min_y = data & 0xffff; break;
+ case 0x106: m_renderer->m_viewport_min_y = data & 0xffff; break;
- case 0x107: m_renderer->m_viewport_center_x = data & 0xffff; break;
- case 0x108: m_renderer->m_viewport_center_y = data & 0xffff; break;
+ case 0x107: m_renderer->m_viewport_center_x = data & 0xffff; break;
+ case 0x108: m_renderer->m_viewport_center_y = data & 0xffff; break;
case 0x109: // far Z value
{
- // the SHARC code throws away the bottom 11 bits of mantissa and the top 5 bits (to fit in a 16-bit register?)
+ // the SHARC code throws away the bottom 11 bits of mantissa and the top 5 bits (to fit in a 16-bit register?)
m_renderer->m_far_z = u2f((data & 0xffff) << 11);
break;
}
@@ -904,7 +904,7 @@ void k001005_device::write(address_space &space, offs_t offset, uint32_t data, u
case 0x111: m_renderer->m_fog_g = data & 0xff; break;
case 0x112: m_renderer->m_fog_b = data & 0xff; break;
- case 0x117: // linear fog start Z
+ case 0x117: // linear fog start Z
{
// 4 bits exponent + 12 bits mantissa, similar to far Z value
// value of 0xffff is used to effectively turn off fog
@@ -915,14 +915,14 @@ void k001005_device::write(address_space &space, offs_t offset, uint32_t data, u
m_renderer->m_fog_start_z = u2f((0x90000 | (data & 0xffff)) << 11);
break;
}
- case 0x118: // linear fog end Z
+ case 0x118: // linear fog end Z
{
// 4 bits exponent + 12 bits mantissa, similar to far Z value
m_renderer->m_fog_end_z = u2f((0x90000 | (data & 0xffff)) << 11);
break;
}
- case 0x119: // 1 / (end_fog - start_fog) ?
+ case 0x119: // 1 / (end_fog - start_fog) ?
{
// 5 bits exponent + 11 bits mantissa
break;