diff options
author | Vas Crabb <vas@vastheman.com> | 2019-10-25 18:16:49 +1100 |
---|---|---|
committer | Vas Crabb <vas@vastheman.com> | 2019-10-25 18:16:49 +1100 |
commit | b0ffbe067cab35f9dd1939be3ebececd5e8b23fe (patch) | |
tree | efe63304a437f0e873eab20d7ae2ee240680f29c | |
parent | 17d95ecab5740b72528e93f7f67eca96f4b6543c (diff) |
(nw) keep a persistent temporary palette buffer in bgfx chain manager, back out some unintentional screen changes
-rw-r--r-- | src/emu/screen.cpp | 7 | ||||
-rw-r--r-- | src/emu/screen.h | 20 | ||||
-rw-r--r-- | src/emu/video.h | 1 | ||||
-rw-r--r-- | src/osd/modules/render/bgfx/chainmanager.cpp | 12 | ||||
-rw-r--r-- | src/osd/modules/render/bgfx/chainmanager.h | 1 |
5 files changed, 17 insertions, 24 deletions
diff --git a/src/emu/screen.cpp b/src/emu/screen.cpp index 7a342662c56..a946fb22bd2 100644 --- a/src/emu/screen.cpp +++ b/src/emu/screen.cpp @@ -531,12 +531,7 @@ void screen_device::svg_renderer::rebuild_cache() //------------------------------------------------- screen_device::screen_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) - : screen_device(mconfig, SCREEN, tag, owner, clock) -{ -} - -screen_device::screen_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) - : device_t(mconfig, type, tag, owner, clock) + : device_t(mconfig, SCREEN, tag, owner, clock) , m_type(SCREEN_TYPE_RASTER) , m_orientation(ROT0) , m_phys_aspect(0U, 0U) diff --git a/src/emu/screen.h b/src/emu/screen.h index cf6201b4acf..426f3be2e08 100644 --- a/src/emu/screen.h +++ b/src/emu/screen.h @@ -186,7 +186,7 @@ public: set_type(type); set_color(color); } - virtual ~screen_device(); + ~screen_device(); // configuration readers screen_type_enum screen_type() const { return m_type; } @@ -228,7 +228,7 @@ public: /// \param [in] vbstart Index of first line in vertical blanking /// period after visible lines. /// \return Reference to device for method chaining. - virtual screen_device &set_raw(u32 pixclock, u16 htotal, u16 hbend, u16 hbstart, u16 vtotal, u16 vbend, u16 vbstart) + screen_device &set_raw(u32 pixclock, u16 htotal, u16 hbend, u16 hbstart, u16 vtotal, u16 vbend, u16 vbstart) { assert(pixclock != 0); m_clock = pixclock; @@ -393,7 +393,7 @@ public: // beam positioning and state int vpos() const; - virtual int hpos() const; + int hpos() const; DECLARE_READ_LINE_MEMBER(vblank) const { return (machine().time() < m_vblank_end_time) ? 1 : 0; } DECLARE_READ_LINE_MEMBER(hblank) const { int const curpos = hpos(); return (curpos < m_visarea.left() || curpos > m_visarea.right()) ? 1 : 0; } @@ -407,14 +407,14 @@ public: u64 frame_number() const { return m_frame_number; } // pixel-level access - virtual u32 pixel(s32 x, s32 y); - virtual void pixels(u32* buffer); + u32 pixel(s32 x, s32 y); + void pixels(u32* buffer); // updating int partial_updates() const { return m_partial_updates_this_frame; } - virtual bool update_partial(int scanline); - virtual void update_now(); - virtual void reset_partial_updates(); + bool update_partial(int scanline); + void update_now(); + void reset_partial_updates(); // additional helpers void register_vblank_callback(vblank_state_delegate vblank_callback); @@ -428,9 +428,7 @@ public: static constexpr int DEFAULT_FRAME_RATE = 60; static const attotime DEFAULT_FRAME_PERIOD; -protected: - screen_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); - +private: class svg_renderer; // timer IDs diff --git a/src/emu/video.h b/src/emu/video.h index 6015eecf146..b8b1c408773 100644 --- a/src/emu/video.h +++ b/src/emu/video.h @@ -38,7 +38,6 @@ constexpr int MAX_FRAMESKIP = FRAMESKIP_LEVELS - 2; class video_manager { friend class screen_device; - friend class variable_width_screen_device; public: // movie format options diff --git a/src/osd/modules/render/bgfx/chainmanager.cpp b/src/osd/modules/render/bgfx/chainmanager.cpp index 74300d55f97..e6d046db69c 100644 --- a/src/osd/modules/render/bgfx/chainmanager.cpp +++ b/src/osd/modules/render/bgfx/chainmanager.cpp @@ -476,9 +476,9 @@ uint32_t chain_manager::update_screen_textures(uint32_t view, render_primitive * { uint16_t palette_width = (uint16_t)std::min(prim.m_palette_length, 256U); uint16_t palette_height = (uint16_t)std::max((prim.m_palette_length + 255) / 256, 1U); - uint8_t palette_temp[palette_width * palette_height * 4]; - memcpy(palette_temp, prim.m_prim->texture.palette, prim.m_palette_length * 4); - const bgfx::Memory *palmem = bgfx::copy(palette_temp, palette_width * palette_height * 4); + m_palette_temp.resize(palette_width * palette_height * 4); + memcpy(&m_palette_temp[0], prim.m_prim->texture.palette, prim.m_palette_length * 4); + const bgfx::Memory *palmem = bgfx::copy(&m_palette_temp[0], palette_width * palette_height * 4); palette = new bgfx_texture(palette_name, bgfx::TextureFormat::BGRA8, palette_width, palette_height, palmem, BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP | BGFX_SAMPLER_MIN_POINT | BGFX_SAMPLER_MAG_POINT | BGFX_SAMPLER_MIP_POINT, palette_width * 4); m_textures.add_provider(palette_name, palette); } @@ -498,9 +498,9 @@ uint32_t chain_manager::update_screen_textures(uint32_t view, render_primitive * if (prim.m_prim->texture.palette) { - uint8_t palette_temp[palette->width() * palette->height() * 4]; - memcpy(palette_temp, prim.m_prim->texture.palette, prim.m_palette_length * 4); - const bgfx::Memory *palmem = bgfx::copy(palette_temp, palette->width() * palette->height() * 4); + m_palette_temp.resize(palette->width() * palette->height() * 4); + memcpy(&m_palette_temp[0], prim.m_prim->texture.palette, prim.m_palette_length * 4); + const bgfx::Memory *palmem = bgfx::copy(&m_palette_temp[0], palette->width() * palette->height() * 4); palette->update(palmem); } } diff --git a/src/osd/modules/render/bgfx/chainmanager.h b/src/osd/modules/render/bgfx/chainmanager.h index cbdff1ab3a3..aa5edbecd39 100644 --- a/src/osd/modules/render/bgfx/chainmanager.h +++ b/src/osd/modules/render/bgfx/chainmanager.h @@ -148,6 +148,7 @@ private: std::vector<bgfx_texture*> m_screen_palettes; std::vector<bgfx_effect*> m_converters; std::vector<screen_prim> m_screen_prims; + std::vector<uint8_t> m_palette_temp; static const uint32_t CHAIN_NONE; }; |