MCPcopy Create free account
hub / github.com/KhronosGroup/Vulkan-ValidationLayers / PreSubmit

Method PreSubmit

layers/state_tracker/queue_state.cpp:66–114  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

64}
65
66uint64_t vvl::Queue::PreSubmit(std::vector<vvl::QueueSubmission>&& submissions) {
67 if (!submissions.empty()) {
68 submissions.back().is_last_submission = true;
69 }
70 uint64_t last_batch_seq = 0;
71 for (QueueSubmission& submission : submissions) {
72 for (CommandBufferSubmission& cb_submission : submission.cb_submissions) {
73 auto cb_guard = cb_submission.cb->WriteLock();
74 for (CommandBuffer* secondary_cmd_buffer : cb_submission.cb->linked_command_buffers) {
75 auto secondary_guard = secondary_cmd_buffer->WriteLock();
76 secondary_cmd_buffer->submit_count++;
77 }
78 cb_submission.cb->submit_count++;
79 cb_submission.cb->SubmitTimeValidate(*this, submission.perf_submit_pass, submission.loc.Get());
80 }
81 // seq_ is atomic so we don't need a lock until updating the deque below.
82 // Note that this relies on the external synchonization requirements for the
83 // VkQueue
84 submission.seq = ++seq_;
85 last_batch_seq = submission.seq;
86 submission.BeginUse();
87 for (SemaphoreInfo& wait : submission.wait_semaphores) {
88 wait.semaphore->EnqueueWait(SubmissionReference(this, submission.seq), wait.payload);
89 timeline_wait_count_.fetch_add((wait.semaphore->type == VK_SEMAPHORE_TYPE_TIMELINE) ? 1 : 0);
90 }
91
92 for (SemaphoreInfo& signal : submission.signal_semaphores) {
93 signal.semaphore->EnqueueSignal(SubmissionReference(this, submission.seq), signal.payload);
94 }
95
96 if (submission.fence) {
97 if (submission.fence->EnqueueSignal(this, submission.seq)) {
98 submission.has_external_fence = true;
99 }
100 }
101 }
102 for (auto& item : sub_states_) {
103 item.second->PreSubmit(submissions);
104 }
105 {
106 auto guard = Lock();
107 submissions_.insert(submissions_.end(), std::make_move_iterator(submissions.begin()),
108 std::make_move_iterator(submissions.end()));
109 if (!thread_) {
110 thread_ = std::make_unique<std::thread>(&Queue::ThreadFunc, this);
111 }
112 }
113 return last_batch_seq;
114}
115
116void vvl::Queue::Notify(uint64_t until_seq) {
117 auto guard = Lock();

Calls 12

SubmissionReferenceClass · 0.85
SubmitTimeValidateMethod · 0.80
EnqueueWaitMethod · 0.80
emptyMethod · 0.45
backMethod · 0.45
WriteLockMethod · 0.45
GetMethod · 0.45
BeginUseMethod · 0.45
EnqueueSignalMethod · 0.45
insertMethod · 0.45
endMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected