spirv-diff: Allow no SpecId (#4904)
This commit is contained in:
Родитель
59cf5b1346
Коммит
f5b27b6513
|
@ -1284,8 +1284,15 @@ bool Differ::MatchOpSpecConstant(const opt::Instruction* src_inst,
|
|||
return src_spec_id == dst_spec_id;
|
||||
}
|
||||
|
||||
// There is no spec id, this is not valid.
|
||||
assert(false && "Unreachable");
|
||||
// There is no SpecId decoration, while not practical, still valid.
|
||||
// SpecConstantOp don't have SpecId and can be matched by operands
|
||||
if (src_inst->opcode() == SpvOpSpecConstantOp) {
|
||||
if (src_inst->NumInOperandWords() == dst_inst->NumInOperandWords()) {
|
||||
return DoOperandsMatch(src_inst, dst_inst, 0,
|
||||
src_inst->NumInOperandWords());
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -41,5 +41,7 @@ list(APPEND DIFF_TEST_FILES
|
|||
"diff_files/small_functions_small_diffs_autogen.cpp"
|
||||
"diff_files/spec_constant_array_size_autogen.cpp"
|
||||
"diff_files/spec_constant_composite_autogen.cpp"
|
||||
"diff_files/spec_constant_op_autogen.cpp"
|
||||
"diff_files/spec_constant_specid_autogen.cpp"
|
||||
"diff_files/unrelated_shaders_autogen.cpp"
|
||||
)
|
||||
|
|
|
@ -0,0 +1,162 @@
|
|||
// GENERATED FILE - DO NOT EDIT.
|
||||
// Generated by generate_tests.py
|
||||
//
|
||||
// Copyright (c) 2022 Google LLC.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include "../diff_test_utils.h"
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace diff {
|
||||
namespace {
|
||||
|
||||
// Tests OpSpecConstantOp matching.
|
||||
constexpr char kSrc[] = R"( OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %1 "main"
|
||||
OpExecutionMode %1 LocalSize 1 1 1
|
||||
%2 = OpTypeVoid
|
||||
%3 = OpTypeFunction %2
|
||||
%4 = OpTypeInt 32 0
|
||||
%5 = OpTypeVector %4 3
|
||||
%6 = OpConstant %4 1
|
||||
%7 = OpSpecConstantComposite %5 %6 %6 %6
|
||||
%8 = OpSpecConstantOp %4 CompositeExtract %7 2
|
||||
%9 = OpSpecConstantOp %4 CompositeExtract %7 1
|
||||
%10 = OpSpecConstantOp %4 CompositeExtract %7 0
|
||||
%1 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd)";
|
||||
constexpr char kDst[] = R"( OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %1 "main"
|
||||
OpExecutionMode %1 LocalSize 1 1 1
|
||||
%2 = OpTypeVoid
|
||||
%3 = OpTypeFunction %2
|
||||
%4 = OpTypeInt 32 0
|
||||
%5 = OpTypeVector %4 3
|
||||
%6 = OpConstant %4 1
|
||||
%7 = OpSpecConstantComposite %5 %6 %6 %6
|
||||
%8 = OpSpecConstantOp %4 CompositeExtract %7 2
|
||||
%9 = OpSpecConstantOp %4 CompositeExtract %7 3
|
||||
%10 = OpSpecConstantOp %4 IMul %8 %8
|
||||
%1 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
|
||||
TEST(DiffTest, SpecConstantOp) {
|
||||
constexpr char kDiff[] = R"( ; SPIR-V
|
||||
; Version: 1.6
|
||||
; Generator: Khronos SPIR-V Tools Assembler; 0
|
||||
-; Bound: 12
|
||||
+; Bound: 14
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %1 "main"
|
||||
OpExecutionMode %1 LocalSize 1 1 1
|
||||
%2 = OpTypeVoid
|
||||
%3 = OpTypeFunction %2
|
||||
%4 = OpTypeInt 32 0
|
||||
%5 = OpTypeVector %4 3
|
||||
%6 = OpConstant %4 1
|
||||
%7 = OpSpecConstantComposite %5 %6 %6 %6
|
||||
%8 = OpSpecConstantOp %4 CompositeExtract %7 2
|
||||
-%9 = OpSpecConstantOp %4 CompositeExtract %7 1
|
||||
-%10 = OpSpecConstantOp %4 CompositeExtract %7 0
|
||||
+%12 = OpSpecConstantOp %4 CompositeExtract %7 3
|
||||
+%13 = OpSpecConstantOp %4 IMul %8 %8
|
||||
%1 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
DoStringDiffTest(kSrc, kDst, kDiff, options);
|
||||
}
|
||||
|
||||
TEST(DiffTest, SpecConstantOpNoDebug) {
|
||||
constexpr char kSrcNoDebug[] = R"( OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %1 "main"
|
||||
OpExecutionMode %1 LocalSize 1 1 1
|
||||
%2 = OpTypeVoid
|
||||
%3 = OpTypeFunction %2
|
||||
%4 = OpTypeInt 32 0
|
||||
%5 = OpTypeVector %4 3
|
||||
%6 = OpConstant %4 1
|
||||
%7 = OpSpecConstantComposite %5 %6 %6 %6
|
||||
%8 = OpSpecConstantOp %4 CompositeExtract %7 2
|
||||
%9 = OpSpecConstantOp %4 CompositeExtract %7 1
|
||||
%10 = OpSpecConstantOp %4 CompositeExtract %7 0
|
||||
%1 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd)";
|
||||
constexpr char kDstNoDebug[] = R"( OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %1 "main"
|
||||
OpExecutionMode %1 LocalSize 1 1 1
|
||||
%2 = OpTypeVoid
|
||||
%3 = OpTypeFunction %2
|
||||
%4 = OpTypeInt 32 0
|
||||
%5 = OpTypeVector %4 3
|
||||
%6 = OpConstant %4 1
|
||||
%7 = OpSpecConstantComposite %5 %6 %6 %6
|
||||
%8 = OpSpecConstantOp %4 CompositeExtract %7 2
|
||||
%9 = OpSpecConstantOp %4 CompositeExtract %7 3
|
||||
%10 = OpSpecConstantOp %4 IMul %8 %8
|
||||
%1 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
constexpr char kDiff[] = R"( ; SPIR-V
|
||||
; Version: 1.6
|
||||
; Generator: Khronos SPIR-V Tools Assembler; 0
|
||||
-; Bound: 12
|
||||
+; Bound: 14
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %1 "main"
|
||||
OpExecutionMode %1 LocalSize 1 1 1
|
||||
%2 = OpTypeVoid
|
||||
%3 = OpTypeFunction %2
|
||||
%4 = OpTypeInt 32 0
|
||||
%5 = OpTypeVector %4 3
|
||||
%6 = OpConstant %4 1
|
||||
%7 = OpSpecConstantComposite %5 %6 %6 %6
|
||||
%8 = OpSpecConstantOp %4 CompositeExtract %7 2
|
||||
-%9 = OpSpecConstantOp %4 CompositeExtract %7 1
|
||||
-%10 = OpSpecConstantOp %4 CompositeExtract %7 0
|
||||
+%12 = OpSpecConstantOp %4 CompositeExtract %7 3
|
||||
+%13 = OpSpecConstantOp %4 IMul %8 %8
|
||||
%1 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace diff
|
||||
} // namespace spvtools
|
|
@ -0,0 +1,17 @@
|
|||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %1 "main"
|
||||
OpExecutionMode %1 LocalSize 1 1 1
|
||||
%2 = OpTypeVoid
|
||||
%3 = OpTypeFunction %2
|
||||
%4 = OpTypeInt 32 0
|
||||
%5 = OpTypeVector %4 3
|
||||
%6 = OpConstant %4 1
|
||||
%7 = OpSpecConstantComposite %5 %6 %6 %6
|
||||
%8 = OpSpecConstantOp %4 CompositeExtract %7 2
|
||||
%9 = OpSpecConstantOp %4 CompositeExtract %7 3
|
||||
%10 = OpSpecConstantOp %4 IMul %8 %8
|
||||
%1 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
|
@ -0,0 +1,18 @@
|
|||
;; Tests OpSpecConstantOp matching.
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %1 "main"
|
||||
OpExecutionMode %1 LocalSize 1 1 1
|
||||
%2 = OpTypeVoid
|
||||
%3 = OpTypeFunction %2
|
||||
%4 = OpTypeInt 32 0
|
||||
%5 = OpTypeVector %4 3
|
||||
%6 = OpConstant %4 1
|
||||
%7 = OpSpecConstantComposite %5 %6 %6 %6
|
||||
%8 = OpSpecConstantOp %4 CompositeExtract %7 2
|
||||
%9 = OpSpecConstantOp %4 CompositeExtract %7 1
|
||||
%10 = OpSpecConstantOp %4 CompositeExtract %7 0
|
||||
%1 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
|
@ -0,0 +1,141 @@
|
|||
// GENERATED FILE - DO NOT EDIT.
|
||||
// Generated by generate_tests.py
|
||||
//
|
||||
// Copyright (c) 2022 Google LLC.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include "../diff_test_utils.h"
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace diff {
|
||||
namespace {
|
||||
|
||||
// Tests OpSpecConstantComposite matching.
|
||||
constexpr char kSrc[] = R"( OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpDecorate %sc SpecId 0
|
||||
%void = OpTypeVoid
|
||||
%3 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%sc = OpSpecConstant %uint 10
|
||||
%main = OpFunction %void None %3
|
||||
%5 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd)";
|
||||
constexpr char kDst[] = R"( OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
%void = OpTypeVoid
|
||||
%3 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%ss = OpSpecConstant %uint 10
|
||||
%main = OpFunction %void None %3
|
||||
%5 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
|
||||
TEST(DiffTest, SpecConstantSpecid) {
|
||||
constexpr char kDiff[] = R"( ; SPIR-V
|
||||
; Version: 1.6
|
||||
; Generator: Khronos SPIR-V Tools Assembler; 0
|
||||
-; Bound: 8
|
||||
+; Bound: 9
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %1 "main"
|
||||
OpExecutionMode %1 LocalSize 1 1 1
|
||||
-OpDecorate %2 SpecId 0
|
||||
%4 = OpTypeVoid
|
||||
%3 = OpTypeFunction %4
|
||||
%6 = OpTypeInt 32 0
|
||||
%7 = OpTypeVector %6 3
|
||||
-%2 = OpSpecConstant %6 10
|
||||
+%8 = OpSpecConstant %6 10
|
||||
%1 = OpFunction %4 None %3
|
||||
%5 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
DoStringDiffTest(kSrc, kDst, kDiff, options);
|
||||
}
|
||||
|
||||
TEST(DiffTest, SpecConstantSpecidNoDebug) {
|
||||
constexpr char kSrcNoDebug[] = R"( OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpDecorate %sc SpecId 0
|
||||
%void = OpTypeVoid
|
||||
%3 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%sc = OpSpecConstant %uint 10
|
||||
%main = OpFunction %void None %3
|
||||
%5 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
constexpr char kDstNoDebug[] = R"( OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
%void = OpTypeVoid
|
||||
%3 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%ss = OpSpecConstant %uint 10
|
||||
%main = OpFunction %void None %3
|
||||
%5 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
constexpr char kDiff[] = R"( ; SPIR-V
|
||||
; Version: 1.6
|
||||
; Generator: Khronos SPIR-V Tools Assembler; 0
|
||||
-; Bound: 8
|
||||
+; Bound: 9
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %1 "main"
|
||||
OpExecutionMode %1 LocalSize 1 1 1
|
||||
-OpDecorate %2 SpecId 0
|
||||
%4 = OpTypeVoid
|
||||
%3 = OpTypeFunction %4
|
||||
%6 = OpTypeInt 32 0
|
||||
%7 = OpTypeVector %6 3
|
||||
-%2 = OpSpecConstant %6 10
|
||||
+%8 = OpSpecConstant %6 10
|
||||
%1 = OpFunction %4 None %3
|
||||
%5 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace diff
|
||||
} // namespace spvtools
|
|
@ -0,0 +1,13 @@
|
|||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
%void = OpTypeVoid
|
||||
%3 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%ss = OpSpecConstant %uint 10
|
||||
%main = OpFunction %void None %3
|
||||
%5 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
|
@ -0,0 +1,15 @@
|
|||
;; Tests OpSpecConstantComposite matching.
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpDecorate %sc SpecId 0
|
||||
%void = OpTypeVoid
|
||||
%3 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%sc = OpSpecConstant %uint 10
|
||||
%main = OpFunction %void None %3
|
||||
%5 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
Загрузка…
Ссылка в новой задаче