diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-05-04 11:52:41 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-05-04 11:52:41 +0200 |
commit | f236b9badcbf1f666c952fa745c080ab24030e9c (patch) | |
tree | b3aa64e885330095575871ff705bc45877f8f397 | |
parent | 4313524ae324cb8bae6e235dae27f1a7f0cd1f0d (diff) | |
parent | c41e407e61a7550b8b046da0584153fd35b2da45 (diff) | |
download | redot-engine-f236b9badcbf1f666c952fa745c080ab24030e9c.tar.gz |
Merge pull request #91530 from DarioSamo/timestamp_validation
Add draw and dispatch count to timestamp validation.
-rw-r--r-- | servers/rendering/rendering_device.cpp | 8 | ||||
-rw-r--r-- | servers/rendering/rendering_device.h | 2 |
2 files changed, 8 insertions, 2 deletions
diff --git a/servers/rendering/rendering_device.cpp b/servers/rendering/rendering_device.cpp index 962531c866..3e0f18caac 100644 --- a/servers/rendering/rendering_device.cpp +++ b/servers/rendering/rendering_device.cpp @@ -3858,6 +3858,8 @@ void RenderingDevice::draw_list_draw(DrawListID p_list, bool p_use_indices, uint draw_graph.add_draw_list_draw(to_draw, p_instances); } + + dl->state.draw_count++; } void RenderingDevice::draw_list_enable_scissor(DrawListID p_list, const Rect2 &p_rect) { @@ -4201,6 +4203,7 @@ void RenderingDevice::compute_list_dispatch(ComputeListID p_list, uint32_t p_x_g } draw_graph.add_compute_list_dispatch(p_x_groups, p_y_groups, p_z_groups); + cl->state.dispatch_count++; } void RenderingDevice::compute_list_dispatch_threads(ComputeListID p_list, uint32_t p_x_threads, uint32_t p_y_threads, uint32_t p_z_threads) { @@ -4294,6 +4297,7 @@ void RenderingDevice::compute_list_dispatch_indirect(ComputeListID p_list, RID p } draw_graph.add_compute_list_dispatch_indirect(buffer->driver_id, p_offset); + cl->state.dispatch_count++; if (buffer->draw_tracker != nullptr) { draw_graph.add_compute_list_usage(buffer->draw_tracker, RDG::RESOURCE_USAGE_INDIRECT_BUFFER_READ); @@ -5206,8 +5210,8 @@ void RenderingDevice::_free_rids(T &p_owner, const char *p_type) { } void RenderingDevice::capture_timestamp(const String &p_name) { - ERR_FAIL_COND_MSG(draw_list != nullptr, "Capturing timestamps during draw list creation is not allowed. Offending timestamp was: " + p_name); - ERR_FAIL_COND_MSG(compute_list != nullptr, "Capturing timestamps during compute list creation is not allowed. Offending timestamp was: " + p_name); + ERR_FAIL_COND_MSG(draw_list != nullptr && draw_list->state.draw_count > 0, "Capturing timestamps during draw list creation is not allowed. Offending timestamp was: " + p_name); + ERR_FAIL_COND_MSG(compute_list != nullptr && compute_list->state.dispatch_count > 0, "Capturing timestamps during compute list creation is not allowed. Offending timestamp was: " + p_name); ERR_FAIL_COND(frames[frame].timestamp_count >= max_timestamp_query_elements); draw_graph.add_capture_timestamp(frames[frame].timestamp_pool, frames[frame].timestamp_count); diff --git a/servers/rendering/rendering_device.h b/servers/rendering/rendering_device.h index 9a898a2fca..9db2fdfbf4 100644 --- a/servers/rendering/rendering_device.h +++ b/servers/rendering/rendering_device.h @@ -1046,6 +1046,7 @@ private: uint32_t pipeline_shader_layout_hash = 0; RID vertex_array; RID index_array; + uint32_t draw_count = 0; } state; #ifdef DEBUG_ENABLED @@ -1147,6 +1148,7 @@ private: uint32_t local_group_size[3] = { 0, 0, 0 }; uint8_t push_constant_data[MAX_PUSH_CONSTANT_SIZE] = {}; uint32_t push_constant_size = 0; + uint32_t dispatch_count = 0; } state; #ifdef DEBUG_ENABLED |