Merge pull request #237 from nvpbrown/nv-publish-2019-01-14

Publish minor NVIDIA extension spec edits.
diff --git a/extensions/NV/NV_gpu_multicast.txt b/extensions/NV/NV_gpu_multicast.txt
index 74e086f..1fc2e7e 100644
--- a/extensions/NV/NV_gpu_multicast.txt
+++ b/extensions/NV/NV_gpu_multicast.txt
@@ -25,8 +25,8 @@
 
 Version
 
-    Last Modified Date:         October 7, 2016
-    Revision:                   5
+    Last Modified Date:         January 3, 2019
+    Revision:                   6
 
 Number
 
@@ -157,13 +157,13 @@
     instance of a resource, it is considered to have per-GPU storage.  When all GPUs share a
     single instance of a resource, this is considered GPU-shared storage.
     
-    The mechanism for linking GPUs is implementation specific, as is the process-global mechanism
-    for enabling multicast rendering support (if necessary).  The number of GPUs usable for
-    multicast rendering by a context can be queried by calling GetIntegerv with the symbolic
-    constant MULTICAST_GPUS_NV.  Individual GPUs are identified using zero-based indices in the
-    range [0, n-1], where n is the number of multicast GPUs.  GPUs are also be identified by
-    bitmasks of the form 2^i, where i is the GPU index.  A set of GPUs is specified by the union
-    of masks for each GPU in the set.
+    The mechanism for linking GPUs is implementation specific, as is the mechanism for enabling
+    multicast rendering support (if necessary).  The number of GPUs usable for multicast rendering
+    by a context can be queried by calling GetIntegerv with the symbolic constant
+    MULTICAST_GPUS_NV.  This number is constant for the lifetime of a context.  Individual GPUs
+    are identified using zero-based indices in the range [0, n-1], where n is the number of
+    multicast GPUs.  GPUs are also identified by bitmasks of the form 2^i, where i is the GPU
+    index.  A set of GPUs is specified by the union of masks for each GPU in the set.
 
     20.1 Controlling Individual GPUs 
 
@@ -616,7 +616,7 @@
                                                      Minimum
     Get Value                     Type   Get Command  Value  Description               Sec.  Attribute
     ---------------------------- ------ ------------- -----  ----------------------    ----  ---------
-    MULTICAST_GPUS_NV              Z+    GetIntegerv    2    Number of linked GPUs     20.0     -
+    MULTICAST_GPUS_NV              Z+    GetIntegerv    1    Number of linked GPUs     20.0     -
                                                              usable for multicast
 
 Backwards Compatibility
@@ -705,10 +705,10 @@
 
   (4) What happens if the MulticastCopyBufferSubDataNV source and destination buffer is the same?
 
-    RESOLVED.  When the source and destination make involve the same GPU,
-    MulticastCopyBufferSubDataNV matches the behavior of CopyBufferSubData: overlapped copies are
-    not allowed and an INVALID_VALUE error results.  When the source and destination do not
-    involve the same GPU, overlapping copies are allowed and no error is generated.
+    RESOLVED.  When the source and destination involve the same GPU, MulticastCopyBufferSubDataNV
+    matches the behavior of CopyBufferSubData: overlapped copies are not allowed and an
+    INVALID_VALUE error results.  When the source and destination do not involve the same GPU,
+    overlapping copies are allowed and no error is generated.
 
   (5) How does this extension interact with CopyTexImage2D?
 
@@ -731,9 +731,11 @@
 
   (8) Should we expose the extension on single-GPU configurations?
 
-    RESOLVED. No. The extension provides no value unless MULTICAST_GPUS_NV > 1.  Limiting exposure
-    to these configurations guarantees that at least two GPUs will be available when the extension
-    is reported.
+    RESOLVED.  Yes, this is recommended.  It allows more code sharing between multi-GPU and
+    single-GPU code paths.  If there is only one GPU present MULTICAST_GPUS_NV will be 1.  It
+    may also be 1 if explicit GPU control is unavailable (e.g. if the active multi-GPU rendering
+    mode prevents it).  Note that in revisions 5 and prior of this extension the minimum for
+    MULTICAST_GPUS_NV was 2.
   
   (9) Should glGet*BufferParameter* return the PER_GPU_STORAGE_BIT_NV bit when
     BUFFER_STORAGE_FLAGS is queried?
@@ -774,6 +776,8 @@
 
     Rev.    Date    Author    Changes
     ----  --------  --------  -----------------------------------------------
+     6    01/03/19  jschnarr  reduce MULTICAST_GPUS_NV minimum to 1
+                              clarify that MULTICAST_GPUS_NV is constant for a context
      5    10/07/16  jschnarr  trivial typo fix
      4    07/21/16  mjk       registered
      3    06/15/16  jschnarr  R370 release
diff --git a/extensions/NV/NV_mesh_shader.txt b/extensions/NV/NV_mesh_shader.txt
index f415821..bd0c56c 100644
--- a/extensions/NV/NV_mesh_shader.txt
+++ b/extensions/NV/NV_mesh_shader.txt
@@ -22,8 +22,8 @@
 
 Version
 
-    Last Modified Date:     September 17, 2018
-    NVIDIA Revision:        2
+    Last Modified Date:     January 14, 2019
+    NVIDIA Revision:        3
 
 Number
 
@@ -247,7 +247,7 @@
     A single program object cannot mix mesh and task shader stages
     with vertex, tessellation or geometry shader stages. Furthermore
     a task shader stage cannot be combined with a fragment shader stage
-    when the task shader stage is omitted. Other combinations as well
+    when the mesh shader stage is omitted. Other combinations as well
     as their subsets are possible.
 
     Modify Section 7.1, Shader Objects, p. 85
@@ -1075,6 +1075,10 @@
 
 Revision History
 
+    Revision 3, January 14, 2019 (pbrown)
+    - Fix a typo in language prohibiting use of a task shader without a mesh
+      shader.
+
     Revision 2, September 17, 2018 (pbrown)
     - Prepare specification for publication.