Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2019-01-10 11:49:33 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2019-01-10 14:52:56 +0300
commitd92de00cc182a436f4c0340247bde088eee2c921 (patch)
tree77d3c8a91119dff83d714d905f86a6c563ffc054 /reference/opt/shaders/vulkan
parenta57b93f6b73a1aa9aaaeb893029f4dce74c907ba (diff)
Rewrite how IDs are iterated over.
This is a fairly fundamental change on how IDs are handled. It serves many purposes: - Improve performance. We only need to iterate over IDs which are relevant at any one time. - Makes sure we iterate through IDs in SPIR-V module declaration order rather than ID space. IDs don't have to be monotonically increasing, which was an assumption SPIRV-Cross used to have. It has apparently never been a problem until now. - Support LUTs of structs. We do this by interleaving declaration of constants and struct types in SPIR-V module order. To support this, the ParsedIR interface needed to change slightly. Before setting any ID with variant_set<T> we let ParsedIR know that an ID with a specific type has been added. The surface for change should be minimal. ParsedIR will maintain a per-type list of IDs which the cross-compiler will need to consider for later. Instead of looping over ir.ids[] (which can be extremely large), we loop over types now, using: ir.for_each_typed_id<SPIRVariable>([&](uint32_t id, SPIRVariable &var) { handle_variable(var); }); Now we make sure that we're never looking at irrelevant types.
Diffstat (limited to 'reference/opt/shaders/vulkan')
-rw-r--r--reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp19
-rw-r--r--reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk7
2 files changed, 14 insertions, 12 deletions
diff --git a/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp b/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp
index 9344a7a2..33647a42 100644
--- a/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp
+++ b/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp
@@ -9,15 +9,6 @@ const int a = SPIRV_CROSS_CONSTANT_ID_0;
#define SPIRV_CROSS_CONSTANT_ID_1 200
#endif
const int b = SPIRV_CROSS_CONSTANT_ID_1;
-#ifndef SPIRV_CROSS_CONSTANT_ID_2
-#define SPIRV_CROSS_CONSTANT_ID_2 300
-#endif
-const int c = SPIRV_CROSS_CONSTANT_ID_2;
-const int _18 = (c + 50);
-#ifndef SPIRV_CROSS_CONSTANT_ID_3
-#define SPIRV_CROSS_CONSTANT_ID_3 400
-#endif
-const int e = SPIRV_CROSS_CONSTANT_ID_3;
struct A
{
@@ -31,6 +22,16 @@ struct B
int member1[a];
};
+#ifndef SPIRV_CROSS_CONSTANT_ID_2
+#define SPIRV_CROSS_CONSTANT_ID_2 300
+#endif
+const int c = SPIRV_CROSS_CONSTANT_ID_2;
+const int _18 = (c + 50);
+#ifndef SPIRV_CROSS_CONSTANT_ID_3
+#define SPIRV_CROSS_CONSTANT_ID_3 400
+#endif
+const int e = SPIRV_CROSS_CONSTANT_ID_3;
+
layout(binding = 0, std430) buffer SSBO
{
A member_a;
diff --git a/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk b/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk
index d9a2822f..cd68e93d 100644
--- a/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk
+++ b/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk
@@ -3,9 +3,6 @@ layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
layout(constant_id = 0) const int a = 100;
layout(constant_id = 1) const int b = 200;
-layout(constant_id = 2) const int c = 300;
-const int _18 = (c + 50);
-layout(constant_id = 3) const int e = 400;
struct A
{
@@ -19,6 +16,10 @@ struct B
int member1[a];
};
+layout(constant_id = 2) const int c = 300;
+const int _18 = (c + 50);
+layout(constant_id = 3) const int e = 400;
+
layout(set = 1, binding = 0, std430) buffer SSBO
{
A member_a;