summaryrefslogtreecommitdiff
path: root/doc/FRAMELOCK.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/FRAMELOCK.txt')
-rw-r--r--doc/FRAMELOCK.txt101
1 files changed, 96 insertions, 5 deletions
diff --git a/doc/FRAMELOCK.txt b/doc/FRAMELOCK.txt
index 3e309e6..45db220 100644
--- a/doc/FRAMELOCK.txt
+++ b/doc/FRAMELOCK.txt
@@ -1,11 +1,16 @@
This is a (very) brief summary of some of things that need to be
-done to write a FrameLock NV-CONTROL client.
+done to write a Frame Lock NV-CONTROL client.
+
+
+-------------------------------------------------------------------------------
+Section 1 - Writing a Frame Lock client for NV-CONTROL 1.8 (and earlier)
+
Please see the sample NV-CONTROL clients in the "samples" directory
for basic examples of how to set integer attributes. See the
file ctkframelock.c for a much more involved example of how the
-nvidia-settings utility programs the FrameLock attributes.
+nvidia-settings utility programs the Frame Lock attributes.
The constants referenced below are defined in NVCtrl.h. Please see the
comments in that file for an explanation of each attribute. It may
@@ -15,10 +20,10 @@ is used.
Basic steps:
- Open a Display connection to each X Screen you want to control
- in your FrameLock cluster. Please make sure you have
+ in your Frame Lock cluster. Please make sure you have
priviledges to establish the X connection.
- - Query the NV_CTRL_FRAMELOCK attribute to determine if FrameLock
+ - Query the NV_CTRL_FRAMELOCK attribute to determine if Frame Lock
is supported on each X screen.
- Set NV_CTRL_FRAMELOCK_MASTER to NV_CTRL_FRAMELOCK_MASTER_TRUE on
@@ -44,7 +49,7 @@ Basic steps:
glXQueryFrameCountNV()).
- When you are done, set NV_CTRL_FRAMELOCK_SYNC to
- NV_CTRL_FRAMELOCK_SYNC_DISABLE on each X screen to disable FrameLock.
+ NV_CTRL_FRAMELOCK_SYNC_DISABLE on each X screen to disable Frame Lock.
During operation, you can also query any of these on each X screen:
@@ -60,3 +65,89 @@ During operation, you can also query any of these on each X screen:
(nvidia-settings registers a gtk+ timeout function and queries the
state of these on each X screen every few seconds).
+
+
+-------------------------------------------------------------------------------
+Section 2 - Writing a Frame Lock client for NV-CONTROL 1.9 (and later)
+
+Configuration of Frame Lock has changed in NV-CONTROL 1.9. There are two
+major differences:
+
+ - Display Devices (instead of X Screens) are now selected as the clients &
+ slaves of a Frame Lock group.
+
+ - Frame Lock attributes should now be set/queried on GPUs
+ (NV_CTRL_TARGET_TYPE_GPU) and G-Sync (Frame Lock) devices
+ (NV_CTRL_TARGET_TYPE_FRAMELOCK) using the new NV-CONTROL targeting API.
+
+Please see the sample NV-CONTROL clients in the "samples" directory
+for basic examples of how to use the new targeting API (nv-control-targets.c),
+and a basic Frame Lock client (nv-control-framelock.c). See the file
+ctkframelock.c for a much more involved example of how the nvidia-settings
+utility programs the Frame Lock attributes.
+
+The constants referenced below are defined in NVCtrl.h. Please see the
+comments in that file for an explanation of each attribute. It may
+also be instructive to grep ctkframelock.c to see how each attribute
+is used.
+
+Querying frame lock capabilities of a system:
+
+ - Query the number of G-Sync devices on the system by passing
+ NV_CTRL_TARGET_TYPE_FRAMELOCK to XNVCTRLQueryTargetCount()
+
+ - Query the GPUs attached to each g-sync device by querying the
+ NV_CTRL_GPUS_USING_FRAMELOCK attribute for each g-sync device.
+
+ - Query the enabled (available) display devices on each GPU through
+ the NV_CTRL_ENABLED_DISPLAYS attribute.
+
+Configuring the Frame Lock group (This must be done while Frame Lock Sync is
+disabled on the GPU/G-Sync Device):
+
+ - Set the Frame Lock Master Display Device on one of the GPUs through the
+ NV_CTRL_FRAMELOCK_MASTER attribute.
+
+ - Set the rest of the display devices as slaves through the
+ NV_CTRL_FRAMELOCK_SLAVES attribute.
+
+ - Set NV_CTRL_USE_HOUSE_SYNC to NV_CTRL_USE_HOUSE_SYNC_TRUE or
+ NV_CTRL_USE_HOUSE_SYNC_FALSE on the master g-sync device (this is the
+ g-sync device that is attached to the GPU that contains the display
+ device currently set as the frame lock master.) Depending on whether
+ or not you will be using a House Sync signal.
+
+ - Set NV_CTRL_FRAMELOCK_POLARITY for each slave G-Sync device in the
+ cluster; most likely you want NV_CTRL_FRAMELOCK_POLARITY_RISING_EDGE.
+
+ - Set NV_CTRL_FRAMELOCK_SYNC_DELAY as appropriate for each G-Sync device.
+ Most likely you want 0.
+
+ - Set NV_CTRL_FRAMELOCK_SYNC_INTERVAL as appropriate if you
+ are using house sync. Most likely, you just want 0.
+
+Enabling/Disabling Frame Lock:
+
+ - Enable Frame Lock on each GPU by setting NV_CTRL_FRAMELOCK_SYNC
+ to NV_CTRL_FRAMELOCK_SYNC_ENABLE.
+
+ - (optional) set NV_CTRL_FRAMELOCK_TEST_SIGNAL to
+ NV_CTRL_FRAMELOCK_TEST_SIGNAL_ENABLE followed immediately by
+ NV_CTRL_FRAMELOCK_TEST_SIGNAL_DISABLE (on the GPU that contains the
+ master Frame Lock display device.) This guarantees accuracy of the
+ Universal Frame Count (as returned by glXQueryFrameCountNV()).
+
+ - When you are done, set NV_CTRL_FRAMELOCK_SYNC to
+ NV_CTRL_FRAMELOCK_SYNC_DISABLE on each GPU to disable Frame Lock.
+
+During operation, you can also query any of these on each GPU or Frame Lock
+device:
+
+ NV_CTRL_FRAMELOCK_PORT0_STATUS
+ NV_CTRL_FRAMELOCK_PORT1_STATUS
+ NV_CTRL_FRAMELOCK_HOUSE_STATUS
+ NV_CTRL_FRAMELOCK_SYNC_READY
+ NV_CTRL_FRAMELOCK_STEREO_SYNC
+ NV_CTRL_FRAMELOCK_ETHERNET_DETECTED
+ NV_CTRL_FRAMELOCK_SYNC_RATE
+ NV_CTRL_FRAMELOCK_TIMING