I'm wanting to use ADL to properly support eyefinity on our title. The Eyefinity developer page claims that there is "Eyefinity sample code with accompanying document" included in the SDK, but the samples don't really cover what I want to do.
Could someone post a link or code snippet demonstrating how to enumerate the ATI Eyefinity modes for both normal and bezel compensated conditions.
Aha, looks like the Eyefinity sample is actually part of the AGS, not the ADL:
http://blogs.amd.com/developer/2010/11/04/introducing-the-ati-gpu-services-ags-library/
The AGS eyefinity sample code calls ATIAGSEyefinityGetConfigInfo(). This method only returns the currently enabled eyefinity mode in the Catalyst control panel.
This seems to go against what is stated in the Eyefinity whitepaper: "AMD has provided the APIs to assist the game to determine which modes are available and which are ATI Eyefinity modes."
Can I please have some dev support with this - Is it AGS or ADL that I should be using to properly support eyefinity on our title, and what is the correct way to detect which modes are eyefinity and bezel corrected etc.
I've modified main.c in ADL_Sample.sln to try and see if I could enumerate all the available eyefinity modes, and get the bezel compensation figures. See my source below and output below that. I'm running a 3x1 topology.
Catalyst Control Panel lists the following modes under Desktop Properties:
Grouped:
2400x600
3072x768
3840x1024
Bezel Compensated:
2400x600
3069x768
3840x1024
I'm not sure why I only see 2400x600 and the equivalent bezel compensated resolution in my output. What I want to be able to do is detect which modes in the list defined by Direct3D EnumAdapterModes() are eyefinity modes, and which are eyefinity modes with bezel compensation.
The eyefinity whitepaper states:
"When selecting a display mode for the game, it is beneficial for the user to understand which modes are bezel corrected and which are not. AMD has provided APIs to allow the game to identify and sort modes accordingly."
Can someone post a concrete example of which APIs to use to do this. The ADL docs state that ADL_DISPLAY_SLSMAPINDEXLIST_OPTION_ACTIVE is the only valid flag to pass to ADL_Display_SLSMapIndexList_Get - does this imply that I can only query the currently selected eyefinity mode in the Catalyst Control Panel (as opposed to enumerating all supported eyefinity modes?).
...
int iNumSLSMapIndexList;
int* iSLSMapIndexList;
ADLSLSMap SLSMap;
int iNumSLSTarget;
ADLSLSTarget* SLSTarget;
int iNumNativeMode;
ADLSLSMode* nativeMode;
int iNumBezelMode;
ADLBezelTransientMode* bezelMode;
int iNumTransientMode;
ADLBezelTransientMode* transientMode;
int iNumSLSOffset;
ADLSLSOffset* SLSOffset;
...
// Repeat for all available adapters in the system
for ( i = 0; i < iNumberAdapters; i++ )
{
iAdapterIndex = lpAdapterInfo[ i ].iAdapterIndex;
// List SLS modes.
ADL_Display_SLSMapIndexList_Get( iAdapterIndex,
&iNumSLSMapIndexList,
&iSLSMapIndexList,
ADL_DISPLAY_SLSMAPINDEXLIST_OPTION_ACTIVE );
printf("\nFound %d SLS indices for adapter %d:\n", iNumSLSMapIndexList, iAdapterIndex);
for(h = 0; h < iNumSLSMapIndexList; ++h)
{
ADL_Display_SLSMapConfig_Get( iAdapterIndex,
iSLSMapIndexList,
&SLSMap,
&iNumSLSTarget,
&SLSTarget,
&iNumNativeMode,
&nativeMode,
&iNumBezelMode,
&bezelMode,
&iNumTransientMode,
&transientMode,
&iNumSLSOffset,
&SLSOffset,
0 );
printf("\t%d - SLS Map Config %d:\n", h, iSLSMapIndexList);
printf("\t\tnativeMode %dx%d\n", nativeMode->displayMode.iXRes, nativeMode->displayMode.iYRes);
printf("\t\tbezelMode %dx%d\n", bezelMode->displayMode.iXRes, bezelMode->displayMode.iYRes);
}
...
}
Results when passing 0 to ADL_Display_SLSMapIndexList_Get iOptions param:
Found 2 SLS indices for adapter 1:
0 - SLS Map Config 0:
nativeMode 2400x600
bezelMode 2544x600
1 - SLS Map Config 0:
nativeMode 2400x600
bezelMode 2544x600
Found 2 SLS indices for adapter 2:
0 - SLS Map Config 0:
nativeMode 2400x600
bezelMode 2544x600
1 - SLS Map Config 0:
nativeMode 2400x600
bezelMode 2544x600
Found 2 SLS indices for adapter 3:
0 - SLS Map Config 0:
nativeMode 2400x600
bezelMode 2544x600
1 - SLS Map Config 0:
nativeMode 2400x600
bezelMode 2544x600
Results when passing ADL_DISPLAY_SLSMAPINDEXLIST_OPTION_ACTIVE to ADL_Display_SLSMapIndexList_Get iOptions param:
Found 1 SLS indices for adapter 0:
0 - SLS Map Config 0:
nativeMode 2400x600
bezelMode 2544x600
Found 1 SLS indices for adapter 1:
0 - SLS Map Config 0:
nativeMode 2400x600
bezelMode 2544x600
Found 1 SLS indices for adapter 2:
0 - SLS Map Config 0:
nativeMode 2400x600
bezelMode 2544x600
Found 1 SLS indices for adapter 3:
0 - SLS Map Config 0:
nativeMode 2400x600
bezelMode 2544x600