summaryrefslogtreecommitdiff
path: root/doc/classes
diff options
context:
space:
mode:
authorreduz <reduzio@gmail.com>2021-07-25 11:22:55 -0300
committerreduz <reduzio@gmail.com>2021-07-26 08:40:39 -0300
commitcf3f404d312146cf46ae27fd8d220852eac27eb9 (patch)
tree4663011618e5523c29d3cf50e6a0ae18dec69ec1 /doc/classes
parente2ebc7db58c0bd61504c592f9760aaf1389af0b9 (diff)
Implement Binary Shader Compilation
* Added an extra stage before compiling shader, which is generating a binary blob. * On Vulkan, this allows caching the SPIRV reflection information, which is expensive to parse. * On other (future) RenderingDevices, it allows caching converted binary data, such as DXIL or MSL. This PR makes the shader cache include the reflection information, hence editor startup times are significantly improved. I tested this well and it appears to work, and I added a lot of consistency checks, but because it includes writing and reading binary information, rare bugs may pop up, so be aware. There was not much of a choice for storing the reflection information, given shaders can be a lot, take a lot of space and take time to parse.
Diffstat (limited to 'doc/classes')
-rw-r--r--doc/classes/RDShaderFile.xml6
-rw-r--r--doc/classes/RDShaderSPIRV.xml (renamed from doc/classes/RDShaderBytecode.xml)2
-rw-r--r--doc/classes/RenderingDevice.xml24
3 files changed, 24 insertions, 8 deletions
diff --git a/doc/classes/RDShaderFile.xml b/doc/classes/RDShaderFile.xml
index 346a97a1c0..dab2b9822f 100644
--- a/doc/classes/RDShaderFile.xml
+++ b/doc/classes/RDShaderFile.xml
@@ -7,8 +7,8 @@
<tutorials>
</tutorials>
<methods>
- <method name="get_bytecode" qualifiers="const">
- <return type="RDShaderBytecode">
+ <method name="get_spirv" qualifiers="const">
+ <return type="RDShaderSPIRV">
</return>
<argument index="0" name="version" type="StringName" default="&amp;&quot;&quot;">
</argument>
@@ -24,7 +24,7 @@
<method name="set_bytecode">
<return type="void">
</return>
- <argument index="0" name="bytecode" type="RDShaderBytecode">
+ <argument index="0" name="bytecode" type="RDShaderSPIRV">
</argument>
<argument index="1" name="version" type="StringName" default="&amp;&quot;&quot;">
</argument>
diff --git a/doc/classes/RDShaderBytecode.xml b/doc/classes/RDShaderSPIRV.xml
index 20bf9bdd72..c9aefe31dc 100644
--- a/doc/classes/RDShaderBytecode.xml
+++ b/doc/classes/RDShaderSPIRV.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RDShaderBytecode" inherits="Resource" version="4.0">
+<class name="RDShaderSPIRV" inherits="Resource" version="4.0">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/RenderingDevice.xml b/doc/classes/RenderingDevice.xml
index 901a985961..c73c2ddfd7 100644
--- a/doc/classes/RenderingDevice.xml
+++ b/doc/classes/RenderingDevice.xml
@@ -635,8 +635,16 @@
<description>
</description>
</method>
- <method name="shader_compile_from_source">
- <return type="RDShaderBytecode">
+ <method name="shader_compile_binary_from_spirv">
+ <return type="PackedByteArray">
+ </return>
+ <argument index="0" name="spirv_data" type="RDShaderSPIRV">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="shader_compile_spirv_from_source">
+ <return type="RDShaderSPIRV">
</return>
<argument index="0" name="shader_source" type="RDShaderSource">
</argument>
@@ -645,10 +653,18 @@
<description>
</description>
</method>
- <method name="shader_create">
+ <method name="shader_create_from_bytecode">
<return type="RID">
</return>
- <argument index="0" name="shader_data" type="RDShaderBytecode">
+ <argument index="0" name="binary_data" type="PackedByteArray">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="shader_create_from_spirv">
+ <return type="PackedByteArray">
+ </return>
+ <argument index="0" name="spirv_data" type="RDShaderSPIRV">
</argument>
<description>
</description>