RSR
Navigation: Programming with ADLX → ADLX Samples → C Samples → 3D Graphics
Demonstrates how to access AMD Radeon™ Super Resolution options, and perform related testing when programming with ADLX.
Command Prompts
| Command Prompt | Description |
|---|---|
| 1 | Display Radeon Super Resolution support |
| 2 | Get current Radeon Super Resolution state and additional information |
| 3 | Enable and configure sharpness |
| 4 | Disable Radeon Super Resolution |
| M/m | Display the main menu |
| Q/q | Quit the application |
Sample Path
/Samples/C/3DGraphics/RSR
C
Code
C
//// Copyright Advanced Micro Devices, Inc. All rights reserved.////-------------------------------------------------------------------------------------------------
/// \file mainRSR.c/// \brief Demonstrates how to access AMD Radeon Super Resolution options, and perform related testing when programming with ADLX.
#include "SDK/ADLXHelper/Windows/C/ADLXHelper.h"#include "SDK/Include/I3DSettings.h"
// Display Radeon Super Resolution supportvoid ShowRadeonSuperResolutionSupport(IADLX3DRadeonSuperResolution* rsr);
// Display current Radeon Super Resolution statevoid GetRadeonSuperResolutionState(IADLX3DRadeonSuperResolution* rsr);
// Set Radeon Super Resolution statevoid SetRadeonSuperResolutionState(IADLX3DRadeonSuperResolution* rsr, int index);
// Menuvoid MainMenu();
// Menu controlvoid MenuControl(IADLX3DRadeonSuperResolution* rsr);
int main(){ // Define return code ADLX_RESULT res = ADLX_FAIL;
// Initialize ADLX res = ADLXHelper_Initialize(); if (ADLX_SUCCEEDED(res)) { // Get system services IADLXSystem* sys = ADLXHelper_GetSystemServices();
// Get 3DSettings service IADLX3DSettingsServices* d3dSettingSrv = NULL; res = sys->pVtbl->Get3DSettingsServices(sys, &d3dSettingSrv);
if (ADLX_SUCCEEDED(res)) { // Get RadeonSuperResolution interface IADLX3DRadeonSuperResolution* rsr = NULL; res = d3dSettingSrv->pVtbl->GetRadeonSuperResolution(d3dSettingSrv, &rsr); if (ADLX_SUCCEEDED(res)) { MainMenu(); MenuControl(rsr); } else { printf("Get RadeonSuperResolution res: %d\n", res); }
// Release the RadeonSuperResolution interface if (rsr != NULL) { rsr->pVtbl->Release(rsr); rsr = NULL; } } else { printf("Failed to get 3DSettings services\n"); }
// Release the 3DSettingsService interface if (d3dSettingSrv != NULL) { d3dSettingSrv->pVtbl->Release(d3dSettingSrv); d3dSettingSrv = NULL; } } else { printf("ADLX initialization failed\n"); return 0; }
// Destroy ADLX res = ADLXHelper_Terminate(); printf("Destroy ADLX res: %d\n", res);
// Pause to see the print out system("pause");
return 0;}
void ShowRadeonSuperResolutionSupport(IADLX3DRadeonSuperResolution* rsr){ adlx_bool supported = false; ADLX_RESULT res = rsr->pVtbl->IsSupported(rsr, &supported); if (ADLX_SUCCEEDED(res)) printf("\tIsSupported: %d\n", supported);}
void GetRadeonSuperResolutionState(IADLX3DRadeonSuperResolution* rsr){ adlx_bool supported = false; ADLX_RESULT res = rsr->pVtbl->IsSupported(rsr, &supported); if (supported) { adlx_bool enabled = false; ADLX_RESULT res = rsr->pVtbl->IsEnabled(rsr, &enabled); if (ADLX_SUCCEEDED(res)) printf("\tIsEnabled: %d\n", enabled); adlx_int sharpness; ADLX_IntRange sharpnessRange; res = rsr->pVtbl->GetSharpness(rsr, &sharpness); if (ADLX_SUCCEEDED(res)) printf("\tCurrent sharpness: %d\n", sharpness); res = rsr->pVtbl->GetSharpnessRange(rsr, &sharpnessRange); if (ADLX_SUCCEEDED(res)) printf("\tSharpness limit [ %d , %d ], step: %d\n", sharpnessRange.minValue, sharpnessRange.maxValue, sharpnessRange.step); } else { printf("\tRSR feature is not supported\n"); }}
void SetRadeonSuperResolutionState(IADLX3DRadeonSuperResolution* rsr, int index){ ADLX_RESULT res = rsr->pVtbl->SetEnabled(rsr, index == 0); printf("\tReturn code is: %d (0 means success)\n", res);
if (index == 0 && ADLX_SUCCEEDED(res)) { adlx_int sharpness; ADLX_IntRange sharpnessRange; ADLX_RESULT res1 = rsr->pVtbl->GetSharpness(rsr, &sharpness); ADLX_RESULT res2 = rsr->pVtbl->GetSharpnessRange(rsr, &sharpnessRange); if (ADLX_SUCCEEDED (res1) && ADLX_SUCCEEDED (res2)) { if (sharpness != sharpnessRange.minValue) { res = rsr->pVtbl->SetSharpness(rsr, sharpnessRange.minValue); printf("\tUse minimum sharpness limit, return code is: %d (0 means success)\n", res); } else { res = rsr->pVtbl->SetSharpness(rsr, sharpnessRange.maxValue); printf("\tUse maximum sharpness limit, return code is: %d (0 means success)\n", res); } } }}
void MainMenu(){ printf("\tChoose from the following options:\n");
printf("\t->Press 1 to display Radeon Super Resolution support\n"); printf("\t->Press 2 to display current Radeon Super Resolution state\n"); printf("\t->Press 3 to enable Radeon Super Resolution\n"); printf("\t->Press 4 to disable Radeon Super Resolution\n");
printf("\t->Press Q/q to quit the application\n"); printf("\t->Press M/m to display menu options\n");}
void MenuControl(IADLX3DRadeonSuperResolution* rsr){ int num = 0; while ((num = getchar()) != 'q' && num != 'Q') { switch (num) { // Display Radeon Super Resolution support case '1': ShowRadeonSuperResolutionSupport(rsr); break;
// Display current Radeon Super Resolution state case '2': GetRadeonSuperResolutionState(rsr); break;
// Set Radeon Super Resolution case '3': case '4': SetRadeonSuperResolutionState(rsr, num - '3'); break;
// Display menu options case 'm': case 'M': MainMenu(); break; default: break; } }}