From c6831d1ed4babba23afbd32c3b4921d6002ade27 Mon Sep 17 00:00:00 2001 From: GregF <greg@LunarG.com> Date: Tue, 19 Jun 2018 13:47:50 -0600 Subject: [PATCH] Add support for OpConstantNull and OpConstantSampler to spirv-remap Fixes issue #1408 --- SPIRV/SPVRemapper.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp index 4bac14530..fd0bb8950 100755 --- a/SPIRV/SPVRemapper.cpp +++ b/SPIRV/SPVRemapper.cpp @@ -220,11 +220,11 @@ namespace spv { bool spirvbin_t::isConstOp(spv::Op opCode) const { switch (opCode) { - case spv::OpConstantNull: case spv::OpConstantSampler: error("unimplemented constant type"); return true; + case spv::OpConstantNull: case spv::OpConstantTrue: case spv::OpConstantFalse: case spv::OpConstantComposite: @@ -1326,10 +1326,6 @@ namespace spv { case spv::OpTypeReserveId: return 300002; case spv::OpTypeQueue: return 300003; case spv::OpTypePipe: return 300004; - - case spv::OpConstantNull: return 300005; - case spv::OpConstantSampler: return 300006; - case spv::OpConstantTrue: return 300007; case spv::OpConstantFalse: return 300008; case spv::OpConstantComposite: @@ -1346,6 +1342,18 @@ namespace spv { hash += w * spv[typeStart+w]; return hash; } + case spv::OpConstantNull: + { + std::uint32_t hash = 500009 + hashType(idPos(spv[typeStart+1])); + return hash; + } + case spv::OpConstantSampler: + { + std::uint32_t hash = 600011 + hashType(idPos(spv[typeStart+1])); + for (unsigned w=3; w < wordCount; ++w) + hash += w * spv[typeStart+w]; + return hash; + } default: error("unknown type opcode"); -- GitLab