2021-07-02 14:41:38 -07:00
|
|
|
/* Copyright (c) 2015 - 2021 Advanced Micro Devices, Inc.
|
2020-02-04 09:26:14 -08:00
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
|
|
|
in the Software without restriction, including without limitation the rights
|
|
|
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
|
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
|
|
|
all copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
|
THE SOFTWARE. */
|
|
|
|
|
|
2016-01-22 18:18:55 -05:00
|
|
|
#include "top.hpp"
|
|
|
|
|
#include "os/os.hpp"
|
|
|
|
|
#include "device/device.hpp"
|
|
|
|
|
#include "device/pal/paldefs.hpp"
|
|
|
|
|
#include "device/pal/palsettings.hpp"
|
|
|
|
|
|
|
|
|
|
#include <algorithm>
|
|
|
|
|
|
2016-11-09 10:55:17 -05:00
|
|
|
#if defined(_WIN32)
|
|
|
|
|
#include "Windows.h"
|
|
|
|
|
#include "VersionHelpers.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
2024-06-06 18:40:49 +01:00
|
|
|
namespace amd::pal {
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
Settings::Settings() {
|
|
|
|
|
// Initialize the GPU device default settings
|
|
|
|
|
oclVersion_ = OpenCL12;
|
|
|
|
|
debugFlags_ = 0;
|
|
|
|
|
remoteAlloc_ = REMOTE_ALLOC;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
stagedXferRead_ = true;
|
|
|
|
|
stagedXferWrite_ = true;
|
2022-11-17 14:44:24 -05:00
|
|
|
stagedXferSize_ = GPU_STAGING_BUFFER_SIZE * Mi;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// We will enable staged read/write if we use local memory
|
|
|
|
|
disablePersistent_ = false;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
imageSupport_ = false;
|
|
|
|
|
hwLDSSize_ = 0;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Set this to true when we drop the flag
|
|
|
|
|
doublePrecision_ = ::CL_KHR_FP64;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Fill workgroup info size
|
2017-09-08 11:17:38 -04:00
|
|
|
maxWorkGroupSize_ = 1024;
|
|
|
|
|
preferredWorkGroupSize_ = 256;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
hostMemDirectAccess_ = HostMemDisable;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2023-02-15 07:23:23 +00:00
|
|
|
// By default use host blit
|
|
|
|
|
blitEngine_ = BlitEngineHost;
|
2023-02-17 18:49:15 -05:00
|
|
|
pinnedXferSize_ = GPU_PINNED_XFER_SIZE * Mi;
|
|
|
|
|
size_t defaultMinXferSize = amd::IS_HIP ? 128 : 4;
|
2019-08-29 18:58:53 -04:00
|
|
|
pinnedMinXferSize_ = flagIsDefault(GPU_PINNED_MIN_XFER_SIZE) ? defaultMinXferSize * Mi
|
2023-02-17 18:49:15 -05:00
|
|
|
: GPU_PINNED_MIN_XFER_SIZE * Mi;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// GPU device by default
|
|
|
|
|
apuSystem_ = false;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Disable 64 bit pointers support by default
|
|
|
|
|
use64BitPtr_ = false;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Max alloc size is 16GB
|
|
|
|
|
maxAllocSize_ = 16 * static_cast<uint64_t>(Gi);
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Disable memory dependency tracking by default
|
|
|
|
|
numMemDependencies_ = 0;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// By default cache isn't present
|
|
|
|
|
cacheLineSize_ = 0;
|
|
|
|
|
cacheSize_ = 0;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Initialize transfer buffer size to 1MB by default
|
|
|
|
|
xferBufSize_ = 1024 * Ki;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Use image DMA if requested
|
|
|
|
|
imageDMA_ = GPU_IMAGE_DMA;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Number of compute rings.
|
|
|
|
|
numComputeRings_ = 0;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Device enqueuing settings
|
|
|
|
|
numDeviceEvents_ = 1024;
|
|
|
|
|
numWaitEvents_ = 8;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2019-06-07 16:04:41 -04:00
|
|
|
numScratchWavesPerCu_ = 32;
|
2016-11-22 16:29:56 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Don't support platform atomics by default.
|
|
|
|
|
svmAtomics_ = false;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Use host queue for device enqueuing by default
|
|
|
|
|
useDeviceQueue_ = GPU_USE_DEVICE_QUEUE;
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Don't support Denormals for single precision by default
|
|
|
|
|
singleFpDenorm_ = false;
|
2017-01-19 11:45:14 -05:00
|
|
|
|
2018-02-21 17:35:38 -05:00
|
|
|
// SQTT buffer size in bytes
|
|
|
|
|
rgpSqttDispCount_ = PAL_RGP_DISP_COUNT;
|
|
|
|
|
rgpSqttWaitIdle_ = true;
|
|
|
|
|
rgpSqttForceDisable_ = false;
|
2018-03-15 17:26:25 -04:00
|
|
|
|
|
|
|
|
// Sub allocation parameters
|
|
|
|
|
subAllocationMinSize_ = 4 * Ki;
|
|
|
|
|
subAllocationChunkSize_ = 64 * Mi;
|
|
|
|
|
subAllocationMaxSize_ =
|
2019-05-08 19:22:02 -04:00
|
|
|
std::min(static_cast<uint64_t>(GPU_MAX_SUBALLOC_SIZE) * Ki, subAllocationChunkSize_);
|
2018-04-10 12:34:33 -04:00
|
|
|
|
2018-04-10 15:53:40 -04:00
|
|
|
maxCmdBuffers_ = 12;
|
2019-01-07 18:02:10 -05:00
|
|
|
enableWgpMode_ = false;
|
|
|
|
|
enableWave32Mode_ = false;
|
2019-03-19 15:43:32 -04:00
|
|
|
lcWavefrontSize64_ = true;
|
2019-05-13 12:19:10 -04:00
|
|
|
enableHwP2P_ = false;
|
2019-07-16 14:56:08 -04:00
|
|
|
imageBufferWar_ = false;
|
2019-11-15 13:04:36 -05:00
|
|
|
disableSdma_ = PAL_DISABLE_SDMA;
|
2019-09-17 14:59:50 -04:00
|
|
|
mallPolicy_ = 0;
|
2019-09-30 14:50:20 -04:00
|
|
|
alwaysResident_ = amd::IS_HIP ? true : false;
|
2021-04-06 18:55:30 -04:00
|
|
|
prepinnedMinSize_ = 0;
|
2022-10-31 14:17:57 -04:00
|
|
|
cpDmaCopySizeMax_ = GPU_CP_DMA_COPY_SIZE * Ki;
|
2024-03-15 19:59:29 +00:00
|
|
|
kernel_arg_impl_ = flagIsDefault(HIP_FORCE_DEV_KERNARG) ? KernelArgImpl::DeviceKernelArgs
|
|
|
|
|
: HIP_FORCE_DEV_KERNARG;
|
2023-11-14 12:49:17 -05:00
|
|
|
|
|
|
|
|
limit_blit_wg_ = 16;
|
2025-12-01 12:49:26 -08:00
|
|
|
DEBUG_HIP_GRAPH_SEGMENT_SCHEDULING = 0; // disable graph performance optimizations for PAL
|
2016-01-22 18:18:55 -05:00
|
|
|
}
|
|
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
bool Settings::create(const Pal::DeviceProperties& palProp,
|
|
|
|
|
const Pal::GpuMemoryHeapProperties* heaps, const Pal::WorkStationCaps& wscaps,
|
2025-09-02 15:05:18 +01:00
|
|
|
const amd::Isa& isa, bool reportAsOCL12Device) {
|
2017-04-13 13:56:38 -04:00
|
|
|
uint32_t osVer = 0x0;
|
|
|
|
|
|
|
|
|
|
// Disable thread trace by default for all devices
|
|
|
|
|
threadTraceEnable_ = false;
|
|
|
|
|
|
|
|
|
|
// APU systems
|
|
|
|
|
if (palProp.gpuType == Pal::GpuType::Integrated) {
|
|
|
|
|
apuSystem_ = true;
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-02 15:05:18 +01:00
|
|
|
enableXNACK_ = (isa.xnack() == amd::Isa::Feature::Enabled);
|
2023-08-18 09:56:08 +02:00
|
|
|
bool useWavefront64 = false;
|
|
|
|
|
|
2021-12-28 12:29:58 -08:00
|
|
|
std::string appName = {};
|
|
|
|
|
std::string appPathAndName = {};
|
|
|
|
|
amd::Os::getAppPathAndFileName(appName, appPathAndName);
|
2021-01-10 12:17:06 +00:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
switch (palProp.revision) {
|
2025-07-11 11:51:47 -04:00
|
|
|
// Fall through for Navi4x ...
|
2025-09-22 08:52:41 -07:00
|
|
|
case Pal::AsicRevision::Navi44:
|
2025-07-11 11:51:47 -04:00
|
|
|
case Pal::AsicRevision::Navi48:
|
2022-07-27 12:06:23 -04:00
|
|
|
// Fall through for Navi3x ...
|
|
|
|
|
case Pal::AsicRevision::Navi33:
|
|
|
|
|
case Pal::AsicRevision::Navi32:
|
|
|
|
|
case Pal::AsicRevision::Navi31:
|
2023-09-17 08:16:04 -04:00
|
|
|
gwsInitSupported_ = false;
|
2022-07-27 12:06:23 -04:00
|
|
|
// Fall through for Navi2x ...
|
2025-04-23 11:13:03 -04:00
|
|
|
case Pal::AsicRevision::StrixHalo:
|
|
|
|
|
case Pal::AsicRevision::Strix1:
|
2025-12-03 13:39:22 -05:00
|
|
|
case Pal::AsicRevision::Krackan1:
|
2022-02-22 05:00:45 -08:00
|
|
|
case Pal::AsicRevision::Phoenix1:
|
2023-02-21 02:54:35 -08:00
|
|
|
case Pal::AsicRevision::Phoenix2:
|
2023-08-11 04:35:41 -07:00
|
|
|
case Pal::AsicRevision::HawkPoint1:
|
|
|
|
|
case Pal::AsicRevision::HawkPoint2:
|
2022-08-30 20:16:00 +00:00
|
|
|
case Pal::AsicRevision::Raphael:
|
2021-08-03 09:41:36 -07:00
|
|
|
case Pal::AsicRevision::Rembrandt:
|
2021-06-10 16:00:15 -04:00
|
|
|
case Pal::AsicRevision::Navi24:
|
2021-01-10 12:17:06 +00:00
|
|
|
case Pal::AsicRevision::Navi23:
|
|
|
|
|
case Pal::AsicRevision::Navi22:
|
|
|
|
|
case Pal::AsicRevision::Navi21:
|
2023-08-18 09:56:08 +02:00
|
|
|
// set wavefront 64 for Geekbench 5
|
|
|
|
|
{
|
|
|
|
|
if (appName == "Geekbench 5.exe" || appName == "geekbench_x86_64.exe" ||
|
|
|
|
|
appName == "geekbench5.exe") {
|
|
|
|
|
useWavefront64 = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-07-27 12:06:23 -04:00
|
|
|
// Fall through for Navi1x ...
|
2021-12-28 12:29:58 -08:00
|
|
|
case Pal::AsicRevision::Navi14:
|
|
|
|
|
case Pal::AsicRevision::Navi12:
|
|
|
|
|
case Pal::AsicRevision::Navi10:
|
2019-03-18 21:59:50 -04:00
|
|
|
enableWgpMode_ = GPU_ENABLE_WGP_MODE;
|
2025-10-23 11:21:49 -07:00
|
|
|
enableWave32Mode_ = true;
|
2019-03-18 21:59:50 -04:00
|
|
|
if (!flagIsDefault(GPU_ENABLE_WAVE32_MODE)) {
|
|
|
|
|
enableWave32Mode_ = GPU_ENABLE_WAVE32_MODE;
|
|
|
|
|
}
|
2023-08-18 09:56:08 +02:00
|
|
|
if (useWavefront64) {
|
|
|
|
|
enableWave32Mode_ = 0;
|
|
|
|
|
}
|
2019-01-07 18:02:10 -05:00
|
|
|
lcWavefrontSize64_ = !enableWave32Mode_;
|
2019-09-16 16:50:21 -04:00
|
|
|
if (palProp.gfxLevel == Pal::GfxIpLevel::GfxIp10_1) {
|
|
|
|
|
// GFX10.1 HW doesn't support custom pitch. Enable double copy workaround
|
|
|
|
|
imageBufferWar_ = GPU_IMAGE_BUFFER_WAR;
|
|
|
|
|
}
|
2019-05-13 12:19:10 -04:00
|
|
|
enableHwP2P_ = true;
|
2019-06-14 05:43:57 -04:00
|
|
|
enableCoopGroups_ = IS_LINUX;
|
|
|
|
|
enableCoopMultiDeviceGroups_ = IS_LINUX;
|
2025-10-23 11:21:49 -07:00
|
|
|
singleFpDenorm_ = true;
|
2017-04-13 13:56:38 -04:00
|
|
|
enableExtension(ClKhrFp16);
|
|
|
|
|
threadTraceEnable_ = AMD_THREAD_TRACE_ENABLE;
|
|
|
|
|
// Cache line size is 64 bytes
|
|
|
|
|
cacheLineSize_ = 64;
|
|
|
|
|
// L1 cache size is 16KB
|
|
|
|
|
cacheSize_ = 16 * Ki;
|
|
|
|
|
|
|
|
|
|
if (LP64_SWITCH(false, true)) {
|
2023-08-23 13:35:56 -04:00
|
|
|
oclVersion_ =
|
2017-04-13 13:56:38 -04:00
|
|
|
!reportAsOCL12Device ? XCONCAT(OpenCL, XCONCAT(OPENCL_MAJOR, OPENCL_MINOR)) : OpenCL12;
|
|
|
|
|
}
|
2018-07-03 12:03:24 -04:00
|
|
|
if (OPENCL_VERSION < 200) {
|
2017-04-13 13:56:38 -04:00
|
|
|
oclVersion_ = OpenCL12;
|
|
|
|
|
}
|
|
|
|
|
numComputeRings_ = 8;
|
|
|
|
|
|
2017-10-18 13:13:31 -04:00
|
|
|
// Cap at OpenCL20 for now
|
|
|
|
|
if (oclVersion_ > OpenCL20) oclVersion_ = OpenCL20;
|
2023-11-14 12:49:17 -05:00
|
|
|
|
2023-08-23 13:35:56 -04:00
|
|
|
use64BitPtr_ = LP64_SWITCH(false, true);
|
2017-04-13 13:56:38 -04:00
|
|
|
|
|
|
|
|
if (oclVersion_ >= OpenCL20) {
|
|
|
|
|
supportDepthsRGB_ = true;
|
|
|
|
|
}
|
|
|
|
|
if (use64BitPtr_) {
|
2023-08-23 13:35:56 -04:00
|
|
|
maxAllocSize_ = 64ULL * Gi;
|
2017-04-13 13:56:38 -04:00
|
|
|
} else {
|
|
|
|
|
maxAllocSize_ = 3ULL * Gi;
|
|
|
|
|
}
|
|
|
|
|
supportRA_ = false;
|
|
|
|
|
numMemDependencies_ = GPU_NUM_MEM_DEPENDENCY;
|
|
|
|
|
break;
|
2016-01-22 18:18:55 -05:00
|
|
|
default:
|
2017-04-13 13:56:38 -04:00
|
|
|
assert(0 && "Unknown ASIC type!");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2020-09-23 16:54:54 -04:00
|
|
|
if (0 == palProp.engineProperties[Pal::EngineTypeDma].engineCount) {
|
|
|
|
|
disableSdma_ = true;
|
|
|
|
|
}
|
|
|
|
|
|
2019-07-24 18:32:37 -04:00
|
|
|
// Image DMA must be disabled if SDMA is disabled
|
|
|
|
|
imageDMA_ &= !disableSdma_;
|
|
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Enable atomics support
|
|
|
|
|
enableExtension(ClKhrInt64BaseAtomics);
|
|
|
|
|
enableExtension(ClKhrInt64ExtendedAtomics);
|
|
|
|
|
enableExtension(ClKhrGlobalInt32BaseAtomics);
|
|
|
|
|
enableExtension(ClKhrGlobalInt32ExtendedAtomics);
|
|
|
|
|
enableExtension(ClKhrLocalInt32BaseAtomics);
|
|
|
|
|
enableExtension(ClKhrLocalInt32ExtendedAtomics);
|
|
|
|
|
enableExtension(ClKhrByteAddressableStore);
|
|
|
|
|
enableExtension(ClKhr3DImageWrites);
|
|
|
|
|
enableExtension(ClKhrImage2dFromBuffer);
|
|
|
|
|
enableExtension(ClAmdMediaOps);
|
|
|
|
|
enableExtension(ClAmdMediaOps2);
|
2021-03-09 11:44:13 -05:00
|
|
|
|
|
|
|
|
{
|
|
|
|
|
// Not supported by Unknown device
|
|
|
|
|
enableExtension(ClKhrGlSharing);
|
|
|
|
|
enableExtension(ClKhrGlEvent);
|
|
|
|
|
enableExtension(ClAmdCopyBufferP2P);
|
|
|
|
|
}
|
2018-10-02 18:50:36 -04:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Enable some platform extensions
|
|
|
|
|
enableExtension(ClAmdDeviceAttributeQuery);
|
2018-10-02 18:50:36 -04:00
|
|
|
|
2019-11-15 12:27:42 -05:00
|
|
|
if (hwLDSSize_ == 0) {
|
|
|
|
|
// Use hardcoded values for now, since PAL properties aren't available with offline devices
|
2025-01-07 11:04:44 -08:00
|
|
|
hwLDSSize_ = (IS_LINUX || amd::IS_HIP) ? 64 * Ki : 32 * Ki;
|
2019-11-15 12:27:42 -05:00
|
|
|
}
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
imageSupport_ = true;
|
2025-09-09 03:24:48 +01:00
|
|
|
|
2023-02-15 07:23:23 +00:00
|
|
|
// Use kernels for blit if appropriate
|
|
|
|
|
blitEngine_ = BlitEngineKernel;
|
|
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
hostMemDirectAccess_ |= HostMemBuffer;
|
|
|
|
|
// HW doesn't support untiled image writes
|
|
|
|
|
// hostMemDirectAccess_ |= HostMemImage;
|
|
|
|
|
|
|
|
|
|
if (doublePrecision_) {
|
|
|
|
|
// Enable KHR double precision extension
|
|
|
|
|
enableExtension(ClKhrFp64);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (palProp.gpuMemoryProperties.busAddressableMemSize > 0) {
|
|
|
|
|
// Enable bus addressable memory extension
|
|
|
|
|
enableExtension(ClAMDBusAddressableMemory);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
svmFineGrainSystem_ = palProp.gpuMemoryProperties.flags.iommuv2Support;
|
|
|
|
|
svmAtomics_ = svmFineGrainSystem_;
|
|
|
|
|
|
|
|
|
|
// SVM is not currently supported for DX Interop
|
2016-01-22 18:18:55 -05:00
|
|
|
#if defined(_WIN32)
|
2017-04-13 13:56:38 -04:00
|
|
|
enableExtension(ClKhrD3d9Sharing);
|
|
|
|
|
enableExtension(ClKhrD3d10Sharing);
|
|
|
|
|
enableExtension(ClKhrD3d11Sharing);
|
|
|
|
|
#endif // _WIN32
|
|
|
|
|
|
|
|
|
|
// Enable some OpenCL 2.0 extensions
|
|
|
|
|
if (oclVersion_ >= OpenCL20) {
|
|
|
|
|
enableExtension(ClKhrSubGroups);
|
|
|
|
|
enableExtension(ClKhrDepthImages);
|
|
|
|
|
|
2024-06-10 17:11:08 -04:00
|
|
|
if (GPU_MIPMAP && imageSupport_) {
|
2017-04-13 13:56:38 -04:00
|
|
|
enableExtension(ClKhrMipMapImage);
|
|
|
|
|
enableExtension(ClKhrMipMapImageWrites);
|
|
|
|
|
}
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2018-05-22 14:44:23 -04:00
|
|
|
#if defined(_WIN32)
|
|
|
|
|
enableExtension(ClAmdPlanarYuv);
|
|
|
|
|
#endif
|
2017-04-13 13:56:38 -04:00
|
|
|
}
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2022-11-04 13:50:06 -04:00
|
|
|
if (apuSystem_ && ((heaps[Pal::GpuHeapLocal].logicalSize +
|
|
|
|
|
heaps[Pal::GpuHeapInvisible].logicalSize) < (150 * Mi))) {
|
2017-04-13 13:56:38 -04:00
|
|
|
remoteAlloc_ = true;
|
|
|
|
|
}
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2018-01-11 14:11:44 -05:00
|
|
|
// Update resource cache size
|
2017-04-13 13:56:38 -04:00
|
|
|
if (remoteAlloc_) {
|
2022-11-04 13:50:06 -04:00
|
|
|
resourceCacheSize_ = std::max((heaps[Pal::GpuHeapGartUswc].logicalSize / 8),
|
2017-04-13 13:56:38 -04:00
|
|
|
(uint64_t)GPU_RESOURCE_CACHE_SIZE * Mi);
|
|
|
|
|
} else {
|
2024-10-25 17:03:55 -04:00
|
|
|
if (apuSystem_) {
|
|
|
|
|
resourceCacheSize_ = std::max(
|
|
|
|
|
((heaps[Pal::GpuHeapLocal].logicalSize + heaps[Pal::GpuHeapInvisible].logicalSize +
|
|
|
|
|
heaps[Pal::GpuHeapGartUswc].logicalSize) /
|
|
|
|
|
8),
|
|
|
|
|
(uint64_t)GPU_RESOURCE_CACHE_SIZE * Mi);
|
|
|
|
|
} else {
|
|
|
|
|
resourceCacheSize_ = std::max(
|
|
|
|
|
((heaps[Pal::GpuHeapLocal].logicalSize + heaps[Pal::GpuHeapInvisible].logicalSize) / 8),
|
|
|
|
|
(uint64_t)GPU_RESOURCE_CACHE_SIZE * Mi);
|
|
|
|
|
}
|
2018-01-29 17:47:45 -05:00
|
|
|
#if !defined(_LP64)
|
|
|
|
|
resourceCacheSize_ = std::min(resourceCacheSize_, 1 * Gi);
|
|
|
|
|
#endif
|
2017-04-13 13:56:38 -04:00
|
|
|
}
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2026-01-26 11:35:01 -05:00
|
|
|
resourceCacheSize_ = std::min(resourceCacheSize_,
|
|
|
|
|
(uint64_t)GPU_MAX_RESOURCE_CACHE_SIZE * Mi);
|
|
|
|
|
|
2021-04-06 18:55:30 -04:00
|
|
|
// If is Rebar, override prepinned memory size.
|
2022-11-04 13:50:06 -04:00
|
|
|
if ((heaps[Pal::GpuHeapInvisible].logicalSize == 0) &&
|
|
|
|
|
(heaps[Pal::GpuHeapLocal].logicalSize > 256 * Mi)) {
|
2021-04-06 18:55:30 -04:00
|
|
|
prepinnedMinSize_ = PAL_PREPINNED_MEMORY_SIZE * Ki;
|
|
|
|
|
}
|
2017-04-12 19:14:23 -05:00
|
|
|
|
2023-11-14 12:49:17 -05:00
|
|
|
limit_blit_wg_ = enableWgpMode_ ? palProp.gfxipProperties.shaderCore.numAvailableCus / 2
|
|
|
|
|
: palProp.gfxipProperties.shaderCore.numAvailableCus;
|
|
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
// Override current device settings
|
|
|
|
|
override();
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
return true;
|
2016-01-22 18:18:55 -05:00
|
|
|
}
|
|
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
void Settings::override() {
|
|
|
|
|
// Limit reported workgroup size
|
|
|
|
|
if (GPU_MAX_WORKGROUP_SIZE != 0) {
|
2017-09-11 18:19:56 -04:00
|
|
|
preferredWorkGroupSize_ = GPU_MAX_WORKGROUP_SIZE;
|
2017-09-08 11:17:38 -04:00
|
|
|
}
|
|
|
|
|
|
2023-02-15 07:23:23 +00:00
|
|
|
// Override blit engine type
|
|
|
|
|
if (GPU_BLIT_ENGINE_TYPE != BlitEngineDefault) {
|
|
|
|
|
blitEngine_ = GPU_BLIT_ENGINE_TYPE;
|
|
|
|
|
}
|
|
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
if (!flagIsDefault(DEBUG_GPU_FLAGS)) {
|
|
|
|
|
debugFlags_ = DEBUG_GPU_FLAGS;
|
|
|
|
|
}
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
if (!flagIsDefault(GPU_XFER_BUFFER_SIZE)) {
|
|
|
|
|
xferBufSize_ = GPU_XFER_BUFFER_SIZE * Ki;
|
|
|
|
|
}
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
if (!flagIsDefault(GPU_NUM_COMPUTE_RINGS)) {
|
|
|
|
|
numComputeRings_ = GPU_NUM_COMPUTE_RINGS;
|
|
|
|
|
}
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
if (!flagIsDefault(GPU_RESOURCE_CACHE_SIZE)) {
|
|
|
|
|
resourceCacheSize_ = GPU_RESOURCE_CACHE_SIZE * Mi;
|
|
|
|
|
}
|
2016-01-22 18:18:55 -05:00
|
|
|
|
2019-05-13 12:19:10 -04:00
|
|
|
if (!flagIsDefault(GPU_ENABLE_HW_P2P)) {
|
|
|
|
|
enableHwP2P_ = GPU_ENABLE_HW_P2P;
|
|
|
|
|
}
|
|
|
|
|
|
2017-04-13 13:56:38 -04:00
|
|
|
if (!flagIsDefault(AMD_GPU_FORCE_SINGLE_FP_DENORM)) {
|
|
|
|
|
switch (AMD_GPU_FORCE_SINGLE_FP_DENORM) {
|
|
|
|
|
case 0:
|
|
|
|
|
singleFpDenorm_ = false;
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
singleFpDenorm_ = true;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
2016-01-22 18:18:55 -05:00
|
|
|
}
|
2017-04-13 13:56:38 -04:00
|
|
|
}
|
2018-04-10 12:34:33 -04:00
|
|
|
|
|
|
|
|
if (!flagIsDefault(GPU_MAX_COMMAND_BUFFERS)) {
|
|
|
|
|
maxCmdBuffers_ = GPU_MAX_COMMAND_BUFFERS;
|
|
|
|
|
}
|
2019-06-14 04:25:03 -04:00
|
|
|
|
|
|
|
|
if (!flagIsDefault(GPU_ENABLE_COOP_GROUPS)) {
|
|
|
|
|
enableCoopGroups_ = GPU_ENABLE_COOP_GROUPS;
|
|
|
|
|
enableCoopMultiDeviceGroups_ = GPU_ENABLE_COOP_GROUPS;
|
|
|
|
|
}
|
2019-09-17 14:59:50 -04:00
|
|
|
|
|
|
|
|
if (!flagIsDefault(PAL_MALL_POLICY)) {
|
|
|
|
|
mallPolicy_ = PAL_MALL_POLICY;
|
|
|
|
|
}
|
2019-09-30 14:50:20 -04:00
|
|
|
|
|
|
|
|
if (!flagIsDefault(PAL_ALWAYS_RESIDENT)) {
|
|
|
|
|
alwaysResident_ = PAL_ALWAYS_RESIDENT;
|
|
|
|
|
}
|
2023-11-14 12:49:17 -05:00
|
|
|
|
|
|
|
|
if (!flagIsDefault(DEBUG_CLR_LIMIT_BLIT_WG)) {
|
|
|
|
|
limit_blit_wg_ = std::max(DEBUG_CLR_LIMIT_BLIT_WG, 0x1U);
|
|
|
|
|
}
|
2016-01-22 18:18:55 -05:00
|
|
|
}
|
|
|
|
|
|
2024-06-06 18:40:49 +01:00
|
|
|
} // namespace amd::pal
|