xorg-server-1.16.0-add_prime_support-1.patch 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. Submitted By: Armin K. <krejzi at email dot com>
  2. Date: 2012-12-30
  3. Initial Package Version: 1.13.1
  4. Upstream Status: Not submitted.
  5. Origin: Upstream mailing list.
  6. Description: Adds PRIME support to Xorg Server to make GPU offloading work.
  7. --- xorg-server.orig/hw/xfree86/common/xf86Init.c 2012-10-14 01:38:50.000000000 +0200
  8. +++ xorg-server/hw/xfree86/common/xf86Init.c 2012-12-01 19:51:53.249922134 +0100
  9. @@ -361,6 +361,16 @@
  10. return ret;
  11. }
  12. +extern void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master);
  13. +static void
  14. +xf86AutoConfigOutputDevices(void)
  15. +{
  16. + int i;
  17. +
  18. + for (i = 0; i < xf86NumGPUScreens; i++)
  19. + xf86AutoConfigOutputDevice(xf86GPUScreens[i], xf86Screens[0]);
  20. +}
  21. +
  22. static void
  23. InstallSignalHandlers(void)
  24. {
  25. @@ -927,6 +937,8 @@
  26. for (i = 0; i < xf86NumGPUScreens; i++)
  27. AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
  28. + xf86AutoConfigOutputDevices();
  29. +
  30. xf86VGAarbiterWrapFunctions();
  31. if (sigio_blocked)
  32. OsReleaseSIGIO();
  33. --- xorg-server.orig/hw/xfree86/common/xf86platformBus.c 2012-11-02 05:17:59.000000000 +0100
  34. +++ xorg-server/hw/xfree86/common/xf86platformBus.c 2012-12-01 19:51:53.249922134 +0100
  35. @@ -387,6 +387,8 @@
  36. return foundScreen;
  37. }
  38. +extern void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master);
  39. +
  40. int
  41. xf86platformAddDevice(int index)
  42. {
  43. @@ -446,6 +448,7 @@
  44. /* attach unbound to 0 protocol screen */
  45. AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
  46. + xf86AutoConfigOutputDevice(xf86GPUScreens[i], xf86Screens[0]);
  47. return 0;
  48. }
  49. --- xorg-server.orig/hw/xfree86/modes/xf86Crtc.c 2012-10-14 01:38:50.000000000 +0200
  50. +++ xorg-server/hw/xfree86/modes/xf86Crtc.c 2012-12-01 19:51:53.250922153 +0100
  51. @@ -3258,3 +3258,31 @@
  52. crtc->x = crtc->y = 0;
  53. }
  54. }
  55. +
  56. +
  57. +void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master)
  58. +{
  59. + RRProviderPtr master_provider;
  60. + xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(master);
  61. + xf86CrtcConfigPtr slave_config = XF86_CRTC_CONFIG_PTR(pScrn);
  62. +
  63. + if (!config || !slave_config)
  64. + return;
  65. +
  66. + master_provider = config->randr_provider;
  67. +
  68. + if ((master->capabilities & RR_Capability_SinkOffload) &&
  69. + pScrn->capabilities & RR_Capability_SourceOffload) {
  70. + /* source offload */
  71. +
  72. + DetachUnboundGPU(pScrn->pScreen);
  73. + AttachOffloadGPU(master->pScreen, pScrn->pScreen);
  74. + slave_config->randr_provider->offload_sink = master_provider;
  75. + } else if ((master->capabilities & RR_Capability_SourceOutput) &&
  76. + pScrn->capabilities & RR_Capability_SinkOutput) {
  77. + /* sink offload */
  78. + DetachUnboundGPU(pScrn->pScreen);
  79. + AttachOutputGPU(master->pScreen, pScrn->pScreen);
  80. + slave_config->randr_provider->output_source = master_provider;
  81. + }
  82. +}