diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-05-13 17:32:11 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-05-13 17:32:11 +0200 |
commit | 5cb9a748d6942a335706b12979c33d23cf15d8d4 (patch) | |
tree | c70e4e27d5b24e0b70a036717915a043c113f1fb /core | |
parent | 194c940e72c43174134a1e24415f4cd53fa1a3ec (diff) | |
parent | 187e5ef258a58b72307599aa1186466babc775e9 (diff) | |
download | redot-engine-5cb9a748d6942a335706b12979c33d23cf15d8d4.tar.gz |
Merge pull request #91630 from RandomShaper/enh_mat_sh_update
Let materials' shaders update happen on loader threads
Diffstat (limited to 'core')
-rw-r--r-- | core/object/message_queue.cpp | 57 | ||||
-rw-r--r-- | core/object/message_queue.h | 2 |
2 files changed, 0 insertions, 59 deletions
diff --git a/core/object/message_queue.cpp b/core/object/message_queue.cpp index 6fab934395..9351253c6f 100644 --- a/core/object/message_queue.cpp +++ b/core/object/message_queue.cpp @@ -224,64 +224,7 @@ void CallQueue::_call_function(const Callable &p_callable, const Variant *p_args } } -Error CallQueue::_transfer_messages_to_main_queue() { - if (pages.size() == 0) { - return OK; - } - - CallQueue *mq = MessageQueue::main_singleton; - DEV_ASSERT(!mq->allocator_is_custom && !allocator_is_custom); // Transferring pages is only safe if using the same alloator parameters. - - mq->mutex.lock(); - - // Here we're transferring the data from this queue to the main one. - // However, it's very unlikely big amounts of messages will be queued here, - // so PagedArray/Pool would be overkill. Also, in most cases the data will fit - // an already existing page of the main queue. - - // Let's see if our first (likely only) page fits the current target queue page. - uint32_t src_page = 0; - { - if (mq->pages_used) { - uint32_t dst_page = mq->pages_used - 1; - uint32_t dst_offset = mq->page_bytes[dst_page]; - if (dst_offset + page_bytes[0] < uint32_t(PAGE_SIZE_BYTES)) { - memcpy(mq->pages[dst_page]->data + dst_offset, pages[0]->data, page_bytes[0]); - mq->page_bytes[dst_page] += page_bytes[0]; - src_page++; - } - } - } - - // Any other possibly existing source page needs to be added. - - if (mq->pages_used + (pages_used - src_page) > mq->max_pages) { - fprintf(stderr, "Failed appending thread queue. Message queue out of memory. %s\n", mq->error_text.utf8().get_data()); - mq->statistics(); - mq->mutex.unlock(); - return ERR_OUT_OF_MEMORY; - } - - for (; src_page < pages_used; src_page++) { - mq->_add_page(); - memcpy(mq->pages[mq->pages_used - 1]->data, pages[src_page]->data, page_bytes[src_page]); - mq->page_bytes[mq->pages_used - 1] = page_bytes[src_page]; - } - - mq->mutex.unlock(); - - page_bytes[0] = 0; - pages_used = 1; - - return OK; -} - Error CallQueue::flush() { - // Thread overrides are not meant to be flushed, but appended to the main one. - if (unlikely(this == MessageQueue::thread_singleton)) { - return _transfer_messages_to_main_queue(); - } - LOCK_MUTEX; if (pages.size() == 0) { diff --git a/core/object/message_queue.h b/core/object/message_queue.h index c2f4ad1643..9f567e4dd0 100644 --- a/core/object/message_queue.h +++ b/core/object/message_queue.h @@ -98,8 +98,6 @@ private: } } - Error _transfer_messages_to_main_queue(); - void _add_page(); void _call_function(const Callable &p_callable, const Variant *p_args, int p_argcount, bool p_show_error); |