Skip to content

Commit 1ca0ea1

Browse files
committed
Change log for July 22, 2016 Vulkan 1.0.22 spec update:
* Bump API patch number and header version number to 22 for this update. Github Issues: * Translate the subpass self-dependency language into concrete validity statements, and added a validity statement about the restrictions on layout parameters (public issue 267). * Add validity requirement that slink:VkAttachmentDescription::pname:finalLayout and slink:VkAttachmentReference::pname:layout must not be ename:VK_IMAGE_LAYOUT_UNDEFINED or ename:VK_IMAGE_LAYOUT_PREINITIALIZED (public issue 268). * Clarify that slink:VkSubpassDescription::pname:pResolveAttachments layouts are used. Make language consistent with other attachment arrays (public issue 270). * Changed 64-bit definition for dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE to work for x32 platform in +vk.xml+ and the resulting +vulkan.h+ (public issue 282). * Add missing error return code for flink:vkEnumerateInstanceExtensionProperties and flink:vkEnumerateDeviceExtensionProperties (public issue 285) * Fix several cases of stext::VkStructName.memberName markup to stext::VkStructName::pname:memberName, to match other usage in the spec, and describe this markup in the style guide (public issue 286). * Modified validity language generation script to avoid redundant common ancestor language if covered by generic parent language, and used `Both' instead of `Each' when appropriate (public issue 288). Internal Issues: * Add language about behavior of flink:vkAllocateDescriptorSets when allocation fails due to fragmentation, a new error ename:VK_ERROR_FRAGMENTED_POOL, and a Note explaining the situation (internal issue 309). * For the features of code:PointSize, code:ClipDistance, and code:CullDistance, the SPIR-V capability is required to be declared on use (read or write) rather than on decoration (internal issue 359). * Have desktop versions of GLSL respect precision qualification (code:mediump and code:lowp) when compiling for Vulkan. These will get translated to SPIR-V's code:RelaxedPrecision decoration as they do with OpenGL ES versions of GLSL (ESSL). The default precision of all types is code:highp when using a desktop version (internal issue 360). * Add validity statement for slink:VkImageCreateInfo specifying that multisampled images must be two-dimensional, optimally tiled, and with a single mipmap level (internal issue 369). * Add validity statements to slink:VkImageViewCreateInfo disallowing creation of images or image views with no supported features. Made some slink:VkImageViewCreateInfo validity statements more precise and consistent. Added a Note to the <<features,features>> chapter about formats with no features (internal issue 371). * Remove +manpages+ from default build targets. Nroff outputs containing imbedded latexmath will not render properly. Fixing this is a lot of work for limited use cases (internal issue 401). Other Commits: * Fix flink:vkRenderPassBeginInfo::pname:clearValueCount validity statement to be based on attachment indices rather than the number of cleared attachments (Vulkan-LoaderAndValidationLayers/issues/601). * Convert registry documentation from LaTeX to asciidoc source and rename from +src/spec/readme.tex+ to +src/spec/registry.txt+. * Fix lack of Oxford commas in validity language. * Lots of cleanup of generator scripts and Makefiles to move extension list for generator into the script arguments instead of the body of genvk.py, and express better dependencies between XML, scripts, and generated files.
1 parent f4c4113 commit 1ca0ea1

981 files changed

Lines changed: 4015 additions & 5472 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,4 @@ src/spec/diag.txt
4646
.DS_Store
4747

4848
# Auto-generated files
49-
src/spec/hostsynctable
50-
src/spec/validity
51-
src/spec/vulkan-docs
49+
# doc/specs/vulkan/*/timeMarker

ChangeLog.txt

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,3 +1006,78 @@ Other Commits:
10061006
APIs.
10071007
* Update vk_platform.h to handle 32-bit ARMv8 binaries.
10081008
* Various minor cleanups to the Makefile and build process.
1009+
1010+
-----------------------------------------------------
1011+
1012+
Change log for July 22, 2016 Vulkan 1.0.22 spec update:
1013+
1014+
* Bump API patch number and header version number to 22 for this update.
1015+
1016+
Github Issues:
1017+
1018+
* Translate the subpass self-dependency language into concrete
1019+
validity statements, and added a validity statement about the
1020+
restrictions on layout parameters (public issue 267).
1021+
* Add validity requirement that
1022+
slink:VkAttachmentDescription::pname:finalLayout and
1023+
slink:VkAttachmentReference::pname:layout must not be
1024+
ename:VK_IMAGE_LAYOUT_UNDEFINED or
1025+
ename:VK_IMAGE_LAYOUT_PREINITIALIZED (public issue 268).
1026+
* Clarify that slink:VkSubpassDescription::pname:pResolveAttachments
1027+
layouts are used. Make language consistent with other attachment
1028+
arrays (public issue 270).
1029+
* Changed 64-bit definition for
1030+
dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE to work for x32 platform in
1031+
+vk.xml+ and the resulting +vulkan.h+ (public issue 282).
1032+
* Add missing error return code for
1033+
flink:vkEnumerateInstanceExtensionProperties and
1034+
flink:vkEnumerateDeviceExtensionProperties (public issue 285)
1035+
* Fix several cases of stext::VkStructName.memberName markup to
1036+
stext::VkStructName::pname:memberName, to match other usage in the
1037+
spec, and describe this markup in the style guide (public issue
1038+
286).
1039+
* Modified validity language generation script to avoid redundant
1040+
common ancestor language if covered by generic parent language, and
1041+
used `Both' instead of `Each' when appropriate (public issue 288).
1042+
1043+
Internal Issues:
1044+
1045+
* Add language about behavior of flink:vkAllocateDescriptorSets when
1046+
allocation fails due to fragmentation, a new error
1047+
ename:VK_ERROR_FRAGMENTED_POOL, and a Note explaining the situation
1048+
(internal issue 309).
1049+
* For the features of code:PointSize, code:ClipDistance, and
1050+
code:CullDistance, the SPIR-V capability is required to be declared
1051+
on use (read or write) rather than on decoration (internal issue
1052+
359).
1053+
* Have desktop versions of GLSL respect precision qualification
1054+
(code:mediump and code:lowp) when compiling for Vulkan. These will
1055+
get translated to SPIR-V's code:RelaxedPrecision decoration as they
1056+
do with OpenGL ES versions of GLSL (ESSL). The default precision of
1057+
all types is code:highp when using a desktop version (internal issue
1058+
360).
1059+
* Add validity statement for slink:VkImageCreateInfo specifying that
1060+
multisampled images must be two-dimensional, optimally tiled, and
1061+
with a single mipmap level (internal issue 369).
1062+
* Add validity statements to slink:VkImageViewCreateInfo disallowing
1063+
creation of images or image views with no supported features. Made
1064+
some slink:VkImageViewCreateInfo validity statements more precise
1065+
and consistent. Added a Note to the <<features,features>> chapter
1066+
about formats with no features (internal issue 371).
1067+
* Remove +manpages+ from default build targets. Nroff outputs
1068+
containing imbedded latexmath will not render properly. Fixing this
1069+
is a lot of work for limited use cases (internal issue 401).
1070+
1071+
Other Commits:
1072+
1073+
* Fix flink:vkRenderPassBeginInfo::pname:clearValueCount validity
1074+
statement to be based on attachment indices rather than the number
1075+
of cleared attachments
1076+
(Vulkan-LoaderAndValidationLayers/issues/601).
1077+
* Convert registry documentation from LaTeX to asciidoc source and
1078+
rename from +src/spec/readme.tex+ to +src/spec/registry.txt+.
1079+
* Fix lack of Oxford commas in validity language.
1080+
* Lots of cleanup of generator scripts and Makefiles to move extension
1081+
list for generator into the script arguments instead of the body of
1082+
genvk.py, and express better dependencies between XML, scripts, and
1083+
generated files.

doc/specs/misc/GL_KHR_vulkan_glsl.txt

Lines changed: 140 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ Status
3333

3434
Version
3535

36-
Last Modified Date: 12-Apr-2016
37-
Revision: 30
36+
Last Modified Date: 20-Jul-2016
37+
Revision: 31
3838

3939
Number
4040

@@ -79,6 +79,9 @@ Overview
7979
* subpass inputs
8080

8181
The following features are changed:
82+
* precision qualifiers (mediump and lowp) will be respected for all
83+
versions, not dropped for desktop versions (default precision for
84+
desktop versions is highp for all types)
8285
* gl_FragColor will no longer indicate an implicit broadcast
8386
* arrays of opaque uniforms take only one binding number for
8487
the entire object, not one per array element
@@ -374,19 +377,21 @@ Overview
374377

375378
Non-fragment stage:
376379

377-
in/out gl_PerVertex {
380+
in/out gl_PerVertex { // some subset of these members will be used
378381
gl_Position
379382
gl_PointSize
380383
gl_ClipDistance
381384
gl_CullDistance
382-
} (name of block is for debug only)
385+
} // name of block is for debug only
383386

384387
There is at most one input and one output block per stage in SPIR-V.
388+
The subset and order of members will match between stages sharing an
389+
interface.
385390

386391
Mapping of precision qualifiers:
387392

388-
lowp -> RelaxedPrecision, on variable and operation
389-
mediump -> RelaxedPrecision, on variable and operation
393+
lowp -> RelaxedPrecision, on storage variable and operation
394+
mediump -> RelaxedPrecision, on storage variable and operation
390395
highp -> 32-bit, same as int or float
391396

392397
portability tool/mode -> OpQuantizeToF16
@@ -560,11 +565,16 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
560565
samplerShadow | a handle for accessing state describing how to
561566
| sample a depth texture with comparison"
562567

563-
564-
565568
Remove "structure member selection" from 4.1.7 and instead add a sentence
566569
"Opaque types cannot be declared or nested in a structure (struct)."
567570

571+
Modify subsection 4.1.3 Integers, for desktop versions of GLSL, to say:
572+
573+
"Highp unsigned integers have exactly 32 bits of precision. Highp
574+
signed integers use 32 bits, including a sign bit, in two's complement
575+
form. Mediump and lowp integers are as defined by the RelaxedPrecision
576+
decoration in SPIR-V."
577+
568578
Add a subsection to 4.1.7 Opaque Types:
569579

570580
"4.1.7.x Texture, *sampler*, and *samplerShadow* Types
@@ -598,6 +608,12 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
598608
"Subpass input types are only available in fragment shaders. It is a
599609
compile-time error to use them in any other stage."
600610

611+
Add to section 4.1.7.3 Atomic Counters:
612+
613+
"It is an error to declare an atomic type with a different precision or
614+
to specify the default precision for an atomic type to be lowp or
615+
mediump."
616+
601617
Change section 4.3.3 Constant Expressions:
602618

603619
Add a new very first sentence to this section:
@@ -870,6 +886,50 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
870886
"However, when push_constant is declared, the default layout of the
871887
buffer will be std430. There is no method to globally set this default."
872888

889+
Remove the following preamble from section 4.7, which exists for desktop
890+
versions, but not ES versions. Removal:
891+
892+
"Precision qualifiers are added for code portability with OpenGL ES, not
893+
for functionality. They have the same syntax as in OpenGL ES, as
894+
described below, but they have no semantic meaning, which includes no
895+
effect on the precision used to store or operate on variables.
896+
897+
"If an extension adds in the same semantics and functionality in the
898+
OpenGL ES 2.0 specification for precision qualifiers, then the extension
899+
is allowed to reuse the keywords below for that purpose.
900+
901+
"For the purposes of determining if an output from one shader stage
902+
matches an input of the next stage, the precision qualifier need not
903+
match."
904+
905+
Add:
906+
907+
"For interface matching, uniform variables and uniform and buffer block
908+
members must have the same precision qualification. For matching *out*
909+
variables or block members to *in* variables and block members, the
910+
precision qualification does not have to match.
911+
912+
"Global variables declared in different compilation units linked into the
913+
same shader stage must be declared with the same precision qualification."
914+
915+
More generally, all versions will follow OpenGL ES semantic rules for
916+
precision qualifiers.
917+
918+
Section 4.7.2 Precision Qualifiers (desktop only)
919+
920+
Replace the table saying "none" for all precisions with this statement:
921+
922+
"Mediump and lowp floating-point values have the precision defined by
923+
the RelaxedPrecision decoration in SPIR-V."
924+
925+
Section 4.7.4 Default Precision Qualifiers:
926+
927+
For desktop versions, replace the last three paragraphs that state the
928+
default precisions with the following instead:
929+
930+
"All stages have default precision qualification of highp for all types
931+
that accept precision qualifiers."
932+
873933
Changes to Chapter 5 of the OpenGL Shading Language Specification
874934

875935
Add a new subsection at the end of section 5.4 "Constructors":
@@ -1003,6 +1063,77 @@ Changes to Chapter 7 of the OpenGL Shading Language Specification
10031063

10041064
Changes to Chapter 8 of the OpenGL Shading Language Specification
10051065

1066+
Add the following ES language to desktop versions of the specification:
1067+
1068+
"The operation of a built-in function can have a different precision
1069+
qualification than the precision qualification of the resulting value.
1070+
These two precision qualifications are established as follows.
1071+
1072+
"The precision qualification of the operation of a built-in function is
1073+
based on the precision qualification of its input arguments and formal
1074+
parameters: When a formal parameter specifies a precision qualifier,
1075+
that is used, otherwise, the precision qualification of the calling
1076+
argument is used. The highest precision of these will be the precision
1077+
qualification of the operation of the built-in function. Generally,
1078+
this is applied across all arguments to a built-in function, with the
1079+
exceptions being:
1080+
- bitfieldExtract and bitfieldInsert ignore the 'offset' and 'bits'
1081+
arguments.
1082+
- interpolateAt* functions only look at the 'interpolant' argument.
1083+
1084+
"The precision qualification of the result of a built-in function is
1085+
determined in one of the following ways:
1086+
1087+
- For the texture sampling, image load, and image store functions,
1088+
the precision of the return type matches the precision of the
1089+
sampler type:
1090+
uniform lowp sampler2D sampler;
1091+
highp vec2 coord;
1092+
...
1093+
lowp vec4 col = texture (sampler, coord); // texture() returns lowp
1094+
1095+
Otherwise:
1096+
1097+
- For prototypes that do not specify a resulting precision qualifier,
1098+
the precision will be the same as the precision of the operation.
1099+
(As defined earlier.)
1100+
1101+
- For prototypes that do specify a resulting precision qualifier,
1102+
the specified precision qualifier is the precision qualification of
1103+
the result."
1104+
1105+
Add precision qualifiers to the following in desktop versions:
1106+
1107+
1108+
genIType floatBitsToInt (highp genFType value)
1109+
genUType floatBitsToUint(highp genFType value)
1110+
genFType intBitsToFloat (highp genIType value)
1111+
genFType uintBitsToFloat(highp genUType value)
1112+
1113+
genFType frexp(highp genFType x, out highp genIType exp)
1114+
genFType ldexp(highp genFType x, in highp genIType exp)
1115+
1116+
highp uint packSnorm2x16(vec2 v)
1117+
vec2 unpackSnorm2x16(highp uint p)
1118+
highp uint packUnorm2x16(vec2 v)
1119+
vec2 unpackUnorm2x16(highp uint p)
1120+
vec2 unpackHalf2x16(highp uint v)
1121+
vec4 unpackUnorm4x8(highp uint v)
1122+
vec4 unpackSnorm4x8(highp uint v)
1123+
1124+
genIType bitfieldReverse(highp genIType value)
1125+
genUType bitfieldReverse(highp genUType value)
1126+
genIType findMSB(highp genIType value)
1127+
genIType findMSB(highp genUType value)
1128+
genUType uaddCarry(highp genUType x, highp genUType y,
1129+
out lowp genUType carry)
1130+
genUType usubBorrow(highp genUType x, highp genUType y,
1131+
out lowp genUType borrow)
1132+
void umulExtended(highp genUType x, highp genUType y,
1133+
out highp genUType msb, out highp genUType lsb)
1134+
void imulExtended(highp genIType x, highp genIType y,
1135+
out highp genIType msb, out highp genIType lsb)
1136+
10061137
Add a section
10071138

10081139
"8.X Subpass Functions
@@ -1155,6 +1286,7 @@ Revision History
11551286

11561287
Rev. Date Author Changes
11571288
---- ----------- ------- --------------------------------------------
1289+
31 20-Jul-2016 JohnK Have desktop versions respect mediump/lowp
11581290
30 12-Apr-2016 JohnK Restrict spec-const operations to non-float
11591291
29 5-Apr-2016 JohnK Clarify disallowance of spec-const arrays in
11601292
initializers

0 commit comments

Comments
 (0)