mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-16 03:38:38 +12:00
70 lines
1.9 KiB
C++
70 lines
1.9 KiB
C++
#pragma once
|
|
#include "GLHelpers.h"
|
|
#include "Emu/RSX/display.h"
|
|
#include "Utilities/lockless.h"
|
|
|
|
namespace gl
|
|
{
|
|
class pipe_compiler
|
|
{
|
|
public:
|
|
enum op_flags
|
|
{
|
|
COMPILE_DEFAULT = 0,
|
|
COMPILE_INLINE = 1,
|
|
COMPILE_DEFERRED = 2
|
|
};
|
|
|
|
using storage_callback_t = std::function<void(std::unique_ptr<glsl::program>&)>;
|
|
using build_callback_t = std::function<void(glsl::program*)>;
|
|
|
|
pipe_compiler();
|
|
~pipe_compiler();
|
|
|
|
void initialize(
|
|
std::function<draw_context_t()> context_create_func,
|
|
std::function<void(draw_context_t)> context_bind_func,
|
|
std::function<void(draw_context_t)> context_destroy_func);
|
|
|
|
std::unique_ptr<glsl::program> compile(
|
|
op_flags flags,
|
|
build_callback_t post_create_func = {},
|
|
build_callback_t post_link_func = {},
|
|
storage_callback_t completion_callback = {});
|
|
|
|
void operator()();
|
|
|
|
private:
|
|
|
|
struct pipe_compiler_job
|
|
{
|
|
build_callback_t post_create_func;
|
|
build_callback_t post_link_func;
|
|
storage_callback_t completion_callback;
|
|
|
|
pipe_compiler_job(build_callback_t post_create, build_callback_t post_link, storage_callback_t completion)
|
|
: post_create_func(post_create), post_link_func(post_link), completion_callback(completion)
|
|
{}
|
|
};
|
|
|
|
lf_queue<pipe_compiler_job> m_work_queue;
|
|
|
|
draw_context_t m_context = 0;
|
|
atomic_t<bool> m_context_ready = false;
|
|
|
|
std::function<void(draw_context_t context)> m_context_bind_func;
|
|
std::function<void(draw_context_t context)> m_context_destroy_func;
|
|
|
|
std::unique_ptr<glsl::program> int_compile_graphics_pipe(
|
|
build_callback_t post_create_func, build_callback_t post_link_func);
|
|
};
|
|
|
|
void initialize_pipe_compiler(
|
|
std::function<draw_context_t()> context_create_func,
|
|
std::function<void(draw_context_t)> context_bind_func,
|
|
std::function<void(draw_context_t)> context_destroy_func,
|
|
int num_worker_threads = -1);
|
|
|
|
void destroy_pipe_compiler();
|
|
pipe_compiler* get_pipe_compiler();
|
|
}
|