#pragma once #include #include #include #include #include #include "dxvk_include.h" namespace dxvk { class DxvkGraphicsPipeline; class DxvkGraphicsPipelineInstance; /** * \brief Pipeline compiler * * asynchronous pipeline compiler, which is used * to compile optimized versions of pipelines. */ class DxvkPipelineCompiler : public RcObject { public: DxvkPipelineCompiler(); ~DxvkPipelineCompiler(); /** * \brief Compiles a pipeline asynchronously * * This should be used to compile optimized * graphics pipeline instances asynchronously. * \param [in] pipeline The pipeline object * \param [in] instance The pipeline instance */ void queueCompilation( const Rc& pipeline, const Rc& instance); private: struct PipelineEntry { Rc pipeline; Rc instance; }; std::atomic m_compilerStop = { false }; std::mutex m_compilerLock; std::condition_variable m_compilerCond; std::queue m_compilerQueue; std::vector m_compilerThreads; void runCompilerThread(); }; }