2 Replies Latest reply on Nov 16, 2010 8:43 AM by madshi

    problems with ADL CustomizedMode APIs

    madshi
      _Add fails with "invalid parameter", _Validate crashes

      Tested on 2 machines:

      (1) XP32, Radeon 3850, Catalyst 10.8

      (2) Vista64, Mobility X1800, Legacy Catalyst 10.2

      The problem is the same on both PCs: When calling ADL_Display_CustomizedMode_Validate, I'm getting a crash. When calling ADL_Display_CustomizedMode_Add, I'm always getting ADL_ERR_INVALID_PARAM, no matter which mode values I use. I've tracked the _Add problem down a bit. Basically "atiadlxx.Send" is called (which I suppose contacts driver land) and returns with -1.

      What am I trying to do? On both machines only a 1080p24 with 24.000Hz is offered, but no 1080p23 mode with 23.976Hz. So I'm trying to add a customized mode with 23Hz. Maybe this is not what the CustomizedMode APIs are for? But still, even when trying to duplicate what kind of custom modes the Catalyst Control Center creates, the problems are still the same.

      Of course I've called ADL_Main_Control_Create properly, I'm not using any threading in my simple test program, stack size is big enough, and I've provided a proper memory allocation callback.

      All other APIs appear to work fine, including CustomizedModeList_Get.

       

      Edit: I've hooked into the atiadlxx.Send API, to see how the CCC calls ADL_Display_CustomizedMode_Add, but all "Send" is ever called for by the Catalyst Control Center seems to be ADL_Adapter_CrossdisplayAdapterRole_Caps. Seems that the CCC contacts the driver directly for most other stuff, instead of using the ADL APIs? Of course that would explain why the CCC can successfully create custom modes, while it seems to be impossible by using the ADL. Has anybody ever actually used ADL_Display_CustomizedMode_Add yet?

        • problems with ADL CustomizedMode APIs
          Byron

          CustomizedMode API allows to create customized views with the same base mode timing (basically by adding overscan).

          I.e. user can't change refresh rate with this API, he can only have same refresh rate as base mode timing.

          If you want to add a new timing for a display, you need to use the ModeTimingOverride interface in ADL. 

          For customized modes, which only adds new views to existing display timings, there are some restrictions:

          • - Base mode width/height must be either 1280x720 or 1920x1080
          • - Base mode height must be divisible by 4
          • - Base mode Refresh Rate must match customized mode refresh rate
          • - Base mode refresh rate must be 24, 25, 30, 50 or 60Hz.
          • - Customized mode must be larger than 60% of base mode width/height
          • - Customized mode must be smaller or equal to the base mode width/height

          Any of these could cause your call to fail.

          For 5x00 (Evergreen) series cards and up 1080p24 is 24.000Hz, not 23.976Hz. 

          Pre-5x00 (Evergreen) might be 23.976Hz but we'd have to check though.

          THE CEA861 spec recommends non-video-optimized refresh rates for HD resolutions higher than 480i.

           

          BTW, why do you want 23.976 if the display doesn't report it already in EDID?

           

           

            • problems with ADL CustomizedMode APIs
              madshi

              Thanks for your reply!

              I've tested this by first creating a customized view with the Catalyst controls. After that I enumerated the view via ADL, deleted the view and tried to recreate it via ADL with the same structure I got from enumeration - and it failed. So I think this specific ADL API is generally broken.

              Anyway, not important for me, because I was looking for a way to create true custom resolutions, which these APIs are obviously not meant for.

               

              BTW, why do you want 23.976 if the display doesn't report it already in EDID?


              My HTPC video renderer is used by many different end users, some of which have problems with incorrect EDIDs. Also, even if the EDID is correct, some users with some ATI GPUs on some OSs don't have 1080p23 as an option, although the EDID says 1080p23 is supported. I can reproduce that on my own PC. HD3850, XPSP3, JVC HD350 and Sony HW10 projectors, connected via HDMI or DVI. I only get 1080i48 (48.000Hz interlaced) as an option, not 1080p24 (24.000Hz progressive) or 1080p23 (23.976Hz progressive). Even forcing 1080p24 via Catalyst control panel only gives me 1080i48, but not 1080p24 or 1080p23.

              Also some of my users have CRTs, or plasmas with funny native resolutions, and they need very specific custom resolutions. E.g. things like 1366x768 with 75Hz etc. There's currently no way to "create" such funny resolutions with Catalyst controls or ADL. I think that's a really important missing feature. IMHO there should be an official way to create custom resolutions. Basically I'd like to be able to do something like this:

              ADL_Display_CreateCustomResolution(width, height, bitdepth, refreshRate, interlacedOrProgressive, frontPorch, syncWidth, pixelClock, etc...)

              This should work to create any wild resolution I want. The ATI/AMD driver should not care if the resolution seems "plausible" or not, as long as it's technically possible. You can't possibly know all useful modes that any user with any display worldwide could find useful.

              Just one example: For my own needs, I'd like to have true 1080p23, 1080p24 and 1080p25 modes. Not all displays support 1080p25, but some do, and it's perfect for PAL HD broadcasted movies. In my situation, Catalyst offers 1080i48 and 1080i50, but I have neither 1080p23, 1080p24 or 1080p25.

              BTW, NVAPI has such APIs and they work well...