[Xcb] [PATCH proto 5/7 v3] randr: Add provider object support (RandR v1.4)

Daniel Martin consume.noise at gmail.com
Tue Jun 4 12:27:30 PDT 2013


With RandR 1.4 provider objects have been introduced. "A provider object
represents a GPU or virtual device providing services to the X server."

To handle provider objects the following requests have been added:
    - GetProviders
    - GetProviderInfo
    - SetProviderOffloadSink
    - SetProviderOutputSource
    - ListProviderProperties
    - QueryProviderProperty
    - ConfigureProviderProperty
    - ChangeProviderProperty
    - DeleteProviderProperty
    - GetProviderProperty

And the Notify event got 3 new subcodes:
    - ProviderChange
    - ProviderProperty
    - ResourceChange

v2:
- add missing name field to GetProviderInfo
v3:
- changed ProviderCapability enum
  o replaced <value> with <bit>
  o removed None
- replaced "alignment pad list" with commented out <pad align="4"/> to
  be prepared for future enhancements
- add brief description to commit msg about additions

Signed-off-by: Daniel Martin <consume.noise at gmail.com>
---
 src/randr.xml | 231 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 216 insertions(+), 15 deletions(-)

diff --git a/src/randr.xml b/src/randr.xml
index 4f0716f..1ec3234 100644
--- a/src/randr.xml
+++ b/src/randr.xml
@@ -27,7 +27,7 @@
 -->
 
 <xcb header="randr" extension-xname="RANDR" extension-name="RandR"
-    major-version="1" minor-version="3">
+    major-version="1" minor-version="4">
 
 	<import>xproto</import>
 	<import>render</import>
@@ -36,12 +36,14 @@
 	<xidtype name="MODE" />
 	<xidtype name="CRTC" />
 	<xidtype name="OUTPUT" />
+	<xidtype name="PROVIDER" />
 	
 	<!-- Errors -->
 
-	<error name="BadOutput" number="0" />
-	<error name="BadCrtc"   number="1" />
-	<error name="BadMode"   number="2" />
+	<error name="BadOutput"   number="0" />
+	<error name="BadCrtc"     number="1" />
+	<error name="BadMode"     number="2" />
+	<error name="BadProvider" number="3" />
 
 	<!-- Requests -->
 
@@ -113,11 +115,15 @@ <request name="SetScreenConfig" opcode="2">
 	<!-- opcode 3 is obsolete -->
 
 	<enum name="NotifyMask" >
-		<item name="ScreenChange">  <bit>0</bit></item>
-		<!-- new in 1.2 -->
-		<item name="CrtcChange">    <bit>1</bit></item>
-		<item name="OutputChange">  <bit>2</bit></item>
-		<item name="OutputProperty"><bit>3</bit></item>
+		<item name="ScreenChange">    <bit>0</bit></item>
+		<!-- New in version 1.2 -->
+		<item name="CrtcChange">      <bit>1</bit></item>
+		<item name="OutputChange">    <bit>2</bit></item>
+		<item name="OutputProperty">  <bit>3</bit></item>
+		<!-- New in version 1.4 -->
+		<item name="ProviderChange">  <bit>4</bit></item>
+		<item name="ProviderProperty"><bit>5</bit></item>
+		<item name="ResourceChange">  <bit>6</bit></item>
 	</enum>
 
 	<request name="SelectInput" opcode="4">	
@@ -506,6 +512,14 @@ <request name="GetScreenResourcesCurrent" opcode="25">
 		</reply>
 	</request>
 
+	<enum name="Transform">
+		<!-- Introduced in version 1.3, but not referenced. -->
+		<item name="Unit">       <bit>0</bit></item>
+		<item name="ScaleUp">    <bit>1</bit></item>
+		<item name="ScaleDown">  <bit>2</bit></item>
+		<item name="Projective"> <bit>3</bit></item>
+	</enum>
+
 	<request name="SetCrtcTransform" opcode="26">
 		<field type="CRTC" name="crtc" />
 		<field type="TRANSFORM" name="transform" />
@@ -599,6 +613,163 @@ <request name="GetOutputPrimary" opcode="31">
 		</reply>
 	</request>
 
+	<!-- New in version 1.4 -->
+
+	<request name="GetProviders" opcode="32">
+		<field type="WINDOW" name="window" />
+		<reply>
+			<pad bytes="1" />
+			<field type="TIMESTAMP" name="timestamp" />
+			<field type="CARD16" name="num_providers" />
+			<pad bytes="18" />
+			<list type="PROVIDER" name="providers">
+				<fieldref>num_providers</fieldref>
+			</list>
+		</reply>
+	</request>
+
+	<enum name="ProviderCapability">
+		<item name="SourceOutput">  <bit>0</bit></item>
+		<item name="SinkOutput">    <bit>1</bit></item>
+		<item name="SourceOffload"> <bit>2</bit></item>
+		<item name="SinkOffload">   <bit>3</bit></item>
+	</enum>
+
+	<request name="GetProviderInfo" opcode="33">
+		<field type="PROVIDER" name="provider" />
+		<field type="TIMESTAMP" name="config_timestamp" />
+		<reply>
+			<field type="CARD8" name="status" />
+			<field type="TIMESTAMP" name="timestamp" />
+			<field type="CARD32" name="capabilities" mask="ProviderCapability" />
+			<field type="CARD16" name="num_crtcs" />
+			<field type="CARD16" name="num_outputs" />
+			<field type="CARD16" name="num_associated_providers" />
+			<field type="CARD16" name="name_len" />
+			<pad bytes="8" />
+			<list type="CRTC" name="crtcs">
+				<fieldref>num_crtcs</fieldref>
+			</list>
+			<list type="OUTPUT" name="outputs">
+				<fieldref>num_outputs</fieldref>
+			</list>
+			<list type="PROVIDER" name="associated_providers">
+				<fieldref>num_associated_providers</fieldref>
+			</list>
+			<list type="CARD32" name="associated_capability">
+				<fieldref>num_associated_providers</fieldref>
+			</list>
+			<list type="char" name="name">
+				<fieldref>name_len</fieldref>
+			</list>
+			<!-- XXX: Prepared for the future. Until xcbgen supports
+			          the align attribute in <pad>, we ignore the
+			          trailing pad bytes here.
+			<pad align="4" />
+			-->
+		</reply>
+	</request>
+
+	<request name="SetProviderOffloadSink" opcode="34">
+		<field type="PROVIDER" name="provider" />
+		<field type="PROVIDER" name="sink_provider" />
+		<field type="TIMESTAMP" name="config_timestamp" />
+	</request>
+
+	<request name="SetProviderOutputSource" opcode="35">
+		<field type="PROVIDER" name="provider" />
+		<field type="PROVIDER" name="source_provider" />
+		<field type="TIMESTAMP" name="config_timestamp" />
+	</request>
+
+	<request name="ListProviderProperties" opcode="36">
+		<field type="PROVIDER" name="provider" />
+		<reply>
+			<pad bytes="1" />
+			<field type="CARD16" name="num_atoms" />
+			<pad bytes="22" />
+			<list type="ATOM" name="atoms">
+				<fieldref>num_atoms</fieldref>
+			</list>
+		</reply>
+	</request>
+
+	<request name="QueryProviderProperty" opcode="37">
+		<field type="PROVIDER" name="provider" />
+		<field type="ATOM" name="property" />
+		<reply>
+			<pad bytes="1" />
+			<field type="BOOL" name="pending" />
+			<field type="BOOL" name="range" />
+			<field type="BOOL" name="immutable" />
+			<pad bytes="21" />
+			<list type="INT32" name="valid_values">
+				<fieldref>length</fieldref>
+			</list>
+		</reply>
+	</request>
+
+	<request name="ConfigureProviderProperty" opcode="38">
+		<field type="PROVIDER" name="provider" />
+		<field type="ATOM" name="property" />
+		<field type="BOOL" name="pending" />
+		<field type="BOOL" name="range" />
+		<pad bytes="2" />
+		<list type="INT32" name="values" />
+	</request>
+
+	<request name="ChangeProviderProperty" opcode="39">
+		<field type="PROVIDER" name="provider" />
+		<field type="ATOM" name="property" />
+		<field type="ATOM" name="type" />
+		<field type="CARD8" name="format" />
+		<field type="CARD8" name="mode" />
+		<pad bytes="2" />
+		<field type="CARD32" name="num_items" />
+		<list type="void" name="data">
+			<op op="*">
+				<fieldref>num_items</fieldref>
+				<op op="/">
+					<fieldref>format</fieldref>
+					<value>8</value>
+				</op>
+			</op>
+		</list>
+	</request>
+
+	<request name="DeleteProviderProperty" opcode="40">
+		<field type="PROVIDER" name="provider" />
+		<field type="ATOM" name="property" />
+	</request>
+
+	<request name="GetProviderProperty" opcode="41">
+		<field type="PROVIDER" name="provider" />
+		<field type="ATOM" name="property" />
+		<field type="ATOM" name="type" /> <!-- AnyProperty -->
+		<field type="CARD32" name="long_offset" />
+		<field type="CARD32" name="long_length" />
+		<field type="BOOL" name="delete" />
+		<field type="BOOL" name="pending" />
+		<pad bytes="2" />
+		<reply>
+			<pad bytes="1" />
+			<field type="CARD8" name="format" />
+			<field type="ATOM" name="type" /> <!-- None -->
+			<field type="CARD32" name="bytes_after" />
+			<field type="CARD16" name="num_items" />
+			<pad bytes="12" />
+			<list type="void" name="data">
+				<op op="*">
+					<fieldref>num_items</fieldref>
+					<op op="/">
+						<fieldref>format</fieldref>
+						<value>8</value>
+					</op>
+				</op>
+			</list>
+		</reply>
+	</request>
+
 	<!-- Events -->
 
 	<event name="ScreenChangeNotify" number="0">
@@ -619,9 +790,12 @@ <event name="ScreenChangeNotify" number="0">
 
 	<!-- subcode -->
 	<enum name="Notify" >
-		<item name="CrtcChange">    <value>0</value></item>
-		<item name="OutputChange">  <value>1</value></item>
-		<item name="OutputProperty"><value>2</value></item>
+		<item name="CrtcChange">      <value>0</value></item>
+		<item name="OutputChange">    <value>1</value></item>
+		<item name="OutputProperty">  <value>2</value></item>
+		<item name="ProviderChange">  <value>3</value></item>
+		<item name="ProviderProperty"><value>4</value></item>
+		<item name="ResourceChange">  <value>5</value></item>
 	</enum>
 
 	<struct name="CrtcChange">
@@ -658,10 +832,37 @@ <struct name="OutputProperty">
 		<pad bytes="11" />
 	</struct>
 
+	<!-- New in version 1.4 -->
+
+	<struct name="ProviderChange">
+		<field type="TIMESTAMP" name="timestamp" />
+		<field type="WINDOW" name="window" />
+		<field type="PROVIDER" name="provider" />
+		<pad bytes="16" />
+	</struct>
+
+	<struct name="ProviderProperty">
+		<field type="WINDOW" name="window" />
+		<field type="PROVIDER" name="provider" />
+		<field type="ATOM" name="atom" />
+		<field type="TIMESTAMP" name="timestamp" />
+		<field type="CARD8" name="state" />
+		<pad bytes="11" />
+	</struct>
+
+	<struct name="ResourceChange">
+		<field type="TIMESTAMP" name="timestamp" />
+		<field type="WINDOW" name="window" />
+		<pad bytes="20" />
+	</struct>
+
 	<union name="NotifyData">
-		<field type="CrtcChange"     name="cc" />
-		<field type="OutputChange"   name="oc" />
-		<field type="OutputProperty" name="op" />
+		<field type="CrtcChange"       name="cc" />
+		<field type="OutputChange"     name="oc" />
+		<field type="OutputProperty"   name="op" />
+		<field type="ProviderChange"   name="pc" />
+		<field type="ProviderProperty" name="pp" />
+		<field type="ResourceChange"   name="rc" />
 	</union>
 
 	<event name="Notify" number="1">
-- 
1.8.3



More information about the Xcb mailing list