You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-16 14:00:40 +00:00
Modernize atomics
- Based on C++11's `atomic` - Reworked `SafeRefCount` (based on the rewrite by @hpvb) - Replaced free atomic functions by the new `SafeNumeric<T>` - Replaced wrong cases of `volatile` by the new `SafeFlag` - Platform-specific implementations no longer needed Co-authored-by: Hein-Pieter van Braam-Stewart <hp@tmm.cx>
This commit is contained in:
@@ -33,6 +33,7 @@
|
||||
#include "core/os/os.h"
|
||||
#include "core/os/thread.h"
|
||||
#include "core/print_string.h"
|
||||
#include "core/safe_refcount.h"
|
||||
|
||||
#include <ConvectionKernels.h>
|
||||
|
||||
@@ -56,7 +57,7 @@ struct CVTTCompressionJobQueue {
|
||||
CVTTCompressionJobParams job_params;
|
||||
const CVTTCompressionRowTask *job_tasks;
|
||||
uint32_t num_tasks;
|
||||
uint32_t current_task;
|
||||
SafeNumeric<uint32_t> current_task;
|
||||
};
|
||||
|
||||
static void _digest_row_task(const CVTTCompressionJobParams &p_job_params, const CVTTCompressionRowTask &p_row_task) {
|
||||
@@ -131,7 +132,7 @@ static void _digest_row_task(const CVTTCompressionJobParams &p_job_params, const
|
||||
static void _digest_job_queue(void *p_job_queue) {
|
||||
CVTTCompressionJobQueue *job_queue = static_cast<CVTTCompressionJobQueue *>(p_job_queue);
|
||||
|
||||
for (uint32_t next_task = atomic_increment(&job_queue->current_task); next_task <= job_queue->num_tasks; next_task = atomic_increment(&job_queue->current_task)) {
|
||||
for (uint32_t next_task = job_queue->current_task.increment(); next_task <= job_queue->num_tasks; next_task = job_queue->current_task.increment()) {
|
||||
_digest_row_task(job_queue->job_params, job_queue->job_tasks[next_task - 1]);
|
||||
}
|
||||
}
|
||||
@@ -263,7 +264,7 @@ void image_compress_cvtt(Image *p_image, float p_lossy_quality, Image::CompressS
|
||||
PoolVector<CVTTCompressionRowTask>::Read tasks_rb = tasks.read();
|
||||
|
||||
job_queue.job_tasks = &tasks_rb[0];
|
||||
job_queue.current_task = 0;
|
||||
job_queue.current_task.set(0);
|
||||
job_queue.num_tasks = static_cast<uint32_t>(tasks.size());
|
||||
|
||||
for (int i = 0; i < num_job_threads; i++) {
|
||||
|
||||
Reference in New Issue
Block a user