diff options
author | K. S. Ernest (iFire) Lee <ernest.lee@chibifire.com> | 2021-04-06 22:05:56 -0700 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2021-04-13 00:12:12 +0200 |
commit | d840165a324b5c218ca3a4882f030986855c8383 (patch) | |
tree | 7c5f4b091ecc647f2b6ed48135945f84c6dc2de9 /thirdparty/etcpak/TaskDispatch.hpp | |
parent | b895071895cffcbcda7f4156d7175ba5b8068852 (diff) |
Add `etcpak` library for faster ETC/ETC2/S3TC imports.
- `etc` module was renamed to `etcpak` and modified to use the new library.
- PKM importer is removed in the process, it's obsolete.
- Old library `etc2comp` is removed.
- S3TC compression no longer done via `squish` (but decompression still is).
- Slight modifications to etcpak sources for MinGW compatibility,
to fix LLVM `-Wc++11-narrowing` errors, and to allow using vendored or
system libpng.
Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
Diffstat (limited to 'thirdparty/etcpak/TaskDispatch.hpp')
-rw-r--r-- | thirdparty/etcpak/TaskDispatch.hpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/thirdparty/etcpak/TaskDispatch.hpp b/thirdparty/etcpak/TaskDispatch.hpp new file mode 100644 index 0000000000..b513de4c0c --- /dev/null +++ b/thirdparty/etcpak/TaskDispatch.hpp @@ -0,0 +1,34 @@ +#ifndef __DARKRL__TASKDISPATCH_HPP__ +#define __DARKRL__TASKDISPATCH_HPP__ + +#include <atomic> +#include <condition_variable> +#include <functional> +#include <mutex> +#include <thread> +#include <vector> + +class TaskDispatch +{ +public: + TaskDispatch( size_t workers ); + ~TaskDispatch(); + + static void Queue( const std::function<void(void)>& f ); + static void Queue( std::function<void(void)>&& f ); + + static void Sync(); + +private: + void Worker(); + + std::vector<std::function<void(void)>> m_queue; + std::mutex m_queueLock; + std::condition_variable m_cvWork, m_cvJobs; + std::atomic<bool> m_exit; + size_t m_jobs; + + std::vector<std::thread> m_workers; +}; + +#endif |