mirror of
https://github.com/italicsjenga/portability.git
synced 2024-11-22 23:11:30 +11:00
commit
0cbabce1e6
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,4 +1,6 @@
|
||||||
/build/
|
/build/
|
||||||
/target/
|
/target/
|
||||||
|
conformance/*.xml
|
||||||
|
conformance/*.qpa
|
||||||
**/*.rs.bk
|
**/*.rs.bk
|
||||||
Cargo.lock
|
Cargo.lock
|
||||||
|
|
10
Makefile
10
Makefile
|
@ -1,4 +1,5 @@
|
||||||
VULKAN_DIR=modules/vulkan-docs/src
|
VULKAN_DIR=modules/vulkan-docs/src
|
||||||
|
CTS_DIR=../VK-GL-CTS
|
||||||
BINDING=target/vulkan.rs
|
BINDING=target/vulkan.rs
|
||||||
NATIVE_DIR=target/native
|
NATIVE_DIR=target/native
|
||||||
TARGET=$(NATIVE_DIR)/test
|
TARGET=$(NATIVE_DIR)/test
|
||||||
|
@ -31,9 +32,10 @@ else
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
FULL_LIBRARY_PATH=$(CURDIR)/target/debug
|
||||||
LIBRARY=target/debug/libportability.$(LIB_EXTENSION)
|
LIBRARY=target/debug/libportability.$(LIB_EXTENSION)
|
||||||
|
|
||||||
.PHONY: all binding run
|
.PHONY: all binding run cts
|
||||||
|
|
||||||
all: $(TARGET)
|
all: $(TARGET)
|
||||||
|
|
||||||
|
@ -55,6 +57,12 @@ $(TARGET): $(LIBRARY) $(OBJECTS) Makefile
|
||||||
run: $(TARGET)
|
run: $(TARGET)
|
||||||
$(TARGET)
|
$(TARGET)
|
||||||
|
|
||||||
|
cts: $(TARGET)
|
||||||
|
-LD_LIBRARY_PATH=$(FULL_LIBRARY_PATH) $(CTS_DIR)/build/external/vulkancts/modules/vulkan/deqp-vk
|
||||||
|
python $(CTS_DIR)/scripts/log/log_to_xml.py TestResults.qpa conformance/last.xml
|
||||||
|
mv TestResults.qpa conformance/last.qpa
|
||||||
|
firefox conformance/last.xml
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(OBJECTS) $(TARGET) $(BINDING)
|
rm -f $(OBJECTS) $(TARGET) $(BINDING)
|
||||||
cargo clean
|
cargo clean
|
||||||
|
|
|
@ -8,10 +8,12 @@ This is a prototype library implementing [Vulkan Portability Initiative](https:/
|
||||||
|
|
||||||
| gfx-rs Backend | Total cases | Pass | Fail | Quality warning | Compatibility warning | Not supported | Resource error | Internal error | Timeout | Crash |
|
| gfx-rs Backend | Total cases | Pass | Fail | Quality warning | Compatibility warning | Not supported | Resource error | Internal error | Timeout | Crash |
|
||||||
| -------------- | -- | -- | -- | - | - | - | - | - | - | - |
|
| -------------- | -- | -- | -- | - | - | - | - | - | - | - |
|
||||||
| *Vulkan* | 3576 | 652 | 676 | 0 | 0 | 2248 | 0 | 0 | 0 | 0 |
|
| *Vulkan* | 3589 | 665 | 676 | 0 | 0 | 2248 | 0 | 0 | 0 | 0 |
|
||||||
| *DX12* | 3563 | 1243 | 73 | 0 | 0 | 2247 | 0 | 0 | 0 | 0 |
|
| *DX12* | 3563 | 1243 | 73 | 0 | 0 | 2247 | 0 | 0 | 0 | 0 |
|
||||||
|
|
||||||
Currently crashing on "dEQP-VK.api.object_management.single.buffer_view_uniform_r8g8b8a8_unorm".
|
Currently crashing on event handling.
|
||||||
|
|
||||||
|
Please visit [our wiki](https://github.com/gfx-rs/portability/wiki/Vulkan-CTS-status) for CTS hookup instructions. Once everything is set, you can generate the new results by calling `make cts`.
|
||||||
|
|
||||||
## Check out
|
## Check out
|
||||||
```
|
```
|
||||||
|
|
121
conformance/testlog.css
Normal file
121
conformance/testlog.css
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
body
|
||||||
|
{
|
||||||
|
font-size: 10pt;
|
||||||
|
font-family: verdana;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1
|
||||||
|
{
|
||||||
|
font-size: 16pt;
|
||||||
|
font-weight: normal;
|
||||||
|
width: 100%;
|
||||||
|
padding: 4pt 0pt 6pt 0pt;
|
||||||
|
margin: 0px 0px 10pt 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2
|
||||||
|
{
|
||||||
|
font-size: 14pt;
|
||||||
|
font-weight: normal;
|
||||||
|
background: #cccccc;
|
||||||
|
width: 100%;
|
||||||
|
padding: 2pt 0pt 4pt 0pt;
|
||||||
|
margin: 0pt 0pt 2pt 0pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3
|
||||||
|
{
|
||||||
|
font-size: 12pt;
|
||||||
|
font-weight: normal;
|
||||||
|
width: 100%;
|
||||||
|
padding: 2pt 0pt 4pt 0pt;
|
||||||
|
margin: 0pt 0pt 0pt 0pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.Section
|
||||||
|
{
|
||||||
|
border: 1px solid #aaaaaa;
|
||||||
|
margin: 2pt 2pt 4pt 10pt;
|
||||||
|
padding: 0pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.CompileInfo
|
||||||
|
{
|
||||||
|
border: 1px solid #aaaaaa;
|
||||||
|
margin: 2pt 2pt 4pt 10pt;
|
||||||
|
padding: 0pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.Shader
|
||||||
|
{
|
||||||
|
border: 1px solid #aaaaaa;
|
||||||
|
margin: 2pt 2pt 4pt 10pt;
|
||||||
|
padding: 0pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ImageSet
|
||||||
|
{
|
||||||
|
border: 1px solid #aaaaaa;
|
||||||
|
margin: 2pt 2pt 4pt 10pt;
|
||||||
|
padding: 0pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.Image
|
||||||
|
{
|
||||||
|
border: none;
|
||||||
|
margin: 2pt;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre.InfoLog
|
||||||
|
{
|
||||||
|
background: #ddddee;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.ConfigListTitle
|
||||||
|
{
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.ConfigListValue
|
||||||
|
{
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.Totals
|
||||||
|
{
|
||||||
|
border-collapse: collapse;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.Totals td
|
||||||
|
{
|
||||||
|
padding: 2pt 4pt 2pt 4pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.TestCaseResult
|
||||||
|
{
|
||||||
|
border: 1px solid #aaaaaa;
|
||||||
|
margin: 15pt 2pt 2pt 2pt;
|
||||||
|
padding: 0pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Background colors based on status code / status. */
|
||||||
|
.Pass { background: #80ff80; }
|
||||||
|
.Fail { background: #ff4040; }
|
||||||
|
.QualityWarning { background: #ffff00; }
|
||||||
|
.CompatibilityWarning { background: #ffff00; }
|
||||||
|
.Pending { background: #808080; }
|
||||||
|
.Running { background: #d3d3d3; }
|
||||||
|
.NotSupported { background: #ff69b4; }
|
||||||
|
.ResourceError { background: #ff4040; }
|
||||||
|
.InternalError { background: #ff1493; }
|
||||||
|
.Canceled { background: #808080; }
|
||||||
|
.Crash { background: #ffa500; }
|
||||||
|
.Timeout { background: #ffa500; }
|
||||||
|
.Disabled { background: #808080; }
|
||||||
|
.Terminated { background: #ffa500; }
|
||||||
|
.Missing { background: #808080; }
|
||||||
|
.OK { background: #80ff80; }
|
183
conformance/testlog.xsl
Normal file
183
conformance/testlog.xsl
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
drawElements Quality Program utilities
|
||||||
|
|
||||||
|
Copyright 2016 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<xsl:stylesheet
|
||||||
|
version="1.0"
|
||||||
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
|
||||||
|
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
|
||||||
|
|
||||||
|
<xsl:template match="/">
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="BatchResult">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link href="testlog.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<title><xsl:value-of select="@FileName"/></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<table class="Totals">
|
||||||
|
<tr><td><b><xsl:text>Total cases</xsl:text></b></td><td><b><xsl:value-of select="ResultTotals/@All"/></b></td></tr>
|
||||||
|
<tr><td><xsl:text>Pass</xsl:text></td><td class="Pass"><xsl:value-of select="ResultTotals/@Pass"/></td></tr>
|
||||||
|
<tr><td><xsl:text>Fail</xsl:text></td><td class="Fail"><xsl:value-of select="ResultTotals/@Fail"/></td></tr>
|
||||||
|
<tr><td><xsl:text>Quality warning</xsl:text></td><td class="QualityWarning"><xsl:value-of select="ResultTotals/@QualityWarning"/></td></tr>
|
||||||
|
<tr><td><xsl:text>Compatibility warning</xsl:text></td><td class="CompatibilityWarning"><xsl:value-of select="ResultTotals/@CompatibilityWarning"/></td></tr>
|
||||||
|
<!-- <tr><td><xsl:text>Pending</xsl:text></td><td class="Pending"><xsl:value-of select="ResultTotals/@pending"/></td></tr> -->
|
||||||
|
<!-- <tr><td><xsl:text>Running</xsl:text></td><td class="Running"><xsl:value-of select="ResultTotals/@Running"/></td></tr> -->
|
||||||
|
<tr><td><xsl:text>Not supported</xsl:text></td><td class="NotSupported"><xsl:value-of select="ResultTotals/@NotSupported"/></td></tr>
|
||||||
|
<tr><td><xsl:text>Resource error</xsl:text></td><td class="ResourceError"><xsl:value-of select="ResultTotals/@ResourceError"/></td></tr>
|
||||||
|
<tr><td><xsl:text>Internal error</xsl:text></td><td class="InternalError"><xsl:value-of select="ResultTotals/@InternalError"/></td></tr>
|
||||||
|
<!-- <tr><td><xsl:text>Canceled</xsl:text></td><td class="Canceled"><xsl:value-of select="ResultTotals/@Canceled"/></td></tr> -->
|
||||||
|
<tr><td><xsl:text>Timeout</xsl:text></td><td class="Timeout"><xsl:value-of select="ResultTotals/@Timeout"/></td></tr>
|
||||||
|
<tr><td><xsl:text>Crash</xsl:text></td><td class="Crash"><xsl:value-of select="ResultTotals/@Crash"/></td></tr>
|
||||||
|
<tr><td><xsl:text>Disabled</xsl:text></td><td class="Disabled"><xsl:value-of select="ResultTotals/@Disabled"/></td></tr>
|
||||||
|
<!-- <tr><td><xsl:text>Terminated</xsl:text></td><td class="Terminated"><xsl:value-of select="ResultTotals/@Terminated"/></td></tr> -->
|
||||||
|
</table>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="/TestCaseResult">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link href="testlog.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<title><xsl:value-of select="@CasePath"/></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1 class="{Result/@StatusCode}"><xsl:value-of select="@CasePath"/><xsl:text>: </xsl:text><xsl:value-of select="Result"/><xsl:text> (</xsl:text><xsl:value-of select="Result/@StatusCode"/><xsl:text>)</xsl:text></h1>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="BatchResult/TestCaseResult">
|
||||||
|
<div class="TestCaseResult">
|
||||||
|
<h1 class="{Result/@StatusCode}"><xsl:value-of select="@CasePath"/><xsl:text>: </xsl:text><xsl:value-of select="Result"/><xsl:text> (</xsl:text><xsl:value-of select="Result/@StatusCode"/><xsl:text>)</xsl:text></h1>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</div>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="Section">
|
||||||
|
<div class="Section">
|
||||||
|
<h2><xsl:value-of select="@Description"/></h2>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</div>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="ImageSet">
|
||||||
|
<div class="ImageSet">
|
||||||
|
<h3><xsl:value-of select="@Description"/></h3>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</div>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="Image">
|
||||||
|
<div class="Image">
|
||||||
|
<xsl:value-of select="@Description"/><br/>
|
||||||
|
<img src="data:image/png;base64,{.}"/>
|
||||||
|
</div>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="CompileInfo">
|
||||||
|
<div class="CompileInfo">
|
||||||
|
<h3 class="{@CompileStatus}"><xsl:value-of select="@Description"/></h3>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</div>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="ShaderProgram">
|
||||||
|
<div class="CompileInfo">
|
||||||
|
<h3 class="{@LinkStatus}"><xsl:text>Shader Program</xsl:text></h3>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</div>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="VertexShader">
|
||||||
|
<div class="Shader">
|
||||||
|
<h3 class="{@CompileStatus}"><xsl:text>Vertex Shader</xsl:text></h3>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</div>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="FragmentShader">
|
||||||
|
<div class="Shader">
|
||||||
|
<h3 class="{@CompileStatus}"><xsl:text>Fragment Shader</xsl:text></h3>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</div>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="Number">
|
||||||
|
<xsl:value-of select="@Description"/><xsl:text>: </xsl:text><xsl:value-of select="."/><xsl:text> </xsl:text><xsl:value-of select="@Unit"/><br/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="Result">
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="Text">
|
||||||
|
<xsl:value-of select="."/><br/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="KernelSource">
|
||||||
|
<pre class="KernelSource"><xsl:value-of select="."/></pre>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="ShaderSource">
|
||||||
|
<pre class="ShaderSource"><xsl:value-of select="."/></pre>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="InfoLog">
|
||||||
|
<pre class="InfoLog"><xsl:value-of select="."/></pre>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="EglConfigSet">
|
||||||
|
<div class="Section">
|
||||||
|
<h2><xsl:value-of select="@Description"/></h2>
|
||||||
|
<table class="EglConfigList">
|
||||||
|
<tr>
|
||||||
|
<td class="ConfigListTitle"><xsl:text>ID</xsl:text></td>
|
||||||
|
<td class="ConfigListTitle"><xsl:text>R</xsl:text></td>
|
||||||
|
<td class="ConfigListTitle"><xsl:text>G</xsl:text></td>
|
||||||
|
<td class="ConfigListTitle"><xsl:text>B</xsl:text></td>
|
||||||
|
<td class="ConfigListTitle"><xsl:text>A</xsl:text></td>
|
||||||
|
<td class="ConfigListTitle"><xsl:text>D</xsl:text></td>
|
||||||
|
<td class="ConfigListTitle"><xsl:text>S</xsl:text></td>
|
||||||
|
<td class="ConfigListTitle"><xsl:text>mS</xsl:text></td>
|
||||||
|
</tr>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="EglConfig">
|
||||||
|
<tr>
|
||||||
|
<td class="ConfigListValue"><xsl:value-of select="@ConfigID"/></td>
|
||||||
|
<td class="ConfigListValue"><xsl:value-of select="@RedSize"/></td>
|
||||||
|
<td class="ConfigListValue"><xsl:value-of select="@GreenSize"/></td>
|
||||||
|
<td class="ConfigListValue"><xsl:value-of select="@BlueSize"/></td>
|
||||||
|
<td class="ConfigListValue"><xsl:value-of select="@AlphaSize"/></td>
|
||||||
|
<td class="ConfigListValue"><xsl:value-of select="@DepthSize"/></td>
|
||||||
|
<td class="ConfigListValue"><xsl:value-of select="@StencilSize"/></td>
|
||||||
|
<td class="ConfigListValue"><xsl:value-of select="@Samples"/></td>
|
||||||
|
</tr>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
|
@ -25,19 +25,19 @@ optional = true
|
||||||
|
|
||||||
[dependencies.gfx-hal]
|
[dependencies.gfx-hal]
|
||||||
git = "https://github.com/gfx-rs/gfx"
|
git = "https://github.com/gfx-rs/gfx"
|
||||||
rev = "eda7f3c570d09f2fd0bf942c3d945a1b62d72af8"
|
rev = "adbf496f9b56d70cecb4a02aab6ad316e59a391d"
|
||||||
|
|
||||||
[target.'cfg(not(target_os = "macos"))'.dependencies.gfx-backend-vulkan]
|
[target.'cfg(not(target_os = "macos"))'.dependencies.gfx-backend-vulkan]
|
||||||
git = "https://github.com/gfx-rs/gfx"
|
git = "https://github.com/gfx-rs/gfx"
|
||||||
rev = "eda7f3c570d09f2fd0bf942c3d945a1b62d72af8"
|
rev = "adbf496f9b56d70cecb4a02aab6ad316e59a391d"
|
||||||
optional = true
|
optional = true
|
||||||
|
|
||||||
[target.'cfg(windows)'.dependencies.gfx-backend-dx12]
|
[target.'cfg(windows)'.dependencies.gfx-backend-dx12]
|
||||||
git = "https://github.com/gfx-rs/gfx"
|
git = "https://github.com/gfx-rs/gfx"
|
||||||
rev = "eda7f3c570d09f2fd0bf942c3d945a1b62d72af8"
|
rev = "adbf496f9b56d70cecb4a02aab6ad316e59a391d"
|
||||||
optional = true
|
optional = true
|
||||||
|
|
||||||
[target.'cfg(target_os = "macos")'.dependencies.gfx-backend-metal]
|
[target.'cfg(target_os = "macos")'.dependencies.gfx-backend-metal]
|
||||||
git = "https://github.com/gfx-rs/gfx"
|
git = "https://github.com/gfx-rs/gfx"
|
||||||
rev = "eda7f3c570d09f2fd0bf942c3d945a1b62d72af8"
|
rev = "adbf496f9b56d70cecb4a02aab6ad316e59a391d"
|
||||||
optional = true
|
optional = true
|
||||||
|
|
|
@ -623,3 +623,24 @@ pub fn map_extent(extent: VkExtent3D) -> image::Extent {
|
||||||
depth: extent.depth,
|
depth: extent.depth,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn map_rect(rect: &VkRect2D) -> pso::Rect {
|
||||||
|
pso::Rect {
|
||||||
|
x: rect.offset.x as _,
|
||||||
|
y: rect.offset.y as _,
|
||||||
|
w: rect.extent.width as _,
|
||||||
|
h: rect.extent.height as _,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn map_viewport(vp: &VkViewport) -> pso::Viewport {
|
||||||
|
pso::Viewport {
|
||||||
|
rect: pso::Rect {
|
||||||
|
x: vp.x as _,
|
||||||
|
y: vp.y as _,
|
||||||
|
w: vp.width as _,
|
||||||
|
h: vp.height as _,
|
||||||
|
},
|
||||||
|
depth: vp.minDepth .. vp.maxDepth,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -684,7 +684,8 @@ pub extern "C" fn gfxQueueSubmit(
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub extern "C" fn gfxQueueWaitIdle(queue: VkQueue) -> VkResult {
|
pub extern "C" fn gfxQueueWaitIdle(queue: VkQueue) -> VkResult {
|
||||||
unimplemented!()
|
let _ = queue.wait_idle();
|
||||||
|
VkResult::VK_SUCCESS
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub extern "C" fn gfxDeviceWaitIdle(device: VkDevice) -> VkResult {
|
pub extern "C" fn gfxDeviceWaitIdle(device: VkDevice) -> VkResult {
|
||||||
|
@ -715,7 +716,7 @@ pub extern "C" fn gfxAllocateMemory(
|
||||||
pub extern "C" fn gfxFreeMemory(
|
pub extern "C" fn gfxFreeMemory(
|
||||||
gpu: VkDevice,
|
gpu: VkDevice,
|
||||||
memory: VkDeviceMemory,
|
memory: VkDeviceMemory,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
) {
|
) {
|
||||||
gpu.device.free_memory(*memory.unwrap());
|
gpu.device.free_memory(*memory.unwrap());
|
||||||
}
|
}
|
||||||
|
@ -985,7 +986,7 @@ pub extern "C" fn gfxDestroySemaphore(
|
||||||
pub extern "C" fn gfxCreateEvent(
|
pub extern "C" fn gfxCreateEvent(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
pCreateInfo: *const VkEventCreateInfo,
|
pCreateInfo: *const VkEventCreateInfo,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
pEvent: *mut VkEvent,
|
pEvent: *mut VkEvent,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
|
@ -994,7 +995,7 @@ pub extern "C" fn gfxCreateEvent(
|
||||||
pub extern "C" fn gfxDestroyEvent(
|
pub extern "C" fn gfxDestroyEvent(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
event: VkEvent,
|
event: VkEvent,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
) {
|
) {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
|
@ -1014,7 +1015,7 @@ pub extern "C" fn gfxResetEvent(device: VkDevice, event: VkEvent) -> VkResult {
|
||||||
pub extern "C" fn gfxCreateQueryPool(
|
pub extern "C" fn gfxCreateQueryPool(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
pCreateInfo: *const VkQueryPoolCreateInfo,
|
pCreateInfo: *const VkQueryPoolCreateInfo,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
pQueryPool: *mut VkQueryPool,
|
pQueryPool: *mut VkQueryPool,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
|
@ -1023,7 +1024,7 @@ pub extern "C" fn gfxCreateQueryPool(
|
||||||
pub extern "C" fn gfxDestroyQueryPool(
|
pub extern "C" fn gfxDestroyQueryPool(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
queryPool: VkQueryPool,
|
queryPool: VkQueryPool,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
) {
|
) {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
|
@ -1044,7 +1045,7 @@ pub extern "C" fn gfxGetQueryPoolResults(
|
||||||
pub extern "C" fn gfxCreateBuffer(
|
pub extern "C" fn gfxCreateBuffer(
|
||||||
gpu: VkDevice,
|
gpu: VkDevice,
|
||||||
pCreateInfo: *const VkBufferCreateInfo,
|
pCreateInfo: *const VkBufferCreateInfo,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
pBuffer: *mut VkBuffer,
|
pBuffer: *mut VkBuffer,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
let info = unsafe { &*pCreateInfo };
|
let info = unsafe { &*pCreateInfo };
|
||||||
|
@ -1064,37 +1065,57 @@ pub extern "C" fn gfxCreateBuffer(
|
||||||
pub extern "C" fn gfxDestroyBuffer(
|
pub extern "C" fn gfxDestroyBuffer(
|
||||||
gpu: VkDevice,
|
gpu: VkDevice,
|
||||||
buffer: VkBuffer,
|
buffer: VkBuffer,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
) {
|
) {
|
||||||
if !buffer.is_null() {
|
if !buffer.is_null() {
|
||||||
match *buffer.unwrap() {
|
match *buffer.unwrap() {
|
||||||
Buffer::Buffer(buffer) => gpu.device.destroy_buffer(buffer),
|
Buffer::Buffer(buffer) => gpu.device.destroy_buffer(buffer),
|
||||||
Buffer::Unbound(_) => unimplemented!(),
|
Buffer::Unbound(_) => {
|
||||||
|
warn!("Trying to destroy a non-bound buffer, ignoring");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub extern "C" fn gfxCreateBufferView(
|
pub extern "C" fn gfxCreateBufferView(
|
||||||
device: VkDevice,
|
gpu: VkDevice,
|
||||||
pCreateInfo: *const VkBufferViewCreateInfo,
|
pCreateInfo: *const VkBufferViewCreateInfo,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
pView: *mut VkBufferView,
|
pView: *mut VkBufferView,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
unimplemented!()
|
let info = unsafe { &*pCreateInfo };
|
||||||
|
|
||||||
|
let view = gpu.device
|
||||||
|
.create_buffer_view(
|
||||||
|
match *info.buffer {
|
||||||
|
Buffer::Buffer(ref buffer) => buffer,
|
||||||
|
Buffer::Unbound(_) => unimplemented!(),
|
||||||
|
},
|
||||||
|
conv::map_format(info.format),
|
||||||
|
info.offset .. info.offset + info.range,
|
||||||
|
)
|
||||||
|
.expect("Error creating buffer view");
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
*pView = Handle::new(view);
|
||||||
|
}
|
||||||
|
VkResult::VK_SUCCESS
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub extern "C" fn gfxDestroyBufferView(
|
pub extern "C" fn gfxDestroyBufferView(
|
||||||
device: VkDevice,
|
gpu: VkDevice,
|
||||||
bufferView: VkBufferView,
|
view: VkBufferView,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
) {
|
) {
|
||||||
unimplemented!()
|
if !view.is_null() {
|
||||||
|
gpu.device.destroy_buffer_view(*view.unwrap());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub extern "C" fn gfxCreateImage(
|
pub extern "C" fn gfxCreateImage(
|
||||||
gpu: VkDevice,
|
gpu: VkDevice,
|
||||||
pCreateInfo: *const VkImageCreateInfo,
|
pCreateInfo: *const VkImageCreateInfo,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
pImage: *mut VkImage,
|
pImage: *mut VkImage,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
let info = unsafe { &*pCreateInfo };
|
let info = unsafe { &*pCreateInfo };
|
||||||
|
@ -1126,12 +1147,14 @@ pub extern "C" fn gfxCreateImage(
|
||||||
pub extern "C" fn gfxDestroyImage(
|
pub extern "C" fn gfxDestroyImage(
|
||||||
gpu: VkDevice,
|
gpu: VkDevice,
|
||||||
image: VkImage,
|
image: VkImage,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
) {
|
) {
|
||||||
if !image.is_null() {
|
if !image.is_null() {
|
||||||
match *image.unwrap() {
|
match *image.unwrap() {
|
||||||
Image::Image(image) => gpu.device.destroy_image(image),
|
Image::Image(image) => gpu.device.destroy_image(image),
|
||||||
Image::Unbound(_) => unimplemented!(),
|
Image::Unbound(_) => {
|
||||||
|
warn!("Trying to destroy a non-bound image, ignoring");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1148,7 +1171,7 @@ pub extern "C" fn gfxGetImageSubresourceLayout(
|
||||||
pub extern "C" fn gfxCreateImageView(
|
pub extern "C" fn gfxCreateImageView(
|
||||||
gpu: VkDevice,
|
gpu: VkDevice,
|
||||||
pCreateInfo: *const VkImageViewCreateInfo,
|
pCreateInfo: *const VkImageViewCreateInfo,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
pView: *mut VkImageView,
|
pView: *mut VkImageView,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
let info = unsafe { &*pCreateInfo };
|
let info = unsafe { &*pCreateInfo };
|
||||||
|
@ -1181,7 +1204,7 @@ pub extern "C" fn gfxCreateImageView(
|
||||||
pub extern "C" fn gfxDestroyImageView(
|
pub extern "C" fn gfxDestroyImageView(
|
||||||
gpu: VkDevice,
|
gpu: VkDevice,
|
||||||
imageView: VkImageView,
|
imageView: VkImageView,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
) {
|
) {
|
||||||
gpu.device.destroy_image_view(*imageView.unwrap())
|
gpu.device.destroy_image_view(*imageView.unwrap())
|
||||||
}
|
}
|
||||||
|
@ -1219,7 +1242,7 @@ pub extern "C" fn gfxDestroyShaderModule(
|
||||||
pub extern "C" fn gfxCreatePipelineCache(
|
pub extern "C" fn gfxCreatePipelineCache(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
pCreateInfo: *const VkPipelineCacheCreateInfo,
|
pCreateInfo: *const VkPipelineCacheCreateInfo,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
pPipelineCache: *mut VkPipelineCache,
|
pPipelineCache: *mut VkPipelineCache,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
// unimplemented!()
|
// unimplemented!()
|
||||||
|
@ -1231,7 +1254,7 @@ pub extern "C" fn gfxCreatePipelineCache(
|
||||||
pub extern "C" fn gfxDestroyPipelineCache(
|
pub extern "C" fn gfxDestroyPipelineCache(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
pipelineCache: VkPipelineCache,
|
pipelineCache: VkPipelineCache,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
) {
|
) {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
|
@ -1315,8 +1338,6 @@ pub extern "C" fn gfxCreateGraphicsPipelines(
|
||||||
let mut cur_shader_stage = 0;
|
let mut cur_shader_stage = 0;
|
||||||
|
|
||||||
let descs = infos.into_iter().map(|info| {
|
let descs = infos.into_iter().map(|info| {
|
||||||
// TODO: handle dynamic states and viewports
|
|
||||||
|
|
||||||
let shaders = {
|
let shaders = {
|
||||||
let mut set: pso::GraphicsShaderSet<_> = unsafe { mem::zeroed() };
|
let mut set: pso::GraphicsShaderSet<_> = unsafe { mem::zeroed() };
|
||||||
|
|
||||||
|
@ -1530,6 +1551,35 @@ pub extern "C" fn gfxCreateGraphicsPipelines(
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let vp_state = unsafe { &*info.pViewportState };
|
||||||
|
let empty_dyn_states = [];
|
||||||
|
let dyn_states = match unsafe { info.pDynamicState.as_ref() } {
|
||||||
|
Some(state) => unsafe {
|
||||||
|
slice::from_raw_parts(state.pDynamicStates, state.dynamicStateCount as _)
|
||||||
|
},
|
||||||
|
None => &empty_dyn_states,
|
||||||
|
};
|
||||||
|
let baked_states = pso::BakedStates {
|
||||||
|
viewport: if dyn_states.iter().any(|&ds| ds == VkDynamicState::VK_DYNAMIC_STATE_VIEWPORT) {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
unsafe { vp_state.pViewports.as_ref() }
|
||||||
|
.map(conv::map_viewport)
|
||||||
|
},
|
||||||
|
scissor: if dyn_states.iter().any(|&ds| ds == VkDynamicState::VK_DYNAMIC_STATE_SCISSOR) {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
unsafe { vp_state.pScissors.as_ref() }
|
||||||
|
.map(conv::map_rect)
|
||||||
|
},
|
||||||
|
blend_color: if dyn_states.iter().any(|&ds| ds == VkDynamicState::VK_DYNAMIC_STATE_BLEND_CONSTANTS) {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
unsafe { info.pColorBlendState.as_ref() }
|
||||||
|
.map(|cbs| cbs.blendConstants)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
let layout = &*info.layout;
|
let layout = &*info.layout;
|
||||||
let subpass = pass::Subpass {
|
let subpass = pass::Subpass {
|
||||||
index: info.subpass as _,
|
index: info.subpass as _,
|
||||||
|
@ -1572,6 +1622,7 @@ pub extern "C" fn gfxCreateGraphicsPipelines(
|
||||||
input_assembler,
|
input_assembler,
|
||||||
blender,
|
blender,
|
||||||
depth_stencil,
|
depth_stencil,
|
||||||
|
baked_states,
|
||||||
layout,
|
layout,
|
||||||
subpass,
|
subpass,
|
||||||
flags,
|
flags,
|
||||||
|
@ -1601,7 +1652,7 @@ pub extern "C" fn gfxCreateComputePipelines(
|
||||||
pipelineCache: VkPipelineCache,
|
pipelineCache: VkPipelineCache,
|
||||||
createInfoCount: u32,
|
createInfoCount: u32,
|
||||||
pCreateInfos: *const VkComputePipelineCreateInfo,
|
pCreateInfos: *const VkComputePipelineCreateInfo,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
pPipelines: *mut VkPipeline,
|
pPipelines: *mut VkPipeline,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
|
@ -1610,7 +1661,7 @@ pub extern "C" fn gfxCreateComputePipelines(
|
||||||
pub extern "C" fn gfxDestroyPipeline(
|
pub extern "C" fn gfxDestroyPipeline(
|
||||||
gpu: VkDevice,
|
gpu: VkDevice,
|
||||||
pipeline: VkPipeline,
|
pipeline: VkPipeline,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
) {
|
) {
|
||||||
if !pipeline.is_null() {
|
if !pipeline.is_null() {
|
||||||
match *pipeline.unwrap() {
|
match *pipeline.unwrap() {
|
||||||
|
@ -2233,7 +2284,7 @@ pub extern "C" fn gfxAllocateCommandBuffers(
|
||||||
#[inline]
|
#[inline]
|
||||||
pub extern "C" fn gfxFreeCommandBuffers(
|
pub extern "C" fn gfxFreeCommandBuffers(
|
||||||
_gpu: VkDevice,
|
_gpu: VkDevice,
|
||||||
mut commandPool: VkCommandPool,
|
commandPool: VkCommandPool,
|
||||||
commandBufferCount: u32,
|
commandBufferCount: u32,
|
||||||
pCommandBuffers: *const VkCommandBuffer,
|
pCommandBuffers: *const VkCommandBuffer,
|
||||||
) {
|
) {
|
||||||
|
@ -2291,17 +2342,7 @@ pub extern "C" fn gfxCmdSetViewport(
|
||||||
let viewports = unsafe {
|
let viewports = unsafe {
|
||||||
slice::from_raw_parts(pViewports, viewportCount as _)
|
slice::from_raw_parts(pViewports, viewportCount as _)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|viewport| {
|
.map(conv::map_viewport)
|
||||||
com::Viewport {
|
|
||||||
rect: com::Rect {
|
|
||||||
x: viewport.x as _,
|
|
||||||
y: viewport.y as _,
|
|
||||||
w: viewport.width as _,
|
|
||||||
h: viewport.height as _,
|
|
||||||
},
|
|
||||||
depth: viewport.minDepth .. viewport.maxDepth,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
};
|
};
|
||||||
|
|
||||||
commandBuffer.set_viewports(viewports);
|
commandBuffer.set_viewports(viewports);
|
||||||
|
@ -2318,14 +2359,7 @@ pub extern "C" fn gfxCmdSetScissor(
|
||||||
let scissors = unsafe {
|
let scissors = unsafe {
|
||||||
slice::from_raw_parts(pScissors, scissorCount as _)
|
slice::from_raw_parts(pScissors, scissorCount as _)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|scissor| {
|
.map(conv::map_rect)
|
||||||
com::Rect {
|
|
||||||
x: scissor.offset.x as _,
|
|
||||||
y: scissor.offset.y as _,
|
|
||||||
w: scissor.extent.width as _,
|
|
||||||
h: scissor.extent.height as _,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
};
|
};
|
||||||
|
|
||||||
commandBuffer.set_scissors(scissors);
|
commandBuffer.set_scissors(scissors);
|
||||||
|
@ -2855,7 +2889,7 @@ pub extern "C" fn gfxCmdBeginRenderPass(
|
||||||
) {
|
) {
|
||||||
let info = unsafe { &*pRenderPassBegin };
|
let info = unsafe { &*pRenderPassBegin };
|
||||||
|
|
||||||
let render_area = com::Rect {
|
let render_area = pso::Rect {
|
||||||
x: info.renderArea.offset.x as _,
|
x: info.renderArea.offset.x as _,
|
||||||
y: info.renderArea.offset.y as _,
|
y: info.renderArea.offset.y as _,
|
||||||
w: info.renderArea.extent.width as _,
|
w: info.renderArea.extent.width as _,
|
||||||
|
@ -3049,7 +3083,7 @@ pub extern "C" fn gfxCreateSwapchainKHR(
|
||||||
pub extern "C" fn gfxDestroySwapchainKHR(
|
pub extern "C" fn gfxDestroySwapchainKHR(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
mut swapchain: VkSwapchainKHR,
|
mut swapchain: VkSwapchainKHR,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
) {
|
) {
|
||||||
for image in &mut swapchain.images {
|
for image in &mut swapchain.images {
|
||||||
let _ = image.unwrap();
|
let _ = image.unwrap();
|
||||||
|
@ -3106,7 +3140,7 @@ pub extern "C" fn gfxCmdReserveSpaceForCommandsNVX(
|
||||||
pub extern "C" fn gfxCreateIndirectCommandsLayoutNVX(
|
pub extern "C" fn gfxCreateIndirectCommandsLayoutNVX(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
pCreateInfo: *const VkIndirectCommandsLayoutCreateInfoNVX,
|
pCreateInfo: *const VkIndirectCommandsLayoutCreateInfoNVX,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
pIndirectCommandsLayout: *mut VkIndirectCommandsLayoutNVX,
|
pIndirectCommandsLayout: *mut VkIndirectCommandsLayoutNVX,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
|
@ -3115,7 +3149,7 @@ pub extern "C" fn gfxCreateIndirectCommandsLayoutNVX(
|
||||||
pub extern "C" fn gfxDestroyIndirectCommandsLayoutNVX(
|
pub extern "C" fn gfxDestroyIndirectCommandsLayoutNVX(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
indirectCommandsLayout: VkIndirectCommandsLayoutNVX,
|
indirectCommandsLayout: VkIndirectCommandsLayoutNVX,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
) {
|
) {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
|
@ -3123,7 +3157,7 @@ pub extern "C" fn gfxDestroyIndirectCommandsLayoutNVX(
|
||||||
pub extern "C" fn gfxCreateObjectTableNVX(
|
pub extern "C" fn gfxCreateObjectTableNVX(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
pCreateInfo: *const VkObjectTableCreateInfoNVX,
|
pCreateInfo: *const VkObjectTableCreateInfoNVX,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
pObjectTable: *mut VkObjectTableNVX,
|
pObjectTable: *mut VkObjectTableNVX,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
|
@ -3132,7 +3166,7 @@ pub extern "C" fn gfxCreateObjectTableNVX(
|
||||||
pub extern "C" fn gfxDestroyObjectTableNVX(
|
pub extern "C" fn gfxDestroyObjectTableNVX(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
objectTable: VkObjectTableNVX,
|
objectTable: VkObjectTableNVX,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
) {
|
) {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
|
@ -3200,7 +3234,7 @@ pub extern "C" fn gfxDisplayPowerControlEXT(
|
||||||
pub extern "C" fn gfxRegisterDeviceEventEXT(
|
pub extern "C" fn gfxRegisterDeviceEventEXT(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
pDeviceEventInfo: *const VkDeviceEventInfoEXT,
|
pDeviceEventInfo: *const VkDeviceEventInfoEXT,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
pFence: *mut VkFence,
|
pFence: *mut VkFence,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
|
@ -3210,7 +3244,7 @@ pub extern "C" fn gfxRegisterDisplayEventEXT(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
display: VkDisplayKHR,
|
display: VkDisplayKHR,
|
||||||
pDisplayEventInfo: *const VkDisplayEventInfoEXT,
|
pDisplayEventInfo: *const VkDisplayEventInfoEXT,
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
pFence: *mut VkFence,
|
pFence: *mut VkFence,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
|
@ -3240,12 +3274,12 @@ pub extern "C" fn gfxCreateWin32SurfaceKHR(
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
pAllocator: *const VkAllocationCallbacks,
|
||||||
pSurface: *mut VkSurfaceKHR,
|
pSurface: *mut VkSurfaceKHR,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
|
assert!(pAllocator.is_null());
|
||||||
let info = unsafe { &*pCreateInfo };
|
let info = unsafe { &*pCreateInfo };
|
||||||
#[cfg(all(feature = "gfx-backend-vulkan", target_os = "windows"))]
|
#[cfg(all(feature = "gfx-backend-vulkan", target_os = "windows"))]
|
||||||
{
|
{
|
||||||
unsafe {
|
unsafe {
|
||||||
assert_eq!(info.flags, 0);
|
assert_eq!(info.flags, 0);
|
||||||
assert!(pAllocator.is_null());
|
|
||||||
*pSurface = Handle::new(
|
*pSurface = Handle::new(
|
||||||
instance.backend.create_surface_from_hwnd(info.hinstance, info.hwnd),
|
instance.backend.create_surface_from_hwnd(info.hinstance, info.hwnd),
|
||||||
);
|
);
|
||||||
|
@ -3256,7 +3290,6 @@ pub extern "C" fn gfxCreateWin32SurfaceKHR(
|
||||||
{
|
{
|
||||||
unsafe {
|
unsafe {
|
||||||
assert_eq!(info.flags, 0);
|
assert_eq!(info.flags, 0);
|
||||||
assert!(pAllocator.is_null());
|
|
||||||
*pSurface = Handle::new(instance.backend.create_surface_from_hwnd(info.hwnd));
|
*pSurface = Handle::new(instance.backend.create_surface_from_hwnd(info.hwnd));
|
||||||
VkResult::VK_SUCCESS
|
VkResult::VK_SUCCESS
|
||||||
}
|
}
|
||||||
|
@ -3270,12 +3303,12 @@ pub extern "C" fn gfxCreateXcbSurfaceKHR(
|
||||||
pAllocator: *const VkAllocationCallbacks,
|
pAllocator: *const VkAllocationCallbacks,
|
||||||
pSurface: *mut VkSurfaceKHR,
|
pSurface: *mut VkSurfaceKHR,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
|
assert!(pAllocator.is_null());
|
||||||
let info = unsafe { &*pCreateInfo };
|
let info = unsafe { &*pCreateInfo };
|
||||||
#[cfg(all(feature = "gfx-backend-vulkan", target_os = "linux"))]
|
#[cfg(all(feature = "gfx-backend-vulkan", target_os = "linux"))]
|
||||||
{
|
{
|
||||||
unsafe {
|
unsafe {
|
||||||
assert_eq!(info.flags, 0);
|
assert_eq!(info.flags, 0);
|
||||||
assert!(pAllocator.is_null());
|
|
||||||
*pSurface = Handle::new(
|
*pSurface = Handle::new(
|
||||||
instance.backend.create_surface_from_xcb(info.connection as _, info.window),
|
instance.backend.create_surface_from_xcb(info.connection as _, info.window),
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue