€•fpŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ/translations/zh_CN/gpu/vkms”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/zh_TW/gpu/vkms”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/it_IT/gpu/vkms”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ja_JP/gpu/vkms”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ko_KR/gpu/vkms”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/sp_SP/gpu/vkms”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒtarget”“”)”}”(hŒ .. _vkms:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œvkms”uh1h¡h KhhhžhhŸŒ6/var/lib/git/docbuild/linux/Documentation/gpu/vkms.rst”ubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ#drm/vkms Virtual Kernel Modesetting”h]”hŒ#drm/vkms Virtual Kernel Modesetting”…””}”(hh·hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhh²hžhhŸh¯h KubhŒ paragraph”“”)”}”(hŒöVKMS is a software-only model of a KMS driver that is useful for testing and for running X (or similar) on headless machines. VKMS aims to enable a virtual display with no need of a hardware display capability, releasing the GPU in DRM API tests.”h]”hŒöVKMS is a software-only model of a KMS driver that is useful for testing and for running X (or similar) on headless machines. VKMS aims to enable a virtual display with no need of a hardware display capability, releasing the GPU in DRM API tests.”…””}”(hhÇhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸŒW/var/lib/git/docbuild/linux/Documentation/gpu/vkms:7: ./drivers/gpu/drm/vkms/vkms_drv.c”h Khh²hžhubh±)”}”(hhh]”(h¶)”}”(hŒSetup”h]”hŒSetup”…””}”(hhÙhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhhÖhžhhŸh¯h K ubhÆ)”}”(hŒ6The VKMS driver can be setup with the following steps:”h]”hŒ6The VKMS driver can be setup with the following steps:”…””}”(hhçhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K hhÖhžhubhÆ)”}”(hŒ!To check if VKMS is loaded, run::”h]”hŒ To check if VKMS is loaded, run:”…””}”(hhõhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KhhÖhžhubhŒ literal_block”“”)”}”(hŒlsmod | grep vkms”h]”hŒlsmod | grep vkms”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jhŸh¯h KhhÖhžhubhÆ)”}”(hŒÏThis should list the VKMS driver. If no output is obtained, then you need to enable and/or load the VKMS driver. Ensure that the VKMS driver has been set as a loadable module in your kernel config file. Do::”h]”hŒÎThis should list the VKMS driver. If no output is obtained, then you need to enable and/or load the VKMS driver. Ensure that the VKMS driver has been set as a loadable module in your kernel config file. Do:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KhhÖhžhubj)”}”(hŒ[make nconfig Go to `Device Drivers> Graphics support` Enable `Virtual KMS (EXPERIMENTAL)`”h]”hŒ[make nconfig Go to `Device Drivers> Graphics support` Enable `Virtual KMS (EXPERIMENTAL)`”…””}”hj#sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jhŸh¯h KhhÖhžhubhÆ)”}”(hŒ]Compile and build the kernel for the changes to get reflected. Now, to load the driver, use::”h]”hŒ\Compile and build the kernel for the changes to get reflected. Now, to load the driver, use:”…””}”(hj1hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KhhÖhžhubj)”}”(hŒsudo modprobe vkms”h]”hŒsudo modprobe vkms”…””}”hj?sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jhŸh¯h K!hhÖhžhubhÆ)”}”(hŒ…On running the lsmod command now, the VKMS driver will appear listed. You can also observe the driver being loaded in the dmesg logs.”h]”hŒ…On running the lsmod command now, the VKMS driver will appear listed. You can also observe the driver being loaded in the dmesg logs.”…””}”(hjMhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K#hhÖhžhubhÆ)”}”(hŒºThe VKMS driver has optional features to simulate different kinds of hardware, which are exposed as module options. You can use the `modinfo` command to see the module options for vkms::”h]”(hŒ„The VKMS driver has optional features to simulate different kinds of hardware, which are exposed as module options. You can use the ”…””}”(hj[hžhhŸNh NubhŒtitle_reference”“”)”}”(hŒ `modinfo`”h]”hŒmodinfo”…””}”(hjehžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jchj[ubhŒ, command to see the module options for vkms:”…””}”(hj[hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K&hhÖhžhubj)”}”(hŒ modinfo vkms”h]”hŒ modinfo vkms”…””}”hj}sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jhŸh¯h K*hhÖhžhubhÆ)”}”(hŒ’Module options are helpful when testing, and enabling modules can be done while loading vkms. For example, to load vkms with cursor enabled, use::”h]”hŒ‘Module options are helpful when testing, and enabling modules can be done while loading vkms. For example, to load vkms with cursor enabled, use:”…””}”(hj‹hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K,hhÖhžhubj)”}”(hŒ"sudo modprobe vkms enable_cursor=1”h]”hŒ"sudo modprobe vkms enable_cursor=1”…””}”hj™sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jhŸh¯h K0hhÖhžhubhÆ)”}”(hŒTo disable the driver, use ::”h]”hŒTo disable the driver, use”…””}”(hj§hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K2hhÖhžhubj)”}”(hŒsudo modprobe -r vkms”h]”hŒsudo modprobe -r vkms”…””}”hjµsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jhŸh¯h K4hhÖhžhubeh}”(h]”Œsetup”ah ]”h"]”Œsetup”ah$]”h&]”uh1h°hh²hžhhŸh¯h K ubh±)”}”(hhh]”(h¶)”}”(hŒTesting With IGT”h]”hŒTesting With IGT”…””}”(hjÎhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhjËhžhhŸh¯h K7ubhÆ)”}”(hŒÆThe IGT GPU Tools is a test suite used specifically for debugging and development of the DRM drivers. The IGT Tools can be installed from `here `_ .”h]”(hŒŠThe IGT GPU Tools is a test suite used specifically for debugging and development of the DRM drivers. The IGT Tools can be installed from ”…””}”(hjÜhžhhŸNh NubhŒ reference”“”)”}”(hŒ:`here `_”h]”hŒhere”…””}”(hjæhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œhere”Œrefuri”Œ0https://gitlab.freedesktop.org/drm/igt-gpu-tools”uh1jähjÜubh¢)”}”(hŒ3 ”h]”h}”(h]”Œhere”ah ]”h"]”Œhere”ah$]”h&]”Œrefuri”j÷uh1h¡Œ referenced”KhjÜubhŒ .”…””}”(hjÜhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K9hjËhžhubhÆ)”}”(hŒlThe tests need to be run without a compositor, so you need to switch to text only mode. You can do this by::”h]”hŒkThe tests need to be run without a compositor, so you need to switch to text only mode. You can do this by:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K>hjËhžhubj)”}”(hŒ(sudo systemctl isolate multi-user.target”h]”hŒ(sudo systemctl isolate multi-user.target”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jhŸh¯h KAhjËhžhubhÆ)”}”(hŒ!To return to graphical mode, do::”h]”hŒ To return to graphical mode, do:”…””}”(hj,hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KChjËhžhubj)”}”(hŒ'sudo systemctl isolate graphical.target”h]”hŒ'sudo systemctl isolate graphical.target”…””}”hj:sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jhŸh¯h KEhjËhžhubhÆ)”}”(hXOnce you are in text only mode, you can run tests using the --device switch or IGT_DEVICE variable to specify the device filter for the driver we want to test. IGT_DEVICE can also be used with the run-test.sh script to run the tests for a specific driver::”h]”hŒÿOnce you are in text only mode, you can run tests using the --device switch or IGT_DEVICE variable to specify the device filter for the driver we want to test. IGT_DEVICE can also be used with the run-test.sh script to run the tests for a specific driver:”…””}”(hjHhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KGhjËhžhubj)”}”(hŒósudo ./build/tests/ --device "sys:/sys/devices/platform/vkms" sudo IGT_DEVICE="sys:/sys/devices/platform/vkms" ./build/tests/ sudo IGT_DEVICE="sys:/sys/devices/platform/vkms" ./scripts/run-tests.sh -t ”h]”hŒósudo ./build/tests/ --device "sys:/sys/devices/platform/vkms" sudo IGT_DEVICE="sys:/sys/devices/platform/vkms" ./build/tests/ sudo IGT_DEVICE="sys:/sys/devices/platform/vkms" ./scripts/run-tests.sh -t ”…””}”hjVsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jhŸh¯h KLhjËhžhubhÆ)”}”(hŒdFor example, to test the functionality of the writeback library, we can run the kms_writeback test::”h]”hŒcFor example, to test the functionality of the writeback library, we can run the kms_writeback test:”…””}”(hjdhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KPhjËhžhubj)”}”(hŒðsudo ./build/tests/kms_writeback --device "sys:/sys/devices/platform/vkms" sudo IGT_DEVICE="sys:/sys/devices/platform/vkms" ./build/tests/kms_writeback sudo IGT_DEVICE="sys:/sys/devices/platform/vkms" ./scripts/run-tests.sh -t kms_writeback”h]”hŒðsudo ./build/tests/kms_writeback --device "sys:/sys/devices/platform/vkms" sudo IGT_DEVICE="sys:/sys/devices/platform/vkms" ./build/tests/kms_writeback sudo IGT_DEVICE="sys:/sys/devices/platform/vkms" ./scripts/run-tests.sh -t kms_writeback”…””}”hjrsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jhŸh¯h KShjËhžhubhÆ)”}”(hŒEYou can also run subtests if you do not want to run the entire test::”h]”hŒDYou can also run subtests if you do not want to run the entire test:”…””}”(hj€hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KWhjËhžhubj)”}”(hŒËsudo ./build/tests/kms_flip --run-subtest basic-plain-flip --device "sys:/sys/devices/platform/vkms" sudo IGT_DEVICE="sys:/sys/devices/platform/vkms" ./build/tests/kms_flip --run-subtest basic-plain-flip”h]”hŒËsudo ./build/tests/kms_flip --run-subtest basic-plain-flip --device "sys:/sys/devices/platform/vkms" sudo IGT_DEVICE="sys:/sys/devices/platform/vkms" ./build/tests/kms_flip --run-subtest basic-plain-flip”…””}”hjŽsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jhŸh¯h KYhjËhžhubeh}”(h]”Œtesting-with-igt”ah ]”h"]”Œtesting with igt”ah$]”h&]”uh1h°hh²hžhhŸh¯h K7ubh±)”}”(hhh]”(h¶)”}”(hŒTODO”h]”hŒTODO”…””}”(hj§hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhj¤hžhhŸh¯h K]ubhÆ)”}”(hŒbIf you want to do any of the items listed below, please share your interest with VKMS maintainers.”h]”hŒbIf you want to do any of the items listed below, please share your interest with VKMS maintainers.”…””}”(hjµhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K_hj¤hžhubh±)”}”(hhh]”(h¶)”}”(hŒIGT better support”h]”hŒIGT better support”…””}”(hjÆhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhjÃhžhhŸh¯h KcubhÆ)”}”(hŒ Debugging:”h]”hŒ Debugging:”…””}”(hjÔhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KehjÃhžhubhŒ bullet_list”“”)”}”(hhh]”hŒ list_item”“”)”}”(hŒHkms_plane: some test cases are failing due to timeout on capturing CRC; ”h]”hÆ)”}”(hŒGkms_plane: some test cases are failing due to timeout on capturing CRC;”h]”hŒGkms_plane: some test cases are failing due to timeout on capturing CRC;”…””}”(hjíhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Kghjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjähžhhŸh¯h Nubah}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jâhŸh¯h KghjÃhžhubhÆ)”}”(hŒ$Virtual hardware (vblank-less) mode:”h]”hŒ$Virtual hardware (vblank-less) mode:”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KihjÃhžhubjã)”}”(hhh]”jè)”}”(hXVKMS already has support for vblanks simulated via hrtimers, which can be tested with kms_flip test; in some way, we can say that VKMS already mimics the real hardware vblank. However, we also have virtual hardware that does not support vblank interrupt and completes page_flip events right away; in this case, compositor developers may end up creating a busy loop on virtual hardware. It would be useful to support Virtual Hardware behavior in VKMS because this can help compositor developers to test their features in multiple scenarios. ”h]”hÆ)”}”(hXVKMS already has support for vblanks simulated via hrtimers, which can be tested with kms_flip test; in some way, we can say that VKMS already mimics the real hardware vblank. However, we also have virtual hardware that does not support vblank interrupt and completes page_flip events right away; in this case, compositor developers may end up creating a busy loop on virtual hardware. It would be useful to support Virtual Hardware behavior in VKMS because this can help compositor developers to test their features in multiple scenarios.”h]”hXVKMS already has support for vblanks simulated via hrtimers, which can be tested with kms_flip test; in some way, we can say that VKMS already mimics the real hardware vblank. However, we also have virtual hardware that does not support vblank interrupt and completes page_flip events right away; in this case, compositor developers may end up creating a busy loop on virtual hardware. It would be useful to support Virtual Hardware behavior in VKMS because this can help compositor developers to test their features in multiple scenarios.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Kkhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjhžhhŸh¯h Nubah}”(h]”h ]”h"]”h$]”h&]”jjuh1jâhŸh¯h KkhjÃhžhubeh}”(h]”Œigt-better-support”ah ]”h"]”Œigt better support”ah$]”h&]”uh1h°hj¤hžhhŸh¯h Kcubh±)”}”(hhh]”(h¶)”}”(hŒAdd Plane Features”h]”hŒAdd Plane Features”…””}”(hjChžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhj@hžhhŸh¯h KuubhÆ)”}”(hŒ8There's lots of plane features we could add support for:”h]”hŒ:There’s lots of plane features we could add support for:”…””}”(hjQhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Kwhj@hžhubjã)”}”(hhh]”(jè)”}”(hŒ8Add background color KMS property[Good to get started]. ”h]”hÆ)”}”(hŒ7Add background color KMS property[Good to get started].”h]”hŒ7Add background color KMS property[Good to get started].”…””}”(hjfhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Kyhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhj_hžhhŸh¯h Nubjè)”}”(hŒ Scaling. ”h]”hÆ)”}”(hŒScaling.”h]”hŒScaling.”…””}”(hj~hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K{hjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhj_hžhhŸh¯h Nubjè)”}”(hŒ{Additional buffer formats, especially YUV formats for video like NV12. Low/high bpp RGB formats would also be interesting. ”h]”hÆ)”}”(hŒzAdditional buffer formats, especially YUV formats for video like NV12. Low/high bpp RGB formats would also be interesting.”h]”hŒzAdditional buffer formats, especially YUV formats for video like NV12. Low/high bpp RGB formats would also be interesting.”…””}”(hj–hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K}hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhj_hžhhŸh¯h Nubjè)”}”(hŒUAsync updates (currently only possible on cursor plane using the legacy cursor api). ”h]”hÆ)”}”(hŒTAsync updates (currently only possible on cursor plane using the legacy cursor api).”h]”hŒTAsync updates (currently only possible on cursor plane using the legacy cursor api).”…””}”(hj®hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K€hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhj_hžhhŸh¯h Nubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1jâhŸh¯h Kyhj@hžhubhÆ)”}”(hŒ£For all of these, we also want to review the igt test coverage and make sure all relevant igt testcases work on vkms. They are good options for internship project.”h]”hŒ£For all of these, we also want to review the igt test coverage and make sure all relevant igt testcases work on vkms. They are good options for internship project.”…””}”(hjÈhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Kƒhj@hžhubeh}”(h]”Œadd-plane-features”ah ]”h"]”Œadd plane features”ah$]”h&]”uh1h°hj¤hžhhŸh¯h Kuubh±)”}”(hhh]”(h¶)”}”(hŒRuntime Configuration”h]”hŒRuntime Configuration”…””}”(hjáhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhjÞhžhhŸh¯h KˆubhÆ)”}”(hŒdWe want to be able to reconfigure vkms instance without having to reload the module. Use/Test-cases:”h]”hŒdWe want to be able to reconfigure vkms instance without having to reload the module. Use/Test-cases:”…””}”(hjïhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KŠhjÞhžhubjã)”}”(hhh]”(jè)”}”(hŒ]Hotplug/hotremove connectors on the fly (to be able to test DP MST handling of compositors). ”h]”hÆ)”}”(hŒ\Hotplug/hotremove connectors on the fly (to be able to test DP MST handling of compositors).”h]”hŒ\Hotplug/hotremove connectors on the fly (to be able to test DP MST handling of compositors).”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjýhžhhŸh¯h Nubjè)”}”(hŒ[Configure planes/crtcs/connectors (we'd need some code to have more than 1 of them first). ”h]”hÆ)”}”(hŒZConfigure planes/crtcs/connectors (we'd need some code to have more than 1 of them first).”h]”hŒ\Configure planes/crtcs/connectors (we’d need some code to have more than 1 of them first).”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjýhžhhŸh¯h Nubjè)”}”(hŒ`Change output configuration: Plug/unplug screens, change EDID, allow changing the refresh rate. ”h]”hÆ)”}”(hŒ_Change output configuration: Plug/unplug screens, change EDID, allow changing the refresh rate.”h]”hŒ_Change output configuration: Plug/unplug screens, change EDID, allow changing the refresh rate.”…””}”(hj4hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K“hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjýhžhhŸh¯h Nubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1jâhŸh¯h KhjÞhžhubhÆ)”}”(hŒ—The currently proposed solution is to expose vkms configuration through configfs. All existing module options should be supported through configfs too.”h]”hŒ—The currently proposed solution is to expose vkms configuration through configfs. All existing module options should be supported through configfs too.”…””}”(hjNhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K–hjÞhžhubeh}”(h]”Œruntime-configuration”ah ]”h"]”Œruntime configuration”ah$]”h&]”uh1h°hj¤hžhhŸh¯h Kˆubh±)”}”(hhh]”(h¶)”}”(hŒWriteback support”h]”hŒWriteback support”…””}”(hjghžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhjdhžhhŸh¯h K›ubjã)”}”(hhh]”(jè)”}”(hŒôThe writeback and CRC capture operations share the use of composer_enabled boolean to ensure vblanks. Probably, when these operations work together, composer_enabled needs to refcounting the composer state to proper work. [Good to get started] ”h]”hÆ)”}”(hŒóThe writeback and CRC capture operations share the use of composer_enabled boolean to ensure vblanks. Probably, when these operations work together, composer_enabled needs to refcounting the composer state to proper work. [Good to get started]”h]”hŒóThe writeback and CRC capture operations share the use of composer_enabled boolean to ensure vblanks. Probably, when these operations work together, composer_enabled needs to refcounting the composer state to proper work. [Good to get started]”…””}”(hj|hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Khjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjuhžhhŸh¯h Nubjè)”}”(hŒpAdd support for cloned writeback outputs and related test cases using a cloned output in the IGT kms_writeback. ”h]”hÆ)”}”(hŒoAdd support for cloned writeback outputs and related test cases using a cloned output in the IGT kms_writeback.”h]”hŒoAdd support for cloned writeback outputs and related test cases using a cloned output in the IGT kms_writeback.”…””}”(hj”hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K¢hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjuhžhhŸh¯h Nubjè)”}”(hŒ‰As a v4l device. This is useful for debugging compositors on special vkms configurations, so that developers see what's really going on. ”h]”hÆ)”}”(hŒˆAs a v4l device. This is useful for debugging compositors on special vkms configurations, so that developers see what's really going on.”h]”hŒŠAs a v4l device. This is useful for debugging compositors on special vkms configurations, so that developers see what’s really going on.”…””}”(hj¬hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K¥hj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjuhžhhŸh¯h Nubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1jâhŸh¯h Khjdhžhubeh}”(h]”Œwriteback-support”ah ]”h"]”Œwriteback support”ah$]”h&]”uh1h°hj¤hžhhŸh¯h K›ubh±)”}”(hhh]”(h¶)”}”(hŒOutput Features”h]”hŒOutput Features”…””}”(hjÑhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhjÎhžhhŸh¯h K©ubjã)”}”(hhh]”(jè)”}”(hŒÃVariable refresh rate/freesync support. This probably needs prime buffer sharing support, so that we can use vgem fences to simulate rendering in testing. Also needs support to specify the EDID. ”h]”hÆ)”}”(hŒÂVariable refresh rate/freesync support. This probably needs prime buffer sharing support, so that we can use vgem fences to simulate rendering in testing. Also needs support to specify the EDID.”h]”hŒÂVariable refresh rate/freesync support. This probably needs prime buffer sharing support, so that we can use vgem fences to simulate rendering in testing. Also needs support to specify the EDID.”…””}”(hjæhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K«hjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjßhžhhŸh¯h Nubjè)”}”(hŒ~Add support for link status, so that compositors can validate their runtime fallbacks when e.g. a Display Port link goes bad. ”h]”hÆ)”}”(hŒ}Add support for link status, so that compositors can validate their runtime fallbacks when e.g. a Display Port link goes bad.”h]”hŒ}Add support for link status, so that compositors can validate their runtime fallbacks when e.g. a Display Port link goes bad.”…””}”(hjþhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K¯hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjßhžhhŸh¯h Nubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1jâhŸh¯h K«hjÎhžhubeh}”(h]”Œoutput-features”ah ]”h"]”Œoutput features”ah$]”h&]”uh1h°hj¤hžhhŸh¯h K©ubh±)”}”(hhh]”(h¶)”}”(hŒCRC API Improvements”h]”hŒCRC API Improvements”…””}”(hj#hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhj hžhhŸh¯h K³ubjã)”}”(hhh]”jè)”}”(hŒJOptimize CRC computation ``compute_crc()`` and plane blending ``blend()`` ”h]”hÆ)”}”(hŒIOptimize CRC computation ``compute_crc()`` and plane blending ``blend()``”h]”(hŒOptimize CRC computation ”…””}”(hj8hžhhŸNh NubhŒliteral”“”)”}”(hŒ``compute_crc()``”h]”hŒ compute_crc()”…””}”(hjBhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj8ubhŒ and plane blending ”…””}”(hj8hžhhŸNh NubjA)”}”(hŒ ``blend()``”h]”hŒblend()”…””}”(hjThžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Kµhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhj1hžhhŸh¯h Nubah}”(h]”h ]”h"]”h$]”h&]”jjuh1jâhŸh¯h Kµhj hžhubeh}”(h]”Œcrc-api-improvements”ah ]”h"]”Œcrc api improvements”ah$]”h&]”uh1h°hj¤hžhhŸh¯h K³ubh±)”}”(hhh]”(h¶)”}”(hŒAtomic Check using eBPF”h]”hŒAtomic Check using eBPF”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhj|hžhhŸh¯h K¸ubhÆ)”}”(hXøAtomic drivers have lots of restrictions which are not exposed to userspace in any explicit form through e.g. possible property values. Userspace can only inquiry about these limits through the atomic IOCTL, possibly using the TEST_ONLY flag. Trying to add configurable code for all these limits, to allow compositors to be tested against them, would be rather futile exercise. Instead we could add support for eBPF to validate any kind of atomic state, and implement a library of different restrictions.”h]”hXøAtomic drivers have lots of restrictions which are not exposed to userspace in any explicit form through e.g. possible property values. Userspace can only inquiry about these limits through the atomic IOCTL, possibly using the TEST_ONLY flag. Trying to add configurable code for all these limits, to allow compositors to be tested against them, would be rather futile exercise. Instead we could add support for eBPF to validate any kind of atomic state, and implement a library of different restrictions.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Kºhj|hžhubhÆ)”}”(hŒhThis needs a bunch of features (plane compositing, multiple outputs, ...) enabled already to make sense.”h]”hŒhThis needs a bunch of features (plane compositing, multiple outputs, ...) enabled already to make sense.”…””}”(hj›hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KÂhj|hžhubeh}”(h]”Œatomic-check-using-ebpf”ah ]”h"]”Œatomic check using ebpf”ah$]”h&]”uh1h°hj¤hžhhŸh¯h K¸ubeh}”(h]”Œtodo”ah ]”h"]”Œtodo”ah$]”h&]”uh1h°hh²hžhhŸh¯h K]ubeh}”(h]”(Œ#drm-vkms-virtual-kernel-modesetting”h®eh ]”h"]”(Œ#drm/vkms virtual kernel modesetting”Œvkms”eh$]”h&]”uh1h°hhhžhhŸh¯h KŒexpect_referenced_by_name”}”j¿h£sŒexpect_referenced_by_id”}”h®h£subeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h¯uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hµNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jéŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h¯Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”h®]”h£asŒnameids”}”(j¿h®j¾j»jÈjÅj¡jžjjþj¶j³j=j:jÛjØjaj^jËjÈjjjyjvj®j«uŒ nametypes”}”(j¿ˆj¾‰jȉj¡‰jˆj¶‰j=‰jÛ‰ja‰jˉj‰jy‰j®‰uh}”(h®h²j»h²jÅhÖjžjËjþjøj³j¤j:jÃjØj@j^jÞjÈjdjjÎjvj j«j|uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)”}”(hhh]”hÆ)”}”(hhh]”hŒ*Hyperlink target "vkms" is not referenced.”…””}”hjSsbah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhjPubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”h¯Œline”Kuh1jNubaŒ transformer”NŒ include_log”]”Œ decoration”Nhžhub.