Skip to content

Commit cab7ffa

Browse files
committed
Change log for July 3, 2020 Vulkan 1.2.146 spec update:
* Update release number to 146 for this update. Github Issues: * Fix valid usage generation script for optional bitmasks in a non-optional array (public pull request 1228). * Add lunr to `package.json` and update the locally cached copy (public pull request 1238). * Require that newly released extensions have etext:*_SPEC_VERSION `1` (public issue 1263). * Add to the NOTE in slink:VkPhysicalDeviceIDProperties, advising implementations on returning unique pname:deviceUUID values and avoiding hardwired values, especially 0 (public issue 1273). * Add noscript fallback for HTML output (public pull request 1289). * Fix duplicated VUIDs in flink:vkCmdExecuteGeneratedCommandsNV (public pull request 1304). * Fix link markup in <<ray-traversal, Ray Traversal>> chapter, nested link markup, and linear equation markup in <<textures-unnormalized-to-integer>> (public pull requests 1305, 1306, 1307). Internal Issues: * Add comments to extending enums in the generated API interfaces showing which core version and/or extensions provide the enum, matching recent changes to show this information for commands and structures (internal issue 1431). * Only allow code:Invocation memory scope in the <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>> section when memory semantics is *None* (internal issue 1782). * Make reflow script handle literal block delimiters and lines containing only whitespace properly (internal issues 2039, 2042). * Clarify definition of <<limits-maxFragmentCombinedOutputResources, pname:maxFragmentCombinedOutputResources>> (internal issue 2236). * Add missing `errorcodes=` XML attributes for some `<<VK_EXT_display_control>>` commands. * Clarify <<features-extentperimagetype, allowed extent values based on image type>> and the related <<limits-maxImageDimension1D>>, <<limits-maxImageDimension2D>>, <<limits-maxImageDimension3D>>, <<limits-maxImageDimensionCube>> limits (internal merge request 3922). * Remove redundant valid usage statement VUID-VkFramebufferCreateInfo-flags-03188 (internal merge request 3934). * Update style guide to recommend new extension spec language be contained in existing asciidoctor files, unless it's of enough scope to create a and new chapter (internal merge request 3955). New Extensions: * `<<VK_EXT_directfb_surface>>` (public pull requests 1292, 1294). * `<<VK_EXT_fragment_density_map2>>` (internal merge request 3914).
1 parent 4f9110b commit cab7ffa

File tree

3 files changed

+210
-0
lines changed

3 files changed

+210
-0
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
// Copyright (c) 2020 The Khronos Group Inc.
2+
//
3+
// SPDX-License-Identifier: CC-BY-4.0
4+
5+
include::{generated}/meta/VK_EXT_fragment_density_map2.txt[]
6+
7+
*Last Modified Date*::
8+
2020-06-16
9+
*Interactions and External Dependencies*::
10+
- Interacts with Vulkan 1.1
11+
*Contributors*::
12+
- Matthew Netsch, Qualcomm Technologies, Inc.
13+
- Jonathan Tinkham, Qualcomm Technologies, Inc.
14+
- Jonathan Wicks, Qualcomm Technologies, Inc.
15+
- Jan-Harald Fredriksen, ARM
16+
17+
This extension adds additional features and properties to
18+
`<<VK_EXT_fragment_density_map>>` in order to reduce fragment density map
19+
host latency as well as improved queries for subsampled sampler
20+
implementation-dependent behavior.
21+
22+
=== New Object Types
23+
24+
None.
25+
26+
=== New Enum Constants
27+
28+
* Extending elink:VkImageViewCreateFlagBits:
29+
** ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT
30+
* Extending elink:VkStructureType:
31+
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT
32+
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT
33+
34+
=== New Enums
35+
36+
None.
37+
38+
=== New Structures
39+
40+
* slink:VkPhysicalDeviceFragmentDensityMap2FeaturesEXT
41+
* slink:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT
42+
43+
=== New Functions
44+
45+
None.
46+
47+
=== New Variable Decorations
48+
49+
None.
50+
51+
=== Version History
52+
53+
* Revision 1, 2020-06-16 (Matthew Netsch)
54+
- Initial version
55+
56+
ifdef::isrefpage[]
57+
=== Examples
58+
59+
==== Additional limits for subsampling
60+
61+
Some implementations may not support subsampled samplers if certain
62+
implementation limits are not observed by the app.
63+
slink:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT provides additional
64+
limits to require apps remain within these boundaries if they wish to use
65+
subsampling.
66+
67+
==== Improved host latency
68+
69+
By default, the fragment density map is locked by the host for reading
70+
between flink:vkCmdBeginRenderPass during recording and
71+
ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT during draw
72+
execution.
73+
74+
This can introduce large latency for certain use cases between recording the
75+
frame and displaying the frame.
76+
Apps may wish to modify the fragment density map just before draw execution.
77+
78+
ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT is intended
79+
to help address this for implementations that do not support the
80+
<<features-fragmentdensitymapdynamic,fragmentDensityMapDynamic>> feature by
81+
deferring the start of the locked range to flink:vkEndCommandBuffer.
82+
83+
84+
[source,c++]
85+
----------------------------------------
86+
// Create view for fragment density map
87+
VkImageViewCreateInfo createInfo =
88+
{
89+
​VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
90+
// ...
91+
VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT,
92+
fdmImage, // Created with VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
93+
// ...
94+
};
95+
96+
// ...
97+
98+
// Begin fragment density map render pass with deferred view.
99+
// By default, fdmImage must not be modified after this call
100+
// unless view is created with the FDM dynamic or deferred flags.
101+
vkCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
102+
103+
// ...
104+
105+
vkCmdEndRenderPass(VkCommandBuffer commandBuffer);
106+
107+
// Can keep making modifications to deferred fragment density maps
108+
// while recording commandBuffer ...
109+
110+
result = vkEndCommandBuffer(commandBuffer);
111+
112+
// Must now freeze modifying fdmImage until after the
113+
// VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT of
114+
// the last executing draw that uses the fdmImage in the
115+
// last submit of commandBuffer.
116+
117+
----------------------------------------
118+
endif::isrefpage[]

config/vuid-expander.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Copyright 2020 The Khronos Group Inc.
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
6+
7+
include ::Asciidoctor
8+
9+
# Preprocessor hook to insert vuid: inline macro after every VUID anchor
10+
class VUIDExpanderPreprocessor < Extensions::Preprocessor
11+
def process document, reader
12+
new_lines = reader.read_lines.map do | line |
13+
line.gsub(/\[\[(VUID.*?)\]\]/, '[[\1]]vuid:\1')
14+
end
15+
Reader.new(new_lines)
16+
end
17+
end
18+
19+
Extensions.register do
20+
preprocessor VUIDExpanderPreprocessor
21+
end

scripts/testSpecVersion.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#!/usr/bin/python3
2+
#
3+
# Copyright (c) 2017-2020 The Khronos Group Inc.
4+
#
5+
# SPDX-License-Identifier: Apache-2.0
6+
7+
# testSpecVersion - check if SPEC_VERSION values for an unpublished
8+
# extension branch meet the requirement of being 1.
9+
#
10+
# Usage: textSpecVersion.py [-branch branchname] [-registry file]
11+
#
12+
# Checks for an XML <extension> matching the branch name specified
13+
# on the command line, or the current branch if not specified.
14+
#
15+
# If found, and the SPEC_VERSION for that <extension> has a value of '1', #
16+
# of '1', succeeds.
17+
# If not found, the branch is not an extension staging branch; succeeds.
18+
19+
# Otherwise, fails.
20+
21+
import argparse
22+
import sys
23+
import xml.etree.ElementTree as etree
24+
from reflib import getBranch
25+
26+
if __name__ == '__main__':
27+
parser = argparse.ArgumentParser()
28+
29+
parser.add_argument('-branch', action='store',
30+
default=None,
31+
help='Specify branch to check against')
32+
parser.add_argument('-registry', action='store',
33+
default='xml/vk.xml',
34+
help='Use specified registry file instead of vk.xml')
35+
args = parser.parse_args()
36+
37+
try:
38+
tree = etree.parse(args.registry)
39+
except:
40+
print('ERROR - cannot open registry XML file', args.registry)
41+
sys.exit(1)
42+
43+
errors = ''
44+
if args.branch is None:
45+
(args.branch, errors) = getBranch()
46+
if args.branch is None:
47+
print('ERROR - Cannot determine current git branch:', errors)
48+
sys.exit(1)
49+
50+
elem = tree.find('extensions/extension[@name="' + args.branch + '"]')
51+
52+
if elem == None:
53+
print('Success - assuming', args.branch, 'is not an extension branch')
54+
sys.exit(0)
55+
56+
for enum in elem.findall('require/enum'):
57+
name = enum.get('name')
58+
59+
if name is not None and name[-13:] == '_SPEC_VERSION':
60+
value = enum.get('value')
61+
if value == '1':
62+
print('Success - {} = 1 for branch {}'.format(
63+
name, args.branch))
64+
sys.exit(0)
65+
else:
66+
print('ERROR - {} = {} for branch {}, but must be 1'.format(
67+
name, value, args.branch))
68+
sys.exit(1)
69+
70+
print('ERROR - no SPEC_VERSION token found for branch', args.branch)
71+
sys.exit(1)

0 commit comments

Comments
 (0)