RSR
导航: 使用 ADLX 编程 → ADLX 示例 → C 示例 → 3D 图形
演示了在使用 ADLX 进行编程时,如何访问 AMD Radeon™ Super Resolution 选项并执行相关测试。
命令提示符
| 命令提示符 | 描述 |
|---|---|
| 1 | 显示 Radeon Super Resolution 支持 |
| 2 | 获取当前的 Radeon Super Resolution 状态和额外信息 |
| 3 | 启用和配置锐度 |
| 4 | 禁用 Radeon Super Resolution |
| M/m | 显示主菜单 |
| Q/q | 退出应用程序 |
示例路径
/Samples/C/3DGraphics/RSR
C
代码
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; } }}