writer/spirv: Fix abs() on unsigned integers
GLSLstd450SAbs expects a *signed* integer. abs() of an unsigned number is now a no-op. Fixes WebGPU CTS tests: webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:* Bug: tint:1194 Change-Id: I65c5e9f2f03aac0b788b9ba88c383cbec136d7c6 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/65620 Commit-Queue: Ben Clayton <bclayton@chromium.org> Kokoro: Ben Clayton <bclayton@chromium.org> Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
parent
c57642cbd5
commit
5e35864c1b
|
@ -3,11 +3,12 @@
|
||||||
## Changes for M95
|
## Changes for M95
|
||||||
|
|
||||||
### New Features
|
### New Features
|
||||||
|
|
||||||
* The size of an array can now be defined using a non-overridable module-scope constant
|
* The size of an array can now be defined using a non-overridable module-scope constant
|
||||||
* The `num_workgroups` builtin is now supported.
|
* The `num_workgroups` builtin is now supported.
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
* Hex floats: issue an error when the magnitude is non-zero, and the exponent would cause
|
|
||||||
overflow. https://crbug.com/tint/1150 https://crbug.com/tint/1166
|
|
||||||
* Reject identifiers beginning with an underscore. https://crbug.com/tint/1179
|
|
||||||
|
|
||||||
|
* Hex floats: now correctly errors when the magnitude is non-zero, and the exponent would cause overflow. [tint:1150](https://crbug.com/tint/1150), [tint:1166](https://crbug.com/tint/1166)
|
||||||
|
* Identifers beginning with an underscore are now correctly rejected. [tint:1179](https://crbug.com/tint/1179)
|
||||||
|
* `abs()` fixed for unsigned integers on SPIR-V backend [tint:1179](https://crbug.com/tint/1194)
|
||||||
|
|
|
@ -124,12 +124,6 @@ const sem::Matrix* GetNestedMatrixType(const sem::Type* type) {
|
||||||
|
|
||||||
uint32_t intrinsic_to_glsl_method(const sem::Intrinsic* intrinsic) {
|
uint32_t intrinsic_to_glsl_method(const sem::Intrinsic* intrinsic) {
|
||||||
switch (intrinsic->Type()) {
|
switch (intrinsic->Type()) {
|
||||||
case IntrinsicType::kAbs:
|
|
||||||
if (intrinsic->ReturnType()->is_float_scalar_or_vector()) {
|
|
||||||
return GLSLstd450FAbs;
|
|
||||||
} else {
|
|
||||||
return GLSLstd450SAbs;
|
|
||||||
}
|
|
||||||
case IntrinsicType::kAcos:
|
case IntrinsicType::kAcos:
|
||||||
return GLSLstd450Acos;
|
return GLSLstd450Acos;
|
||||||
case IntrinsicType::kAsin:
|
case IntrinsicType::kAsin:
|
||||||
|
@ -2338,8 +2332,17 @@ uint32_t Builder::GenerateIntrinsic(ast::CallExpression* call,
|
||||||
};
|
};
|
||||||
|
|
||||||
OperandList params = {Operand::Int(result_type_id), result};
|
OperandList params = {Operand::Int(result_type_id), result};
|
||||||
|
|
||||||
spv::Op op = spv::Op::OpNop;
|
spv::Op op = spv::Op::OpNop;
|
||||||
|
|
||||||
|
// Pushes the parameters for a GlslStd450 extended instruction, and sets op
|
||||||
|
// to OpExtInst.
|
||||||
|
auto glsl_std450 = [&](uint32_t inst_id) {
|
||||||
|
auto set_id = GetGLSLstd450Import();
|
||||||
|
params.push_back(Operand::Int(set_id));
|
||||||
|
params.push_back(Operand::Int(inst_id));
|
||||||
|
op = spv::Op::OpExtInst;
|
||||||
|
};
|
||||||
|
|
||||||
switch (intrinsic->Type()) {
|
switch (intrinsic->Type()) {
|
||||||
case IntrinsicType::kAny:
|
case IntrinsicType::kAny:
|
||||||
op = spv::Op::OpAny;
|
op = spv::Op::OpAny;
|
||||||
|
@ -2611,18 +2614,25 @@ uint32_t Builder::GenerateIntrinsic(ast::CallExpression* call,
|
||||||
case IntrinsicType::kTranspose:
|
case IntrinsicType::kTranspose:
|
||||||
op = spv::Op::OpTranspose;
|
op = spv::Op::OpTranspose;
|
||||||
break;
|
break;
|
||||||
|
case IntrinsicType::kAbs:
|
||||||
|
if (intrinsic->ReturnType()->is_unsigned_scalar_or_vector()) {
|
||||||
|
// abs() only operates on *signed* integers.
|
||||||
|
// This is a no-op for unsigned integers.
|
||||||
|
return get_param_as_value_id(0);
|
||||||
|
}
|
||||||
|
if (intrinsic->ReturnType()->is_float_scalar_or_vector()) {
|
||||||
|
glsl_std450(GLSLstd450FAbs);
|
||||||
|
} else {
|
||||||
|
glsl_std450(GLSLstd450SAbs);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default: {
|
default: {
|
||||||
auto set_id = GetGLSLstd450Import();
|
|
||||||
auto inst_id = intrinsic_to_glsl_method(intrinsic);
|
auto inst_id = intrinsic_to_glsl_method(intrinsic);
|
||||||
if (inst_id == 0) {
|
if (inst_id == 0) {
|
||||||
error_ = "unknown method " + std::string(intrinsic->str());
|
error_ = "unknown method " + std::string(intrinsic->str());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
glsl_std450(inst_id);
|
||||||
params.push_back(Operand::Int(set_id));
|
|
||||||
params.push_back(Operand::Int(inst_id));
|
|
||||||
|
|
||||||
op = spv::Op::OpExtInst;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1133,12 +1133,10 @@ INSTANTIATE_TEST_SUITE_P(IntrinsicBuilderTest,
|
||||||
Intrinsic_Builtin_SingleParam_Sint_Test,
|
Intrinsic_Builtin_SingleParam_Sint_Test,
|
||||||
testing::Values(IntrinsicData{"abs", "SAbs"}));
|
testing::Values(IntrinsicData{"abs", "SAbs"}));
|
||||||
|
|
||||||
using Intrinsic_Builtin_SingleParam_Uint_Test =
|
// Calling abs() on an unsigned integer scalar / vector is a no-op.
|
||||||
IntrinsicBuilderTestWithParam<IntrinsicData>;
|
using Intrinsic_Builtin_Abs_Uint_Test = IntrinsicBuilderTest;
|
||||||
TEST_P(Intrinsic_Builtin_SingleParam_Uint_Test, Call_Scalar) {
|
TEST_F(Intrinsic_Builtin_Abs_Uint_Test, Call_Scalar) {
|
||||||
auto param = GetParam();
|
auto* expr = Call("abs", 1u);
|
||||||
|
|
||||||
auto* expr = Call(param.name, 1u);
|
|
||||||
WrapInFunction(expr);
|
WrapInFunction(expr);
|
||||||
|
|
||||||
auto* func = Func("a_func", ast::VariableList{}, ty.void_(),
|
auto* func = Func("a_func", ast::VariableList{}, ty.void_(),
|
||||||
|
@ -1148,26 +1146,21 @@ TEST_P(Intrinsic_Builtin_SingleParam_Uint_Test, Call_Scalar) {
|
||||||
|
|
||||||
ASSERT_TRUE(b.GenerateFunction(func)) << b.error();
|
ASSERT_TRUE(b.GenerateFunction(func)) << b.error();
|
||||||
|
|
||||||
EXPECT_EQ(b.GenerateCallExpression(expr), 5u) << b.error();
|
EXPECT_EQ(b.GenerateCallExpression(expr), 7u) << b.error();
|
||||||
EXPECT_EQ(DumpBuilder(b), R"(%7 = OpExtInstImport "GLSL.std.450"
|
EXPECT_EQ(DumpBuilder(b), R"(OpName %3 "a_func"
|
||||||
OpName %3 "a_func"
|
|
||||||
%2 = OpTypeVoid
|
%2 = OpTypeVoid
|
||||||
%1 = OpTypeFunction %2
|
%1 = OpTypeFunction %2
|
||||||
%6 = OpTypeInt 32 0
|
%6 = OpTypeInt 32 0
|
||||||
%8 = OpConstant %6 1
|
%7 = OpConstant %6 1
|
||||||
%3 = OpFunction %2 None %1
|
%3 = OpFunction %2 None %1
|
||||||
%4 = OpLabel
|
%4 = OpLabel
|
||||||
%5 = OpExtInst %6 %7 )" + param.op +
|
|
||||||
R"( %8
|
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
)");
|
)");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_P(Intrinsic_Builtin_SingleParam_Uint_Test, Call_Vector) {
|
TEST_F(Intrinsic_Builtin_Abs_Uint_Test, Call_Vector) {
|
||||||
auto param = GetParam();
|
auto* expr = Call("abs", vec2<u32>(1u, 1u));
|
||||||
|
|
||||||
auto* expr = Call(param.name, vec2<u32>(1u, 1u));
|
|
||||||
WrapInFunction(expr);
|
WrapInFunction(expr);
|
||||||
|
|
||||||
auto* func = Func("a_func", ast::VariableList{}, ty.void_(),
|
auto* func = Func("a_func", ast::VariableList{}, ty.void_(),
|
||||||
|
@ -1177,26 +1170,20 @@ TEST_P(Intrinsic_Builtin_SingleParam_Uint_Test, Call_Vector) {
|
||||||
|
|
||||||
ASSERT_TRUE(b.GenerateFunction(func)) << b.error();
|
ASSERT_TRUE(b.GenerateFunction(func)) << b.error();
|
||||||
|
|
||||||
EXPECT_EQ(b.GenerateCallExpression(expr), 5u) << b.error();
|
EXPECT_EQ(b.GenerateCallExpression(expr), 9u) << b.error();
|
||||||
EXPECT_EQ(DumpBuilder(b), R"(%8 = OpExtInstImport "GLSL.std.450"
|
EXPECT_EQ(DumpBuilder(b), R"(OpName %3 "a_func"
|
||||||
OpName %3 "a_func"
|
|
||||||
%2 = OpTypeVoid
|
%2 = OpTypeVoid
|
||||||
%1 = OpTypeFunction %2
|
%1 = OpTypeFunction %2
|
||||||
%7 = OpTypeInt 32 0
|
%7 = OpTypeInt 32 0
|
||||||
%6 = OpTypeVector %7 2
|
%6 = OpTypeVector %7 2
|
||||||
%9 = OpConstant %7 1
|
%8 = OpConstant %7 1
|
||||||
%10 = OpConstantComposite %6 %9 %9
|
%9 = OpConstantComposite %6 %8 %8
|
||||||
%3 = OpFunction %2 None %1
|
%3 = OpFunction %2 None %1
|
||||||
%4 = OpLabel
|
%4 = OpLabel
|
||||||
%5 = OpExtInst %6 %8 )" + param.op +
|
|
||||||
R"( %10
|
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
)");
|
)");
|
||||||
}
|
}
|
||||||
INSTANTIATE_TEST_SUITE_P(IntrinsicBuilderTest,
|
|
||||||
Intrinsic_Builtin_SingleParam_Uint_Test,
|
|
||||||
testing::Values(IntrinsicData{"abs", "SAbs"}));
|
|
||||||
|
|
||||||
using Intrinsic_Builtin_DualParam_SInt_Test =
|
using Intrinsic_Builtin_DualParam_SInt_Test =
|
||||||
IntrinsicBuilderTestWithParam<IntrinsicData>;
|
IntrinsicBuilderTestWithParam<IntrinsicData>;
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
; SPIR-V
|
; SPIR-V
|
||||||
; Version: 1.3
|
; Version: 1.3
|
||||||
; Generator: Google Tint Compiler; 0
|
; Generator: Google Tint Compiler; 0
|
||||||
; Bound: 34
|
; Bound: 33
|
||||||
; Schema: 0
|
; Schema: 0
|
||||||
OpCapability Shader
|
OpCapability Shader
|
||||||
%16 = OpExtInstImport "GLSL.std.450"
|
|
||||||
OpMemoryModel Logical GLSL450
|
OpMemoryModel Logical GLSL450
|
||||||
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
||||||
OpEntryPoint Fragment %fragment_main "fragment_main"
|
OpEntryPoint Fragment %fragment_main "fragment_main"
|
||||||
|
@ -33,36 +32,35 @@
|
||||||
%9 = OpTypeFunction %void
|
%9 = OpTypeFunction %void
|
||||||
%uint = OpTypeInt 32 0
|
%uint = OpTypeInt 32 0
|
||||||
%v4uint = OpTypeVector %uint 4
|
%v4uint = OpTypeVector %uint 4
|
||||||
%17 = OpConstantNull %v4uint
|
%16 = OpConstantNull %v4uint
|
||||||
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
|
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
|
||||||
%20 = OpTypeFunction %v4float
|
%19 = OpTypeFunction %v4float
|
||||||
%float_1 = OpConstant %float 1
|
%float_1 = OpConstant %float 1
|
||||||
%abs_1ce782 = OpFunction %void None %9
|
%abs_1ce782 = OpFunction %void None %9
|
||||||
%12 = OpLabel
|
%12 = OpLabel
|
||||||
%res = OpVariable %_ptr_Function_v4uint Function %17
|
%res = OpVariable %_ptr_Function_v4uint Function %16
|
||||||
%13 = OpExtInst %v4uint %16 SAbs %17
|
OpStore %res %16
|
||||||
OpStore %res %13
|
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%vertex_main_inner = OpFunction %v4float None %20
|
%vertex_main_inner = OpFunction %v4float None %19
|
||||||
%22 = OpLabel
|
%21 = OpLabel
|
||||||
%23 = OpFunctionCall %void %abs_1ce782
|
%22 = OpFunctionCall %void %abs_1ce782
|
||||||
OpReturnValue %5
|
OpReturnValue %5
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%vertex_main = OpFunction %void None %9
|
%vertex_main = OpFunction %void None %9
|
||||||
%25 = OpLabel
|
%24 = OpLabel
|
||||||
%26 = OpFunctionCall %v4float %vertex_main_inner
|
%25 = OpFunctionCall %v4float %vertex_main_inner
|
||||||
OpStore %value %26
|
OpStore %value %25
|
||||||
OpStore %vertex_point_size %float_1
|
OpStore %vertex_point_size %float_1
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%fragment_main = OpFunction %void None %9
|
%fragment_main = OpFunction %void None %9
|
||||||
%29 = OpLabel
|
%28 = OpLabel
|
||||||
%30 = OpFunctionCall %void %abs_1ce782
|
%29 = OpFunctionCall %void %abs_1ce782
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%compute_main = OpFunction %void None %9
|
%compute_main = OpFunction %void None %9
|
||||||
%32 = OpLabel
|
%31 = OpLabel
|
||||||
%33 = OpFunctionCall %void %abs_1ce782
|
%32 = OpFunctionCall %void %abs_1ce782
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
; SPIR-V
|
; SPIR-V
|
||||||
; Version: 1.3
|
; Version: 1.3
|
||||||
; Generator: Google Tint Compiler; 0
|
; Generator: Google Tint Compiler; 0
|
||||||
; Bound: 34
|
; Bound: 33
|
||||||
; Schema: 0
|
; Schema: 0
|
||||||
OpCapability Shader
|
OpCapability Shader
|
||||||
%15 = OpExtInstImport "GLSL.std.450"
|
|
||||||
OpMemoryModel Logical GLSL450
|
OpMemoryModel Logical GLSL450
|
||||||
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
||||||
OpEntryPoint Fragment %fragment_main "fragment_main"
|
OpEntryPoint Fragment %fragment_main "fragment_main"
|
||||||
|
@ -34,35 +33,34 @@
|
||||||
%uint = OpTypeInt 32 0
|
%uint = OpTypeInt 32 0
|
||||||
%uint_1 = OpConstant %uint 1
|
%uint_1 = OpConstant %uint 1
|
||||||
%_ptr_Function_uint = OpTypePointer Function %uint
|
%_ptr_Function_uint = OpTypePointer Function %uint
|
||||||
%19 = OpConstantNull %uint
|
%18 = OpConstantNull %uint
|
||||||
%20 = OpTypeFunction %v4float
|
%19 = OpTypeFunction %v4float
|
||||||
%float_1 = OpConstant %float 1
|
%float_1 = OpConstant %float 1
|
||||||
%abs_467cd1 = OpFunction %void None %9
|
%abs_467cd1 = OpFunction %void None %9
|
||||||
%12 = OpLabel
|
%12 = OpLabel
|
||||||
%res = OpVariable %_ptr_Function_uint Function %19
|
%res = OpVariable %_ptr_Function_uint Function %18
|
||||||
%13 = OpExtInst %uint %15 SAbs %uint_1
|
OpStore %res %uint_1
|
||||||
OpStore %res %13
|
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%vertex_main_inner = OpFunction %v4float None %20
|
%vertex_main_inner = OpFunction %v4float None %19
|
||||||
%22 = OpLabel
|
%21 = OpLabel
|
||||||
%23 = OpFunctionCall %void %abs_467cd1
|
%22 = OpFunctionCall %void %abs_467cd1
|
||||||
OpReturnValue %5
|
OpReturnValue %5
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%vertex_main = OpFunction %void None %9
|
%vertex_main = OpFunction %void None %9
|
||||||
%25 = OpLabel
|
%24 = OpLabel
|
||||||
%26 = OpFunctionCall %v4float %vertex_main_inner
|
%25 = OpFunctionCall %v4float %vertex_main_inner
|
||||||
OpStore %value %26
|
OpStore %value %25
|
||||||
OpStore %vertex_point_size %float_1
|
OpStore %vertex_point_size %float_1
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%fragment_main = OpFunction %void None %9
|
%fragment_main = OpFunction %void None %9
|
||||||
%29 = OpLabel
|
%28 = OpLabel
|
||||||
%30 = OpFunctionCall %void %abs_467cd1
|
%29 = OpFunctionCall %void %abs_467cd1
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%compute_main = OpFunction %void None %9
|
%compute_main = OpFunction %void None %9
|
||||||
%32 = OpLabel
|
%31 = OpLabel
|
||||||
%33 = OpFunctionCall %void %abs_467cd1
|
%32 = OpFunctionCall %void %abs_467cd1
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
; SPIR-V
|
; SPIR-V
|
||||||
; Version: 1.3
|
; Version: 1.3
|
||||||
; Generator: Google Tint Compiler; 0
|
; Generator: Google Tint Compiler; 0
|
||||||
; Bound: 34
|
; Bound: 33
|
||||||
; Schema: 0
|
; Schema: 0
|
||||||
OpCapability Shader
|
OpCapability Shader
|
||||||
%16 = OpExtInstImport "GLSL.std.450"
|
|
||||||
OpMemoryModel Logical GLSL450
|
OpMemoryModel Logical GLSL450
|
||||||
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
||||||
OpEntryPoint Fragment %fragment_main "fragment_main"
|
OpEntryPoint Fragment %fragment_main "fragment_main"
|
||||||
|
@ -33,36 +32,35 @@
|
||||||
%9 = OpTypeFunction %void
|
%9 = OpTypeFunction %void
|
||||||
%uint = OpTypeInt 32 0
|
%uint = OpTypeInt 32 0
|
||||||
%v3uint = OpTypeVector %uint 3
|
%v3uint = OpTypeVector %uint 3
|
||||||
%17 = OpConstantNull %v3uint
|
%16 = OpConstantNull %v3uint
|
||||||
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
|
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
|
||||||
%20 = OpTypeFunction %v4float
|
%19 = OpTypeFunction %v4float
|
||||||
%float_1 = OpConstant %float 1
|
%float_1 = OpConstant %float 1
|
||||||
%abs_7326de = OpFunction %void None %9
|
%abs_7326de = OpFunction %void None %9
|
||||||
%12 = OpLabel
|
%12 = OpLabel
|
||||||
%res = OpVariable %_ptr_Function_v3uint Function %17
|
%res = OpVariable %_ptr_Function_v3uint Function %16
|
||||||
%13 = OpExtInst %v3uint %16 SAbs %17
|
OpStore %res %16
|
||||||
OpStore %res %13
|
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%vertex_main_inner = OpFunction %v4float None %20
|
%vertex_main_inner = OpFunction %v4float None %19
|
||||||
%22 = OpLabel
|
%21 = OpLabel
|
||||||
%23 = OpFunctionCall %void %abs_7326de
|
%22 = OpFunctionCall %void %abs_7326de
|
||||||
OpReturnValue %5
|
OpReturnValue %5
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%vertex_main = OpFunction %void None %9
|
%vertex_main = OpFunction %void None %9
|
||||||
%25 = OpLabel
|
%24 = OpLabel
|
||||||
%26 = OpFunctionCall %v4float %vertex_main_inner
|
%25 = OpFunctionCall %v4float %vertex_main_inner
|
||||||
OpStore %value %26
|
OpStore %value %25
|
||||||
OpStore %vertex_point_size %float_1
|
OpStore %vertex_point_size %float_1
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%fragment_main = OpFunction %void None %9
|
%fragment_main = OpFunction %void None %9
|
||||||
%29 = OpLabel
|
%28 = OpLabel
|
||||||
%30 = OpFunctionCall %void %abs_7326de
|
%29 = OpFunctionCall %void %abs_7326de
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%compute_main = OpFunction %void None %9
|
%compute_main = OpFunction %void None %9
|
||||||
%32 = OpLabel
|
%31 = OpLabel
|
||||||
%33 = OpFunctionCall %void %abs_7326de
|
%32 = OpFunctionCall %void %abs_7326de
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
; SPIR-V
|
; SPIR-V
|
||||||
; Version: 1.3
|
; Version: 1.3
|
||||||
; Generator: Google Tint Compiler; 0
|
; Generator: Google Tint Compiler; 0
|
||||||
; Bound: 34
|
; Bound: 33
|
||||||
; Schema: 0
|
; Schema: 0
|
||||||
OpCapability Shader
|
OpCapability Shader
|
||||||
%16 = OpExtInstImport "GLSL.std.450"
|
|
||||||
OpMemoryModel Logical GLSL450
|
OpMemoryModel Logical GLSL450
|
||||||
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
|
||||||
OpEntryPoint Fragment %fragment_main "fragment_main"
|
OpEntryPoint Fragment %fragment_main "fragment_main"
|
||||||
|
@ -33,36 +32,35 @@
|
||||||
%9 = OpTypeFunction %void
|
%9 = OpTypeFunction %void
|
||||||
%uint = OpTypeInt 32 0
|
%uint = OpTypeInt 32 0
|
||||||
%v2uint = OpTypeVector %uint 2
|
%v2uint = OpTypeVector %uint 2
|
||||||
%17 = OpConstantNull %v2uint
|
%16 = OpConstantNull %v2uint
|
||||||
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
|
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
|
||||||
%20 = OpTypeFunction %v4float
|
%19 = OpTypeFunction %v4float
|
||||||
%float_1 = OpConstant %float 1
|
%float_1 = OpConstant %float 1
|
||||||
%abs_7f28e6 = OpFunction %void None %9
|
%abs_7f28e6 = OpFunction %void None %9
|
||||||
%12 = OpLabel
|
%12 = OpLabel
|
||||||
%res = OpVariable %_ptr_Function_v2uint Function %17
|
%res = OpVariable %_ptr_Function_v2uint Function %16
|
||||||
%13 = OpExtInst %v2uint %16 SAbs %17
|
OpStore %res %16
|
||||||
OpStore %res %13
|
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%vertex_main_inner = OpFunction %v4float None %20
|
%vertex_main_inner = OpFunction %v4float None %19
|
||||||
%22 = OpLabel
|
%21 = OpLabel
|
||||||
%23 = OpFunctionCall %void %abs_7f28e6
|
%22 = OpFunctionCall %void %abs_7f28e6
|
||||||
OpReturnValue %5
|
OpReturnValue %5
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%vertex_main = OpFunction %void None %9
|
%vertex_main = OpFunction %void None %9
|
||||||
%25 = OpLabel
|
%24 = OpLabel
|
||||||
%26 = OpFunctionCall %v4float %vertex_main_inner
|
%25 = OpFunctionCall %v4float %vertex_main_inner
|
||||||
OpStore %value %26
|
OpStore %value %25
|
||||||
OpStore %vertex_point_size %float_1
|
OpStore %vertex_point_size %float_1
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%fragment_main = OpFunction %void None %9
|
%fragment_main = OpFunction %void None %9
|
||||||
%29 = OpLabel
|
%28 = OpLabel
|
||||||
%30 = OpFunctionCall %void %abs_7f28e6
|
%29 = OpFunctionCall %void %abs_7f28e6
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
%compute_main = OpFunction %void None %9
|
%compute_main = OpFunction %void None %9
|
||||||
%32 = OpLabel
|
%31 = OpLabel
|
||||||
%33 = OpFunctionCall %void %abs_7f28e6
|
%32 = OpFunctionCall %void %abs_7f28e6
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
|
|
Loading…
Reference in New Issue