From 4a017f48c81afc74f4ec596300a3c3560d6ab3f1 Mon Sep 17 00:00:00 2001 From: yz70s Date: Tue, 8 Dec 2015 19:42:46 +0100 Subject: [PATCH] chihiro.cpp: "enum" -> "enum class" (nw) --- src/mame/includes/chihiro.h | 388 +++++++++++++++++------------------ src/mame/video/chihiro.cpp | 394 ++++++++++++++++++------------------ 2 files changed, 392 insertions(+), 390 deletions(-) diff --git a/src/mame/includes/chihiro.h b/src/mame/includes/chihiro.h index a61383cd8ca..fe8f74fde5e 100644 --- a/src/mame/includes/chihiro.h +++ b/src/mame/includes/chihiro.h @@ -179,6 +179,172 @@ most methods set parameters, others actually draw class nv2a_renderer : public poly_manager { public: + enum class VERTEX_PARAMETER { + PARAM_COLOR_B = 0, + PARAM_COLOR_G = 1, + PARAM_COLOR_R = 2, + PARAM_COLOR_A = 3, + PARAM_TEXTURE0_U = 4, + PARAM_TEXTURE0_V = 5, + PARAM_TEXTURE1_U = 6, + PARAM_TEXTURE1_V = 7, + PARAM_TEXTURE2_U = 8, + PARAM_TEXTURE2_V = 9, + PARAM_TEXTURE3_U = 10, + PARAM_TEXTURE3_V = 11, + PARAM_Z = 12 + }; + enum class NV2A_BEGIN_END { + STOP = 0, + POINTS = 1, + LINES = 2, + LINE_LOOP = 3, + LINE_STRIP = 4, + TRIANGLES = 5, + TRIANGLE_STRIP = 6, + TRIANGLE_FAN = 7, + QUADS = 8, + QUAD_STRIP = 9, + POLYGON = 10 + }; + enum class NV2A_VERTEX_ATTR { + POS = 0, + WEIGHT = 1, + NORMAL = 2, + COLOR0 = 3, // diffuse + COLOR1 = 4, // specular + FOG = 5, + BACKCOLOR0 = 7, // diffuse + BACKCOLOR1 = 8, // specular + TEX0 = 9, + TEX1 = 10, + TEX2 = 11, + TEX3 = 12 + }; + enum class NV2A_VTXBUF_TYPE { + UBYTE2 = 0, // what is the difference with UBYTE ? + FLOAT = 2, + UBYTE = 4, + USHORT = 5, + UNKNOWN_6 = 6 // used for vertex color + }; + enum class NV2A_TEX_FORMAT { + L8 = 0x0, + I8 = 0x1, + A1R5G5B5 = 0x2, + A4R4G4B4 = 0x4, + R5G6B5 = 0x5, + A8R8G8B8 = 0x6, + X8R8G8B8 = 0x7, + INDEX8 = 0xb, + DXT1 = 0xc, + DXT3 = 0xe, + DXT5 = 0xf, + A1R5G5B5_RECT = 0x10, + R5G6B5_RECT = 0x11, + A8R8G8B8_RECT = 0x12, + L8_RECT = 0x13, + DSDT8_RECT = 0x17, + A8L8 = 0x1a, + I8_RECT = 0x1b, + A4R4G4B4_RECT = 0x1d, + R8G8B8_RECT = 0x1e, + A8L8_RECT = 0x20, + Z24 = 0x2a, + Z24_RECT = 0x2b, + Z16 = 0x2c, + Z16_RECT = 0x2d, + DSDT8 = 0x28, + HILO16 = 0x33, + HILO16_RECT = 0x36, + HILO8 = 0x44, + SIGNED_HILO8 = 0x45, + HILO8_RECT = 0x46, + SIGNED_HILO8_RECT = 0x47 + }; + enum class NV2A_LOGIC_OP { + CLEAR = 0x1500, + AND = 0x1501, + AND_REVERSE = 0x1502, + COPY = 0x1503, + AND_INVERTED = 0x1504, + NOOP = 0x1505, + XOR = 0x1506, + OR = 0x1507, + NOR = 0x1508, + EQUIV = 0x1509, + INVERT = 0x150a, + OR_REVERSE = 0x150b, + COPY_INVERTED = 0x150c, + OR_INVERTED = 0x150d, + NAND = 0x150e, + SET = 0x150f + }; + enum class NV2A_BLEND_EQUATION { + FUNC_ADD = 0x8006, + MIN = 0x8007, + MAX = 0x8008, + FUNC_SUBTRACT = 0x800a, + FUNC_REVERSE_SUBTRACT = 0x80b + }; + enum class NV2A_BLEND_FACTOR { + ZERO = 0x0000, + ONE = 0x0001, + SRC_COLOR = 0x0300, + ONE_MINUS_SRC_COLOR = 0x0301, + SRC_ALPHA = 0x0302, + ONE_MINUS_SRC_ALPHA = 0x0303, + DST_ALPHA = 0x0304, + ONE_MINUS_DST_ALPHA = 0x0305, + DST_COLOR = 0x0306, + ONE_MINUS_DST_COLOR = 0x0307, + SRC_ALPHA_SATURATE = 0x0308, + CONSTANT_COLOR = 0x8001, + ONE_MINUS_CONSTANT_COLOR = 0x8002, + CONSTANT_ALPHA = 0x8003, + ONE_MINUS_CONSTANT_ALPHA = 0x8004 + }; + enum class NV2A_COMPARISON_OP { + NEVER = 0x0200, + LESS = 0x0201, + EQUAL = 0x0202, + LEQUAL = 0x0203, + GREATER = 0x0204, + NOTEQUAL = 0x0205, + GEQUAL = 0x0206, + ALWAYS = 0x0207 + }; + enum class NV2A_STENCIL_OP { + ZEROOP = 0x0000, + INVERTOP = 0x150a, + KEEP = 0x1e00, + REPLACE = 0x1e01, + INCR = 0x1e02, + DECR = 0x1e03, + INCR_WRAP = 0x8507, + DECR_WRAP = 0x8508 + }; + enum class NV2A_RT_TYPE { + LINEAR = 1, + SWIZZLED = 2 + }; + enum class NV2A_RT_DEPTH_FORMAT { + Z16 = 0x0001, + Z24S8 = 0x0002 + }; + enum class NV2A_COLOR_FORMAT { + X1R5G5B5_Z1R5G5B5 = 1, + X1R5G5B5_X1R5G5B5 = 2, + R5G6B5 = 3, + X8R8G8B8_Z8R8G8B8 = 4, + X8R8G8B8_X8R8G8B8 = 5, + X1A7R8G8B8_Z1A7R8G8B8 = 6, + X1A7R8G8B8_X1A7R8G8B8 = 7, + A8R8G8B8 = 8, + B8 = 9, + G8B8 = 10 + }; + nv2a_renderer(running_machine &machine) : poly_manager(machine) { memset(channel, 0, sizeof(channel)); @@ -198,24 +364,24 @@ public: color_mask = 0xffffffff; alpha_test_enabled = false; alpha_reference = 0; - alpha_func = nv2a_renderer::ALWAYS; + alpha_func = NV2A_COMPARISON_OP::ALWAYS; depth_test_enabled = false; - depth_function = nv2a_renderer::LESS; + depth_function = NV2A_COMPARISON_OP::LESS; depth_write_enabled = false; stencil_test_enabled = false; - stencil_func = nv2a_renderer::ALWAYS; + stencil_func = NV2A_COMPARISON_OP::ALWAYS; stencil_ref = 0; stencil_mask = -1; - stencil_op_fail = nv2a_renderer::KEEP; - stencil_op_zfail = nv2a_renderer::KEEP; - stencil_op_zpass = nv2a_renderer::KEEP; + stencil_op_fail = NV2A_STENCIL_OP::KEEP; + stencil_op_zfail = NV2A_STENCIL_OP::KEEP; + stencil_op_zpass = NV2A_STENCIL_OP::KEEP; blending_enabled = false; - blend_equation = nv2a_renderer::FUNC_ADD; + blend_equation = NV2A_BLEND_EQUATION::FUNC_ADD; blend_color = 0; - blend_function_destination = nv2a_renderer::ZERO; - blend_function_source = nv2a_renderer::ONE; + blend_function_destination = NV2A_BLEND_FACTOR::ZERO; + blend_function_source = NV2A_BLEND_FACTOR::ONE; logical_operation_enabled = false; - logical_operation = nv2a_renderer::COPY; + logical_operation = NV2A_LOGIC_OP::COPY; limits_rendertarget.set(0, 0, 640, 480); pitch_rendertarget = 0; pitch_depthbuffer = 0; @@ -223,9 +389,9 @@ public: log2width_rendertarget = 0; dilate_rendertarget = 0; antialiasing_rendertarget = 0; - type_rendertarget = nv2a_renderer::LINEAR; - depthformat_rendertarget = nv2a_renderer::NV2A_RT_DEPTH_FORMAT_Z24S8; - colorformat_rendertarget = nv2a_renderer::NV2A_COLOR_FORMAT_A8R8G8B8; + type_rendertarget = NV2A_RT_TYPE::LINEAR; + depthformat_rendertarget = NV2A_RT_DEPTH_FORMAT::Z24S8; + colorformat_rendertarget = NV2A_COLOR_FORMAT::A8R8G8B8; bytespixel_rendertarget = 4; antialias_control = 0; rendertarget = nullptr; @@ -324,9 +490,9 @@ public: int log2width_rendertarget; int dilate_rendertarget; int antialiasing_rendertarget; - int type_rendertarget; - int depthformat_rendertarget; - int colorformat_rendertarget; + NV2A_RT_TYPE type_rendertarget; + NV2A_RT_DEPTH_FORMAT depthformat_rendertarget; + NV2A_COLOR_FORMAT colorformat_rendertarget; int bytespixel_rendertarget; UINT32 antialias_control; UINT32 *rendertarget; @@ -334,7 +500,7 @@ public: UINT32 *displayedtarget; UINT32 vertexbuffer_address[16]; int vertexbuffer_stride[16]; - int vertexbuffer_kind[16]; + NV2A_VTXBUF_TYPE vertexbuffer_kind[16]; int vertexbuffer_size[16]; struct { int enabled; @@ -342,7 +508,7 @@ public: int sizev; int sizew; int dilate; - int format; + NV2A_TEX_FORMAT format; int rectangle_pitch; void *buffer; } texture[4]; @@ -455,25 +621,25 @@ public: } combiner; UINT32 color_mask; bool alpha_test_enabled; - int alpha_func; + NV2A_COMPARISON_OP alpha_func; int alpha_reference; bool depth_test_enabled; - int depth_function; + NV2A_COMPARISON_OP depth_function; bool depth_write_enabled; bool stencil_test_enabled; - int stencil_func; + NV2A_COMPARISON_OP stencil_func; int stencil_ref; int stencil_mask; - int stencil_op_fail; - int stencil_op_zfail; - int stencil_op_zpass; + NV2A_STENCIL_OP stencil_op_fail; + NV2A_STENCIL_OP stencil_op_zfail; + NV2A_STENCIL_OP stencil_op_zpass; bool blending_enabled; - int blend_equation; - int blend_function_source; - int blend_function_destination; + NV2A_BLEND_EQUATION blend_equation; + NV2A_BLEND_FACTOR blend_function_source; + NV2A_BLEND_FACTOR blend_function_destination; UINT32 blend_color; bool logical_operation_enabled; - int logical_operation; + NV2A_LOGIC_OP logical_operation; struct { float modelview[16]; float modelview_inverse[16]; @@ -505,170 +671,4 @@ public: int debug_grab_texttype; char *debug_grab_textfile; int waitvblank_used; - - enum VERTEX_PARAMETER { - PARAM_COLOR_B = 0, - PARAM_COLOR_G = 1, - PARAM_COLOR_R = 2, - PARAM_COLOR_A = 3, - PARAM_TEXTURE0_U = 4, - PARAM_TEXTURE0_V = 5, - PARAM_TEXTURE1_U = 6, - PARAM_TEXTURE1_V = 7, - PARAM_TEXTURE2_U = 8, - PARAM_TEXTURE2_V = 9, - PARAM_TEXTURE3_U = 10, - PARAM_TEXTURE3_V = 11, - PARAM_Z = 12 - }; - enum NV2A_BEGIN_END { - STOP = 0, - POINTS = 1, - LINES = 2, - LINE_LOOP = 3, - LINE_STRIP = 4, - TRIANGLES = 5, - TRIANGLE_STRIP = 6, - TRIANGLE_FAN = 7, - QUADS = 8, - QUAD_STRIP = 9, - POLYGON = 10 - }; - enum NV2A_VERTEX_ATTR { - POS = 0, - WEIGHT = 1, - NORMAL = 2, - COLOR0 = 3, // diffuse - COLOR1 = 4, // specular - FOG = 5, - BACKCOLOR0 = 7, // diffuse - BACKCOLOR1 = 8, // specular - TEX0 = 9, - TEX1 = 10, - TEX2 = 11, - TEX3 = 12 - }; - enum NV2A_VTXBUF_TYPE { - NV2A_VTXBUF_TYPE_UBYTE2 = 0, // what is the difference with UBYTE ? - NV2A_VTXBUF_TYPE_FLOAT = 2, - NV2A_VTXBUF_TYPE_UBYTE = 4, - NV2A_VTXBUF_TYPE_USHORT = 5, - NV2A_VTXBUF_TYPE_UNKNOWN_6 = 6 // used for vertex color - }; - enum NV2A_TEX_FORMAT { - L8 = 0x0, - I8 = 0x1, - A1R5G5B5 = 0x2, - A4R4G4B4 = 0x4, - R5G6B5 = 0x5, - A8R8G8B8 = 0x6, - X8R8G8B8 = 0x7, - INDEX8 = 0xb, - DXT1 = 0xc, - DXT3 = 0xe, - DXT5 = 0xf, - A1R5G5B5_RECT = 0x10, - R5G6B5_RECT = 0x11, - A8R8G8B8_RECT = 0x12, - L8_RECT = 0x13, - DSDT8_RECT = 0x17, - A8L8 = 0x1a, - I8_RECT = 0x1b, - A4R4G4B4_RECT = 0x1d, - R8G8B8_RECT = 0x1e, - A8L8_RECT = 0x20, - Z24 = 0x2a, - Z24_RECT = 0x2b, - Z16 = 0x2c, - Z16_RECT = 0x2d, - DSDT8 = 0x28, - HILO16 = 0x33, - HILO16_RECT = 0x36, - HILO8 = 0x44, - SIGNED_HILO8 = 0x45, - HILO8_RECT = 0x46, - SIGNED_HILO8_RECT = 0x47 - }; - enum NV2A_LOGIC_OP { - CLEAR = 0x1500, - AND = 0x1501, - AND_REVERSE = 0x1502, - COPY = 0x1503, - AND_INVERTED = 0x1504, - NOOP = 0x1505, - XOR = 0x1506, - OR = 0x1507, - NOR = 0x1508, - EQUIV = 0x1509, - INVERT = 0x150a, - OR_REVERSE = 0x150b, - COPY_INVERTED = 0x150c, - OR_INVERTED = 0x150d, - NAND = 0x150e, - SET = 0x150f - }; - enum NV2A_BLEND_EQUATION { - FUNC_ADD = 0x8006, - MIN = 0x8007, - MAX = 0x8008, - FUNC_SUBTRACT = 0x800a, - FUNC_REVERSE_SUBTRACT = 0x80b - }; - enum NV2A_BLEND_FACTOR { - ZERO = 0x0000, - ONE = 0x0001, - SRC_COLOR = 0x0300, - ONE_MINUS_SRC_COLOR = 0x0301, - SRC_ALPHA = 0x0302, - ONE_MINUS_SRC_ALPHA = 0x0303, - DST_ALPHA = 0x0304, - ONE_MINUS_DST_ALPHA = 0x0305, - DST_COLOR = 0x0306, - ONE_MINUS_DST_COLOR = 0x0307, - SRC_ALPHA_SATURATE = 0x0308, - CONSTANT_COLOR = 0x8001, - ONE_MINUS_CONSTANT_COLOR = 0x8002, - CONSTANT_ALPHA = 0x8003, - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - }; - enum NV2A_COMPARISON_OP { - NEVER = 0x0200, - LESS = 0x0201, - EQUAL = 0x0202, - LEQUAL = 0x0203, - GREATER = 0x0204, - NOTEQUAL = 0x0205, - GEQUAL = 0x0206, - ALWAYS = 0x0207 - }; - enum NV2A_STENCIL_OP { - ZEROOP = 0x0000, - INVERTOP = 0x150a, - KEEP = 0x1e00, - REPLACE = 0x1e01, - INCR = 0x1e02, - DECR = 0x1e03, - INCR_WRAP = 0x8507, - DECR_WRAP = 0x8508 - }; - enum NV2A_RT_TYPE { - LINEAR = 1, - SWIZZLED = 2 - }; - enum NV2A_RT_DEPTH_FORMAT { - NV2A_RT_DEPTH_FORMAT_Z16 = 0x0001, - NV2A_RT_DEPTH_FORMAT_Z24S8 = 0x0002 - }; - enum NV2A_COLOR_FORMAT { - NV2A_COLOR_FORMAT_X1R5G5B5_Z1R5G5B5 = 1, - NV2A_COLOR_FORMAT_X1R5G5B5_X1R5G5B5 = 2, - NV2A_COLOR_FORMAT_R5G6B5 = 3, - NV2A_COLOR_FORMAT_X8R8G8B8_Z8R8G8B8 = 4, - NV2A_COLOR_FORMAT_X8R8G8B8_X8R8G8B8 = 5, - NV2A_COLOR_FORMAT_X1A7R8G8B8_Z1A7R8G8B8 = 6, - NV2A_COLOR_FORMAT_X1A7R8G8B8_X1A7R8G8B8 = 7, - NV2A_COLOR_FORMAT_A8R8G8B8 = 8, - NV2A_COLOR_FORMAT_B8 = 9, - NV2A_COLOR_FORMAT_G8B8 = 10 - }; }; diff --git a/src/mame/video/chihiro.cpp b/src/mame/video/chihiro.cpp index efbd4e8ef83..499422084aa 100644 --- a/src/mame/video/chihiro.cpp +++ b/src/mame/video/chihiro.cpp @@ -1060,10 +1060,10 @@ UINT32 nv2a_renderer::texture_get_texel(int number, int x, int y) x = (unsigned int)x & (texture[number].sizeu - 1); y = (unsigned int)y & (texture[number].sizev - 1); switch (texture[number].format) { - case A8R8G8B8: + case NV2A_TEX_FORMAT::A8R8G8B8: to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory return *(((UINT32 *)texture[number].buffer) + to); // get texel color - case DXT1: + case NV2A_TEX_FORMAT::DXT1: bx = x >> 2; by = y >> 2; x = x & 3; @@ -1104,7 +1104,7 @@ UINT32 nv2a_renderer::texture_get_texel(int number, int x, int y) default: return 0xff000000; } - case DXT3: + case NV2A_TEX_FORMAT::DXT3: bx = x >> 2; by = y >> 2; x = x & 3; @@ -1134,25 +1134,25 @@ UINT32 nv2a_renderer::texture_get_texel(int number, int x, int y) cr = pal5bit(((color0 & 0xf800) + 2 * (color1 & 0xf800)) / 3 >> 11); return ((ca + (ca << 4)) << 24) | (cr << 16) | (cg << 8) | (cb); } - case A4R4G4B4: + case NV2A_TEX_FORMAT::A4R4G4B4: to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory a4r4g4b4 = *(((UINT16 *)texture[number].buffer) + to); // get texel color return convert_a4r4g4b4_a8r8g8b8(a4r4g4b4); - case A1R5G5B5: + case NV2A_TEX_FORMAT::A1R5G5B5: to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory a1r5g5b5 = *(((UINT16 *)texture[number].buffer) + to); // get texel color return convert_a1r5g5b5_a8r8g8b8(a1r5g5b5); - case R5G6B5: + case NV2A_TEX_FORMAT::R5G6B5: to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory r5g6b5 = *(((UINT16 *)texture[number].buffer) + to); // get texel color return 0xff000000 + convert_r5g6b5_r8g8b8(r5g6b5); - case R8G8B8_RECT: + case NV2A_TEX_FORMAT::R8G8B8_RECT: to = texture[number].rectangle_pitch*y + (x << 2); return *((UINT32 *)(((UINT8 *)texture[number].buffer) + to)); - case A8R8G8B8_RECT: + case NV2A_TEX_FORMAT::A8R8G8B8_RECT: to = texture[number].rectangle_pitch*y + (x << 2); return *((UINT32 *)(((UINT8 *)texture[number].buffer) + to)); - case DXT5: + case NV2A_TEX_FORMAT::DXT5: bx = x >> 2; by = y >> 2; x = x & 3; @@ -1248,12 +1248,12 @@ inline UINT8 *nv2a_renderer::read_pixel(int x, int y, INT32 c[4]) UINT16 *addr16; UINT8 *addr8; - if (type_rendertarget == SWIZZLED) + if (type_rendertarget == NV2A_RT_TYPE::SWIZZLED) offset = (dilated0[dilate_rendertarget][x] + dilated1[dilate_rendertarget][y]) * bytespixel_rendertarget; else // type_rendertarget == LINEAR*/ offset = pitch_rendertarget * y + x * bytespixel_rendertarget; switch (colorformat_rendertarget) { - case NV2A_COLOR_FORMAT_R5G6B5: + case NV2A_COLOR_FORMAT::R5G6B5: addr16 = (UINT16 *)((UINT8 *)rendertarget + offset); color = *addr16; c[3] = 0xff; @@ -1261,8 +1261,8 @@ inline UINT8 *nv2a_renderer::read_pixel(int x, int y, INT32 c[4]) c[1] = pal6bit((color & 0x07e0) >> 5); c[0] = pal5bit(color & 0x1f); return (UINT8 *)addr16; - case NV2A_COLOR_FORMAT_X8R8G8B8_Z8R8G8B8: - case NV2A_COLOR_FORMAT_X8R8G8B8_X8R8G8B8: + case NV2A_COLOR_FORMAT::X8R8G8B8_Z8R8G8B8: + case NV2A_COLOR_FORMAT::X8R8G8B8_X8R8G8B8: addr = (UINT32 *)((UINT8 *)rendertarget + offset); color = *addr; @@ -1271,7 +1271,7 @@ inline UINT8 *nv2a_renderer::read_pixel(int x, int y, INT32 c[4]) c[1] = (color >> 8) & 255; c[0] = color & 255; return (UINT8 *)addr; - case NV2A_COLOR_FORMAT_A8R8G8B8: + case NV2A_COLOR_FORMAT::A8R8G8B8: addr = (UINT32 *)((UINT8 *)rendertarget + offset); color = *addr; c[3] = color >> 24; @@ -1279,7 +1279,7 @@ inline UINT8 *nv2a_renderer::read_pixel(int x, int y, INT32 c[4]) c[1] = (color >> 8) & 255; c[0] = color & 255; return (UINT8 *)addr; - case NV2A_COLOR_FORMAT_B8: + case NV2A_COLOR_FORMAT::B8: addr8 = (UINT8 *)rendertarget + offset; c[0] = *addr8; c[1] = c[2] = 0; @@ -1304,14 +1304,14 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth) addr = nullptr; if (color_mask != 0) addr = read_pixel(x, y, fb); - if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) { + if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT::Z24S8) { daddr32 = depthbuffer + (pitch_depthbuffer / 4) * y + x; deptsten = *daddr32; dep = deptsten >> 8; sten = deptsten & 255; daddr16 = nullptr; } - else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) { + else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT::Z16) { daddr16 = (UINT16 *)depthbuffer + (pitch_depthbuffer / 2) * y + x; deptsten = *daddr16; dep = (deptsten << 8) | 0xff; @@ -1338,32 +1338,32 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth) // alpha test if (alpha_test_enabled) { switch (alpha_func) { - case nv2a_renderer::NEVER: + case NV2A_COMPARISON_OP::NEVER: return; - case nv2a_renderer::ALWAYS: + case NV2A_COMPARISON_OP::ALWAYS: default: break; - case nv2a_renderer::LESS: + case NV2A_COMPARISON_OP::LESS: if (c[3] >= alpha_reference) return; break; - case nv2a_renderer::LEQUAL: + case NV2A_COMPARISON_OP::LEQUAL: if (c[3] > alpha_reference) return; break; - case nv2a_renderer::EQUAL: + case NV2A_COMPARISON_OP::EQUAL: if (c[3] != alpha_reference) return; break; - case nv2a_renderer::GEQUAL: + case NV2A_COMPARISON_OP::GEQUAL: if (c[3] < alpha_reference) return; break; - case nv2a_renderer::GREATER: + case NV2A_COMPARISON_OP::GREATER: if (c[3] <= alpha_reference) return; break; - case nv2a_renderer::NOTEQUAL: + case NV2A_COMPARISON_OP::NOTEQUAL: if (c[3] == alpha_reference) return; break; @@ -1375,77 +1375,77 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth) stenc=stencil_mask & stencil_ref; stenv=stencil_mask & sten; switch (stencil_func) { - case nv2a_renderer::NEVER: + case NV2A_COMPARISON_OP::NEVER: stencil_passed = false; break; - case nv2a_renderer::LESS: + case NV2A_COMPARISON_OP::LESS: if (stenc >= stenv) stencil_passed = false; break; - case nv2a_renderer::EQUAL: + case NV2A_COMPARISON_OP::EQUAL: if (stenc != stenv) stencil_passed = false; break; - case nv2a_renderer::LEQUAL: + case NV2A_COMPARISON_OP::LEQUAL: if (stenc > stenv) stencil_passed = false; break; - case nv2a_renderer::GREATER: + case NV2A_COMPARISON_OP::GREATER: if (stenc <= stenv) stencil_passed = false; break; - case nv2a_renderer::NOTEQUAL: + case NV2A_COMPARISON_OP::NOTEQUAL: if (stenc == stenv) stencil_passed = false; break; - case nv2a_renderer::GEQUAL: + case NV2A_COMPARISON_OP::GEQUAL: if (stenc < stenv) stencil_passed = false; break; - case nv2a_renderer::ALWAYS: + case NV2A_COMPARISON_OP::ALWAYS: default: break; } if (stencil_passed == false) { switch (stencil_op_fail) { - case nv2a_renderer::ZEROOP: + case NV2A_STENCIL_OP::ZEROOP: sten = 0; break; - case nv2a_renderer::INVERTOP: + case NV2A_STENCIL_OP::INVERTOP: sten = sten ^ 255; break; - case nv2a_renderer::KEEP: + case NV2A_STENCIL_OP::KEEP: default: break; - case nv2a_renderer::REPLACE: + case NV2A_STENCIL_OP::REPLACE: sten = stencil_ref; break; - case nv2a_renderer::INCR: + case NV2A_STENCIL_OP::INCR: if (sten < 255) sten++; break; - case nv2a_renderer::DECR: + case NV2A_STENCIL_OP::DECR: if (sten > 0) sten--; break; - case nv2a_renderer::INCR_WRAP: + case NV2A_STENCIL_OP::INCR_WRAP: if (sten < 255) sten++; else sten = 0; break; - case nv2a_renderer::DECR_WRAP: + case NV2A_STENCIL_OP::DECR_WRAP: if (sten > 0) sten--; else sten = 255; break; } - if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) { + if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT::Z24S8) { deptsten = (dep << 8) | sten; *daddr32 = deptsten; } - else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) { + else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT::Z16) { deptsten = dep >> 8; *daddr16 = (UINT16)deptsten; } @@ -1456,110 +1456,110 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth) depth_passed = true; if (depth_test_enabled) { switch (depth_function) { - case nv2a_renderer::NEVER: + case NV2A_COMPARISON_OP::NEVER: depth_passed = false; break; - case nv2a_renderer::LESS: + case NV2A_COMPARISON_OP::LESS: if (depth >= dep) depth_passed = false; break; - case nv2a_renderer::EQUAL: + case NV2A_COMPARISON_OP::EQUAL: if (depth != dep) depth_passed = false; break; - case nv2a_renderer::LEQUAL: + case NV2A_COMPARISON_OP::LEQUAL: if (depth > dep) depth_passed = false; break; - case nv2a_renderer::GREATER: + case NV2A_COMPARISON_OP::GREATER: if (depth <= dep) depth_passed = false; break; - case nv2a_renderer::NOTEQUAL: + case NV2A_COMPARISON_OP::NOTEQUAL: if (depth == dep) depth_passed = false; break; - case nv2a_renderer::GEQUAL: + case NV2A_COMPARISON_OP::GEQUAL: if (depth < dep) depth_passed = false; break; - case nv2a_renderer::ALWAYS: + case NV2A_COMPARISON_OP::ALWAYS: default: break; } if (depth_passed == false) { switch (stencil_op_zfail) { - case nv2a_renderer::ZEROOP: + case NV2A_STENCIL_OP::ZEROOP: sten = 0; break; - case nv2a_renderer::INVERTOP: + case NV2A_STENCIL_OP::INVERTOP: sten = sten ^ 255; break; - case nv2a_renderer::KEEP: + case NV2A_STENCIL_OP::KEEP: default: break; - case nv2a_renderer::REPLACE: + case NV2A_STENCIL_OP::REPLACE: sten = stencil_ref; break; - case nv2a_renderer::INCR: + case NV2A_STENCIL_OP::INCR: if (sten < 255) sten++; break; - case nv2a_renderer::DECR: + case NV2A_STENCIL_OP::DECR: if (sten > 0) sten--; break; - case nv2a_renderer::INCR_WRAP: + case NV2A_STENCIL_OP::INCR_WRAP: if (sten < 255) sten++; else sten = 0; break; - case nv2a_renderer::DECR_WRAP: + case NV2A_STENCIL_OP::DECR_WRAP: if (sten > 0) sten--; else sten = 255; break; } - if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) { + if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT::Z24S8) { deptsten = (dep << 8) | sten; *daddr32 = deptsten; } - else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) { + else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT::Z16) { deptsten = dep >> 8; *daddr16 = (UINT16)deptsten; } return; } switch (stencil_op_zpass) { - case nv2a_renderer::ZEROOP: + case NV2A_STENCIL_OP::ZEROOP: sten = 0; break; - case nv2a_renderer::INVERTOP: + case NV2A_STENCIL_OP::INVERTOP: sten = sten ^ 255; break; - case nv2a_renderer::KEEP: + case NV2A_STENCIL_OP::KEEP: default: break; - case nv2a_renderer::REPLACE: + case NV2A_STENCIL_OP::REPLACE: sten = stencil_ref; break; - case nv2a_renderer::INCR: + case NV2A_STENCIL_OP::INCR: if (sten < 255) sten++; break; - case nv2a_renderer::DECR: + case NV2A_STENCIL_OP::DECR: if (sten > 0) sten--; break; - case nv2a_renderer::INCR_WRAP: + case NV2A_STENCIL_OP::INCR_WRAP: if (sten < 255) sten++; else sten = 0; break; - case nv2a_renderer::DECR_WRAP: + case NV2A_STENCIL_OP::DECR_WRAP: if (sten > 0) sten--; else @@ -1570,56 +1570,56 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth) // blending if (blending_enabled) { switch (blend_function_source) { - case nv2a_renderer::ZERO: + case NV2A_BLEND_FACTOR::ZERO: s[3] = s[2] = s[1] = s[0] = 0; break; - case nv2a_renderer::ONE: + case NV2A_BLEND_FACTOR::ONE: default: s[3] = s[2] = s[1] = s[0] = 255; break; - case nv2a_renderer::DST_COLOR: + case NV2A_BLEND_FACTOR::DST_COLOR: s[3] = fb[3]; s[2] = fb[2]; s[1] = fb[1]; s[0] = fb[0]; break; - case nv2a_renderer::ONE_MINUS_DST_COLOR: + case NV2A_BLEND_FACTOR::ONE_MINUS_DST_COLOR: s[3] = fb[3] ^ 255; s[2] = fb[2] ^ 255; s[1] = fb[1] ^ 255; s[0] = fb[0] ^ 255; break; - case nv2a_renderer::SRC_ALPHA: + case NV2A_BLEND_FACTOR::SRC_ALPHA: s[3] = s[2] = s[1] = s[0] = c[3]; break; - case nv2a_renderer::ONE_MINUS_SRC_ALPHA: + case NV2A_BLEND_FACTOR::ONE_MINUS_SRC_ALPHA: s[3] = s[2] = s[1] = s[0] = c[3] ^ 255; break; - case nv2a_renderer::DST_ALPHA: + case NV2A_BLEND_FACTOR::DST_ALPHA: s[3] = s[2] = s[1] = s[0] = fb[3]; break; - case nv2a_renderer::ONE_MINUS_DST_ALPHA: + case NV2A_BLEND_FACTOR::ONE_MINUS_DST_ALPHA: s[3] = s[2] = s[1] = s[0] = fb[3] ^ 255; break; - case nv2a_renderer::CONSTANT_COLOR: + case NV2A_BLEND_FACTOR::CONSTANT_COLOR: s[3] = cc[3]; s[2] = cc[2]; s[1] = cc[1]; s[0] = cc[0]; break; - case nv2a_renderer::ONE_MINUS_CONSTANT_COLOR: + case NV2A_BLEND_FACTOR::ONE_MINUS_CONSTANT_COLOR: s[3] = cc[3] ^ 255; s[2] = cc[2] ^ 255; s[1] = cc[1] ^ 255; s[0] = cc[0] ^ 255; break; - case nv2a_renderer::CONSTANT_ALPHA: + case NV2A_BLEND_FACTOR::CONSTANT_ALPHA: s[3] = s[2] = s[1] = s[0] = cc[3]; break; - case nv2a_renderer::ONE_MINUS_CONSTANT_ALPHA: + case NV2A_BLEND_FACTOR::ONE_MINUS_CONSTANT_ALPHA: s[3] = s[2] = s[1] = s[0] = cc[3] ^ 255; break; - case nv2a_renderer::SRC_ALPHA_SATURATE: + case NV2A_BLEND_FACTOR::SRC_ALPHA_SATURATE: s[3] = 255; if (c[3] < (fb[3] ^ 255)) s[2] = c[3]; @@ -1629,58 +1629,58 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth) break; } switch (blend_function_destination) { - case nv2a_renderer::ZERO: + case NV2A_BLEND_FACTOR::ZERO: default: d[3] = d[2] = d[1] = d[0] = 0; break; - case nv2a_renderer::ONE: + case NV2A_BLEND_FACTOR::ONE: d[3] = d[2] = d[1] = d[0] = 255; break; - case nv2a_renderer::SRC_COLOR: + case NV2A_BLEND_FACTOR::SRC_COLOR: d[3] = c[3]; d[2] = c[2]; d[1] = c[1]; d[0] = c[0]; break; - case nv2a_renderer::ONE_MINUS_SRC_COLOR: + case NV2A_BLEND_FACTOR::ONE_MINUS_SRC_COLOR: d[3] = c[3] ^ 255; d[2] = c[2] ^ 255; d[1] = c[1] ^ 255; d[0] = c[0] ^ 255; break; - case nv2a_renderer::SRC_ALPHA: + case NV2A_BLEND_FACTOR::SRC_ALPHA: d[3] = d[2] = d[1] = d[0] = c[3]; break; - case nv2a_renderer::ONE_MINUS_SRC_ALPHA: + case NV2A_BLEND_FACTOR::ONE_MINUS_SRC_ALPHA: d[3] = d[2] = d[1] = d[0] = c[3] ^ 255; break; - case nv2a_renderer::DST_ALPHA: + case NV2A_BLEND_FACTOR::DST_ALPHA: d[3] = d[2] = d[1] = d[0] = fb[3]; break; - case nv2a_renderer::ONE_MINUS_DST_ALPHA: + case NV2A_BLEND_FACTOR::ONE_MINUS_DST_ALPHA: d[3] = d[2] = d[1] = d[0] = fb[3] ^ 255; break; - case nv2a_renderer::CONSTANT_COLOR: + case NV2A_BLEND_FACTOR::CONSTANT_COLOR: d[3] = cc[3]; d[2] = cc[2]; d[1] = cc[1]; d[0] = cc[0]; break; - case nv2a_renderer::ONE_MINUS_CONSTANT_COLOR: + case NV2A_BLEND_FACTOR::ONE_MINUS_CONSTANT_COLOR: d[3] = cc[3] ^ 255; d[2] = cc[2] ^ 255; d[1] = cc[1] ^ 255; d[0] = cc[0] ^ 255; break; - case nv2a_renderer::CONSTANT_ALPHA: + case NV2A_BLEND_FACTOR::CONSTANT_ALPHA: d[3] = d[2] = d[1] = d[0] = cc[3]; break; - case nv2a_renderer::ONE_MINUS_CONSTANT_ALPHA: + case NV2A_BLEND_FACTOR::ONE_MINUS_CONSTANT_ALPHA: d[3] = d[2] = d[1] = d[0] = cc[3] ^ 255; break; } switch (blend_equation) { - case nv2a_renderer::FUNC_ADD: + case NV2A_BLEND_EQUATION::FUNC_ADD: c[3] = (c[3] * s[3] + fb[3] * d[3]) / 255; if (c[3] > 255) c[3] = 255; @@ -1694,7 +1694,7 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth) if (c[0] > 255) c[0] = 255; break; - case nv2a_renderer::FUNC_SUBTRACT: + case NV2A_BLEND_EQUATION::FUNC_SUBTRACT: c[3] = (c[3] * s[3] - fb[3] * d[3]) / 255; if (c[3] < 0) c[3] = 255; @@ -1708,7 +1708,7 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth) if (c[0] < 0) c[0] = 255; break; - case nv2a_renderer::FUNC_REVERSE_SUBTRACT: + case NV2A_BLEND_EQUATION::FUNC_REVERSE_SUBTRACT: c[3] = (fb[3] * d[3] - c[3] * s[3]) / 255; if (c[3] < 0) c[3] = 255; @@ -1722,7 +1722,7 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth) if (c[0] < 0) c[0] = 255; break; - case nv2a_renderer::MIN: + case NV2A_BLEND_EQUATION::MIN: c[3] = s[3]; if (d[3] < c[3]) c[3] = d[3]; @@ -1736,7 +1736,7 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth) if (d[0] < c[0]) c[0] = d[0]; break; - case nv2a_renderer::MAX: + case NV2A_BLEND_EQUATION::MAX: c[3] = s[3]; if (d[3] > c[3]) c[3] = d[3]; @@ -1756,94 +1756,94 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth) // logical operation if (logical_operation_enabled) { switch (logical_operation) { - case nv2a_renderer::CLEAR: + case NV2A_LOGIC_OP::CLEAR: c[3] = 0; c[2] = 0; c[1] = 0; c[0] = 0; break; - case nv2a_renderer::AND: + case NV2A_LOGIC_OP::AND: c[3] = c[3] & fb[3]; c[2] = c[2] & fb[2]; c[1] = c[1] & fb[1]; c[0] = c[0] & fb[0]; break; - case nv2a_renderer::AND_REVERSE: + case NV2A_LOGIC_OP::AND_REVERSE: c[3] = c[3] & (fb[3] ^ 255); c[2] = c[2] & (fb[2] ^ 255); c[1] = c[1] & (fb[1] ^ 255); c[0] = c[0] & (fb[0] ^ 255); break; - case nv2a_renderer::COPY: + case NV2A_LOGIC_OP::COPY: default: break; - case nv2a_renderer::AND_INVERTED: + case NV2A_LOGIC_OP::AND_INVERTED: c[3] = (c[3] ^ 255) & fb[3]; c[2] = (c[2] ^ 255) & fb[2]; c[1] = (c[1] ^ 255) & fb[1]; c[0] = (c[0] ^ 255) & fb[0]; break; - case nv2a_renderer::NOOP: + case NV2A_LOGIC_OP::NOOP: c[3] = fb[3]; c[2] = fb[2]; c[1] = fb[1]; c[0] = fb[0]; break; - case nv2a_renderer::XOR: + case NV2A_LOGIC_OP::XOR: c[3] = c[3] ^ fb[3]; c[2] = c[2] ^ fb[2]; c[1] = c[1] ^ fb[1]; c[0] = c[0] ^ fb[0]; break; - case nv2a_renderer::OR: + case NV2A_LOGIC_OP::OR: c[3] = c[3] | fb[3]; c[2] = c[2] | fb[2]; c[1] = c[1] | fb[1]; c[0] = c[0] | fb[0]; break; - case nv2a_renderer::NOR: + case NV2A_LOGIC_OP::NOR: c[3] = (c[3] | fb[3]) ^ 255; c[2] = (c[2] | fb[2]) ^ 255; c[1] = (c[1] | fb[1]) ^ 255; c[0] = (c[0] | fb[0]) ^ 255; break; - case nv2a_renderer::EQUIV: + case NV2A_LOGIC_OP::EQUIV: c[3] = (c[3] ^ fb[3]) ^ 255; c[2] = (c[2] ^ fb[2]) ^ 255; c[1] = (c[1] ^ fb[1]) ^ 255; c[0] = (c[0] ^ fb[0]) ^ 255; break; - case nv2a_renderer::INVERT: + case NV2A_LOGIC_OP::INVERT: c[3] = fb[3] ^ 255; c[2] = fb[2] ^ 255; c[1] = fb[1] ^ 255; c[0] = fb[0] ^ 255; break; - case nv2a_renderer::OR_REVERSE: + case NV2A_LOGIC_OP::OR_REVERSE: c[3] = c[3] | (fb[3] ^ 255); c[2] = c[2] | (fb[2] ^ 255); c[1] = c[1] | (fb[1] ^ 255); c[0] = c[0] | (fb[0] ^ 255); break; - case nv2a_renderer::COPY_INVERTED: + case NV2A_LOGIC_OP::COPY_INVERTED: c[3] = c[3] ^ 255; c[2] = c[2] ^ 255; c[1] = c[1] ^ 255; c[0] = c[0] ^ 255; break; - case nv2a_renderer::OR_INVERTED: + case NV2A_LOGIC_OP::OR_INVERTED: c[3] = (c[3] ^ 255) | fb[3]; c[2] = (c[2] ^ 255) | fb[2]; c[1] = (c[1] ^ 255) | fb[1]; c[0] = (c[0] ^ 255) | fb[0]; break; - case nv2a_renderer::NAND: + case NV2A_LOGIC_OP::NAND: c[3] = (c[3] & fb[3]) ^ 255; c[2] = (c[2] & fb[2]) ^ 255; c[1] = (c[1] & fb[1]) ^ 255; c[0] = (c[0] & fb[0]) ^ 255; break; - case nv2a_renderer::SET: + case NV2A_LOGIC_OP::SET: c[3] = 255; c[2] = 255; c[1] = 255; @@ -1858,29 +1858,29 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth) ft = ((UINT32)fb[3] << 24) | ((UINT32)fb[2] << 16) | ((UINT32)fb[1] << 8) | (UINT32)fb[0]; w = (ft & ~color_mask) | (ct & color_mask); switch (colorformat_rendertarget) { - case NV2A_COLOR_FORMAT_R5G6B5: + case NV2A_COLOR_FORMAT::R5G6B5: w = ((w >> 8) & 0xf800) + ((w >> 5) & 0x7e0) + ((w >> 3) & 0x1f); *((UINT16 *)addr) = (UINT16)w; break; - case NV2A_COLOR_FORMAT_X8R8G8B8_Z8R8G8B8: - case NV2A_COLOR_FORMAT_X8R8G8B8_X8R8G8B8: + case NV2A_COLOR_FORMAT::X8R8G8B8_Z8R8G8B8: + case NV2A_COLOR_FORMAT::X8R8G8B8_X8R8G8B8: *((UINT32 *)addr) = w; break; - case NV2A_COLOR_FORMAT_A8R8G8B8: + case NV2A_COLOR_FORMAT::A8R8G8B8: *((UINT32 *)addr) = w; break; - case NV2A_COLOR_FORMAT_B8: + case NV2A_COLOR_FORMAT::B8: *addr = (UINT8)w; break; } } if (depth_write_enabled) dep = depth; - if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) { + if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT::Z24S8) { deptsten = (dep << 8) | sten; *daddr32 = deptsten; } - else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) { + else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT::Z16) { deptsten = dep >> 8; *daddr16 = (UINT16)deptsten; } @@ -1899,12 +1899,12 @@ void nv2a_renderer::render_color(INT32 scanline, const extent_t &extent, const n int ca, cr, cg, cb; int xp = extent.startx + x; // x coordinate of current pixel - cb = ((extent.param[PARAM_COLOR_B].start + (float)x*extent.param[PARAM_COLOR_B].dpdx))*255.0f; - cg = ((extent.param[PARAM_COLOR_G].start + (float)x*extent.param[PARAM_COLOR_G].dpdx))*255.0f; - cr = ((extent.param[PARAM_COLOR_R].start + (float)x*extent.param[PARAM_COLOR_R].dpdx))*255.0f; - ca = ((extent.param[PARAM_COLOR_A].start + (float)x*extent.param[PARAM_COLOR_A].dpdx))*255.0f; + cb = ((extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_B].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_B].dpdx))*255.0f; + cg = ((extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_G].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_G].dpdx))*255.0f; + cr = ((extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_R].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_R].dpdx))*255.0f; + ca = ((extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_A].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_A].dpdx))*255.0f; a8r8g8b8 = (ca << 24) + (cr << 16) + (cg << 8) + cb; // pixel color obtained by interpolating the colors of the vertices - z = (extent.param[PARAM_Z].start + (float)x*extent.param[PARAM_Z].dpdx); + z = (extent.param[(int)VERTEX_PARAMETER::PARAM_Z].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_Z].dpdx); write_pixel(xp, scanline, a8r8g8b8, z); x--; } @@ -1926,10 +1926,10 @@ void nv2a_renderer::render_texture_simple(INT32 scanline, const extent_t &extent int up, vp; int xp = extent.startx + x; // x coordinate of current pixel - up = (extent.param[PARAM_TEXTURE0_U].start + (float)x*extent.param[PARAM_TEXTURE0_U].dpdx)*(float)(objectdata.data->texture[0].sizeu - 1); // x coordinate of texel in texture - vp = (extent.param[PARAM_TEXTURE0_V].start + (float)x*extent.param[PARAM_TEXTURE0_V].dpdx)*(float)(objectdata.data->texture[0].sizev - 1); // y coordinate of texel in texture + up = (extent.param[(int)VERTEX_PARAMETER::PARAM_TEXTURE0_U].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_TEXTURE0_U].dpdx)*(float)(objectdata.data->texture[0].sizeu - 1); // x coordinate of texel in texture + vp = (extent.param[(int)VERTEX_PARAMETER::PARAM_TEXTURE0_V].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_TEXTURE0_V].dpdx)*(float)(objectdata.data->texture[0].sizev - 1); // y coordinate of texel in texture a8r8g8b8 = texture_get_texel(0, up, vp); - z = (extent.param[PARAM_Z].start + (float)x*extent.param[PARAM_Z].dpdx); + z = (extent.param[(int)VERTEX_PARAMETER::PARAM_Z].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_Z].dpdx); write_pixel(xp, scanline, a8r8g8b8, z); x--; } @@ -1955,17 +1955,17 @@ void nv2a_renderer::render_register_combiners(INT32 scanline, const extent_t &ex xp = extent.startx + x; // 1: fetch data // 1.1: interpolated color from vertices - cb = ((extent.param[PARAM_COLOR_B].start + (float)x*extent.param[PARAM_COLOR_B].dpdx))*255.0f; - cg = ((extent.param[PARAM_COLOR_G].start + (float)x*extent.param[PARAM_COLOR_G].dpdx))*255.0f; - cr = ((extent.param[PARAM_COLOR_R].start + (float)x*extent.param[PARAM_COLOR_R].dpdx))*255.0f; - ca = ((extent.param[PARAM_COLOR_A].start + (float)x*extent.param[PARAM_COLOR_A].dpdx))*255.0f; + cb = ((extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_B].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_B].dpdx))*255.0f; + cg = ((extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_G].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_G].dpdx))*255.0f; + cr = ((extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_R].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_R].dpdx))*255.0f; + ca = ((extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_A].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_COLOR_A].dpdx))*255.0f; color[0] = (ca << 24) + (cr << 16) + (cg << 8) + cb; // pixel color obtained by interpolating the colors of the vertices color[1] = 0; // lighting not yet // 1.2: color for each of the 4 possible textures for (n = 0; n < 4; n++) { if (texture[n].enabled) { - up = (extent.param[PARAM_TEXTURE0_U + n * 2].start + (float)x*extent.param[PARAM_TEXTURE0_U + n * 2].dpdx)*(float)(objectdata.data->texture[n].sizeu - 1); - vp = extent.param[PARAM_TEXTURE0_V + n * 2].start*(float)(objectdata.data->texture[n].sizev - 1); + up = (extent.param[(int)VERTEX_PARAMETER::PARAM_TEXTURE0_U + n * 2].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_TEXTURE0_U + n * 2].dpdx)*(float)(objectdata.data->texture[n].sizeu - 1); + vp = extent.param[(int)VERTEX_PARAMETER::PARAM_TEXTURE0_V + n * 2].start*(float)(objectdata.data->texture[n].sizev - 1); color[n + 2] = texture_get_texel(n, up, vp); } } @@ -1990,7 +1990,7 @@ void nv2a_renderer::render_register_combiners(INT32 scanline, const extent_t &ex combiner_final_output(); a8r8g8b8 = combiner_float_argb8(combiner.output); // 3: write pixel - z = (extent.param[PARAM_Z].start + (float)x*extent.param[PARAM_Z].dpdx); + z = (extent.param[(int)VERTEX_PARAMETER::PARAM_Z].start + (float)x*extent.param[(int)VERTEX_PARAMETER::PARAM_Z].dpdx); write_pixel(xp, scanline, a8r8g8b8, z); x--; } @@ -2144,7 +2144,7 @@ void nv2a_renderer::read_vertex(address_space & space, offs_t address, vertex_nv l = vertexbuffer_size[attrib]; switch (vertexbuffer_kind[attrib]) { - case NV2A_VTXBUF_TYPE_FLOAT: + case NV2A_VTXBUF_TYPE::FLOAT: default: vertex.attribute[attrib].fv[0] = 0; vertex.attribute[attrib].fv[1] = 0; @@ -2155,21 +2155,21 @@ void nv2a_renderer::read_vertex(address_space & space, offs_t address, vertex_nv d = d + 4; } break; - case NV2A_VTXBUF_TYPE_UBYTE: + case NV2A_VTXBUF_TYPE::UBYTE: u = space.read_dword(address + 0); for (c = l-1; c >= 0; c--) { vertex.attribute[attrib].fv[c] = (u & 0xff) / 255.0; u = u >> 8; } break; - case NV2A_VTXBUF_TYPE_UBYTE2: + case NV2A_VTXBUF_TYPE::UBYTE2: u = space.read_dword(address + 0); for (c = 0; c < l; c++) { vertex.attribute[attrib].fv[c] = (u & 0xff) / 255.0; u = u >> 8; } break; - case NV2A_VTXBUF_TYPE_UNKNOWN_6: // ??? + case NV2A_VTXBUF_TYPE::UNKNOWN_6: // ??? u = space.read_dword(address + 0); vertex.attribute[attrib].fv[0] = (u & 0xff) / 255.0; // b vertex.attribute[attrib].fv[1] = ((u & 0xff00) >> 8) / 255.0; // g @@ -2303,13 +2303,13 @@ void nv2a_renderer::convert_vertices_poly(vertex_nv *source, vertex_t *destinati for (m = 0; m < count; m++) { destination[m].x = source[m].attribute[0].fv[0]; destination[m].y = source[m].attribute[0].fv[1]; - for (u = PARAM_COLOR_B; u <= PARAM_COLOR_A; u++) // 0=b 1=g 2=r 3=a + for (u = (int)VERTEX_PARAMETER::PARAM_COLOR_B; u <= (int)VERTEX_PARAMETER::PARAM_COLOR_A; u++) // 0=b 1=g 2=r 3=a destination[m].p[u] = source[m].attribute[3].fv[u]; for (u = 0; u < 4; u++) { - destination[m].p[PARAM_TEXTURE0_U + u * 2] = source[m].attribute[9 + u].fv[0]; - destination[m].p[PARAM_TEXTURE0_V + u * 2] = source[m].attribute[9 + u].fv[1]; + destination[m].p[(int)VERTEX_PARAMETER::PARAM_TEXTURE0_U + u * 2] = source[m].attribute[9 + u].fv[0]; + destination[m].p[(int)VERTEX_PARAMETER::PARAM_TEXTURE0_V + u * 2] = source[m].attribute[9 + u].fv[1]; } - destination[m].p[PARAM_Z] = 0xffffff; + destination[m].p[(int)VERTEX_PARAMETER::PARAM_Z] = 0xffffff; } } else { @@ -2320,13 +2320,13 @@ void nv2a_renderer::convert_vertices_poly(vertex_nv *source, vertex_t *destinati for (m = 0; m < count; m++) { destination[m].x = vert[m].attribute[0].fv[0]; destination[m].y = vert[m].attribute[0].fv[1]; - for (u = PARAM_COLOR_B; u <= PARAM_COLOR_A; u++) // 0=b 1=g 2=r 3=a + for (u = (int)VERTEX_PARAMETER::PARAM_COLOR_B; u <= (int)VERTEX_PARAMETER::PARAM_COLOR_A; u++) // 0=b 1=g 2=r 3=a destination[m].p[u] = vert[m].attribute[3].fv[u]; for (u = 0; u < 4; u++) { - destination[m].p[PARAM_TEXTURE0_U + u * 2] = vert[m].attribute[9 + u].fv[0]; - destination[m].p[PARAM_TEXTURE0_V + u * 2] = vert[m].attribute[9 + u].fv[1]; + destination[m].p[(int)VERTEX_PARAMETER::PARAM_TEXTURE0_U + u * 2] = vert[m].attribute[9 + u].fv[0]; + destination[m].p[(int)VERTEX_PARAMETER::PARAM_TEXTURE0_V + u * 2] = vert[m].attribute[9 + u].fv[1]; } - destination[m].p[PARAM_Z] = vert[m].attribute[0].fv[2]; + destination[m].p[(int)VERTEX_PARAMETER::PARAM_Z] = vert[m].attribute[0].fv[2]; } } } @@ -2343,7 +2343,7 @@ void nv2a_renderer::clear_depth_buffer(int what, UINT32 value) else m = 1; if (what == 3) { - if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) { + if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT::Z24S8) { UINT32 *p, *pl; int x, y; @@ -2357,7 +2357,7 @@ void nv2a_renderer::clear_depth_buffer(int what, UINT32 value) pl = pl + pitch_rendertarget / 4; } } - else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) { + else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT::Z16) { UINT16 *p, *pl; int x, y; @@ -2373,7 +2373,7 @@ void nv2a_renderer::clear_depth_buffer(int what, UINT32 value) } } else { - if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) { + if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT::Z24S8) { UINT32 mask; UINT32 *p, *pl; int x, y; @@ -2393,7 +2393,7 @@ void nv2a_renderer::clear_depth_buffer(int what, UINT32 value) pl = pl + pitch_rendertarget / 4; } } - else if ((depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) && (what == 1)) { + else if ((depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT::Z16) && (what == 1)) { UINT16 *p, *pl; int x, y; @@ -2429,13 +2429,14 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN } if (maddress == 0x1810) { // draw vertices - int offset, count, type; + int offset, count; + NV2A_BEGIN_END type; UINT32 n; render_delegate renderspans; offset = data & 0xffffff; count = (data >> 24) & 0xff; - type = channel[chanel][subchannel].object.method[0x17fc / 4]; + type = (NV2A_BEGIN_END)channel[chanel][subchannel].object.method[0x17fc / 4]; if (((channel[chanel][subchannel].object.method[0x1e60 / 4] & 7) > 0) && (combiner.used != 0)) { renderspans = render_delegate(FUNC(nv2a_renderer::render_register_combiners), this); } @@ -2447,7 +2448,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN #ifdef LOG_NV2A printf("vertex %d %d %d\n\r", type, offset, count); #endif - if (type == nv2a_renderer::QUADS) { + if (type == NV2A_BEGIN_END::QUADS) { for (n = 0; n <= count; n += 4) { vertex_nv vert[4]; vertex_t xy[4]; @@ -2458,7 +2459,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN wait(); } } - else if (type == nv2a_renderer::TRIANGLE_FAN) { + else if (type == NV2A_BEGIN_END::TRIANGLE_FAN) { vertex_nv vert[3]; vertex_t xy[3]; @@ -2473,7 +2474,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN wait(); } } - else if (type == nv2a_renderer::TRIANGLE_STRIP) { + else if (type == NV2A_BEGIN_END::TRIANGLE_STRIP) { vertex_nv vert[4]; vertex_t xy[4]; @@ -2494,7 +2495,8 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN countlen--; } if ((maddress == 0x1800) || (maddress == 0x1808)) { - UINT32 type, n; + NV2A_BEGIN_END type; + UINT32 n; render_delegate renderspans; int mult; @@ -2513,8 +2515,8 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN // vertices are selected from the vertex buffer using an array of indexes // each dword after 1800 contains two 16 bit index values to select the vartices // each dword after 1808 contains a 32 bit index value to select the vartices - type = channel[chanel][subchannel].object.method[0x17fc / 4]; - if (type == nv2a_renderer::QUADS) { + type = (NV2A_BEGIN_END)channel[chanel][subchannel].object.method[0x17fc / 4]; + if (type == NV2A_BEGIN_END::QUADS) { while (1) { vertex_nv vert[4]; vertex_t xy[4]; @@ -2533,7 +2535,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN wait(); } } - else if (type == nv2a_renderer::TRIANGLE_FAN) { + else if (type == NV2A_BEGIN_END::TRIANGLE_FAN) { if ((countlen * mult + indexesleft_count) >= 3) { vertex_nv vert[3]; vertex_t xy[3]; @@ -2561,7 +2563,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN } } } - else if (type == nv2a_renderer::TRIANGLES) { + else if (type == NV2A_BEGIN_END::TRIANGLES) { while (1) { vertex_nv vert[3]; vertex_t xy[3]; @@ -2580,7 +2582,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN wait(); } } - else if (type == nv2a_renderer::TRIANGLE_STRIP) { + else if (type == NV2A_BEGIN_END::TRIANGLE_STRIP) { if ((countlen * mult + indexesleft_count) >= 3) { vertex_nv vert[4]; vertex_t xy[4]; @@ -2632,7 +2634,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN } if (maddress == 0x1818) { int n; - int type; + NV2A_BEGIN_END type; render_delegate renderspans; if (((channel[chanel][subchannel].object.method[0x1e60 / 4] & 7) > 0) && (combiner.used != 0)) { @@ -2648,8 +2650,8 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN // then countlen number of dwords with 1818 // end with 17fc primitive type 0 // at 1760 16 words specify the vertex format:for each possible vertex attribute the number of components (0=not present) and type of each - type = channel[chanel][subchannel].object.method[0x17fc / 4]; - if (type == nv2a_renderer::TRIANGLE_FAN) { + type = (NV2A_BEGIN_END)channel[chanel][subchannel].object.method[0x17fc / 4]; + if (type == NV2A_BEGIN_END::TRIANGLE_FAN) { vertex_nv vert[3]; vertex_t xy[3]; int c; @@ -2677,7 +2679,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN wait(); } } - else if (type == nv2a_renderer::TRIANGLES) { + else if (type == NV2A_BEGIN_END::TRIANGLES) { while (countlen > 0) { vertex_nv vert[3]; vertex_t xy[3]; @@ -2696,7 +2698,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN wait(); } } - else if (type == nv2a_renderer::TRIANGLE_STRIP) { + else if (type == NV2A_BEGIN_END::TRIANGLE_STRIP) { vertex_nv vert[4]; vertex_t xy[4]; int c; @@ -2724,7 +2726,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN wait(); } } - else if (type == nv2a_renderer::QUADS) { + else if (type == NV2A_BEGIN_END::QUADS) { while (countlen > 0) { vertex_nv vert[4]; vertex_t xy[4]; @@ -2743,7 +2745,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN wait(); } } - else if (type == nv2a_renderer::QUAD_STRIP) { + else if (type == NV2A_BEGIN_END::QUAD_STRIP) { vertex_nv vert[4]; vertex_t xy[4]; int c; @@ -2789,22 +2791,22 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN int bit = method - 0x1760 / 4; vertexbuffer_stride[bit] = (data >> 8) & 255; - vertexbuffer_kind[bit] = data & 15; + vertexbuffer_kind[bit] = (NV2A_VTXBUF_TYPE)(data & 15); vertexbuffer_size[bit] = (data >> 4) & 15; switch (vertexbuffer_kind[bit]) { - case NV2A_VTXBUF_TYPE_UBYTE2: + case NV2A_VTXBUF_TYPE::UBYTE2: vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 1) >> 2; break; - case NV2A_VTXBUF_TYPE_FLOAT: + case NV2A_VTXBUF_TYPE::FLOAT: vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 4) >> 2; break; - case NV2A_VTXBUF_TYPE_UBYTE: + case NV2A_VTXBUF_TYPE::UBYTE: vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 1) >> 2; break; - case NV2A_VTXBUF_TYPE_USHORT: + case NV2A_VTXBUF_TYPE::USHORT: vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 2) >> 2; break; - case NV2A_VTXBUF_TYPE_UNKNOWN_6: + case NV2A_VTXBUF_TYPE::UNKNOWN_6: vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 4) >> 2; break; default: @@ -2906,19 +2908,19 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN log2height_rendertarget = (data >> 24) & 255; log2width_rendertarget = (data >> 16) & 255; antialiasing_rendertarget = (data >> 12) & 15; - type_rendertarget = (data >> 8) & 15; - depthformat_rendertarget = (data >> 4) & 15; - colorformat_rendertarget = (data >> 0) & 15; + type_rendertarget = (NV2A_RT_TYPE)((data >> 8) & 15); + depthformat_rendertarget = (NV2A_RT_DEPTH_FORMAT)((data >> 4) & 15); + colorformat_rendertarget = (NV2A_COLOR_FORMAT)((data >> 0) & 15); switch (colorformat_rendertarget) { - case NV2A_COLOR_FORMAT_R5G6B5: + case NV2A_COLOR_FORMAT::R5G6B5: bytespixel_rendertarget = 2; break; - case NV2A_COLOR_FORMAT_X8R8G8B8_Z8R8G8B8: - case NV2A_COLOR_FORMAT_X8R8G8B8_X8R8G8B8: - case NV2A_COLOR_FORMAT_A8R8G8B8: + case NV2A_COLOR_FORMAT::X8R8G8B8_Z8R8G8B8: + case NV2A_COLOR_FORMAT::X8R8G8B8_X8R8G8B8: + case NV2A_COLOR_FORMAT::A8R8G8B8: bytespixel_rendertarget = 4; break; - case NV2A_COLOR_FORMAT_B8: + case NV2A_COLOR_FORMAT::B8: bytespixel_rendertarget = 1; break; default: @@ -2997,7 +2999,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN alpha_test_enabled = data != 0; } if (maddress == 0x033c) { - alpha_func = data; + alpha_func = (NV2A_COMPARISON_OP)data; } if (maddress == 0x0340) { alpha_reference = data; @@ -3012,7 +3014,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN depth_test_enabled = data != 0; } if (maddress == 0x0354) { - depth_function = data; + depth_function = (NV2A_COMPARISON_OP)data; } if (maddress == 0x0358) { //color_mask = data; @@ -3036,7 +3038,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN stencil_test_enabled = data != 0; } if (maddress == 0x0364) { - stencil_func = data; + stencil_func = (NV2A_COMPARISON_OP)data; } if (maddress == 0x0368) { if (data > 255) @@ -3047,25 +3049,25 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN stencil_mask = data; } if (maddress == 0x0370) { - stencil_op_fail = data; + stencil_op_fail = (NV2A_STENCIL_OP)data; } if (maddress == 0x0374) { - stencil_op_zfail = data; + stencil_op_zfail = (NV2A_STENCIL_OP)data; } if (maddress == 0x0378) { - stencil_op_zpass = data; + stencil_op_zpass = (NV2A_STENCIL_OP)data; } if (maddress == 0x0344) { - blend_function_source = data; + blend_function_source = (NV2A_BLEND_FACTOR)data; } if (maddress == 0x0348) { - blend_function_destination = data; + blend_function_destination = (NV2A_BLEND_FACTOR)data; } if (maddress == 0x034c) { blend_color = data; } if (maddress == 0x0350) { - blend_equation = data; + blend_equation = (NV2A_BLEND_EQUATION)data; } if (maddress == 0x0d40) { if (data != 0) @@ -3075,7 +3077,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN logical_operation_enabled = data != 0; } if (maddress == 0x0d44) { - logical_operation = data; + logical_operation = (NV2A_LOGIC_OP)data; } // Texture Units if ((maddress >= 0x1b00) && (maddress < 0x1c00)) { @@ -3116,7 +3118,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN texture[unit].sizev = 1 << basesizev; texture[unit].sizew = 1 << basesizew; texture[unit].dilate = dilatechose[(basesizeu << 4) + basesizev]; - texture[unit].format = format; + texture[unit].format = (NV2A_TEX_FORMAT)format; if (debug_grab_texttype == format) { FILE *f; int written;