Skip to content

Commit 1bdb3bc

Browse files
committed
Validate triviality of the InstanceData and RenderElementInfo structs in Mobile and Forward+ renderers.
This is needed to avoid overhead that results from calling the constructor during calls to LocalVector.resize()
1 parent 9f68a81 commit 1bdb3bc

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,9 @@ class RenderForwardClustered : public RendererSceneRenderRD {
328328
float uv_scale[4];
329329
};
330330

331+
static_assert(std::is_trivially_destructible_v<InstanceData>);
332+
static_assert(std::is_trivially_constructible_v<InstanceData>);
333+
331334
UBO ubo;
332335

333336
LocalVector<RID> uniform_buffers;
@@ -392,6 +395,9 @@ class RenderForwardClustered : public RendererSceneRenderRD {
392395
uint32_t lod_index : 8;
393396
};
394397

398+
static_assert(std::is_trivially_destructible_v<RenderElementInfo>);
399+
static_assert(std::is_trivially_constructible_v<RenderElementInfo>);
400+
395401
template <PassMode p_pass_mode, uint32_t p_color_pass_flags = 0>
396402
_FORCE_INLINE_ void _render_list_template(RenderingDevice::DrawListID p_draw_list, RenderingDevice::FramebufferFormatID p_framebuffer_Format, RenderListParameters *p_params, uint32_t p_from_element, uint32_t p_to_element);
397403
void _render_list(RenderingDevice::DrawListID p_draw_list, RenderingDevice::FramebufferFormatID p_framebuffer_Format, RenderListParameters *p_params, uint32_t p_from_element, uint32_t p_to_element);

servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ class RenderForwardMobile : public RendererSceneRenderRD {
211211
uint32_t flags;
212212
uint32_t instance_uniforms_ofs; // Base offset in global buffer for instance variables.
213213
uint32_t gi_offset; // GI information when using lightmapping (VCT or lightmap index).
214-
uint32_t layer_mask = 1;
214+
uint32_t layer_mask;
215215
float lightmap_uv_scale[4]; // Doubles as uv_offset when needed.
216216
uint32_t reflection_probes[2]; // Packed reflection probes.
217217
uint32_t omni_lights[2]; // Packed omni lights.
@@ -222,6 +222,9 @@ class RenderForwardMobile : public RendererSceneRenderRD {
222222
float uv_scale[4];
223223
};
224224

225+
static_assert(std::is_trivially_destructible_v<InstanceData>);
226+
static_assert(std::is_trivially_constructible_v<InstanceData>);
227+
225228
RID instance_buffer[RENDER_LIST_MAX];
226229
uint32_t instance_buffer_size[RENDER_LIST_MAX] = { 0, 0, 0 };
227230
LocalVector<InstanceData> instance_data[RENDER_LIST_MAX];
@@ -327,6 +330,9 @@ class RenderForwardMobile : public RendererSceneRenderRD {
327330
uint32_t reserved : 23;
328331
};
329332

333+
static_assert(std::is_trivially_destructible_v<RenderElementInfo>);
334+
static_assert(std::is_trivially_constructible_v<RenderElementInfo>);
335+
330336
template <PassMode p_pass_mode>
331337
_FORCE_INLINE_ void _render_list_template(RenderingDevice::DrawListID p_draw_list, RenderingDevice::FramebufferFormatID p_framebuffer_Format, RenderListParameters *p_params, uint32_t p_from_element, uint32_t p_to_element);
332338
void _render_list(RenderingDevice::DrawListID p_draw_list, RenderingDevice::FramebufferFormatID p_framebuffer_Format, RenderListParameters *p_params, uint32_t p_from_element, uint32_t p_to_element);

0 commit comments

Comments
 (0)