diff options
author | Vas Crabb <vas@vastheman.com> | 2018-05-23 17:25:17 +1000 |
---|---|---|
committer | Vas Crabb <vas@vastheman.com> | 2018-05-23 17:25:17 +1000 |
commit | 5e856f77f6f45e58c573f2d15b7b052983c9eec8 (patch) | |
tree | 0a66c9384b581c372dfe104128571181fbcd7c3d /src/devices/video/voodoo.h | |
parent | 770563daacd5164ac79a7c52e62df1e305a2f3da (diff) |
voodoo: deal with needing to be able to configure screen/CPU or set them at start in a safer way
devfind: revert previous change - if finders aren't set in stone after device_resolve_objects it's going to lead to all kinds of hard-to-diagnose bugs (I'll add more checks for this some time after release)
(nw) also clean up rotting tabulation
Diffstat (limited to 'src/devices/video/voodoo.h')
-rw-r--r-- | src/devices/video/voodoo.h | 481 |
1 files changed, 245 insertions, 236 deletions
diff --git a/src/devices/video/voodoo.h b/src/devices/video/voodoo.h index 23ae8b99ae1..e6219e1c091 100644 --- a/src/devices/video/voodoo.h +++ b/src/devices/video/voodoo.h @@ -1468,12 +1468,15 @@ public: void set_fbmem(int value) { m_fbmem = value; } void set_tmumem(int value1, int value2) { m_tmumem0 = value1; m_tmumem1 = value2; } - template <typename T> void set_screen_tag(T &&tag) { m_screen.set_tag(std::forward<T>(tag)); } - template <typename T> void set_cpu_tag(T &&tag) { m_cpu.set_tag(std::forward<T>(tag)); } + template <typename T> void set_screen_tag(T &&tag) { m_screen_finder.set_tag(std::forward<T>(tag)); } + template <typename T> void set_cpu_tag(T &&tag) { m_cpu_finder.set_tag(std::forward<T>(tag)); } template <class Object> devcb_base &set_vblank_callback(Object &&cb) { return m_vblank.set_callback(std::forward<Object>(cb)); } template <class Object> devcb_base &set_stall_callback(Object &&cb) { return m_stall.set_callback(std::forward<Object>(cb)); } template <class Object> devcb_base &set_pciint_callback(Object &&cb) { return m_pciint.set_callback(std::forward<Object>(cb)); } + void set_screen(screen_device &screen) { assert(!m_screen); m_screen = &screen; } + void set_cpu(cpu_device &cpu) { assert(!m_cpu); m_cpu = &cpu; } + DECLARE_READ32_MEMBER( voodoo_r ); DECLARE_WRITE32_MEMBER( voodoo_w ); @@ -1500,6 +1503,7 @@ protected: voodoo_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint8_t vdt); // device-level overrides + virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_stop() override; virtual void device_reset() override; @@ -1508,40 +1512,40 @@ protected: struct voodoo_stats { - uint8_t lastkey; /* last key state */ - uint8_t display; /* display stats? */ - int32_t swaps; /* total swaps */ - int32_t stalls; /* total stalls */ - int32_t total_triangles; /* total triangles */ - int32_t total_pixels_in; /* total pixels in */ - int32_t total_pixels_out; /* total pixels out */ - int32_t total_chroma_fail; /* total chroma fail */ - int32_t total_zfunc_fail; /* total z func fail */ - int32_t total_afunc_fail; /* total a func fail */ - int32_t total_clipped; /* total clipped */ - int32_t total_stippled; /* total stippled */ - int32_t lfb_writes; /* LFB writes */ - int32_t lfb_reads; /* LFB reads */ - int32_t reg_writes; /* register writes */ - int32_t reg_reads; /* register reads */ - int32_t tex_writes; /* texture writes */ - int32_t texture_mode[16]; /* 16 different texture modes */ - uint8_t render_override; /* render override */ - char buffer[1024]; /* string */ + uint8_t lastkey; // last key state + uint8_t display; // display stats? + int32_t swaps; // total swaps + int32_t stalls; // total stalls + int32_t total_triangles; // total triangles + int32_t total_pixels_in; // total pixels in + int32_t total_pixels_out; // total pixels out + int32_t total_chroma_fail; // total chroma fail + int32_t total_zfunc_fail; // total z func fail + int32_t total_afunc_fail; // total a func fail + int32_t total_clipped; // total clipped + int32_t total_stippled; // total stippled + int32_t lfb_writes; // LFB writes + int32_t lfb_reads; // LFB reads + int32_t reg_writes; // register writes + int32_t reg_reads; // register reads + int32_t tex_writes; // texture writes + int32_t texture_mode[16]; // 16 different texture modes + uint8_t render_override; // render override + char buffer[1024]; // string }; /* note that this structure is an even 64 bytes long */ struct stats_block { - int32_t pixels_in; /* pixels in statistic */ - int32_t pixels_out; /* pixels out statistic */ - int32_t chroma_fail; /* chroma test fail statistic */ - int32_t zfunc_fail; /* z function test fail statistic */ - int32_t afunc_fail; /* alpha function test fail statistic */ - int32_t clip_fail; /* clipping fail statistic */ - int32_t stipple_count; /* stipple statistic */ - int32_t filler[64/4 - 7]; /* pad this structure to 64 bytes */ + int32_t pixels_in; // pixels in statistic + int32_t pixels_out; // pixels out statistic + int32_t chroma_fail; // chroma test fail statistic + int32_t zfunc_fail; // z function test fail statistic + int32_t afunc_fail; // alpha function test fail statistic + int32_t clip_fail; // clipping fail statistic + int32_t stipple_count; // stipple statistic + int32_t filler[64/4 - 7]; // pad this structure to 64 bytes }; @@ -1556,36 +1560,36 @@ protected: int32_t items() const; int32_t space() const { return size - 1 - items(); } - uint32_t * base; /* base of the FIFO */ - int32_t size; /* size of the FIFO */ - int32_t in; /* input pointer */ - int32_t out; /* output pointer */ + uint32_t * base; // base of the FIFO + int32_t size; // size of the FIFO + int32_t in; // input pointer + int32_t out; // output pointer }; struct cmdfifo_info { - uint8_t enable; /* enabled? */ - uint8_t count_holes; /* count holes? */ - uint32_t base; /* base address in framebuffer RAM */ - uint32_t end; /* end address in framebuffer RAM */ - uint32_t rdptr; /* current read pointer */ - uint32_t amin; /* minimum address */ - uint32_t amax; /* maximum address */ - uint32_t depth; /* current depth */ - uint32_t holes; /* number of holes */ + uint8_t enable; // enabled? + uint8_t count_holes; // count holes? + uint32_t base; // base address in framebuffer RAM + uint32_t end; // end address in framebuffer RAM + uint32_t rdptr; // current read pointer + uint32_t amin; // minimum address + uint32_t amax; // maximum address + uint32_t depth; // current depth + uint32_t holes; // number of holes }; struct pci_state { - fifo_state fifo; /* PCI FIFO */ - uint32_t init_enable; /* initEnable value */ - uint8_t stall_state; /* state of the system if we're stalled */ - uint8_t op_pending; /* true if an operation is pending */ - attotime op_end_time; /* time when the pending operation ends */ - emu_timer * continue_timer; /* timer to use to continue processing */ - uint32_t fifo_mem[64*2]; /* memory backing the PCI FIFO */ + fifo_state fifo; // PCI FIFO + uint32_t init_enable; // initEnable value + uint8_t stall_state; // state of the system if we're stalled + uint8_t op_pending; // true if an operation is pending + attotime op_end_time; // time when the pending operation ends + emu_timer * continue_timer; // timer to use to continue processing + uint32_t fifo_mem[64*2]; // memory backing the PCI FIFO }; @@ -1604,51 +1608,51 @@ protected: void write(offs_t regnum, uint32_t data); void update(); - uint8_t dirty; /* is the texel lookup dirty? */ - voodoo_reg * reg; /* pointer to our registers */ - int32_t ir[4], ig[4], ib[4]; /* I values for R,G,B */ - int32_t qr[4], qg[4], qb[4]; /* Q values for R,G,B */ - int32_t y[16]; /* Y values */ - rgb_t * palette; /* pointer to associated RGB palette */ - rgb_t * palettea; /* pointer to associated ARGB palette */ - rgb_t texel[256]; /* texel lookup */ + uint8_t dirty; // is the texel lookup dirty? + voodoo_reg * reg; // pointer to our registers + int32_t ir[4], ig[4], ib[4]; // I values for R,G,B + int32_t qr[4], qg[4], qb[4]; // Q values for R,G,B + int32_t y[16]; // Y values + rgb_t * palette; // pointer to associated RGB palette + rgb_t * palettea; // pointer to associated ARGB palette + rgb_t texel[256]; // texel lookup }; - uint8_t * ram; /* pointer to our RAM */ - uint32_t mask; /* mask to apply to pointers */ - voodoo_reg * reg; /* pointer to our register base */ - uint32_t regdirty; /* true if the LOD/mode/base registers have changed */ + uint8_t * ram; // pointer to our RAM + uint32_t mask; // mask to apply to pointers + voodoo_reg * reg; // pointer to our register base + uint32_t regdirty; // true if the LOD/mode/base registers have changed - uint32_t texaddr_mask; /* mask for texture address */ - uint8_t texaddr_shift; /* shift for texture address */ + uint32_t texaddr_mask; // mask for texture address + uint8_t texaddr_shift; // shift for texture address - int64_t starts, startt; /* starting S,T (14.18) */ - int64_t startw; /* starting W (2.30) */ - int64_t dsdx, dtdx; /* delta S,T per X */ - int64_t dwdx; /* delta W per X */ - int64_t dsdy, dtdy; /* delta S,T per Y */ - int64_t dwdy; /* delta W per Y */ + int64_t starts, startt; // starting S,T (14.18) + int64_t startw; // starting W (2.30) + int64_t dsdx, dtdx; // delta S,T per X + int64_t dwdx; // delta W per X + int64_t dsdy, dtdy; // delta S,T per Y + int64_t dwdy; // delta W per Y - int32_t lodmin, lodmax; /* min, max LOD values */ - int32_t lodbias; /* LOD bias */ - uint32_t lodmask; /* mask of available LODs */ - uint32_t lodoffset[9]; /* offset of texture base for each LOD */ - int32_t detailmax; /* detail clamp */ - int32_t detailbias; /* detail bias */ - uint8_t detailscale; /* detail scale */ + int32_t lodmin, lodmax; // min, max LOD values + int32_t lodbias; // LOD bias + uint32_t lodmask; // mask of available LODs + uint32_t lodoffset[9]; // offset of texture base for each LOD + int32_t detailmax; // detail clamp + int32_t detailbias; // detail bias + uint8_t detailscale; // detail scale - uint32_t wmask; /* mask for the current texture width */ - uint32_t hmask; /* mask for the current texture height */ + uint32_t wmask; // mask for the current texture width + uint32_t hmask; // mask for the current texture height - uint32_t bilinear_mask; /* mask for bilinear resolution (0xf0 for V1, 0xff for V2) */ + uint32_t bilinear_mask; // mask for bilinear resolution (0xf0 for V1, 0xff for V2) - ncc_table ncc[2]; /* two NCC tables */ + ncc_table ncc[2]; // two NCC tables - rgb_t * lookup; /* currently selected lookup */ - rgb_t * texel[16]; /* texel lookups for each format */ + rgb_t * lookup; // currently selected lookup + rgb_t * texel[16]; // texel lookups for each format - rgb_t palette[256]; /* palette lookup table */ - rgb_t palettea[256]; /* palette+alpha lookup table */ + rgb_t palette[256]; // palette lookup table + rgb_t palettea[256]; // palette+alpha lookup table }; @@ -1656,14 +1660,14 @@ protected: { void init(); - rgb_t rgb332[256]; /* RGB 3-3-2 lookup table */ - rgb_t alpha8[256]; /* alpha 8-bit lookup table */ - rgb_t int8[256]; /* intensity 8-bit lookup table */ - rgb_t ai44[256]; /* alpha, intensity 4-4 lookup table */ + rgb_t rgb332[256]; // RGB 3-3-2 lookup table + rgb_t alpha8[256]; // alpha 8-bit lookup table + rgb_t int8[256]; // intensity 8-bit lookup table + rgb_t ai44[256]; // alpha, intensity 4-4 lookup table - rgb_t* rgb565; /* RGB 5-6-5 lookup table */ - rgb_t argb1555[65536]; /* ARGB 1-5-5-5 lookup table */ - rgb_t argb4444[65536]; /* ARGB 4-4-4-4 lookup table */ + rgb_t* rgb565; // RGB 5-6-5 lookup table + rgb_t argb1555[65536]; // ARGB 1-5-5-5 lookup table + rgb_t argb4444[65536]; // ARGB 4-4-4-4 lookup table }; @@ -1671,78 +1675,78 @@ protected: { struct setup_vertex { - float x, y; /* X, Y coordinates */ - float z, wb; /* Z and broadcast W values */ - float r, g, b, a; /* A, R, G, B values */ - float s0, t0, w0; /* W, S, T for TMU 0 */ - float s1, t1, w1; /* W, S, T for TMU 1 */ + float x, y; // X, Y coordinates + float z, wb; // Z and broadcast W values + float r, g, b, a; // A, R, G, B values + float s0, t0, w0; // W, S, T for TMU 0 + float s1, t1, w1; // W, S, T for TMU 1 }; - uint8_t * ram; /* pointer to frame buffer RAM */ - uint32_t mask; /* mask to apply to pointers */ - uint32_t rgboffs[3]; /* word offset to 3 RGB buffers */ - uint32_t auxoffs; /* word offset to 1 aux buffer */ - - uint8_t frontbuf; /* front buffer index */ - uint8_t backbuf; /* back buffer index */ - uint8_t swaps_pending; /* number of pending swaps */ - uint8_t video_changed; /* did the frontbuffer video change? */ - - uint32_t yorigin; /* Y origin subtract value */ - uint32_t lfb_base; /* base of LFB in memory */ - uint8_t lfb_stride; /* stride of LFB accesses in bits */ - - uint32_t width; /* width of current frame buffer */ - uint32_t height; /* height of current frame buffer */ - uint32_t xoffs; /* horizontal offset (back porch) */ - uint32_t yoffs; /* vertical offset (back porch) */ - uint32_t vsyncstart; /* vertical sync start scanline */ - uint32_t vsyncstop; // veritcal sync stop - uint32_t rowpixels; /* pixels per row */ - uint32_t tile_width; /* width of video tiles */ - uint32_t tile_height; /* height of video tiles */ - uint32_t x_tiles; /* number of tiles in the X direction */ - - emu_timer * vsync_stop_timer; /* VBLANK End timer */ - emu_timer * vsync_start_timer; /* VBLANK timer */ - uint8_t vblank; /* VBLANK state */ - uint8_t vblank_count; /* number of VBLANKs since last swap */ - uint8_t vblank_swap_pending; /* a swap is pending, waiting for a vblank */ - uint8_t vblank_swap; /* swap when we hit this count */ - uint8_t vblank_dont_swap; /* don't actually swap when we hit this point */ + uint8_t * ram; // pointer to frame buffer RAM + uint32_t mask; // mask to apply to pointers + uint32_t rgboffs[3]; // word offset to 3 RGB buffers + uint32_t auxoffs; // word offset to 1 aux buffer + + uint8_t frontbuf; // front buffer index + uint8_t backbuf; // back buffer index + uint8_t swaps_pending; // number of pending swaps + uint8_t video_changed; // did the frontbuffer video change? + + uint32_t yorigin; // Y origin subtract value + uint32_t lfb_base; // base of LFB in memory + uint8_t lfb_stride; // stride of LFB accesses in bits + + uint32_t width; // width of current frame buffer + uint32_t height; // height of current frame buffer + uint32_t xoffs; // horizontal offset (back porch) + uint32_t yoffs; // vertical offset (back porch) + uint32_t vsyncstart; // vertical sync start scanline + uint32_t vsyncstop; // veritcal sync stop + uint32_t rowpixels; // pixels per row + uint32_t tile_width; // width of video tiles + uint32_t tile_height; // height of video tiles + uint32_t x_tiles; // number of tiles in the X direction + + emu_timer * vsync_stop_timer; // VBLANK End timer + emu_timer * vsync_start_timer; // VBLANK timer + uint8_t vblank; // VBLANK state + uint8_t vblank_count; // number of VBLANKs since last swap + uint8_t vblank_swap_pending; // a swap is pending, waiting for a vblank + uint8_t vblank_swap; // swap when we hit this count + uint8_t vblank_dont_swap; // don't actually swap when we hit this point /* triangle setup info */ - uint8_t cheating_allowed; /* allow cheating? */ - int32_t sign; /* triangle sign */ - int16_t ax, ay; /* vertex A x,y (12.4) */ - int16_t bx, by; /* vertex B x,y (12.4) */ - int16_t cx, cy; /* vertex C x,y (12.4) */ - int32_t startr, startg, startb, starta; /* starting R,G,B,A (12.12) */ - int32_t startz; /* starting Z (20.12) */ - int64_t startw; /* starting W (16.32) */ - int32_t drdx, dgdx, dbdx, dadx; /* delta R,G,B,A per X */ - int32_t dzdx; /* delta Z per X */ - int64_t dwdx; /* delta W per X */ - int32_t drdy, dgdy, dbdy, dady; /* delta R,G,B,A per Y */ - int32_t dzdy; /* delta Z per Y */ - int64_t dwdy; /* delta W per Y */ - - stats_block lfb_stats; /* LFB-access statistics */ - - uint8_t sverts; /* number of vertices ready */ - setup_vertex svert[3]; /* 3 setup vertices */ - - fifo_state fifo; /* framebuffer memory fifo */ - cmdfifo_info cmdfifo[2]; /* command FIFOs */ - - uint8_t fogblend[64]; /* 64-entry fog table */ - uint8_t fogdelta[64]; /* 64-entry fog table */ - uint8_t fogdelta_mask; /* mask for for delta (0xff for V1, 0xfc for V2) */ - - rgb_t pen[65536]; /* mapping from pixels to pens */ - rgb_t clut[512]; /* clut gamma data */ - uint8_t clut_dirty; /* do we need to recompute? */ - rgb_t rgb565[65536]; /* RGB 5-6-5 lookup table */ + uint8_t cheating_allowed; // allow cheating? + int32_t sign; // triangle sign + int16_t ax, ay; // vertex A x,y (12.4) + int16_t bx, by; // vertex B x,y (12.4) + int16_t cx, cy; // vertex C x,y (12.4) + int32_t startr, startg, startb, starta; // starting R,G,B,A (12.12) + int32_t startz; // starting Z (20.12) + int64_t startw; // starting W (16.32) + int32_t drdx, dgdx, dbdx, dadx; // delta R,G,B,A per X + int32_t dzdx; // delta Z per X + int64_t dwdx; // delta W per X + int32_t drdy, dgdy, dbdy, dady; // delta R,G,B,A per Y + int32_t dzdy; // delta Z per Y + int64_t dwdy; // delta W per Y + + stats_block lfb_stats; // LFB-access statistics + + uint8_t sverts; // number of vertices ready */ + setup_vertex svert[3]; // 3 setup vertices */ + + fifo_state fifo; // framebuffer memory fifo */ + cmdfifo_info cmdfifo[2]; // command FIFOs */ + + uint8_t fogblend[64]; // 64-entry fog table */ + uint8_t fogdelta[64]; // 64-entry fog table */ + uint8_t fogdelta_mask; // mask for for delta (0xff for V1, 0xfc for V2) */ + + rgb_t pen[65536]; // mapping from pixels to pens */ + rgb_t clut[512]; // clut gamma data */ + uint8_t clut_dirty; // do we need to recompute? */ + rgb_t rgb565[65536]; // RGB 5-6-5 lookup table */ }; @@ -1751,8 +1755,8 @@ protected: void data_w(uint8_t regum, uint8_t data); void data_r(uint8_t regnum); - uint8_t reg[8]; /* 8 registers */ - uint8_t read_result; /* pending read result */ + uint8_t reg[8]; // 8 registers + uint8_t read_result; // pending read result }; @@ -1760,19 +1764,19 @@ protected: { uint32_t compute_hash() const; - raster_info * next; /* pointer to next entry with the same hash */ - poly_draw_scanline_func callback; /* callback pointer */ - bool is_generic; /* true if this is one of the generic rasterizers */ - uint8_t display; /* display index */ - uint32_t hits; /* how many hits (pixels) we've used this for */ - uint32_t polys; /* how many polys we've used this for */ - uint32_t eff_color_path; /* effective fbzColorPath value */ - uint32_t eff_alpha_mode; /* effective alphaMode value */ - uint32_t eff_fog_mode; /* effective fogMode value */ - uint32_t eff_fbz_mode; /* effective fbzMode value */ - uint32_t eff_tex_mode_0; /* effective textureMode value for TMU #0 */ - uint32_t eff_tex_mode_1; /* effective textureMode value for TMU #1 */ - uint32_t hash; + raster_info * next; // pointer to next entry with the same hash + poly_draw_scanline_func callback; // callback pointer + bool is_generic; // true if this is one of the generic rasterizers + uint8_t display; // display index + uint32_t hits; // how many hits (pixels) we've used this for + uint32_t polys; // how many polys we've used this for + uint32_t eff_color_path; // effective fbzColorPath value + uint32_t eff_alpha_mode; // effective alphaMode value + uint32_t eff_fog_mode; // effective fogMode value + uint32_t eff_fbz_mode; // effective fbzMode value + uint32_t eff_tex_mode_0; // effective textureMode value for TMU #0 + uint32_t eff_tex_mode_1; // effective textureMode value for TMU #1 + uint32_t hash; }; @@ -1781,31 +1785,31 @@ protected: struct banshee_info { - uint32_t io[0x40]; /* I/O registers */ - uint32_t agp[0x80]; /* AGP registers */ - uint8_t vga[0x20]; /* VGA registers */ - uint8_t crtc[0x27]; /* VGA CRTC registers */ - uint8_t seq[0x05]; /* VGA sequencer registers */ - uint8_t gc[0x05]; /* VGA graphics controller registers */ - uint8_t att[0x15]; /* VGA attribute registers */ - uint8_t attff; /* VGA attribute flip-flop */ - - uint32_t blt_regs[0x20]; /* 2D Blitter registers */ - uint32_t blt_dst_base; - uint32_t blt_dst_x; - uint32_t blt_dst_y; - uint32_t blt_dst_width; - uint32_t blt_dst_height; - uint32_t blt_dst_stride; - uint32_t blt_dst_bpp; - uint32_t blt_cmd; - uint32_t blt_src_base; - uint32_t blt_src_x; - uint32_t blt_src_y; - uint32_t blt_src_width; - uint32_t blt_src_height; - uint32_t blt_src_stride; - uint32_t blt_src_bpp; + uint32_t io[0x40]; // I/O registers + uint32_t agp[0x80]; // AGP registers + uint8_t vga[0x20]; // VGA registers + uint8_t crtc[0x27]; // VGA CRTC registers + uint8_t seq[0x05]; // VGA sequencer registers + uint8_t gc[0x05]; // VGA graphics controller registers + uint8_t att[0x15]; // VGA attribute registers + uint8_t attff; // VGA attribute flip-flop + + uint32_t blt_regs[0x20]; // 2D Blitter registers + uint32_t blt_dst_base; + uint32_t blt_dst_x; + uint32_t blt_dst_y; + uint32_t blt_dst_width; + uint32_t blt_dst_height; + uint32_t blt_dst_stride; + uint32_t blt_dst_bpp; + uint32_t blt_cmd; + uint32_t blt_src_base; + uint32_t blt_src_x; + uint32_t blt_src_y; + uint32_t blt_src_width; + uint32_t blt_src_height; + uint32_t blt_src_stride; + uint32_t blt_src_bpp; }; @@ -1871,40 +1875,43 @@ protected: // FIXME: this stuff should not be public public: - uint8_t index; /* index of board */ - optional_device<screen_device> m_screen; /* the screen we are acting on */ - optional_device<cpu_device> m_cpu; /* the CPU we interact with */ - const uint8_t vd_type; /* type of system */ - uint8_t chipmask; /* mask for which chips are available */ - uint32_t freq; /* operating frequency */ - attoseconds_t attoseconds_per_cycle; /* attoseconds per cycle */ - uint32_t extra_cycles; /* extra cycles not yet accounted for */ - int trigger; /* trigger used for stalling */ + optional_device<screen_device> m_screen_finder; // the screen we are acting on + optional_device<cpu_device> m_cpu_finder; // the CPU we interact with + + uint8_t index; // index of board + screen_device * m_screen; // the screen we are acting on + cpu_device * m_cpu; // the CPU we interact with + const uint8_t vd_type; // type of system + uint8_t chipmask; // mask for which chips are available + uint32_t freq; // operating frequency + attoseconds_t attoseconds_per_cycle; // attoseconds per cycle + uint32_t extra_cycles; // extra cycles not yet accounted for + int trigger; // trigger used for stalling - voodoo_reg reg[0x400]; /* raw registers */ - const uint8_t * regaccess; /* register access array */ - const char *const * regnames; /* register names array */ - uint8_t alt_regmap; /* enable alternate register map? */ + voodoo_reg reg[0x400]; // raw registers + const uint8_t * regaccess; // register access array + const char *const * regnames; // register names array + uint8_t alt_regmap; // enable alternate register map? - pci_state pci; /* PCI state */ - dac_state dac; /* DAC state */ + pci_state pci; // PCI state + dac_state dac; // DAC state - fbi_state fbi; /* FBI states */ - tmu_state tmu[MAX_TMU]; /* TMU states */ - tmu_shared_state tmushare; /* TMU shared state */ - banshee_info banshee; /* Banshee state */ + fbi_state fbi; // FBI states + tmu_state tmu[MAX_TMU]; // TMU states + tmu_shared_state tmushare; // TMU shared state + banshee_info banshee; // Banshee state - legacy_poly_manager * poly; /* polygon manager */ - stats_block * thread_stats; /* per-thread statistics */ + legacy_poly_manager * poly; // polygon manager + stats_block * thread_stats; // per-thread statistics - voodoo_stats stats; /* internal statistics */ + voodoo_stats stats; // internal statistics - offs_t last_status_pc; /* PC of last status description (for logging) */ - uint32_t last_status_value; /* value of last status read (for logging) */ + offs_t last_status_pc; // PC of last status description (for logging) + uint32_t last_status_value; // value of last status read (for logging) - int next_rasterizer; /* next rasterizer index */ - raster_info rasterizer[MAX_RASTERIZERS]; /* array of rasterizers */ - raster_info * raster_hash[RASTER_HASH_SIZE]; /* hash table of rasterizers */ + int next_rasterizer; // next rasterizer index + raster_info rasterizer[MAX_RASTERIZERS]; // array of rasterizers + raster_info * raster_hash[RASTER_HASH_SIZE]; // hash table of rasterizers bool send_config; uint32_t tmu_config; @@ -1970,24 +1977,25 @@ DECLARE_DEVICE_TYPE(VOODOO_3, voodoo_3_device) class voodoo_device::tmu_state::stw_t { public: - stw_t() {} + stw_t() { } stw_t(const stw_t& other) = default; stw_t &operator=(const stw_t& other) = default; - inline void set(s64 s, s64 t, s64 w) { m_st = _mm_set_pd(s, t); m_w = _mm_set1_pd(w); } - inline int is_w_neg() const { return _mm_comilt_sd(m_w, _mm_set1_pd(0.0)); } - inline void get_st_shiftr(s32 &s, s32 &t, const s32 &shift) const { + void set(s64 s, s64 t, s64 w) { m_st = _mm_set_pd(s, t); m_w = _mm_set1_pd(w); } + int is_w_neg() const { return _mm_comilt_sd(m_w, _mm_set1_pd(0.0)); } + void get_st_shiftr(s32 &s, s32 &t, const s32 &shift) const + { s64 tmpS = _mm_cvtsd_si64(_mm_shuffle_pd(m_st, _mm_setzero_pd(), 1)); s = tmpS >> shift; s64 tmpT = _mm_cvtsd_si64(m_st); t = tmpT >> shift; } - inline void add(const stw_t& other) + void add(const stw_t& other) { m_st = _mm_add_pd(m_st, other.m_st); m_w = _mm_add_pd(m_w, other.m_w); } - inline void calc_stow(s32 &sow, s32 &tow, int32_t &oowlog) const + void calc_stow(s32 &sow, s32 &tow, int32_t &oowlog) const { __m128d tmp = _mm_div_pd(m_st, m_w); // Allow for 8 bits of decimal in integer @@ -2015,9 +2023,10 @@ public: stw_t(const stw_t& other) = default; stw_t &operator=(const stw_t& other) = default; - inline void set(s64 s, s64 t, s64 w) { m_s = s; m_t = t; m_w = w; } - inline int is_w_neg() const { return (m_w < 0) ? 1 : 0; } - inline void get_st_shiftr(s32 &s, s32 &t, const s32 &shift) const { + void set(s64 s, s64 t, s64 w) { m_s = s; m_t = t; m_w = w; } + int is_w_neg() const { return (m_w < 0) ? 1 : 0; } + void get_st_shiftr(s32 &s, s32 &t, const s32 &shift) const + { s = m_s >> shift; t = m_t >> shift; } |