Skip to content

Commit 35c2a76

Browse files
committed
Deploying to master from @ 65e405193e8c62b9d7faee762515c7e9a3bf08d2 🚀
1 parent e389b5a commit 35c2a76

File tree

1 file changed

+50
-14
lines changed

1 file changed

+50
-14
lines changed

‎doc/src/wgpu_hal/vulkan/adapter.rs.html

Lines changed: 50 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1538,6 +1538,24 @@
15381538
<span id="1538">1538</span>
15391539
<span id="1539">1539</span>
15401540
<span id="1540">1540</span>
1541+
<span id="1541">1541</span>
1542+
<span id="1542">1542</span>
1543+
<span id="1543">1543</span>
1544+
<span id="1544">1544</span>
1545+
<span id="1545">1545</span>
1546+
<span id="1546">1546</span>
1547+
<span id="1547">1547</span>
1548+
<span id="1548">1548</span>
1549+
<span id="1549">1549</span>
1550+
<span id="1550">1550</span>
1551+
<span id="1551">1551</span>
1552+
<span id="1552">1552</span>
1553+
<span id="1553">1553</span>
1554+
<span id="1554">1554</span>
1555+
<span id="1555">1555</span>
1556+
<span id="1556">1556</span>
1557+
<span id="1557">1557</span>
1558+
<span id="1558">1558</span>
15411559
</pre><pre class="rust"><code><span class="kw">use </span><span class="kw">super</span>::conv;
15421560

15431561
<span class="kw">use </span>ash::{extensions::khr, vk};
@@ -1612,7 +1630,7 @@
16121630
///
16131631
/// `requested_features` should be the same as what was used to generate `enabled_extensions`.
16141632
</span><span class="kw">fn </span>from_extensions_and_requested_features(
1615-
api_version: u32,
1633+
effective_api_version: u32,
16161634
enabled_extensions: <span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span><span class="lifetime">&#39;static </span>CStr],
16171635
requested_features: wgt::Features,
16181636
downlevel_flags: wgt::DownlevelFlags,
@@ -1747,7 +1765,7 @@
17471765
} <span class="kw">else </span>{
17481766
<span class="prelude-val">None
17491767
</span>},
1750-
imageless_framebuffer: <span class="kw">if </span>api_version &gt;= vk::API_VERSION_1_2
1768+
imageless_framebuffer: <span class="kw">if </span>effective_api_version &gt;= vk::API_VERSION_1_2
17511769
|| enabled_extensions.contains(<span class="kw-2">&amp;</span>vk::KhrImagelessFramebufferFn::name())
17521770
{
17531771
<span class="prelude-val">Some</span>(
@@ -1758,7 +1776,7 @@
17581776
} <span class="kw">else </span>{
17591777
<span class="prelude-val">None
17601778
</span>},
1761-
timeline_semaphore: <span class="kw">if </span>api_version &gt;= vk::API_VERSION_1_2
1779+
timeline_semaphore: <span class="kw">if </span>effective_api_version &gt;= vk::API_VERSION_1_2
17621780
|| enabled_extensions.contains(<span class="kw-2">&amp;</span>vk::KhrTimelineSemaphoreFn::name())
17631781
{
17641782
<span class="prelude-val">Some</span>(
@@ -1802,7 +1820,7 @@
18021820
} <span class="kw">else </span>{
18031821
<span class="prelude-val">None
18041822
</span>},
1805-
multiview: <span class="kw">if </span>api_version &gt;= vk::API_VERSION_1_1
1823+
multiview: <span class="kw">if </span>effective_api_version &gt;= vk::API_VERSION_1_1
18061824
|| enabled_extensions.contains(<span class="kw-2">&amp;</span>vk::KhrMultiviewFn::name())
18071825
{
18081826
<span class="prelude-val">Some</span>(
@@ -2051,6 +2069,20 @@
20512069
supported_extensions: Vec&lt;vk::ExtensionProperties&gt;,
20522070
properties: vk::PhysicalDeviceProperties,
20532071
descriptor_indexing: <span class="prelude-ty">Option</span>&lt;vk::PhysicalDeviceDescriptorIndexingPropertiesEXT&gt;,
2072+
<span class="doccomment">/// The effective driver api version supported by the physical device.
2073+
///
2074+
/// The Vulkan specification states the following in the documentation for VkPhysicalDeviceProperties:
2075+
/// &gt; The value of apiVersion may be different than the version returned by vkEnumerateInstanceVersion;
2076+
/// &gt; either higher or lower. In such cases, the application must not use functionality that exceeds
2077+
/// &gt; the version of Vulkan associated with a given object.
2078+
///
2079+
/// For example, a Vulkan 1.1 instance cannot use functionality added in Vulkan 1.2 even if the physical
2080+
/// device supports Vulkan 1.2.
2081+
///
2082+
/// This means that assuming that the apiVersion provided by VkPhysicalDeviceProperties is the actual
2083+
/// version we can use is incorrect. Instead the effective version is the lower of the instance version
2084+
/// and physical device version.
2085+
</span>effective_api_version: u32,
20542086
}
20552087

20562088
<span class="comment">// This is safe because the structs have `p_next: *mut c_void`, which we null out/never read.
@@ -2074,7 +2106,7 @@
20742106

20752107
extensions.push(khr::Swapchain::name());
20762108

2077-
<span class="kw">if </span><span class="self">self</span>.properties.api_version &lt; vk::API_VERSION_1_1 {
2109+
<span class="kw">if </span><span class="self">self</span>.effective_api_version &lt; vk::API_VERSION_1_1 {
20782110
extensions.push(vk::KhrMaintenance1Fn::name());
20792111
extensions.push(vk::KhrMaintenance2Fn::name());
20802112

@@ -2092,7 +2124,7 @@
20922124
}
20932125
}
20942126

2095-
<span class="kw">if </span><span class="self">self</span>.properties.api_version &lt; vk::API_VERSION_1_2 {
2127+
<span class="kw">if </span><span class="self">self</span>.effective_api_version &lt; vk::API_VERSION_1_2 {
20962128
<span class="kw">if </span><span class="self">self</span>.supports_extension(vk::KhrImagelessFramebufferFn::name()) {
20972129
extensions.push(vk::KhrImagelessFramebufferFn::name());
20982130
extensions.push(vk::KhrImageFormatListFn::name()); <span class="comment">// Required for `KhrImagelessFramebufferFn`
@@ -2104,7 +2136,7 @@
21042136
<span class="kw">if </span>requested_features.intersects(indexing_features()) {
21052137
extensions.push(vk::ExtDescriptorIndexingFn::name());
21062138

2107-
<span class="kw">if </span><span class="self">self</span>.properties.api_version &lt; vk::API_VERSION_1_1 {
2139+
<span class="kw">if </span><span class="self">self</span>.effective_api_version &lt; vk::API_VERSION_1_1 {
21082140
extensions.push(vk::KhrMaintenance3Fn::name());
21092141
}
21102142
}
@@ -2295,6 +2327,10 @@
22952327
<span class="kw">unsafe </span>{ <span class="self">self</span>.raw.get_physical_device_properties(phd) }
22962328
};
22972329

2330+
<span class="comment">// Set the effective api version
2331+
</span>capabilities.effective_api_version = <span class="self">self
2332+
</span>.driver_api_version
2333+
.min(capabilities.properties.api_version);
22982334
capabilities
22992335
};
23002336

@@ -2305,7 +2341,7 @@
23052341
<span class="kw">let </span><span class="kw-2">mut </span>builder = vk::PhysicalDeviceFeatures2KHR::builder().features(core);
23062342

23072343
<span class="comment">// `VK_KHR_multiview` is promoted to 1.1
2308-
</span><span class="kw">if </span>capabilities.properties.api_version &gt;= vk::API_VERSION_1_1
2344+
</span><span class="kw">if </span>capabilities.effective_api_version &gt;= vk::API_VERSION_1_1
23092345
|| capabilities.supports_extension(vk::KhrMultiviewFn::name())
23102346
{
23112347
<span class="kw">let </span>next = features
@@ -2433,7 +2469,7 @@
24332469
);
24342470
};
24352471

2436-
<span class="kw">if </span>phd_capabilities.properties.api_version == vk::API_VERSION_1_0
2472+
<span class="kw">if </span>phd_capabilities.effective_api_version == vk::API_VERSION_1_0
24372473
&amp;&amp; !phd_capabilities.supports_extension(vk::KhrStorageBufferStorageClassFn::name())
24382474
{
24392475
<span class="macro">log::warn!</span>(
@@ -2444,7 +2480,7 @@
24442480
}
24452481
<span class="kw">if </span>!phd_capabilities.supports_extension(vk::AmdNegativeViewportHeightFn::name())
24462482
&amp;&amp; !phd_capabilities.supports_extension(vk::KhrMaintenance1Fn::name())
2447-
&amp;&amp; phd_capabilities.properties.api_version &lt; vk::API_VERSION_1_1
2483+
&amp;&amp; phd_capabilities.effective_api_version &lt; vk::API_VERSION_1_1
24482484
{
24492485
<span class="macro">log::warn!</span>(
24502486
<span class="string">&quot;viewport Y-flip is not supported, hiding adapter: {}&quot;</span>,
@@ -2465,15 +2501,15 @@
24652501
}
24662502

24672503
<span class="kw">let </span>private_caps = <span class="kw">super</span>::PrivateCapabilities {
2468-
flip_y_requires_shift: phd_capabilities.properties.api_version &gt;= vk::API_VERSION_1_1
2504+
flip_y_requires_shift: phd_capabilities.effective_api_version &gt;= vk::API_VERSION_1_1
24692505
|| phd_capabilities.supports_extension(vk::KhrMaintenance1Fn::name()),
24702506
imageless_framebuffers: <span class="kw">match </span>phd_features.imageless_framebuffer {
24712507
<span class="prelude-val">Some</span>(features) =&gt; features.imageless_framebuffer == vk::TRUE,
24722508
<span class="prelude-val">None </span>=&gt; phd_features
24732509
.imageless_framebuffer
24742510
.map_or(<span class="bool-val">false</span>, |ext| ext.imageless_framebuffer != <span class="number">0</span>),
24752511
},
2476-
image_view_usage: phd_capabilities.properties.api_version &gt;= vk::API_VERSION_1_1
2512+
image_view_usage: phd_capabilities.effective_api_version &gt;= vk::API_VERSION_1_1
24772513
|| phd_capabilities.supports_extension(vk::KhrMaintenance2Fn::name()),
24782514
timeline_semaphores: <span class="kw">match </span>phd_features.timeline_semaphore {
24792515
<span class="prelude-val">Some</span>(features) =&gt; features.timeline_semaphore == vk::TRUE,
@@ -2579,7 +2615,7 @@
25792615
uab_types: <span class="kw">super</span>::UpdateAfterBindTypes,
25802616
) -&gt; PhysicalDeviceFeatures {
25812617
PhysicalDeviceFeatures::from_extensions_and_requested_features(
2582-
<span class="self">self</span>.phd_capabilities.properties.api_version,
2618+
<span class="self">self</span>.phd_capabilities.effective_api_version,
25832619
enabled_extensions,
25842620
features,
25852621
<span class="self">self</span>.downlevel_flags,
@@ -2633,7 +2669,7 @@
26332669
<span class="kw-2">&amp;</span><span class="self">self</span>.instance.raw,
26342670
<span class="kw-2">&amp;</span>raw_device,
26352671
)))
2636-
} <span class="kw">else if </span><span class="self">self</span>.phd_capabilities.properties.api_version &gt;= vk::API_VERSION_1_2 {
2672+
} <span class="kw">else if </span><span class="self">self</span>.phd_capabilities.effective_api_version &gt;= vk::API_VERSION_1_2 {
26372673
<span class="prelude-val">Some</span>(<span class="kw">super</span>::ExtensionFn::Promoted)
26382674
} <span class="kw">else </span>{
26392675
<span class="prelude-val">None

0 commit comments

Comments
 (0)