@@ -60,48 +60,47 @@ whether FRR vs. VRR, etc.
6060*PROPOSED*: the query returns two values: 1) a refresh-cycle duration
6161(pname:refreshDuration), and 2) an indication whether the timing is
6262currently fixed (FRR) or variable (VRR).
63- If pname:refreshDuration is zero, the platform cannot supply these
64- values until after at least one flink:vkQueuePresentKHR has been done,
65- from this time (e.g. if flink:vkQueuePresentKHR has been previously
66- called for this swapchain, at least one additional call must be made).
63+ If pname:refreshDuration is zero, the platform cannot supply these values
64+ until after at least one flink:vkQueuePresentKHR has been done, from this
65+ time (e.g. if flink:vkQueuePresentKHR has been previously called for this
66+ swapchain, at least one additional call must be made).
6767After calling flink:vkQueuePresentKHR, the query can be repeated until
68- pname:refreshDuration is non-zero, at which point the FRR vs. VRR
69- indication will also be valid.
68+ pname:refreshDuration is non-zero, at which point the FRR vs. VRR indication
69+ will also be valid.
7070
71- If the presentation engine's pname:refreshDuration is a fixed value,
72- the application's image present duration (IPD) should be a multiple of
71+ If the presentation engine's pname:refreshDuration is a fixed value, the
72+ application's image present duration (IPD) should be a multiple of
7373pname:refreshDuration.
7474That is, the quanta for changing the IPD is pname:refreshDuration.
75- For example, if pname:refreshDuration is 16.67ms, the IPD can be
76- 16.67ms, 33.33ms, 50.0ms, etc.
75+ For example, if pname:refreshDuration is 16.67ms, the IPD can be 16.67ms,
76+ 33.33ms, 50.0ms, etc.
7777
7878If the presentation engine's pname:refreshDuration is variable,
79- pname:refreshDuration is the minimum value of the application's IPD, and
80- the IPD can be larger by any quanta that is meaningful to the application.
81- For example, if the pname:refreshDuration is 10ms (i.e. the maximum
82- refresh rate is 100Hz), the application can choose an IPD of 11ms,
83- 13.33ms, 13.5ms, or 66.0ms; any value greater than or equal to 10ms is
84- valid.
85- There may be negative consequences for choosing an IPD that is too
86- high, as the presentation engine may actually have a practical maximum
87- pname:refreshDuration, where it needs to display the previous image
88- again, and during this time the presentation engine might delay
89- displaying a newly-presented image.
90-
91- FRR displays on at least one platform (Wayland) are not necessarily
92- fixed; but can change over time.
93- For example, if a full-screen video player application is visible, the display
94- may operate at a 24Hz refresh cycle; and then later switch to 60Hz when
95- multiple windows are visible.
79+ pname:refreshDuration is the minimum value of the application's IPD, and the
80+ IPD can be larger by any quanta that is meaningful to the application.
81+ For example, if the pname:refreshDuration is 10ms (i.e. the maximum refresh
82+ rate is 100Hz), the application can choose an IPD of 11ms, 13.33ms, 13.5ms,
83+ or 66.0ms; any value greater than or equal to 10ms is valid.
84+ There may be negative consequences for choosing an IPD that is too high, as
85+ the presentation engine may actually have a practical maximum
86+ pname:refreshDuration, where it needs to display the previous image again,
87+ and during this time the presentation engine might delay displaying a
88+ newly-presented image.
89+
90+ FRR displays on at least one platform (Wayland) are not necessarily fixed;
91+ but can change over time.
92+ For example, if a full-screen video player application is visible, the
93+ display may operate at a 24Hz refresh cycle; and then later switch to 60Hz
94+ when multiple windows are visible.
9695
9796VRR displays on some platforms can also be seen as having different
9897characteristics over time.
99- For example, if an application's window is full-screen-exclusive (i.e. no other
100- window or window system component is visible), the display can look like a VRR
101- display (however that is defined).
98+ For example, if an application's window is full-screen-exclusive (i.e. no
99+ other window or window system component is visible), the display can look
100+ like a VRR display (however that is defined).
102101If the application's window is not full-screen-exclusive (e.g. a normal
103- multi-window case), the display can look like an FRR display (i.e. because the
104- compositor is trying to treat all windows in a consistent manner).
102+ multi-window case), the display can look like an FRR display (i.e. because
103+ the compositor is trying to treat all windows in a consistent manner).
105104A different issue will deal with how the timing characteristics can change
106105over time.
107106
@@ -110,45 +109,45 @@ over time.
110109
111110*PROPOSED*: return only the minimum value of refreshDuration for a VRR.
112111
113- VRR displays have a minimum and maximum refresh rate, and therefore a minimum
114- and maximum refreshDuration.
112+ VRR displays have a minimum and maximum refresh rate, and therefore a
113+ minimum and maximum refreshDuration.
115114It has been asserted that the display effectively does not have a minimum
116115refresh rate.
117116That is because if an application does not present soon enough, the display
118117hardware will automatically re-display the previous image.
119- However, when the display does that, an application cannot present a new image
120- for a certain period of time.
118+ However, when the display does that, an application cannot present a new
119+ image for a certain period of time.
121120It is unclear about whether that period is large enough to cause visual
122121artifacts.
123122
124123
1251243) How to deal with changes in timing properties?
126125
127- *RESOLVED*: The slink:VkPastPresentationTimingPropertiesEXT structure
128- that is returned by flink:vkGetPastPresentationTimingEXT contains
129- pname:timeDomainsCounter, which is incremented if the time
130- domain enabled for the swapchain is not currently available.
126+ *RESOLVED*: The slink:VkPastPresentationTimingPropertiesEXT structure that
127+ is returned by flink:vkGetPastPresentationTimingEXT contains
128+ pname:timeDomainsCounter, which is incremented if the time domain enabled
129+ for the swapchain is not currently available.
131130
132131An example of why display timing properties can change is if a surface
133- changes from being a window that’s a subset of the display size, to
134- becoming full-screen-exclusive.
135- While the surface was a subset of the display, a compositor might
136- enforce fixed timings on the surface (e.g. FRR of 60Hz), where the
137- presentation engine might be free to allow VRR behavior of a
138- full-screen-exclusive surface.
132+ changes from being a window that’s a subset of the display size, to becoming
133+ full-screen-exclusive.
134+ While the surface was a subset of the display, a compositor might enforce
135+ fixed timings on the surface (e.g. FRR of 60Hz), where the presentation
136+ engine might be free to allow VRR behavior of a full-screen-exclusive
137+ surface.
139138
140- It is possible that a full-screen-exclusive window can become
141- temporarily obscured (e.g. when a short-term dialog pops up).
142- In this case, the surface might use FRR timings while the dialog is
143- visible and VRR otherwise.
139+ It is possible that a full-screen-exclusive window can become temporarily
140+ obscured (e.g. when a short-term dialog pops up).
141+ In this case, the surface might use FRR timings while the dialog is visible
142+ and VRR otherwise.
144143
145144
146- 4) One Query for all Timing info vs. an initial query to determine FRR vs. VRR,
147- and then FRR-specific vs VRR-specific queries?
145+ 4) One Query for all Timing info vs. an initial query to determine FRR vs.
146+ VRR, and then FRR-specific vs VRR-specific queries?
148147
149- *RESOLVED*: Have one query, as described in issue 1, that can be
150- called whenever the application needs to obtain the timing properties
151- of the surface.
148+ *RESOLVED*: Have one query, as described in issue 1, that can be called
149+ whenever the application needs to obtain the timing properties of the
150+ surface.
152151
153152
1541535) Query to determine time domain?
@@ -164,51 +163,51 @@ Other extensions can add other platform-specific time domains.
164163domain; and do allow the special value of zero for targetPresentTime,
165164meaning that there is no target.
166165
167- On some platforms, there is no way to determine the current time, nor
168- to determine surface timing properties until after at least one image
169- has been presented.
166+ On some platforms, there is no way to determine the current time, nor to
167+ determine surface timing properties until after at least one image has been
168+ presented.
170169
171- In such cases, the special value of zero allows the application to
172- indicate that timing feedback is desired, but that no
173- targetPresentTime is requested.
170+ In such cases, the special value of zero allows the application to indicate
171+ that timing feedback is desired, but that no targetPresentTime is requested.
174172Later, once the application has obtained feedback, it can specify
175173targetPresentTime by using the result's actualPresentTime.
176174
177175
178- 7) How long before an application’s request for new image duration is honored?
176+ 7) How long before an application’s request for new image duration is
177+ honored?
179178
180- *UNRESOLVED*: Apparently, changes to some vendors' display hardware settings do
181- not take effect immediately.
182- It is not clear what settings, and therefore, it is not clear how to
183- address this issue.
179+ *UNRESOLVED*: Apparently, changes to some vendors' display hardware settings
180+ do not take effect immediately.
181+ It is not clear what settings, and therefore, it is not clear how to address
182+ this issue.
184183
185184
1861858) Do we have a query for the anticipated latency from present to feedback?
187186
188187*RESOLVED*: Do not provide a query for the feedback latency.
189188
190189There is some amount of latency from when an application calls
191- vkQueuePresentKHR to when the image is displayed to the user, to when feedback
192- is available to the application on when the image was actually displayed to the
193- user.
190+ vkQueuePresentKHR to when the image is displayed to the user, to when
191+ feedback is available to the application on when the image was actually
192+ displayed to the user.
194193The first time (from the call till the image is presented) generally doesn’t
195194matter, because the application will likely be providing a targetPresentTime
196195(i.e. the application may have some indication for how long this will be).
197- However, the latency between targetPresentTime until feedback is available may
198- be much longer.
199- For example, on Android on the 1st-generation Pixel phone (60Hz FRR display),
200- the latency was approximately 5 refresh cycles (83.33ms).
201- For higher-frequency displays, the latency may have a larger number of refresh
202- cycles.
196+ However, the latency between targetPresentTime until feedback is available
197+ may be much longer.
198+ For example, on Android on the 1st-generation Pixel phone (60Hz FRR
199+ display), the latency was approximately 5 refresh cycles (83.33ms).
200+ For higher-frequency displays, the latency may have a larger number of
201+ refresh cycles.
203202
204203
2052049) Do we have a query(s) about the number of VkPastPresentationTimingEXT
206205structs to keep?
207206
208207*RESOLVED*: Do not provide a query for the number of results the swapchain
209208is allowed to store before querying them with
210- vkGetPastPresentationTimingEXT. Let the application specify that value with
211- a dedicated API.
209+ vkGetPastPresentationTimingEXT.
210+ Let the application specify that value with a dedicated API.
212211
213212
21421310) How is the SWAPCHAIN_LOCAL and STAGE_LOCAL time domain used with the
0 commit comments