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

github.com/HansKristian-Work/dxil-spirv.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2022-11-08 17:04:42 +0300
committerGitHub <noreply@github.com>2022-11-08 17:04:42 +0300
commit95d9121381669740510c2b5f7605a8c2a18ffaf8 (patch)
treeec471f772a2737ce2125ddacbb0db97839f08fd5 /spirv_module.cpp
parente6410fb48a2a43750512ab91586beda001fc721f (diff)
parent2bdd09a3afc1071d90a27d9fda9f8b7be19ab1fc (diff)
Merge pull request #133 from HansKristian-Work/per-primitive-mesh-capsHEADmaster
Fix some validation errors with Mesh Shaders
Diffstat (limited to 'spirv_module.cpp')
-rw-r--r--spirv_module.cpp33
1 files changed, 27 insertions, 6 deletions
diff --git a/spirv_module.cpp b/spirv_module.cpp
index 06b9ddb..7af741c 100644
--- a/spirv_module.cpp
+++ b/spirv_module.cpp
@@ -126,6 +126,8 @@ struct SPIRVModule::Impl : BlockEmissionInterface
Vector<CBVOp> physical_cbv_call_ids;
DescriptorQAInfo descriptor_qa_info;
+
+ uint32_t override_spirv_version = 0;
};
spv::Id SPIRVModule::Impl::get_type_for_builtin(spv::BuiltIn builtin, bool &requires_flat)
@@ -916,9 +918,16 @@ bool SPIRVModule::Impl::execution_model_is_ray_tracing() const
bool SPIRVModule::Impl::spirv_requires_14() const
{
- return execution_model_is_ray_tracing() ||
- execution_model == spv::ExecutionModelMeshEXT ||
- execution_model == spv::ExecutionModelTaskEXT;
+ static const uint32_t Version_1_4 = 0x00010400;
+ if (override_spirv_version)
+ {
+ return override_spirv_version >= Version_1_4;
+ }
+ else
+ {
+ return execution_model_is_ray_tracing() || execution_model == spv::ExecutionModelMeshEXT ||
+ execution_model == spv::ExecutionModelTaskEXT;
+ }
}
bool SPIRVModule::Impl::finalize_spirv(Vector<uint32_t> &spirv)
@@ -929,9 +938,16 @@ bool SPIRVModule::Impl::finalize_spirv(Vector<uint32_t> &spirv)
builder.dump(spirv);
if (spirv.size() >= 2)
{
- static const uint32_t Version_1_3 = 0x00010300;
- static const uint32_t Version_1_4 = 0x00010400;
- spirv[1] = spirv_requires_14() ? Version_1_4 : Version_1_3;
+ if (override_spirv_version)
+ {
+ spirv[1] = override_spirv_version;
+ }
+ else
+ {
+ static const uint32_t Version_1_3 = 0x00010300;
+ static const uint32_t Version_1_4 = 0x00010400;
+ spirv[1] = spirv_requires_14() ? Version_1_4 : Version_1_3;
+ }
}
return !mark_error;
}
@@ -1396,6 +1412,11 @@ const DescriptorQAInfo &SPIRVModule::get_descriptor_qa_info() const
return impl->descriptor_qa_info;
}
+void SPIRVModule::set_override_spirv_version(uint32_t version)
+{
+ impl->override_spirv_version = version;
+}
+
bool SPIRVModule::opcode_is_control_dependent(spv::Op opcode)
{
// An opcode is considered control dependent if it is affected by other invocations in the subgroup.