GraphicsDevice
class in
UnityEngine.AMD
Suggest a change
Success!
Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
Close
Submission failed
For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
Close
Description
Provides the main entry point for the AMD Module. Use this to interact with the FSR2, FSR3, and FSR4 features.
The GraphicsDevice includes an interface for creating and managing feature contexts, handling FSR2 command execution, and providing utility methods for quality mode resolution management.
GraphicsDevice is needed to implement FSR2, FSR3, and FSR4, outside of the built-in integration, for instance,
FSR2 via the HDRP Dynamic Resolution.
URP supports them via Upscaler Framework and HDRP supports FSR3 and FSR4 via the framework.
Before using GraphicsDevice, ensure the AMDUnityPlugin is loaded and the device is initialized via GraphicsDevice.CreateGraphicsDevice.
Additional resources: AMDUnityPlugin, FSR2Context, FSR2TextureTable, FSR2CommandInitializationData, FSR2CommandExecutionData, FSRUpscalerCommandInitializationData
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;
using UnityEngine.AMD;
// Example HDRP custom pass
public class CustomFSRPass : CustomPass
{
public static bool EnsureAMDPluginLoaded()
{
if (!AMDUnityPlugin.IsLoaded())
{
Debug.Log("AMDUnityPlugin is not loaded!");
if (!AMDUnityPlugin.Load())
{
Debug.LogError("Unable to load AMDUnityPlugin");
return false;
}
}
Debug.Log("AMDUnityPlugin is successfully loaded!");
return true;
}
void InitializeAMDDevice()
{
if (!EnsureAMDPluginLoaded())
return;
// AMDUnityPlugin initialization will handle device creation for us.
// In case the device is not created, we call the static method GraphicsDevice.CreateGraphicsDevice().
amdDevice = GraphicsDevice.device == null ? GraphicsDevice.CreateGraphicsDevice() : GraphicsDevice.device;
Debug.LogFormat("AMD.GraphicsDevice initialized w/ version {0}", GraphicsDevice.version);
}
protected override void Setup(ScriptableRenderContext renderContext, CommandBuffer cmd)
{
if (amdDevice == null)
{
InitializeAMDDevice();
}
float scalingRatio = fsr2Context == null ? 1.0f : amdDevice.GetUpscaleRatioFromQualityMode(m_Quality);
fsr2OutputColorBuffer = RTHandles.Alloc(
new Vector2(scalingRatio, scalingRatio),
dimension: TextureDimension.Tex2D,
colorFormat: GraphicsFormat.R16G16B16A16_SFloat,
name: "fsr2OutputColorBuffer",
enableRandomWrite: true
);
// other pass setup code
}
protected override void Execute(CustomPassContext ctx)
{
bool initializeFsr2Context = fsr2Context == null || HasInputResolutionChanged(ctx) || HasOutputResolutionChanged(ctx);
if (initializeFsr2Context)
{
if (fsr2Context != null)
{
amdDevice.DestroyFeature(ctx.cmd, fsr2Context);
fsr2Context = null;
}
FSR2CommandInitializationData initData = new FSR2CommandInitializationData();
// populate initData
fsr2Context = amdDevice.CreateFeature(ctx.cmd, initData);
}
fsr2Context.executeData.enableSharpening = m_EnableSharpening ? 1 : 0;
// populate rest of fsr2Context.executeData
FSR2TextureTable fsr2TextureTable = new FSR2TextureTable()
{
// populate texture table
};
amdDevice.ExecuteFSR2(ctx.cmd, fsr2Context, fsr2TextureTable);
}
protected override void Cleanup()
{
// pass cleanup code
// No explicit clean up is necessary for AMD.GraphicsDevice, all handled internally
}
private GraphicsDevice amdDevice = null;
private FSR2Context fsr2Context = null;
private RTHandle fsr2OutputColorBuffer;
// other member variables
}
Static Properties
| Property |
Description |
| device | Gets the device created by GraphicsDevice.CreateGraphicsDevice. If the device hasn't been created this property evaluates to null. |
| version | Gets the version that corresponds to the Unity host plugin that manages the AMD.AMDUnityPlugin official library. |