summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDario <dariosamo@gmail.com>2024-02-14 11:32:31 -0300
committerDario <dariosamo@gmail.com>2024-02-14 13:25:04 -0300
commit0aac14a53850aeccbfb08fd6ff582331ed6e8c76 (patch)
tree05c00816dc1b6d36929a224c932ed95ec0453100
parent907db8eebcecb97d527edcaff77a1c87a6c068f5 (diff)
downloadredot-engine-0aac14a53850aeccbfb08fd6ff582331ed6e8c76.tar.gz
Add validation to render graph for draw and compute lists.
-rw-r--r--servers/rendering/rendering_device_graph.cpp12
-rw-r--r--servers/rendering/rendering_device_graph.h2
2 files changed, 14 insertions, 0 deletions
diff --git a/servers/rendering/rendering_device_graph.cpp b/servers/rendering/rendering_device_graph.cpp
index 83fb2d1918..3e4890e866 100644
--- a/servers/rendering/rendering_device_graph.cpp
+++ b/servers/rendering/rendering_device_graph.cpp
@@ -1430,7 +1430,13 @@ void RenderingDeviceGraph::add_compute_list_usage(ResourceTracker *p_tracker, Re
compute_instruction_list.command_trackers.push_back(p_tracker);
compute_instruction_list.command_tracker_usages.push_back(p_usage);
p_tracker->compute_list_index = compute_instruction_list.index;
+ p_tracker->compute_list_usage = p_usage;
}
+#ifdef DEV_ENABLED
+ else if (p_tracker->compute_list_usage != p_usage) {
+ ERR_FAIL_MSG(vformat("Tracker can't have more than one type of usage in the same compute list. Compute list usage is %d and the requested usage is %d.", p_tracker->compute_list_usage, p_usage));
+ }
+#endif
}
void RenderingDeviceGraph::add_compute_list_usages(VectorView<ResourceTracker *> p_trackers, VectorView<ResourceUsage> p_usages) {
@@ -1614,7 +1620,13 @@ void RenderingDeviceGraph::add_draw_list_usage(ResourceTracker *p_tracker, Resou
draw_instruction_list.command_trackers.push_back(p_tracker);
draw_instruction_list.command_tracker_usages.push_back(p_usage);
p_tracker->draw_list_index = draw_instruction_list.index;
+ p_tracker->draw_list_usage = p_usage;
}
+#ifdef DEV_ENABLED
+ else if (p_tracker->draw_list_usage != p_usage) {
+ ERR_FAIL_MSG(vformat("Tracker can't have more than one type of usage in the same draw list. Draw list usage is %d and the requested usage is %d.", p_tracker->draw_list_usage, p_usage));
+ }
+#endif
}
void RenderingDeviceGraph::add_draw_list_usages(VectorView<ResourceTracker *> p_trackers, VectorView<ResourceUsage> p_usages) {
diff --git a/servers/rendering/rendering_device_graph.h b/servers/rendering/rendering_device_graph.h
index 995fdb27d1..9bb109ea0e 100644
--- a/servers/rendering/rendering_device_graph.h
+++ b/servers/rendering/rendering_device_graph.h
@@ -155,7 +155,9 @@ public:
int32_t read_slice_command_list_index = -1;
int32_t write_command_or_list_index = -1;
int32_t draw_list_index = -1;
+ ResourceUsage draw_list_usage = RESOURCE_USAGE_NONE;
int32_t compute_list_index = -1;
+ ResourceUsage compute_list_usage = RESOURCE_USAGE_NONE;
ResourceUsage usage = RESOURCE_USAGE_NONE;
BitField<RDD::BarrierAccessBits> usage_access;
RDD::BufferID buffer_driver_id;