aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorAuke Kok <sofar+github@foo-projects.org>2017-04-29 00:16:32 -0700
committerLoïc Blot <nerzhul@users.noreply.github.com>2017-04-29 09:16:32 +0200
commit1ecc8756bcab6b97cf31f18163c761dd25fa947e (patch)
tree871fd4a3aaea25f179247edb9a6190136c96d412 /src/client
parent19960e26c672c6337f8c6ffbe27f2c6bca49750c (diff)
downloadminetest-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/client')
-rw-r--r--src/client/tile.h41
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;
};
/*!