Add support for Depth Bounds test in all graphics APIs
This commit is contained in:
@@ -26,6 +26,8 @@ bool EnableNvapi = false;
|
||||
#endif
|
||||
#if COMPILE_WITH_AGS
|
||||
#include <ThirdParty/AGS/amd_ags.h>
|
||||
#include "Engine/Engine/Globals.h"
|
||||
#include "FlaxEngine.Gen.h"
|
||||
AGSContext* AgsContext = nullptr;
|
||||
#endif
|
||||
#if !USE_EDITOR && PLATFORM_WINDOWS
|
||||
@@ -469,23 +471,23 @@ bool GPUDeviceDX11::Init()
|
||||
if (returnCode == AGS_SUCCESS)
|
||||
{
|
||||
LOG(Info, "AMD driver version: {}, Radeon Software Version {}", TO_UTF16(gpuInfo.driverVersion), TO_UTF16(gpuInfo.radeonSoftwareVersion));
|
||||
const Char* asicFamily[] =
|
||||
{
|
||||
TEXT("Unknown"),
|
||||
TEXT("Pre GCN"),
|
||||
TEXT("GCN Gen1"),
|
||||
TEXT("GCN Gen2"),
|
||||
TEXT("GCN Gen3"),
|
||||
TEXT("GCN Gen4"),
|
||||
TEXT("Vega"),
|
||||
TEXT("RDNA"),
|
||||
TEXT("RDNA2"),
|
||||
TEXT("RDNA3"),
|
||||
TEXT("RDNA4"),
|
||||
};
|
||||
for (int32 i = 0; i < gpuInfo.numDevices; i++)
|
||||
{
|
||||
AGSDeviceInfo& deviceInfo = gpuInfo.devices[i];
|
||||
const Char* asicFamily[] =
|
||||
{
|
||||
TEXT("Unknown"),
|
||||
TEXT("Pre GCN"),
|
||||
TEXT("GCN Gen1"),
|
||||
TEXT("GCN Gen2"),
|
||||
TEXT("GCN Gen3"),
|
||||
TEXT("GCN Gen4"),
|
||||
TEXT("Vega"),
|
||||
TEXT("RDNA"),
|
||||
TEXT("RDNA2"),
|
||||
TEXT("RDNA3"),
|
||||
TEXT("RDNA4"),
|
||||
};
|
||||
LOG(Info, " > GPU {}: {} ({})", i, TO_UTF16(deviceInfo.adapterString), asicFamily[deviceInfo.asicFamily <= AGSAsicFamily_RDNA4 ? deviceInfo.asicFamily : 0]);
|
||||
LOG(Info, " CUs: {}, WGPs: {}, ROPs: {}", deviceInfo.numCUs, deviceInfo.numWGPs, deviceInfo.numROPs);
|
||||
LOG(Info, " Core clock: {} MHz, Memory clock: {} MHz, {:.2f} Tflops", deviceInfo.coreClock, deviceInfo.memoryClock, deviceInfo.teraFlops);
|
||||
@@ -494,7 +496,8 @@ bool GPUDeviceDX11::Init()
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG(Warning, "agsInitialize failed with result {} ({})", (int32)returnCode);
|
||||
LOG(Warning, "agsInitialize failed with result {}", (int32)returnCode);
|
||||
AgsContext = nullptr;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -518,9 +521,38 @@ bool GPUDeviceDX11::Init()
|
||||
// Create DirectX device
|
||||
D3D_FEATURE_LEVEL createdFeatureLevel = static_cast<D3D_FEATURE_LEVEL>(0);
|
||||
D3D_FEATURE_LEVEL targetFeatureLevel = _adapter->MaxFeatureLevel;
|
||||
VALIDATE_DIRECTX_CALL(D3D11CreateDevice(adapter, D3D_DRIVER_TYPE_UNKNOWN, NULL, flags, &targetFeatureLevel, 1, D3D11_SDK_VERSION, &_device, &createdFeatureLevel, &_imContext));
|
||||
ASSERT(_device);
|
||||
ASSERT(_imContext);
|
||||
#if COMPILE_WITH_AGS
|
||||
AGSDX11ReturnedParams AgsReturnedParams;
|
||||
if (AgsContext)
|
||||
{
|
||||
AGSDX11DeviceCreationParams creationParams = { adapter, D3D_DRIVER_TYPE_UNKNOWN, NULL, flags, &targetFeatureLevel, 1, D3D11_SDK_VERSION, nullptr };
|
||||
AGSDX11ExtensionParams extensionParams = {
|
||||
*Globals::ProductName,
|
||||
TEXT("Flax"),
|
||||
AGS_UNSPECIFIED_VERSION,
|
||||
AGS_MAKE_VERSION(FLAXENGINE_VERSION_MAJOR, FLAXENGINE_VERSION_MINOR, FLAXENGINE_VERSION_BUILD),
|
||||
0,
|
||||
7,
|
||||
AGS_CROSSFIRE_MODE_DISABLE
|
||||
};
|
||||
Platform::MemoryClear(&AgsReturnedParams, sizeof(AgsReturnedParams));
|
||||
AGSReturnCode returnCode = agsDriverExtensionsDX11_CreateDevice(AgsContext, &creationParams, &extensionParams, &AgsReturnedParams);
|
||||
if (returnCode != AGS_SUCCESS)
|
||||
{
|
||||
LOG(Error, "agsDriverExtensionsDX11_CreateDevice failed with result {}", (int32)returnCode);
|
||||
return true;
|
||||
}
|
||||
_device = AgsReturnedParams.pDevice;
|
||||
_imContext = AgsReturnedParams.pImmediateContext;
|
||||
createdFeatureLevel = AgsReturnedParams.featureLevel;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
VALIDATE_DIRECTX_CALL(D3D11CreateDevice(adapter, D3D_DRIVER_TYPE_UNKNOWN, NULL, flags, &targetFeatureLevel, 1, D3D11_SDK_VERSION, &_device, &createdFeatureLevel, &_imContext));
|
||||
}
|
||||
if (!_device || !_imContext)
|
||||
return true;
|
||||
ASSERT(createdFeatureLevel == targetFeatureLevel);
|
||||
_state = DeviceState::Created;
|
||||
|
||||
@@ -628,6 +660,20 @@ bool GPUDeviceDX11::Init()
|
||||
_device->CheckFormatSupport(dxgiFormat, &formatSupport);
|
||||
FeaturesPerFormat[i] = FormatFeatures(format, static_cast<MSAALevel>(maxCount), (FormatSupport)formatSupport);
|
||||
}
|
||||
|
||||
// Driver extensions support
|
||||
#if COMPILE_WITH_NVAPI
|
||||
if (EnableNvapi)
|
||||
{
|
||||
limits.HasDepthBounds = true;
|
||||
}
|
||||
#endif
|
||||
#if COMPILE_WITH_AGS
|
||||
if (AgsContext && AgsReturnedParams.extensionsSupported.depthBoundsTest != 0)
|
||||
{
|
||||
limits.HasDepthBounds = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// Init debug layer
|
||||
|
||||
Reference in New Issue
Block a user