glgsg: make async texture transfer threads configurable

This commit is contained in:
rdb 2025-01-28 09:53:34 +01:00
parent 55a3a0d2af
commit 1a431b3894
3 changed files with 19 additions and 3 deletions

View File

@ -715,10 +715,10 @@ CLP(GraphicsStateGuardian)(GraphicsEngine *engine, GraphicsPipe *pipe) :
#endif
#ifdef HAVE_THREADS
//XXX having a fixed number of threads is not a great idea. We ought to have
// a common thread pool that is sized based on the available number of CPUs.
AsyncTaskManager *task_mgr = AsyncTaskManager::get_global_ptr();
_async_chain = task_mgr->make_task_chain("texture_copy", 2, TP_normal);
_async_chain = task_mgr->make_task_chain("gl_texture_transfer",
gl_texture_transfer_num_threads,
gl_texture_transfer_thread_priority);
#endif
#ifdef DO_PSTATS

View File

@ -326,6 +326,19 @@ ConfigVariableBool gl_depth_zero_to_one
"range from 0 to 1, matching other graphics APIs. This setting "
"requires OpenGL 4.5, or NVIDIA GeForce 8+ hardware."));
ConfigVariableInt gl_texture_reload_num_threads
("gl-texture-transfer-num-threads", 2,
PRC_DESC("The number of threads that will be started to upload and download "
"texture data asynchronously, either via the setup_async_transfer "
"interface on the the Texture class or via the async screenshot "
"interface."));
ConfigVariableEnum<ThreadPriority> gl_texture_transfer_thread_priority
("gl-texture-transfer-thread-priority", TP_normal,
PRC_DESC("The default thread priority to assign to the threads created for "
"asynchronous texture transfers. The default is 'normal'; you may "
"also specify 'low', 'high', or 'urgent'."));
extern ConfigVariableBool gl_parallel_arrays;
void CLP(init_classes)() {

View File

@ -17,6 +17,7 @@
#include "configVariableEnum.h"
#include "geomEnums.h"
#include "coordinateSystem.h"
#include "threadPriority.h"
// Define some macros to transparently map to the double or float versions of
// the OpenGL function names.
@ -76,6 +77,8 @@ extern ConfigVariableBool gl_support_shadow_filter;
extern ConfigVariableBool gl_support_vertex_array_bgra;
extern ConfigVariableBool gl_force_image_bindings_writeonly;
extern ConfigVariableEnum<CoordinateSystem> gl_coordinate_system;
extern ConfigVariableInt gl_texture_transfer_num_threads;
extern ConfigVariableEnum<ThreadPriority> gl_texture_transfer_thread_priority;
extern EXPCL_GL void CLP(init_classes)();