From 78f0fdbf6921564be19b0760801b701717ef9199 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Sat, 4 Feb 2023 04:54:48 +1100 Subject: osd/render/draw13.cpp: Got rid of a simple_list. --- src/mame/vtech/laser3k.cpp | 1 + src/osd/modules/render/draw13.cpp | 45 ++++++++++++++++---------------- src/osd/modules/render/drawogl.cpp | 53 +++++++++++++++++--------------------- 3 files changed, 47 insertions(+), 52 deletions(-) diff --git a/src/mame/vtech/laser3k.cpp b/src/mame/vtech/laser3k.cpp index c8aa4b16e8a..2199fcd14ca 100644 --- a/src/mame/vtech/laser3k.cpp +++ b/src/mame/vtech/laser3k.cpp @@ -650,6 +650,7 @@ void laser3k_state::dhgr_update(screen_device &screen, bitmap_ind16 &bitmap, con } else { + // FIXME: this is unreachable - loop bound is checks (col < 40) so these columns can never be copied vram_row[1+(col*2)+0] = vram[offset+0x2000]; vram_row[1+(col*2)+1] = vram[offset+0x2001]; } diff --git a/src/osd/modules/render/draw13.cpp b/src/osd/modules/render/draw13.cpp index aea9b3f2b3f..8cfa2fe65ae 100644 --- a/src/osd/modules/render/draw13.cpp +++ b/src/osd/modules/render/draw13.cpp @@ -35,6 +35,7 @@ #include #include #include +#include namespace osd { @@ -62,7 +63,6 @@ struct copy_info_t; /* texture_info holds information about a texture */ class texture_info { - friend class simple_list; public: texture_info(renderer_sdl2 *renderer, const render_texinfo &texsource, const quad_setup_data &setup, const uint32_t flags); ~texture_info(); @@ -187,7 +187,7 @@ private: int32_t m_blittimer; - simple_list m_texlist; // list of active textures + std::list m_texlist; // list of active textures float m_last_hofs; float m_last_vofs; @@ -511,11 +511,11 @@ void renderer_sdl2::destroy_all_textures() if (window().m_primlist) { window().m_primlist->acquire_lock(); - m_texlist.reset(); + m_texlist.clear(); window().m_primlist->release_lock(); } else - m_texlist.reset(); + m_texlist.clear(); } //============================================================ @@ -883,32 +883,32 @@ void quad_setup_data::compute(const render_primitive &prim, const int prescale) texture_info *renderer_sdl2::texture_find(const render_primitive &prim, const quad_setup_data &setup) { - HashT texhash = texture_compute_hash(prim.texture, prim.flags); - texture_info *texture; - osd_ticks_t now = osd_ticks(); + const HashT texhash = texture_compute_hash(prim.texture, prim.flags); + const osd_ticks_t now = osd_ticks(); // find a match - for (texture = m_texlist.first(); texture != nullptr; ) - if (texture->hash() == texhash && - texture->matches(prim, setup)) + for (auto texture = m_texlist.begin(); texture != m_texlist.end(); ) + { + if ((texture->hash() == texhash) && texture->matches(prim, setup)) { - /* would we choose another blitter based on performance ? */ + // would we choose another blitter based on performance? if ((texture->m_copyinfo->samples & 0x7f) == 0x7f) { if (texture->m_copyinfo != texture->compute_size_type()) return nullptr; } texture->m_last_access = now; - return texture; + return &*texture; } else { - /* free resources not needed any longer? */ - texture_info *expire = texture; - texture = texture->next(); - if (now - expire->m_last_access > osd_ticks_per_second()) - m_texlist.remove(*expire); + // free resources not needed any longer? + if ((now - texture->m_last_access) > osd_ticks_per_second()) + texture = m_texlist.erase(texture); + else + ++texture; } + } // nothing found return nullptr; @@ -928,16 +928,15 @@ texture_info * renderer_sdl2::texture_update(const render_primitive &prim) texture = texture_find(prim, setup); // if we didn't find one, create a new texture - if (texture == nullptr && prim.texture.base != nullptr) + if (!texture && prim.texture.base) { - texture = new texture_info(this, prim.texture, setup, prim.flags); - /* add us to the texture list */ - m_texlist.prepend(*texture); + // add us to the texture list + texture = &m_texlist.emplace_front(this, prim.texture, setup, prim.flags); } - if (texture != nullptr) + if (texture) { - if (prim.texture.base != nullptr && texture->texinfo().seqid != prim.texture.seqid) + if (prim.texture.base && (texture->texinfo().seqid != prim.texture.seqid)) { texture->texinfo().seqid = prim.texture.seqid; // if we found it, but with a different seqid, copy the data diff --git a/src/osd/modules/render/drawogl.cpp b/src/osd/modules/render/drawogl.cpp index 7489af2f612..acc21eae59c 100644 --- a/src/osd/modules/render/drawogl.cpp +++ b/src/osd/modules/render/drawogl.cpp @@ -191,11 +191,6 @@ class ogl_texture_info { public: ogl_texture_info() - : hash(0), flags(0), rawwidth(0), rawheight(0), - rawwidth_create(0), rawheight_create(0), - type(0), format(0), borderpix(0), xprescale(0), yprescale(0), nocopy(0), - texture(0), texTarget(0), texpow2(0), mpass_dest_idx(0), pbo(0), data(nullptr), - data_own(0), texCoordBufferName(0) { for (int i=0; i<2; i++) { @@ -209,35 +204,35 @@ public: texCoord[i] = 0.0f; } - HashT hash; // hash value for the texture (must be >= pointer size) - uint32_t flags; // rendering flags - render_texinfo texinfo; // copy of the texture info - int rawwidth, rawheight; // raw width/height of the texture - int rawwidth_create; // raw width/height, pow2 compatible, if needed - int rawheight_create; // (create and initial set the texture, not for copy!) - int type; // what type of texture are we? - int format; // texture format - int borderpix; // do we have a 1 pixel border? - int xprescale; // what is our X prescale factor? - int yprescale; // what is our Y prescale factor? - int nocopy; // must the texture date be copied? + HashT hash = 0; // hash value for the texture (must be >= pointer size) + uint32_t flags = 0; // rendering flags + render_texinfo texinfo; // copy of the texture info + int rawwidth = 0, rawheight = 0; // raw width/height of the texture + int rawwidth_create = 0; // raw width/height, pow2 compatible, if needed + int rawheight_create = 0; // (create and initial set the texture, not for copy!) + int type = 0; // what type of texture are we? + int format = 0; // texture format + int borderpix = 0; // do we have a 1 pixel border? + int xprescale = 0; // what is our X prescale factor? + int yprescale = 0; // what is our Y prescale factor? + int nocopy = 0; // must the texture date be copied? - uint32_t texture; // OpenGL texture "name"/ID + uint32_t texture = 0; // OpenGL texture "name"/ID - GLenum texTarget; // OpenGL texture target - int texpow2; // Is this texture pow2 + GLenum texTarget = 0; // OpenGL texture target + int texpow2 = 0; // Is this texture pow2 - uint32_t mpass_dest_idx; // Multipass dest idx [0..1] - uint32_t mpass_textureunit[2]; // texture unit names for GLSL + uint32_t mpass_dest_idx = 0; // Multipass dest idx [0..1] + uint32_t mpass_textureunit[2]; // texture unit names for GLSL - uint32_t mpass_texture_mamebm[2];// Multipass OpenGL texture "name"/ID for the shader - uint32_t mpass_fbo_mamebm[2]; // framebuffer object for this texture, multipass - uint32_t mpass_texture_scrn[2]; // Multipass OpenGL texture "name"/ID for the shader - uint32_t mpass_fbo_scrn[2]; // framebuffer object for this texture, multipass + uint32_t mpass_texture_mamebm[2]; // Multipass OpenGL texture "name"/ID for the shader + uint32_t mpass_fbo_mamebm[2]; // framebuffer object for this texture, multipass + uint32_t mpass_texture_scrn[2]; // Multipass OpenGL texture "name"/ID for the shader + uint32_t mpass_fbo_scrn[2]; // framebuffer object for this texture, multipass - uint32_t pbo; // pixel buffer object for this texture (DYNAMIC only!) - uint32_t *data; // pixels for the texture - int data_own; // do we own / allocated it ? + uint32_t pbo = 0; // pixel buffer object for this texture (DYNAMIC only!) + uint32_t *data = nullptr; // pixels for the texture + bool data_own = false; // do we own / allocated it ? GLfloat texCoord[8]; GLuint texCoordBufferName; -- cgit v1.2.3