diff options
author | Auke Kok <sofar+github@foo-projects.org> | 2017-04-29 00:16:32 -0700 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2017-04-29 09:16:32 +0200 |
commit | 1ecc8756bcab6b97cf31f18163c761dd25fa947e (patch) | |
tree | 871fd4a3aaea25f179247edb9a6190136c96d412 /src | |
parent | 19960e26c672c6337f8c6ffbe27f2c6bca49750c (diff) | |
download | minetest-1ecc8756bcab6b97cf31f18163c761dd25fa947e.tar.gz minetest-1ecc8756bcab6b97cf31f18163c761dd25fa947e.tar.bz2 minetest-1ecc8756bcab6b97cf31f18163c761dd25fa947e.zip |
Reorder TileLayer. (#5638)
Despite the split of TileSpec into TileDef and TileLayer, the
TileLayer struct is still 66 bytes large, and doesn't fit in
a single cacheline.
I'm moving the color member to cacheline 2, in the hope that it
is less used and the compiler loads all the hot members in a single
cacheline instead. Only color sits now in cacheline 2, all the
other members are in cacheline 1.
Note: is_color is probably rarely set, most nodes will likely
not use hardware coloring, but this may change in the future.
Ideally, this class is shrunk to 64 bytes.
Diffstat (limited to 'src')
-rw-r--r-- | src/client/tile.h | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/src/client/tile.h b/src/client/tile.h index c6ebee006..15854fb71 100644 --- a/src/client/tile.h +++ b/src/client/tile.h @@ -201,8 +201,12 @@ struct TileLayer { TileLayer(): texture(NULL), + normal_texture(NULL), + flags_texture(NULL), + shader_id(0), texture_id(0), - color(), + animation_frame_length_ms(0), + animation_frame_count(1), material_type(TILE_MATERIAL_BASIC), material_flags( //0 // <- DEBUG, Use the one below @@ -210,12 +214,8 @@ struct TileLayer MATERIAL_FLAG_TILEABLE_HORIZONTAL| MATERIAL_FLAG_TILEABLE_VERTICAL ), - shader_id(0), - normal_texture(NULL), - flags_texture(NULL), - animation_frame_length_ms(0), - animation_frame_count(1), - has_color(false) + has_color(false), + color() { } @@ -286,27 +286,32 @@ struct TileLayer && (material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL); } + // Ordered for size, please do not reorder + video::ITexture *texture; - u32 texture_id; - /*! - * The color of the tile, or if the tile does not own - * a color then the color of the node owning this tile. - */ - video::SColor color; - // Material parameters - u8 material_type; - u8 material_flags; - u32 shader_id; video::ITexture *normal_texture; video::ITexture *flags_texture; - // Animation parameters + u32 shader_id; + + u32 texture_id; + u16 animation_frame_length_ms; u8 animation_frame_count; + + u8 material_type; + u8 material_flags; + //! If true, the tile has its own color. bool has_color; std::vector<FrameSpec> frames; + + /*! + * The color of the tile, or if the tile does not own + * a color then the color of the node owning this tile. + */ + video::SColor color; }; /*! |