Some modifications required for restricted platforms: (#5624)
- Replace AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS with AZ_TRAIT_THREAD_NUM_JOB_MANAGER_WORKER_THREADS that allows the number of threads created by the job manager to be set directly. - Add AZ_TRAIT_THREAD_NUM_TASK_GRAPH_WORKER_THREADS that allows the number of threads created by the task graph to be set directly. - Add a define that forces the AsyncUploadQueue to use the primary copy queue instead of creating a secondary copy queue. Signed-off-by: bosnichd <bosnichd@amazon.com>
This commit is contained in:
@@ -56,11 +56,12 @@ namespace AZ
|
||||
int numberOfWorkerThreads = m_numberOfWorkerThreads;
|
||||
if (numberOfWorkerThreads <= 0) // spawn default number of threads
|
||||
{
|
||||
#if (AZ_TRAIT_THREAD_NUM_JOB_MANAGER_WORKER_THREADS)
|
||||
numberOfWorkerThreads = AZ_TRAIT_THREAD_NUM_JOB_MANAGER_WORKER_THREADS;
|
||||
#else
|
||||
uint32_t scaledHardwareThreads = Threading::CalcNumWorkerThreads(cl_jobThreadsConcurrencyRatio, cl_jobThreadsMinNumber, cl_jobThreadsNumReserved);
|
||||
numberOfWorkerThreads = AZ::GetMin(static_cast<unsigned int>(desc.m_workerThreads.capacity()), scaledHardwareThreads);
|
||||
#if (AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS)
|
||||
numberOfWorkerThreads = AZ::GetMin(numberOfWorkerThreads, AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS);
|
||||
#endif // (AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS)
|
||||
#endif // (AZ_TRAIT_THREAD_NUM_JOB_MANAGER_WORKER_THREADS)
|
||||
}
|
||||
|
||||
threadDesc.m_cpuId = AFFINITY_MASK_USERTHREADS;
|
||||
|
||||
@@ -30,8 +30,13 @@ namespace AZ
|
||||
|
||||
if (Interface<TaskGraphActiveInterface>::Get() == nullptr)
|
||||
{
|
||||
#if (AZ_TRAIT_THREAD_NUM_TASK_GRAPH_WORKER_THREADS)
|
||||
const uint32_t numberOfWorkerThreads = AZ_TRAIT_THREAD_NUM_TASK_GRAPH_WORKER_THREADS;
|
||||
#else
|
||||
const uint32_t numberOfWorkerThreads = Threading::CalcNumWorkerThreads(cl_taskGraphThreadsConcurrencyRatio, cl_taskGraphThreadsMinNumber, cl_taskGraphThreadsNumReserved);
|
||||
#endif // (AZ_TRAIT_THREAD_NUM_TASK_GRAPH_WORKER_THREADS)
|
||||
Interface<TaskGraphActiveInterface>::Register(this); // small window that another thread can try to use taskgraph between this line and the set instance.
|
||||
m_taskExecutor = aznew TaskExecutor(Threading::CalcNumWorkerThreads(cl_taskGraphThreadsConcurrencyRatio, cl_taskGraphThreadsMinNumber, cl_taskGraphThreadsNumReserved));
|
||||
m_taskExecutor = aznew TaskExecutor(numberOfWorkerThreads);
|
||||
TaskExecutor::SetInstance(m_taskExecutor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +75,6 @@
|
||||
#define AZ_TRAIT_HEAPSCHEMA_COMPILE_MALLINFO 0
|
||||
#define AZ_TRAIT_IS_ABS_PATH_IF_COLON_FOUND_ANYWHERE 0
|
||||
#define AZ_TRAIT_JSON_CLANG_IGNORE_UNKNOWN_WARNING 0
|
||||
#define AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS 0
|
||||
#define AZ_TRAIT_PERF_MEMORYBENCHMARK_IS_AVAILABLE 0
|
||||
#define AZ_TRAIT_PUMP_SYSTEM_EVENTS_WHILE_LOADING 0
|
||||
#define AZ_TRAIT_PUMP_SYSTEM_EVENTS_WHILE_LOADING_INTERVAL_MS 0
|
||||
|
||||
@@ -75,7 +75,6 @@
|
||||
#define AZ_TRAIT_HEAPSCHEMA_COMPILE_MALLINFO 1
|
||||
#define AZ_TRAIT_IS_ABS_PATH_IF_COLON_FOUND_ANYWHERE 0
|
||||
#define AZ_TRAIT_JSON_CLANG_IGNORE_UNKNOWN_WARNING 0
|
||||
#define AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS 0
|
||||
#define AZ_TRAIT_PERF_MEMORYBENCHMARK_IS_AVAILABLE 0
|
||||
#define AZ_TRAIT_PUMP_SYSTEM_EVENTS_WHILE_LOADING 0
|
||||
#define AZ_TRAIT_PUMP_SYSTEM_EVENTS_WHILE_LOADING_INTERVAL_MS 0
|
||||
|
||||
@@ -75,7 +75,6 @@
|
||||
#define AZ_TRAIT_HEAPSCHEMA_COMPILE_MALLINFO 1
|
||||
#define AZ_TRAIT_IS_ABS_PATH_IF_COLON_FOUND_ANYWHERE 0
|
||||
#define AZ_TRAIT_JSON_CLANG_IGNORE_UNKNOWN_WARNING 0
|
||||
#define AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS 0
|
||||
#define AZ_TRAIT_PERF_MEMORYBENCHMARK_IS_AVAILABLE 0
|
||||
#define AZ_TRAIT_PUMP_SYSTEM_EVENTS_WHILE_LOADING 0
|
||||
#define AZ_TRAIT_PUMP_SYSTEM_EVENTS_WHILE_LOADING_INTERVAL_MS 0
|
||||
|
||||
@@ -75,7 +75,6 @@
|
||||
#define AZ_TRAIT_HEAPSCHEMA_COMPILE_MALLINFO 1
|
||||
#define AZ_TRAIT_IS_ABS_PATH_IF_COLON_FOUND_ANYWHERE 0
|
||||
#define AZ_TRAIT_JSON_CLANG_IGNORE_UNKNOWN_WARNING 1
|
||||
#define AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS 0
|
||||
#define AZ_TRAIT_PERF_MEMORYBENCHMARK_IS_AVAILABLE 1
|
||||
#define AZ_TRAIT_PUMP_SYSTEM_EVENTS_WHILE_LOADING 0
|
||||
#define AZ_TRAIT_PUMP_SYSTEM_EVENTS_WHILE_LOADING_INTERVAL_MS 0
|
||||
|
||||
@@ -76,7 +76,6 @@
|
||||
#define AZ_TRAIT_HEAPSCHEMA_COMPILE_MALLINFO 1
|
||||
#define AZ_TRAIT_IS_ABS_PATH_IF_COLON_FOUND_ANYWHERE 0
|
||||
#define AZ_TRAIT_JSON_CLANG_IGNORE_UNKNOWN_WARNING 0
|
||||
#define AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS 0
|
||||
#define AZ_TRAIT_PERF_MEMORYBENCHMARK_IS_AVAILABLE 0
|
||||
#define AZ_TRAIT_PUMP_SYSTEM_EVENTS_WHILE_LOADING 0
|
||||
#define AZ_TRAIT_PUMP_SYSTEM_EVENTS_WHILE_LOADING_INTERVAL_MS 0
|
||||
|
||||
@@ -33,12 +33,20 @@ namespace AZ
|
||||
ID3D12DeviceX* dx12Device = device.GetDevice();
|
||||
|
||||
m_copyQueue = CommandQueue::Create();
|
||||
|
||||
|
||||
// The async upload queue should always use the primary copy queue,
|
||||
// but because this change is being made in the stabilization branch
|
||||
// we will put it behind a define out of an abundance of caution, and
|
||||
// change it to always do this once the change gets back to development.
|
||||
#if defined(AZ_DX12_USE_PRIMARY_COPY_QUEUE_FOR_ASYNC_UPLOAD_QUEUE)
|
||||
m_copyQueue = &device.GetCommandQueueContext().GetCommandQueue(RHI::HardwareQueueClass::Copy);
|
||||
#else
|
||||
// Make a secondary Copy queue, the primary queue is owned by the CommandQueueContext
|
||||
CommandQueueDescriptor commandQueueDesc;
|
||||
commandQueueDesc.m_hardwareQueueClass = RHI::HardwareQueueClass::Copy;
|
||||
commandQueueDesc.m_hardwareQueueSubclass = HardwareQueueSubclass::Secondary;
|
||||
m_copyQueue->Init(device, commandQueueDesc);
|
||||
#endif // defined(AZ_DX12_ASYNC_UPLOAD_QUEUE_USE_PRIMARY_COPY_QUEUE)
|
||||
m_uploadFence.Init(dx12Device, RHI::FenceState::Signaled);
|
||||
|
||||
for (size_t i = 0; i < descriptor.m_frameCount; ++i)
|
||||
|
||||
Reference in New Issue
Block a user