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