@@ -252,7 +252,7 @@ more than one shader_record_nv block statically used per shader entry point
252252otherwise results are undefined."
253253
254254The official Khronos ray tracing extension also comes with a SPIR-V storage class
255- that has the same functionality. The ``[[vk::shader_record_ext]] `` annotation can
255+ that has the same functionality. The ``[[vk::shader_record_ext]] `` annotation can
256256be used when targeting the SPV_KHR_ray_tracing extension.
257257
258258Builtin variables
@@ -297,10 +297,10 @@ Supported extensions
297297* SPV_EXT_mesh_shader
298298* SPV_EXT_shader_stencil_support
299299* SPV_AMD_shader_early_and_late_fragment_tests
300- * SPV_AMD_shader_explicit_vertex_parameter
301300* SPV_GOOGLE_hlsl_functionality1
302301* SPV_GOOGLE_user_type
303302* SPV_NV_mesh_shader
303+ * SPV_KHR_fragment_shading_barycentric
304304
305305Vulkan specific attributes
306306--------------------------
@@ -1279,6 +1279,39 @@ will be translated into
12791279 %myBuffer1 = OpVariable %_ptr_Uniform_type_ByteAddressBuffer Uniform
12801280 %myBuffer2 = OpVariable %_ptr_Uniform_type_RWByteAddressBuffer Uniform
12811281
1282+ Rasterizer Ordered Views
1283+ ------------------------
1284+
1285+ The following types are rasterizer ordered views:
1286+
1287+ * ``RasterizerOrderedBuffer ``
1288+ * ``RasterizerOrderedByteAddressBuffer ``
1289+ * ``RasterizerOrderedStructuredBuffer ``
1290+ * ``RasterizerOrderedTexture1D ``
1291+ * ``RasterizerOrderedTexture1DArray ``
1292+ * ``RasterizerOrderedTexture2D ``
1293+ * ``RasterizerOrderedTexture2DArray ``
1294+ * ``RasterizerOrderedTexture3D ``
1295+
1296+ These are translated to the same types as their equivalent RW* types - for
1297+ example, a ``RasterizerOrderedBuffer `` is translated to the same SPIR-V type as
1298+ an ``RWBuffer ``. The sole difference lies in how loads and stores to these
1299+ values are treated.
1300+
1301+ The access order guarantee made by ROVs is implemented in SPIR-V using the
1302+ `SPV_EXT_fragment_shader_interlock <https://github.com/KhronosGroup/SPIRV-Registry/blob/main/extensions/EXT/SPV_EXT_fragment_shader_interlock.asciidoc >`_.
1303+ When you load or store a value from or to a rasterizer ordered view, using
1304+ either the ``Load*() `` or ``Store*() `` methods or the indexing operator,
1305+ ``OpBeginInvocationInterlockEXT `` will be inserted before the first access and
1306+ ``OpEndInvocationInterlockEXT `` will be inserted after the last access.
1307+
1308+ An execution mode will be added to the entry point, depending on the sample
1309+ frequency, which will be deduced based on the semantics inputted by the entry
1310+ point. ``PixelInterlockOrderedEXT `` will be selected by default,
1311+ ``SampleInterlockOrderedEXT `` will be selected if the ``SV_SampleIndex ``
1312+ semantic is input, and ``ShadingRateInterlockOrderedEXT `` will be selected if
1313+ the ``SV_ShadingRate `` semantic is input.
1314+
12821315HLSL Variables and Resources
12831316============================
12841317
@@ -1550,7 +1583,7 @@ some system-value (SV) semantic strings will be translated into SPIR-V
15501583+---------------------------+-------------+----------------------------------------+-----------------------+-----------------------------+
15511584| SV_StencilRef | PSOut | ``FragStencilRefEXT `` | N/A | ``StencilExportEXT `` |
15521585+---------------------------+-------------+----------------------------------------+-----------------------+-----------------------------+
1553- | SV_Barycentrics | PSIn | ``BaryCoord*AMD `` | N/A | ``Shader `` |
1586+ | SV_Barycentrics | PSIn | ``BaryCoord*KHR `` | N/A | ``FragmentBarycentricKHR `` |
15541587+---------------------------+-------------+----------------------------------------+-----------------------+-----------------------------+
15551588| | GSOut | ``Layer `` | N/A | ``Geometry `` |
15561589| +-------------+----------------------------------------+-----------------------+-----------------------------+
@@ -3858,14 +3891,14 @@ implicit ``vk`` namepsace.
38583891
38593892 // Implicitly defined when compiling to SPIR-V.
38603893 namespace vk {
3861-
3894+
38623895 const uint CrossDeviceScope = 0;
38633896 const uint DeviceScope = 1;
38643897 const uint WorkgroupScope = 2;
38653898 const uint SubgroupScope = 3;
38663899 const uint InvocationScope = 4;
38673900 const uint QueueFamilyScope = 5;
3868-
3901+
38693902 uint64_t ReadClock(in uint scope);
38703903 T RawBufferLoad<T = uint>(in uint64_t deviceAddress,
38713904 in uint alignment = 4);
@@ -3918,20 +3951,20 @@ functionality to HLSL:
39183951
39193952.. code :: hlsl
39203953
3921- // RawBufferLoad and RawBufferStore use 'uint' for the default template argument.
3954+ // RawBufferLoad and RawBufferStore use 'uint' for the default template argument.
39223955 // The default alignment is 4. Note that 'alignment' must be a constant integer.
39233956 T RawBufferLoad<T = uint>(in uint64_t deviceAddress, in uint alignment = 4);
39243957 void RawBufferStore<T = uint>(in uint64_t deviceAddress, in T value, in uint alignment = 4);
39253958
39263959
3927- These intrinsics allow the shader program to load and store a single value with type T (int, float2, struct, etc...)
3960+ These intrinsics allow the shader program to load and store a single value with type T (int, float2, struct, etc...)
39283961from GPU accessible memory at given address, similar to ``ByteAddressBuffer.Load() ``.
3929- Additionally, these intrinsics allow users to set the memory alignment for the underlying data.
3930- We assume a 'uint' type when the template argument is missing, and we use a value of '4' for the default alignment.
3962+ Additionally, these intrinsics allow users to set the memory alignment for the underlying data.
3963+ We assume a 'uint' type when the template argument is missing, and we use a value of '4' for the default alignment.
39313964Note that the alignment argument must be a constant integer if it is given.
39323965
3933- Though we do support setting the `alignment ` of the data load and store, we do not currently
3934- support setting the memory layout for the data. Since these intrinsics are supposed to load
3966+ Though we do support setting the `alignment ` of the data load and store, we do not currently
3967+ support setting the memory layout for the data. Since these intrinsics are supposed to load
39353968"arbitrary" data to or from a random device address, we assume that the program loads/stores some "bytes of data",
39363969but that its format or layout is unknown. Therefore, keep in mind that these intrinsics
39373970load or store ``sizeof(T) `` bytes of data, and that loading/storing data with a struct
0 commit comments