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 | |
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.
-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; }; /*! |