writer: avoid type breakage during AppendVector
When building a vector via tint::writer::AppendVector, and the vector argument is already a vector constructor, expand that vector constructor into its components only when those components are all scalars. This avoids a type breakage which can occur with cases like this: vector argument is: vec2<i32>(vec2<u32>(0u,1u)) scalar argument is: 2 Before this fix, the result was: vec2<i32>(0u, 1u, 2); But should be this instead: vec3<i32>(vec2<u32>(0u,1u),2) This was noticed in SPIR-V writer output when forming a coordinate vector from a an unsigned WGSL coordinate vector with a signed array vector. Fixed: tint:1048 Change-Id: Id46665739cc23da0ca58b9baabf7b4531b86350b Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/60040 Auto-Submit: David Neto <dneto@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: David Neto <dneto@google.com> Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
parent
c1cfa84ff9
commit
889b77a2a1
|
@ -70,12 +70,18 @@ ast::TypeConstructorExpression* AppendVector(ProgramBuilder* b,
|
||||||
auto* packed_ty = b->create<ast::Vector>(packed_el_ty, packed_size);
|
auto* packed_ty = b->create<ast::Vector>(packed_el_ty, packed_size);
|
||||||
auto* packed_sem_ty = b->create<sem::Vector>(packed_el_sem_ty, packed_size);
|
auto* packed_sem_ty = b->create<sem::Vector>(packed_el_sem_ty, packed_size);
|
||||||
|
|
||||||
// If the coordinates are already passed in a vector constructor, extract
|
// If the coordinates are already passed in a vector constructor, with only
|
||||||
// the elements into the new vector instead of nesting a vector-in-vector.
|
// scalar components supplied, extract the elements into the new vector
|
||||||
|
// instead of nesting a vector-in-vector.
|
||||||
|
// If the coordinates are a zero-constructor of the vector, then expand that
|
||||||
|
// to scalar zeros.
|
||||||
|
// The other cases for a nested vector constructor are when it is used
|
||||||
|
// to convert a vector of a different type, e.g. vec2<i32>(vec2<u32>()).
|
||||||
|
// In that case, preserve the original argument, or you'll get a type error.
|
||||||
ast::ExpressionList packed;
|
ast::ExpressionList packed;
|
||||||
if (auto* vc = AsVectorConstructor(b, vector)) {
|
if (auto* vc = AsVectorConstructor(b, vector)) {
|
||||||
packed = vc->values();
|
const auto num_supplied = vc->values().size();
|
||||||
if (packed.size() == 0) {
|
if (num_supplied == 0) {
|
||||||
// Zero-value vector constructor. Populate with zeros
|
// Zero-value vector constructor. Populate with zeros
|
||||||
auto buildZero = [&]() -> ast::ScalarConstructorExpression* {
|
auto buildZero = [&]() -> ast::ScalarConstructorExpression* {
|
||||||
if (packed_el_sem_ty->Is<sem::I32>()) {
|
if (packed_el_sem_ty->Is<sem::I32>()) {
|
||||||
|
@ -101,8 +107,13 @@ ast::TypeConstructorExpression* AppendVector(ProgramBuilder* b,
|
||||||
sem::Constant{}));
|
sem::Constant{}));
|
||||||
packed.emplace_back(zero);
|
packed.emplace_back(zero);
|
||||||
}
|
}
|
||||||
|
} else if (num_supplied + 1 == packed_size) {
|
||||||
|
// All vector components were supplied as scalars. Pass them through.
|
||||||
|
packed = vc->values();
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
if (packed.empty()) {
|
||||||
|
// The special cases didn't occur. Use the vector argument as-is.
|
||||||
packed.emplace_back(vector);
|
packed.emplace_back(vector);
|
||||||
}
|
}
|
||||||
if (packed_el_sem_ty != b->TypeOf(scalar)->UnwrapRef()) {
|
if (packed_el_sem_ty != b->TypeOf(scalar)->UnwrapRef()) {
|
||||||
|
|
|
@ -27,6 +27,8 @@ class TypeConstructorExpression;
|
||||||
namespace writer {
|
namespace writer {
|
||||||
|
|
||||||
/// A helper function used to append a vector with an additional scalar.
|
/// A helper function used to append a vector with an additional scalar.
|
||||||
|
/// If the scalar's type does not match the target vector element type,
|
||||||
|
/// then it is value-converted (via TypeConstructor) before being added.
|
||||||
/// All types must have been assigned to the expressions and their child nodes
|
/// All types must have been assigned to the expressions and their child nodes
|
||||||
/// before calling.
|
/// before calling.
|
||||||
/// @param builder the program builder.
|
/// @param builder the program builder.
|
||||||
|
|
|
@ -43,6 +43,58 @@ TEST_F(AppendVectorTest, Vec2i32_i32) {
|
||||||
EXPECT_EQ(vec_123->values()[2], scalar_3);
|
EXPECT_EQ(vec_123->values()[2], scalar_3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(AppendVectorTest, Vec2i32_u32) {
|
||||||
|
auto* scalar_1 = Expr(1);
|
||||||
|
auto* scalar_2 = Expr(2);
|
||||||
|
auto* scalar_3 = Expr(3u);
|
||||||
|
auto* vec_12 = vec2<i32>(scalar_1, scalar_2);
|
||||||
|
WrapInFunction(vec_12, scalar_3);
|
||||||
|
|
||||||
|
resolver::Resolver resolver(this);
|
||||||
|
ASSERT_TRUE(resolver.Resolve()) << resolver.error();
|
||||||
|
|
||||||
|
auto* vec_123 = AppendVector(this, vec_12, scalar_3)
|
||||||
|
->As<ast::TypeConstructorExpression>();
|
||||||
|
ASSERT_NE(vec_123, nullptr);
|
||||||
|
ASSERT_EQ(vec_123->values().size(), 3u);
|
||||||
|
EXPECT_EQ(vec_123->values()[0], scalar_1);
|
||||||
|
EXPECT_EQ(vec_123->values()[1], scalar_2);
|
||||||
|
auto* u32_to_i32 = vec_123->values()[2]->As<ast::TypeConstructorExpression>();
|
||||||
|
ASSERT_NE(u32_to_i32, nullptr);
|
||||||
|
EXPECT_TRUE(u32_to_i32->type()->Is<ast::I32>());
|
||||||
|
ASSERT_EQ(u32_to_i32->values().size(), 1u);
|
||||||
|
EXPECT_EQ(u32_to_i32->values()[0], scalar_3);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(AppendVectorTest, Vec2i32FromVec2u32_u32) {
|
||||||
|
auto* scalar_1 = Expr(1u);
|
||||||
|
auto* scalar_2 = Expr(2u);
|
||||||
|
auto* scalar_3 = Expr(3u);
|
||||||
|
auto* uvec_12 = vec2<u32>(scalar_1, scalar_2);
|
||||||
|
auto* vec_12 = vec2<i32>(uvec_12);
|
||||||
|
WrapInFunction(vec_12, scalar_3);
|
||||||
|
|
||||||
|
resolver::Resolver resolver(this);
|
||||||
|
ASSERT_TRUE(resolver.Resolve()) << resolver.error();
|
||||||
|
|
||||||
|
auto* vec_123 = AppendVector(this, vec_12, scalar_3)
|
||||||
|
->As<ast::TypeConstructorExpression>();
|
||||||
|
ASSERT_NE(vec_123, nullptr);
|
||||||
|
ASSERT_EQ(vec_123->values().size(), 2u);
|
||||||
|
auto* v2u32_to_v2i32 =
|
||||||
|
vec_123->values()[0]->As<ast::TypeConstructorExpression>();
|
||||||
|
ASSERT_NE(v2u32_to_v2i32, nullptr);
|
||||||
|
EXPECT_TRUE(v2u32_to_v2i32->type()->is_signed_integer_vector());
|
||||||
|
EXPECT_EQ(v2u32_to_v2i32->values().size(), 1u);
|
||||||
|
EXPECT_EQ(v2u32_to_v2i32->values()[0], uvec_12);
|
||||||
|
|
||||||
|
auto* u32_to_i32 = vec_123->values()[1]->As<ast::TypeConstructorExpression>();
|
||||||
|
ASSERT_NE(u32_to_i32, nullptr);
|
||||||
|
EXPECT_TRUE(u32_to_i32->type()->Is<ast::I32>());
|
||||||
|
ASSERT_EQ(u32_to_i32->values().size(), 1u);
|
||||||
|
EXPECT_EQ(u32_to_i32->values()[0], scalar_3);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(AppendVectorTest, Vec2i32_f32) {
|
TEST_F(AppendVectorTest, Vec2i32_f32) {
|
||||||
auto* scalar_1 = Expr(1);
|
auto* scalar_1 = Expr(1);
|
||||||
auto* scalar_2 = Expr(2);
|
auto* scalar_2 = Expr(2);
|
||||||
|
@ -61,6 +113,7 @@ TEST_F(AppendVectorTest, Vec2i32_f32) {
|
||||||
EXPECT_EQ(vec_123->values()[1], scalar_2);
|
EXPECT_EQ(vec_123->values()[1], scalar_2);
|
||||||
auto* f32_to_i32 = vec_123->values()[2]->As<ast::TypeConstructorExpression>();
|
auto* f32_to_i32 = vec_123->values()[2]->As<ast::TypeConstructorExpression>();
|
||||||
ASSERT_NE(f32_to_i32, nullptr);
|
ASSERT_NE(f32_to_i32, nullptr);
|
||||||
|
EXPECT_TRUE(f32_to_i32->type()->Is<ast::I32>());
|
||||||
ASSERT_EQ(f32_to_i32->values().size(), 1u);
|
ASSERT_EQ(f32_to_i32->values().size(), 1u);
|
||||||
EXPECT_EQ(f32_to_i32->values()[0], scalar_3);
|
EXPECT_EQ(f32_to_i32->values()[0], scalar_3);
|
||||||
}
|
}
|
||||||
|
@ -158,6 +211,7 @@ TEST_F(AppendVectorTest, Vec2i32Var_f32Var) {
|
||||||
EXPECT_EQ(vec_123->values()[0], vec_12);
|
EXPECT_EQ(vec_123->values()[0], vec_12);
|
||||||
auto* f32_to_i32 = vec_123->values()[1]->As<ast::TypeConstructorExpression>();
|
auto* f32_to_i32 = vec_123->values()[1]->As<ast::TypeConstructorExpression>();
|
||||||
ASSERT_NE(f32_to_i32, nullptr);
|
ASSERT_NE(f32_to_i32, nullptr);
|
||||||
|
EXPECT_TRUE(f32_to_i32->type()->Is<ast::I32>());
|
||||||
ASSERT_EQ(f32_to_i32->values().size(), 1u);
|
ASSERT_EQ(f32_to_i32->values().size(), 1u);
|
||||||
EXPECT_EQ(f32_to_i32->values()[0], scalar_3);
|
EXPECT_EQ(f32_to_i32->values()[0], scalar_3);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ void main(tint_symbol_1 tint_symbol) {
|
||||||
const uint3 GlobalInvocationID = tint_symbol.GlobalInvocationID;
|
const uint3 GlobalInvocationID = tint_symbol.GlobalInvocationID;
|
||||||
uint flatIndex = ((((2u * 2u) * GlobalInvocationID.z) + (2u * GlobalInvocationID.y)) + GlobalInvocationID.x);
|
uint flatIndex = ((((2u * 2u) * GlobalInvocationID.z) + (2u * GlobalInvocationID.y)) + GlobalInvocationID.x);
|
||||||
flatIndex = (flatIndex * 1u);
|
flatIndex = (flatIndex * 1u);
|
||||||
float4 texel = myTexture.Load(int4(GlobalInvocationID.xy, 0, 0));
|
float4 texel = myTexture.Load(int4(int3(int2(GlobalInvocationID.xy), 0), 0));
|
||||||
{
|
{
|
||||||
for(uint i = 0u; (i < 1u); i = (i + 1u)) {
|
for(uint i = 0u; (i < 1u); i = (i + 1u)) {
|
||||||
result.Store((4u * (flatIndex + i)), asuint(texel.r));
|
result.Store((4u * (flatIndex + i)), asuint(texel.r));
|
||||||
|
|
|
@ -1,17 +1,7 @@
|
||||||
SKIP: FAILED
|
|
||||||
|
|
||||||
bug/tint/757.wgsl:3:5 warning: use of deprecated language feature: [[offset]] has been replaced with [[size]] and [[align]]
|
|
||||||
[[offset(0)]] level : i32;
|
|
||||||
^^^^^^
|
|
||||||
|
|
||||||
bug/tint/757.wgsl:10:5 warning: use of deprecated language feature: [[offset]] has been replaced with [[size]] and [[align]]
|
|
||||||
[[offset(0)]] values : [[stride(4)]] array<f32>;
|
|
||||||
^^^^^^
|
|
||||||
|
|
||||||
; SPIR-V
|
; SPIR-V
|
||||||
; Version: 1.3
|
; Version: 1.3
|
||||||
; Generator: Google Tint Compiler; 0
|
; Generator: Google Tint Compiler; 0
|
||||||
; Bound: 76
|
; Bound: 78
|
||||||
; Schema: 0
|
; Schema: 0
|
||||||
OpCapability Shader
|
OpCapability Shader
|
||||||
OpMemoryModel Logical GLSL450
|
OpMemoryModel Logical GLSL450
|
||||||
|
@ -68,17 +58,18 @@ bug/tint/757.wgsl:10:5 warning: use of deprecated language feature: [[offset]] h
|
||||||
%38 = OpConstantNull %uint
|
%38 = OpConstantNull %uint
|
||||||
%v4float = OpTypeVector %float 4
|
%v4float = OpTypeVector %float 4
|
||||||
%v3int = OpTypeVector %int 3
|
%v3int = OpTypeVector %int 3
|
||||||
|
%v2int = OpTypeVector %int 2
|
||||||
%v2uint = OpTypeVector %uint 2
|
%v2uint = OpTypeVector %uint 2
|
||||||
%int_0 = OpConstant %int 0
|
%int_0 = OpConstant %int 0
|
||||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||||
%54 = OpConstantNull %v4float
|
%56 = OpConstantNull %v4float
|
||||||
%bool = OpTypeBool
|
%bool = OpTypeBool
|
||||||
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
|
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
|
||||||
%_ptr_Function_float = OpTypePointer Function %float
|
%_ptr_Function_float = OpTypePointer Function %float
|
||||||
%main = OpFunction %void None %17
|
%main = OpFunction %void None %17
|
||||||
%20 = OpLabel
|
%20 = OpLabel
|
||||||
%flatIndex = OpVariable %_ptr_Function_uint Function %38
|
%flatIndex = OpVariable %_ptr_Function_uint Function %38
|
||||||
%texel = OpVariable %_ptr_Function_v4float Function %54
|
%texel = OpVariable %_ptr_Function_v4float Function %56
|
||||||
%i = OpVariable %_ptr_Function_uint Function %38
|
%i = OpVariable %_ptr_Function_uint Function %38
|
||||||
%22 = OpIMul %uint %uint_2 %uint_2
|
%22 = OpIMul %uint %uint_2 %uint_2
|
||||||
%24 = OpAccessChain %_ptr_Input_uint %tint_symbol %uint_2
|
%24 = OpAccessChain %_ptr_Input_uint %tint_symbol %uint_2
|
||||||
|
@ -96,46 +87,41 @@ bug/tint/757.wgsl:10:5 warning: use of deprecated language feature: [[offset]] h
|
||||||
%40 = OpIMul %uint %39 %uint_1
|
%40 = OpIMul %uint %39 %uint_1
|
||||||
OpStore %flatIndex %40
|
OpStore %flatIndex %40
|
||||||
%43 = OpLoad %7 %myTexture
|
%43 = OpLoad %7 %myTexture
|
||||||
%46 = OpLoad %v3uint %tint_symbol
|
%48 = OpLoad %v3uint %tint_symbol
|
||||||
%47 = OpVectorShuffle %v2uint %46 %46 0 1
|
%49 = OpVectorShuffle %v2uint %48 %48 0 1
|
||||||
%48 = OpCompositeExtract %uint %47 0
|
%45 = OpBitcast %v2int %49
|
||||||
%49 = OpCompositeExtract %uint %47 1
|
%50 = OpCompositeExtract %int %45 0
|
||||||
%51 = OpCompositeConstruct %v3int %48 %49 %int_0
|
%51 = OpCompositeExtract %int %45 1
|
||||||
%41 = OpImageFetch %v4float %43 %51 Lod %int_0
|
%53 = OpCompositeConstruct %v3int %50 %51 %int_0
|
||||||
|
%41 = OpImageFetch %v4float %43 %53 Lod %int_0
|
||||||
OpStore %texel %41
|
OpStore %texel %41
|
||||||
OpStore %i %uint_0
|
OpStore %i %uint_0
|
||||||
OpBranch %56
|
|
||||||
%56 = OpLabel
|
|
||||||
OpLoopMerge %57 %58 None
|
|
||||||
OpBranch %59
|
|
||||||
%59 = OpLabel
|
|
||||||
%61 = OpLoad %uint %i
|
|
||||||
%62 = OpULessThan %bool %61 %uint_1
|
|
||||||
%60 = OpLogicalNot %bool %62
|
|
||||||
OpSelectionMerge %64 None
|
|
||||||
OpBranchConditional %60 %65 %64
|
|
||||||
%65 = OpLabel
|
|
||||||
OpBranch %57
|
|
||||||
%64 = OpLabel
|
|
||||||
%66 = OpLoad %uint %flatIndex
|
|
||||||
%67 = OpLoad %uint %i
|
|
||||||
%68 = OpIAdd %uint %66 %67
|
|
||||||
%70 = OpAccessChain %_ptr_StorageBuffer_float %result %uint_0 %68
|
|
||||||
%72 = OpAccessChain %_ptr_Function_float %texel %uint_0
|
|
||||||
%73 = OpLoad %float %72
|
|
||||||
OpStore %70 %73
|
|
||||||
OpBranch %58
|
OpBranch %58
|
||||||
%58 = OpLabel
|
%58 = OpLabel
|
||||||
%74 = OpLoad %uint %i
|
OpLoopMerge %59 %60 None
|
||||||
%75 = OpIAdd %uint %74 %uint_1
|
OpBranch %61
|
||||||
OpStore %i %75
|
%61 = OpLabel
|
||||||
OpBranch %56
|
%63 = OpLoad %uint %i
|
||||||
%57 = OpLabel
|
%64 = OpULessThan %bool %63 %uint_1
|
||||||
|
%62 = OpLogicalNot %bool %64
|
||||||
|
OpSelectionMerge %66 None
|
||||||
|
OpBranchConditional %62 %67 %66
|
||||||
|
%67 = OpLabel
|
||||||
|
OpBranch %59
|
||||||
|
%66 = OpLabel
|
||||||
|
%68 = OpLoad %uint %flatIndex
|
||||||
|
%69 = OpLoad %uint %i
|
||||||
|
%70 = OpIAdd %uint %68 %69
|
||||||
|
%72 = OpAccessChain %_ptr_StorageBuffer_float %result %uint_0 %70
|
||||||
|
%74 = OpAccessChain %_ptr_Function_float %texel %uint_0
|
||||||
|
%75 = OpLoad %float %74
|
||||||
|
OpStore %72 %75
|
||||||
|
OpBranch %60
|
||||||
|
%60 = OpLabel
|
||||||
|
%76 = OpLoad %uint %i
|
||||||
|
%77 = OpIAdd %uint %76 %uint_1
|
||||||
|
OpStore %i %77
|
||||||
|
OpBranch %58
|
||||||
|
%59 = OpLabel
|
||||||
OpReturn
|
OpReturn
|
||||||
OpFunctionEnd
|
OpFunctionEnd
|
||||||
|
|
||||||
|
|
||||||
Validation Failure:
|
|
||||||
1:1: Expected Constituents to be scalars or vectors of the same type as Result Type components
|
|
||||||
%51 = OpCompositeConstruct %v3int %48 %49 %int_0
|
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ void main(tint_symbol_2 tint_symbol_1) {
|
||||||
if ((tint_tmp_2)) {
|
if ((tint_tmp_2)) {
|
||||||
bool tint_tmp_5 = success;
|
bool tint_tmp_5 = success;
|
||||||
if (tint_tmp_5) {
|
if (tint_tmp_5) {
|
||||||
tint_tmp_5 = all((tint_symbol.Load(int3(dstTexCoord, 0)) == nonCoveredColor));
|
tint_tmp_5 = all((tint_symbol.Load(int3(int2(dstTexCoord), 0)) == nonCoveredColor));
|
||||||
}
|
}
|
||||||
success = (tint_tmp_5);
|
success = (tint_tmp_5);
|
||||||
} else {
|
} else {
|
||||||
|
@ -48,8 +48,8 @@ void main(tint_symbol_2 tint_symbol_1) {
|
||||||
if ((uniforms[0].x == 1u)) {
|
if ((uniforms[0].x == 1u)) {
|
||||||
srcTexCoord.y = ((uint(srcSize.y) - srcTexCoord.y) - 1u);
|
srcTexCoord.y = ((uint(srcSize.y) - srcTexCoord.y) - 1u);
|
||||||
}
|
}
|
||||||
const float4 srcColor = src.Load(int3(srcTexCoord, 0));
|
const float4 srcColor = src.Load(int3(int2(srcTexCoord), 0));
|
||||||
const float4 dstColor = tint_symbol.Load(int3(dstTexCoord, 0));
|
const float4 dstColor = tint_symbol.Load(int3(int2(dstTexCoord), 0));
|
||||||
if ((uniforms[0].y == 2u)) {
|
if ((uniforms[0].y == 2u)) {
|
||||||
bool tint_tmp_7 = success;
|
bool tint_tmp_7 = success;
|
||||||
if (tint_tmp_7) {
|
if (tint_tmp_7) {
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
; Test: ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.0
|
||||||
|
; Generator: Khronos SPIR-V Tools Assembler; 0
|
||||||
|
; Bound: 1001
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpCapability Sampled1D
|
||||||
|
OpCapability Image1D
|
||||||
|
OpCapability StorageImageExtendedFormats
|
||||||
|
OpCapability ImageQuery
|
||||||
|
OpMemoryModel Logical Simple
|
||||||
|
OpEntryPoint Fragment %100 "main"
|
||||||
|
OpExecutionMode %100 OriginUpperLeft
|
||||||
|
OpName %float_var "float_var"
|
||||||
|
OpName %ptr_float "ptr_float"
|
||||||
|
OpName %i1 "i1"
|
||||||
|
OpName %vi12 "vi12"
|
||||||
|
OpName %vi123 "vi123"
|
||||||
|
OpName %vi1234 "vi1234"
|
||||||
|
OpName %u1 "u1"
|
||||||
|
OpName %vu12 "vu12"
|
||||||
|
OpName %vu123 "vu123"
|
||||||
|
OpName %vu1234 "vu1234"
|
||||||
|
OpName %f1 "f1"
|
||||||
|
OpName %vf12 "vf12"
|
||||||
|
OpName %vf123 "vf123"
|
||||||
|
OpName %vf1234 "vf1234"
|
||||||
|
OpDecorate %10 DescriptorSet 0
|
||||||
|
OpDecorate %10 Binding 0
|
||||||
|
OpDecorate %20 DescriptorSet 2
|
||||||
|
OpDecorate %20 Binding 1
|
||||||
|
OpDecorate %30 DescriptorSet 0
|
||||||
|
OpDecorate %30 Binding 1
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%17 = OpTypeFunction %void
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%int_1 = OpConstant %int 1
|
||||||
|
%int_2 = OpConstant %int 2
|
||||||
|
%int_3 = OpConstant %int 3
|
||||||
|
%int_4 = OpConstant %int 4
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%uint_2 = OpConstant %uint 2
|
||||||
|
%uint_3 = OpConstant %uint 3
|
||||||
|
%uint_4 = OpConstant %uint 4
|
||||||
|
%uint_100 = OpConstant %uint 100
|
||||||
|
%v2int = OpTypeVector %int 2
|
||||||
|
%v3int = OpTypeVector %int 3
|
||||||
|
%v4int = OpTypeVector %int 4
|
||||||
|
%v2uint = OpTypeVector %uint 2
|
||||||
|
%v3uint = OpTypeVector %uint 3
|
||||||
|
%v4uint = OpTypeVector %uint 4
|
||||||
|
%v2float = OpTypeVector %float 2
|
||||||
|
%v3float = OpTypeVector %float 3
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%43 = OpConstantNull %float
|
||||||
|
%float_0 = OpConstant %float 0
|
||||||
|
%float_1 = OpConstant %float 1
|
||||||
|
%float_2 = OpConstant %float 2
|
||||||
|
%float_3 = OpConstant %float 3
|
||||||
|
%float_4 = OpConstant %float 4
|
||||||
|
%float_7 = OpConstant %float 7
|
||||||
|
%50 = OpConstantNull %v2float
|
||||||
|
%51 = OpConstantNull %v3float
|
||||||
|
%52 = OpConstantNull %v4float
|
||||||
|
%53 = OpConstantComposite %v2int %int_1 %int_2
|
||||||
|
%54 = OpConstantComposite %v3int %int_1 %int_2 %int_3
|
||||||
|
%55 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
|
||||||
|
%56 = OpConstantComposite %v2uint %uint_1 %uint_2
|
||||||
|
%57 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
|
||||||
|
%58 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
|
||||||
|
%59 = OpConstantComposite %v2float %float_1 %float_2
|
||||||
|
%60 = OpConstantComposite %v2float %float_2 %float_1
|
||||||
|
%61 = OpConstantComposite %v3float %float_1 %float_2 %float_3
|
||||||
|
%62 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
|
||||||
|
%float_0_200000003 = OpConstant %float 0.200000003
|
||||||
|
%64 = OpTypeSampler
|
||||||
|
%_ptr_UniformConstant_64 = OpTypePointer UniformConstant %64
|
||||||
|
%66 = OpTypeImage %float 2D 0 1 0 1 Unknown
|
||||||
|
%_ptr_UniformConstant_66 = OpTypePointer UniformConstant %66
|
||||||
|
%68 = OpTypeSampledImage %66
|
||||||
|
%ptr_float = OpTypePointer Function %float
|
||||||
|
%10 = OpVariable %_ptr_UniformConstant_64 UniformConstant
|
||||||
|
%20 = OpVariable %_ptr_UniformConstant_66 UniformConstant
|
||||||
|
%30 = OpVariable %_ptr_UniformConstant_64 UniformConstant
|
||||||
|
%100 = OpFunction %void None %17
|
||||||
|
%69 = OpLabel
|
||||||
|
%float_var = OpVariable %ptr_float Function
|
||||||
|
%i1 = OpCopyObject %int %int_1
|
||||||
|
%vi12 = OpCopyObject %v2int %53
|
||||||
|
%vi123 = OpCopyObject %v3int %54
|
||||||
|
%vi1234 = OpCopyObject %v4int %55
|
||||||
|
%u1 = OpCopyObject %uint %uint_1
|
||||||
|
%vu12 = OpCopyObject %v2uint %56
|
||||||
|
%vu123 = OpCopyObject %v3uint %57
|
||||||
|
%vu1234 = OpCopyObject %v4uint %58
|
||||||
|
%f1 = OpCopyObject %float %float_1
|
||||||
|
%vf12 = OpCopyObject %v2float %59
|
||||||
|
%vf123 = OpCopyObject %v3float %61
|
||||||
|
%vf1234 = OpCopyObject %v4float %62
|
||||||
|
%70 = OpLoad %64 %10
|
||||||
|
%71 = OpLoad %66 %20
|
||||||
|
%72 = OpSampledImage %68 %71 %70
|
||||||
|
%73 = OpImageFetch %v4float %71 %vu123
|
||||||
|
%1000 = OpCopyObject %uint %uint_0
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
SamplerState x_10 : register(s0, space0);
|
||||||
|
Texture2DArray<float4> x_20 : register(t1, space2);
|
||||||
|
SamplerState x_30 : register(s1, space0);
|
||||||
|
|
||||||
|
void main_1() {
|
||||||
|
float float_var = 0.0f;
|
||||||
|
const int i1 = 1;
|
||||||
|
const int2 vi12 = int2(1, 2);
|
||||||
|
const int3 vi123 = int3(1, 2, 3);
|
||||||
|
const int4 vi1234 = int4(1, 2, 3, 4);
|
||||||
|
const uint u1 = 1u;
|
||||||
|
const uint2 vu12 = uint2(1u, 2u);
|
||||||
|
const uint3 vu123 = uint3(1u, 2u, 3u);
|
||||||
|
const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
|
||||||
|
const float f1 = 1.0f;
|
||||||
|
const float2 vf12 = float2(1.0f, 2.0f);
|
||||||
|
const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
|
||||||
|
const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
|
||||||
|
const float4 x_73 = x_20.Load(int4(int3(int2(vu123.xy), int(vu123.z)), 0));
|
||||||
|
const uint x_1000 = 0u;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
main_1();
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,86 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 62
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main"
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpName %x_10 "x_10"
|
||||||
|
OpName %x_20 "x_20"
|
||||||
|
OpName %x_30 "x_30"
|
||||||
|
OpName %main_1 "main_1"
|
||||||
|
OpName %float_var "float_var"
|
||||||
|
OpName %main "main"
|
||||||
|
OpDecorate %x_10 DescriptorSet 0
|
||||||
|
OpDecorate %x_10 Binding 0
|
||||||
|
OpDecorate %x_20 DescriptorSet 2
|
||||||
|
OpDecorate %x_20 Binding 1
|
||||||
|
OpDecorate %x_30 DescriptorSet 0
|
||||||
|
OpDecorate %x_30 Binding 1
|
||||||
|
%3 = OpTypeSampler
|
||||||
|
%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
|
||||||
|
%x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%6 = OpTypeImage %float 2D 0 1 0 1 Unknown
|
||||||
|
%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
|
||||||
|
%x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
|
||||||
|
%x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%9 = OpTypeFunction %void
|
||||||
|
%_ptr_Function_float = OpTypePointer Function %float
|
||||||
|
%15 = OpConstantNull %float
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_1 = OpConstant %int 1
|
||||||
|
%v2int = OpTypeVector %int 2
|
||||||
|
%int_2 = OpConstant %int 2
|
||||||
|
%20 = OpConstantComposite %v2int %int_1 %int_2
|
||||||
|
%v3int = OpTypeVector %int 3
|
||||||
|
%int_3 = OpConstant %int 3
|
||||||
|
%23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
|
||||||
|
%v4int = OpTypeVector %int 4
|
||||||
|
%int_4 = OpConstant %int 4
|
||||||
|
%26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%v2uint = OpTypeVector %uint 2
|
||||||
|
%uint_2 = OpConstant %uint 2
|
||||||
|
%31 = OpConstantComposite %v2uint %uint_1 %uint_2
|
||||||
|
%v3uint = OpTypeVector %uint 3
|
||||||
|
%uint_3 = OpConstant %uint 3
|
||||||
|
%34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
|
||||||
|
%v4uint = OpTypeVector %uint 4
|
||||||
|
%uint_4 = OpConstant %uint 4
|
||||||
|
%37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
|
||||||
|
%float_1 = OpConstant %float 1
|
||||||
|
%v2float = OpTypeVector %float 2
|
||||||
|
%float_2 = OpConstant %float 2
|
||||||
|
%41 = OpConstantComposite %v2float %float_1 %float_2
|
||||||
|
%v3float = OpTypeVector %float 3
|
||||||
|
%float_3 = OpConstant %float 3
|
||||||
|
%44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%float_4 = OpConstant %float 4
|
||||||
|
%47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%main_1 = OpFunction %void None %9
|
||||||
|
%12 = OpLabel
|
||||||
|
%float_var = OpVariable %_ptr_Function_float Function %15
|
||||||
|
%49 = OpLoad %6 %x_20
|
||||||
|
%51 = OpVectorShuffle %v2uint %34 %34 0 1
|
||||||
|
%50 = OpBitcast %v2int %51
|
||||||
|
%52 = OpCompositeExtract %int %50 0
|
||||||
|
%53 = OpCompositeExtract %int %50 1
|
||||||
|
%55 = OpCompositeExtract %uint %34 2
|
||||||
|
%54 = OpBitcast %int %55
|
||||||
|
%56 = OpCompositeConstruct %v3int %52 %53 %54
|
||||||
|
%48 = OpImageFetch %v4float %49 %56 Lod %int_0
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %9
|
||||||
|
%60 = OpLabel
|
||||||
|
%61 = OpFunctionCall %void %main_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,110 @@
|
||||||
|
; Test: ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.0
|
||||||
|
; Generator: Khronos SPIR-V Tools Assembler; 0
|
||||||
|
; Bound: 1001
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpCapability Sampled1D
|
||||||
|
OpCapability Image1D
|
||||||
|
OpCapability StorageImageExtendedFormats
|
||||||
|
OpCapability ImageQuery
|
||||||
|
OpMemoryModel Logical Simple
|
||||||
|
OpEntryPoint Fragment %100 "main"
|
||||||
|
OpExecutionMode %100 OriginUpperLeft
|
||||||
|
OpName %float_var "float_var"
|
||||||
|
OpName %ptr_float "ptr_float"
|
||||||
|
OpName %i1 "i1"
|
||||||
|
OpName %vi12 "vi12"
|
||||||
|
OpName %vi123 "vi123"
|
||||||
|
OpName %vi1234 "vi1234"
|
||||||
|
OpName %u1 "u1"
|
||||||
|
OpName %vu12 "vu12"
|
||||||
|
OpName %vu123 "vu123"
|
||||||
|
OpName %vu1234 "vu1234"
|
||||||
|
OpName %f1 "f1"
|
||||||
|
OpName %vf12 "vf12"
|
||||||
|
OpName %vf123 "vf123"
|
||||||
|
OpName %vf1234 "vf1234"
|
||||||
|
OpDecorate %10 DescriptorSet 0
|
||||||
|
OpDecorate %10 Binding 0
|
||||||
|
OpDecorate %20 DescriptorSet 2
|
||||||
|
OpDecorate %20 Binding 1
|
||||||
|
OpDecorate %30 DescriptorSet 0
|
||||||
|
OpDecorate %30 Binding 1
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%17 = OpTypeFunction %void
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%int_1 = OpConstant %int 1
|
||||||
|
%int_2 = OpConstant %int 2
|
||||||
|
%int_3 = OpConstant %int 3
|
||||||
|
%int_4 = OpConstant %int 4
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%uint_2 = OpConstant %uint 2
|
||||||
|
%uint_3 = OpConstant %uint 3
|
||||||
|
%uint_4 = OpConstant %uint 4
|
||||||
|
%uint_100 = OpConstant %uint 100
|
||||||
|
%v2int = OpTypeVector %int 2
|
||||||
|
%v3int = OpTypeVector %int 3
|
||||||
|
%v4int = OpTypeVector %int 4
|
||||||
|
%v2uint = OpTypeVector %uint 2
|
||||||
|
%v3uint = OpTypeVector %uint 3
|
||||||
|
%v4uint = OpTypeVector %uint 4
|
||||||
|
%v2float = OpTypeVector %float 2
|
||||||
|
%v3float = OpTypeVector %float 3
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%43 = OpConstantNull %float
|
||||||
|
%float_0 = OpConstant %float 0
|
||||||
|
%float_1 = OpConstant %float 1
|
||||||
|
%float_2 = OpConstant %float 2
|
||||||
|
%float_3 = OpConstant %float 3
|
||||||
|
%float_4 = OpConstant %float 4
|
||||||
|
%float_7 = OpConstant %float 7
|
||||||
|
%50 = OpConstantNull %v2float
|
||||||
|
%51 = OpConstantNull %v3float
|
||||||
|
%52 = OpConstantNull %v4float
|
||||||
|
%53 = OpConstantComposite %v2int %int_1 %int_2
|
||||||
|
%54 = OpConstantComposite %v3int %int_1 %int_2 %int_3
|
||||||
|
%55 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
|
||||||
|
%56 = OpConstantComposite %v2uint %uint_1 %uint_2
|
||||||
|
%57 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
|
||||||
|
%58 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
|
||||||
|
%59 = OpConstantComposite %v2float %float_1 %float_2
|
||||||
|
%60 = OpConstantComposite %v2float %float_2 %float_1
|
||||||
|
%61 = OpConstantComposite %v3float %float_1 %float_2 %float_3
|
||||||
|
%62 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
|
||||||
|
%float_0_200000003 = OpConstant %float 0.200000003
|
||||||
|
%64 = OpTypeSampler
|
||||||
|
%_ptr_UniformConstant_64 = OpTypePointer UniformConstant %64
|
||||||
|
%66 = OpTypeImage %float 2D 0 1 0 2 R32f
|
||||||
|
%_ptr_UniformConstant_66 = OpTypePointer UniformConstant %66
|
||||||
|
%ptr_float = OpTypePointer Function %float
|
||||||
|
%10 = OpVariable %_ptr_UniformConstant_64 UniformConstant
|
||||||
|
%20 = OpVariable %_ptr_UniformConstant_66 UniformConstant
|
||||||
|
%30 = OpVariable %_ptr_UniformConstant_64 UniformConstant
|
||||||
|
%100 = OpFunction %void None %17
|
||||||
|
%68 = OpLabel
|
||||||
|
%float_var = OpVariable %ptr_float Function
|
||||||
|
%i1 = OpCopyObject %int %int_1
|
||||||
|
%vi12 = OpCopyObject %v2int %53
|
||||||
|
%vi123 = OpCopyObject %v3int %54
|
||||||
|
%vi1234 = OpCopyObject %v4int %55
|
||||||
|
%u1 = OpCopyObject %uint %uint_1
|
||||||
|
%vu12 = OpCopyObject %v2uint %56
|
||||||
|
%vu123 = OpCopyObject %v3uint %57
|
||||||
|
%vu1234 = OpCopyObject %v4uint %58
|
||||||
|
%f1 = OpCopyObject %float %float_1
|
||||||
|
%vf12 = OpCopyObject %v2float %59
|
||||||
|
%vf123 = OpCopyObject %v3float %61
|
||||||
|
%vf1234 = OpCopyObject %v4float %62
|
||||||
|
%69 = OpLoad %64 %10
|
||||||
|
%70 = OpLoad %66 %20
|
||||||
|
%71 = OpImageRead %v4float %70 %vu123
|
||||||
|
%1000 = OpCopyObject %uint %uint_0
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
warning: use of deprecated intrinsic
|
||||||
|
SamplerState x_10 : register(s0, space0);
|
||||||
|
Texture2DArray<float4> x_20 : register(t1, space2);
|
||||||
|
SamplerState x_30 : register(s1, space0);
|
||||||
|
|
||||||
|
void main_1() {
|
||||||
|
float float_var = 0.0f;
|
||||||
|
const int i1 = 1;
|
||||||
|
const int2 vi12 = int2(1, 2);
|
||||||
|
const int3 vi123 = int3(1, 2, 3);
|
||||||
|
const int4 vi1234 = int4(1, 2, 3, 4);
|
||||||
|
const uint u1 = 1u;
|
||||||
|
const uint2 vu12 = uint2(1u, 2u);
|
||||||
|
const uint3 vu123 = uint3(1u, 2u, 3u);
|
||||||
|
const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
|
||||||
|
const float f1 = 1.0f;
|
||||||
|
const float2 vf12 = float2(1.0f, 2.0f);
|
||||||
|
const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
|
||||||
|
const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
|
||||||
|
const float4 x_71 = x_20.Load(int4(int3(int2(vu123.xy), int(vu123.z)), 0));
|
||||||
|
const uint x_1000 = 0u;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
main_1();
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
warning: use of deprecated intrinsic
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 61
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main"
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpName %x_10 "x_10"
|
||||||
|
OpName %x_20 "x_20"
|
||||||
|
OpName %x_30 "x_30"
|
||||||
|
OpName %main_1 "main_1"
|
||||||
|
OpName %float_var "float_var"
|
||||||
|
OpName %main "main"
|
||||||
|
OpDecorate %x_10 DescriptorSet 0
|
||||||
|
OpDecorate %x_10 Binding 0
|
||||||
|
OpDecorate %x_20 NonWritable
|
||||||
|
OpDecorate %x_20 DescriptorSet 2
|
||||||
|
OpDecorate %x_20 Binding 1
|
||||||
|
OpDecorate %x_30 DescriptorSet 0
|
||||||
|
OpDecorate %x_30 Binding 1
|
||||||
|
%3 = OpTypeSampler
|
||||||
|
%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
|
||||||
|
%x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%6 = OpTypeImage %float 2D 0 1 0 2 R32f
|
||||||
|
%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
|
||||||
|
%x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
|
||||||
|
%x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%9 = OpTypeFunction %void
|
||||||
|
%_ptr_Function_float = OpTypePointer Function %float
|
||||||
|
%15 = OpConstantNull %float
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_1 = OpConstant %int 1
|
||||||
|
%v2int = OpTypeVector %int 2
|
||||||
|
%int_2 = OpConstant %int 2
|
||||||
|
%20 = OpConstantComposite %v2int %int_1 %int_2
|
||||||
|
%v3int = OpTypeVector %int 3
|
||||||
|
%int_3 = OpConstant %int 3
|
||||||
|
%23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
|
||||||
|
%v4int = OpTypeVector %int 4
|
||||||
|
%int_4 = OpConstant %int 4
|
||||||
|
%26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%v2uint = OpTypeVector %uint 2
|
||||||
|
%uint_2 = OpConstant %uint 2
|
||||||
|
%31 = OpConstantComposite %v2uint %uint_1 %uint_2
|
||||||
|
%v3uint = OpTypeVector %uint 3
|
||||||
|
%uint_3 = OpConstant %uint 3
|
||||||
|
%34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
|
||||||
|
%v4uint = OpTypeVector %uint 4
|
||||||
|
%uint_4 = OpConstant %uint 4
|
||||||
|
%37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
|
||||||
|
%float_1 = OpConstant %float 1
|
||||||
|
%v2float = OpTypeVector %float 2
|
||||||
|
%float_2 = OpConstant %float 2
|
||||||
|
%41 = OpConstantComposite %v2float %float_1 %float_2
|
||||||
|
%v3float = OpTypeVector %float 3
|
||||||
|
%float_3 = OpConstant %float 3
|
||||||
|
%44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%float_4 = OpConstant %float 4
|
||||||
|
%47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%main_1 = OpFunction %void None %9
|
||||||
|
%12 = OpLabel
|
||||||
|
%float_var = OpVariable %_ptr_Function_float Function %15
|
||||||
|
%49 = OpLoad %6 %x_20
|
||||||
|
%51 = OpVectorShuffle %v2uint %34 %34 0 1
|
||||||
|
%50 = OpBitcast %v2int %51
|
||||||
|
%52 = OpCompositeExtract %int %50 0
|
||||||
|
%53 = OpCompositeExtract %int %50 1
|
||||||
|
%55 = OpCompositeExtract %uint %34 2
|
||||||
|
%54 = OpBitcast %int %55
|
||||||
|
%56 = OpCompositeConstruct %v3int %52 %53 %54
|
||||||
|
%48 = OpImageRead %v4float %49 %56
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %9
|
||||||
|
%59 = OpLabel
|
||||||
|
%60 = OpFunctionCall %void %main_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,110 @@
|
||||||
|
; Test: ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.0
|
||||||
|
; Generator: Khronos SPIR-V Tools Assembler; 0
|
||||||
|
; Bound: 1001
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpCapability Sampled1D
|
||||||
|
OpCapability Image1D
|
||||||
|
OpCapability StorageImageExtendedFormats
|
||||||
|
OpCapability ImageQuery
|
||||||
|
OpMemoryModel Logical Simple
|
||||||
|
OpEntryPoint Fragment %100 "main"
|
||||||
|
OpExecutionMode %100 OriginUpperLeft
|
||||||
|
OpName %float_var "float_var"
|
||||||
|
OpName %ptr_float "ptr_float"
|
||||||
|
OpName %i1 "i1"
|
||||||
|
OpName %vi12 "vi12"
|
||||||
|
OpName %vi123 "vi123"
|
||||||
|
OpName %vi1234 "vi1234"
|
||||||
|
OpName %u1 "u1"
|
||||||
|
OpName %vu12 "vu12"
|
||||||
|
OpName %vu123 "vu123"
|
||||||
|
OpName %vu1234 "vu1234"
|
||||||
|
OpName %f1 "f1"
|
||||||
|
OpName %vf12 "vf12"
|
||||||
|
OpName %vf123 "vf123"
|
||||||
|
OpName %vf1234 "vf1234"
|
||||||
|
OpDecorate %10 DescriptorSet 0
|
||||||
|
OpDecorate %10 Binding 0
|
||||||
|
OpDecorate %20 DescriptorSet 2
|
||||||
|
OpDecorate %20 Binding 1
|
||||||
|
OpDecorate %30 DescriptorSet 0
|
||||||
|
OpDecorate %30 Binding 1
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%17 = OpTypeFunction %void
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%int_1 = OpConstant %int 1
|
||||||
|
%int_2 = OpConstant %int 2
|
||||||
|
%int_3 = OpConstant %int 3
|
||||||
|
%int_4 = OpConstant %int 4
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%uint_2 = OpConstant %uint 2
|
||||||
|
%uint_3 = OpConstant %uint 3
|
||||||
|
%uint_4 = OpConstant %uint 4
|
||||||
|
%uint_100 = OpConstant %uint 100
|
||||||
|
%v2int = OpTypeVector %int 2
|
||||||
|
%v3int = OpTypeVector %int 3
|
||||||
|
%v4int = OpTypeVector %int 4
|
||||||
|
%v2uint = OpTypeVector %uint 2
|
||||||
|
%v3uint = OpTypeVector %uint 3
|
||||||
|
%v4uint = OpTypeVector %uint 4
|
||||||
|
%v2float = OpTypeVector %float 2
|
||||||
|
%v3float = OpTypeVector %float 3
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%43 = OpConstantNull %float
|
||||||
|
%float_0 = OpConstant %float 0
|
||||||
|
%float_1 = OpConstant %float 1
|
||||||
|
%float_2 = OpConstant %float 2
|
||||||
|
%float_3 = OpConstant %float 3
|
||||||
|
%float_4 = OpConstant %float 4
|
||||||
|
%float_7 = OpConstant %float 7
|
||||||
|
%50 = OpConstantNull %v2float
|
||||||
|
%51 = OpConstantNull %v3float
|
||||||
|
%52 = OpConstantNull %v4float
|
||||||
|
%53 = OpConstantComposite %v2int %int_1 %int_2
|
||||||
|
%54 = OpConstantComposite %v3int %int_1 %int_2 %int_3
|
||||||
|
%55 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
|
||||||
|
%56 = OpConstantComposite %v2uint %uint_1 %uint_2
|
||||||
|
%57 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
|
||||||
|
%58 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
|
||||||
|
%59 = OpConstantComposite %v2float %float_1 %float_2
|
||||||
|
%60 = OpConstantComposite %v2float %float_2 %float_1
|
||||||
|
%61 = OpConstantComposite %v3float %float_1 %float_2 %float_3
|
||||||
|
%62 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
|
||||||
|
%float_0_200000003 = OpConstant %float 0.200000003
|
||||||
|
%64 = OpTypeSampler
|
||||||
|
%_ptr_UniformConstant_64 = OpTypePointer UniformConstant %64
|
||||||
|
%66 = OpTypeImage %float 2D 0 1 0 2 R32f
|
||||||
|
%_ptr_UniformConstant_66 = OpTypePointer UniformConstant %66
|
||||||
|
%ptr_float = OpTypePointer Function %float
|
||||||
|
%10 = OpVariable %_ptr_UniformConstant_64 UniformConstant
|
||||||
|
%20 = OpVariable %_ptr_UniformConstant_66 UniformConstant
|
||||||
|
%30 = OpVariable %_ptr_UniformConstant_64 UniformConstant
|
||||||
|
%100 = OpFunction %void None %17
|
||||||
|
%68 = OpLabel
|
||||||
|
%float_var = OpVariable %ptr_float Function
|
||||||
|
%i1 = OpCopyObject %int %int_1
|
||||||
|
%vi12 = OpCopyObject %v2int %53
|
||||||
|
%vi123 = OpCopyObject %v3int %54
|
||||||
|
%vi1234 = OpCopyObject %v4int %55
|
||||||
|
%u1 = OpCopyObject %uint %uint_1
|
||||||
|
%vu12 = OpCopyObject %v2uint %56
|
||||||
|
%vu123 = OpCopyObject %v3uint %57
|
||||||
|
%vu1234 = OpCopyObject %v4uint %58
|
||||||
|
%f1 = OpCopyObject %float %float_1
|
||||||
|
%vf12 = OpCopyObject %v2float %59
|
||||||
|
%vf123 = OpCopyObject %v3float %61
|
||||||
|
%vf1234 = OpCopyObject %v4float %62
|
||||||
|
%69 = OpLoad %64 %10
|
||||||
|
%70 = OpLoad %66 %20
|
||||||
|
OpImageWrite %70 %vu123 %vf1234
|
||||||
|
%1000 = OpCopyObject %uint %uint_0
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
SamplerState x_10 : register(s0, space0);
|
||||||
|
RWTexture2DArray<float4> x_20 : register(u1, space2);
|
||||||
|
SamplerState x_30 : register(s1, space0);
|
||||||
|
|
||||||
|
void main_1() {
|
||||||
|
float float_var = 0.0f;
|
||||||
|
const int i1 = 1;
|
||||||
|
const int2 vi12 = int2(1, 2);
|
||||||
|
const int3 vi123 = int3(1, 2, 3);
|
||||||
|
const int4 vi1234 = int4(1, 2, 3, 4);
|
||||||
|
const uint u1 = 1u;
|
||||||
|
const uint2 vu12 = uint2(1u, 2u);
|
||||||
|
const uint3 vu123 = uint3(1u, 2u, 3u);
|
||||||
|
const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
|
||||||
|
const float f1 = 1.0f;
|
||||||
|
const float2 vf12 = float2(1.0f, 2.0f);
|
||||||
|
const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
|
||||||
|
const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
|
||||||
|
x_20[int3(int2(vu123.xy), int(vu123.z))] = vf1234;
|
||||||
|
const uint x_1000 = 0u;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
main_1();
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,86 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 61
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main"
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpName %x_10 "x_10"
|
||||||
|
OpName %x_20 "x_20"
|
||||||
|
OpName %x_30 "x_30"
|
||||||
|
OpName %main_1 "main_1"
|
||||||
|
OpName %float_var "float_var"
|
||||||
|
OpName %main "main"
|
||||||
|
OpDecorate %x_10 DescriptorSet 0
|
||||||
|
OpDecorate %x_10 Binding 0
|
||||||
|
OpDecorate %x_20 NonReadable
|
||||||
|
OpDecorate %x_20 DescriptorSet 2
|
||||||
|
OpDecorate %x_20 Binding 1
|
||||||
|
OpDecorate %x_30 DescriptorSet 0
|
||||||
|
OpDecorate %x_30 Binding 1
|
||||||
|
%3 = OpTypeSampler
|
||||||
|
%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
|
||||||
|
%x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%6 = OpTypeImage %float 2D 0 1 0 2 R32f
|
||||||
|
%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
|
||||||
|
%x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
|
||||||
|
%x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%9 = OpTypeFunction %void
|
||||||
|
%_ptr_Function_float = OpTypePointer Function %float
|
||||||
|
%15 = OpConstantNull %float
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_1 = OpConstant %int 1
|
||||||
|
%v2int = OpTypeVector %int 2
|
||||||
|
%int_2 = OpConstant %int 2
|
||||||
|
%20 = OpConstantComposite %v2int %int_1 %int_2
|
||||||
|
%v3int = OpTypeVector %int 3
|
||||||
|
%int_3 = OpConstant %int 3
|
||||||
|
%23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
|
||||||
|
%v4int = OpTypeVector %int 4
|
||||||
|
%int_4 = OpConstant %int 4
|
||||||
|
%26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%v2uint = OpTypeVector %uint 2
|
||||||
|
%uint_2 = OpConstant %uint 2
|
||||||
|
%31 = OpConstantComposite %v2uint %uint_1 %uint_2
|
||||||
|
%v3uint = OpTypeVector %uint 3
|
||||||
|
%uint_3 = OpConstant %uint 3
|
||||||
|
%34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
|
||||||
|
%v4uint = OpTypeVector %uint 4
|
||||||
|
%uint_4 = OpConstant %uint 4
|
||||||
|
%37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
|
||||||
|
%float_1 = OpConstant %float 1
|
||||||
|
%v2float = OpTypeVector %float 2
|
||||||
|
%float_2 = OpConstant %float 2
|
||||||
|
%41 = OpConstantComposite %v2float %float_1 %float_2
|
||||||
|
%v3float = OpTypeVector %float 3
|
||||||
|
%float_3 = OpConstant %float 3
|
||||||
|
%44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%float_4 = OpConstant %float 4
|
||||||
|
%47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%main_1 = OpFunction %void None %9
|
||||||
|
%12 = OpLabel
|
||||||
|
%float_var = OpVariable %_ptr_Function_float Function %15
|
||||||
|
%49 = OpLoad %6 %x_20
|
||||||
|
%51 = OpVectorShuffle %v2uint %34 %34 0 1
|
||||||
|
%50 = OpBitcast %v2int %51
|
||||||
|
%52 = OpCompositeExtract %int %50 0
|
||||||
|
%53 = OpCompositeExtract %int %50 1
|
||||||
|
%55 = OpCompositeExtract %uint %34 2
|
||||||
|
%54 = OpBitcast %int %55
|
||||||
|
%56 = OpCompositeConstruct %v3int %52 %53 %54
|
||||||
|
OpImageWrite %49 %56 %47
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %9
|
||||||
|
%59 = OpLabel
|
||||||
|
%60 = OpFunctionCall %void %main_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,27 @@
|
||||||
|
SamplerState x_10 : register(s0, space0);
|
||||||
|
Texture2D<float4> x_20 : register(t1, space2);
|
||||||
|
SamplerState x_30 : register(s1, space0);
|
||||||
|
|
||||||
|
void main_1() {
|
||||||
|
float float_var = 0.0f;
|
||||||
|
const int i1 = 1;
|
||||||
|
const int2 vi12 = int2(1, 2);
|
||||||
|
const int3 vi123 = int3(1, 2, 3);
|
||||||
|
const int4 vi1234 = int4(1, 2, 3, 4);
|
||||||
|
const uint u1 = 1u;
|
||||||
|
const uint2 vu12 = uint2(1u, 2u);
|
||||||
|
const uint3 vu123 = uint3(1u, 2u, 3u);
|
||||||
|
const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
|
||||||
|
const float f1 = 1.0f;
|
||||||
|
const float2 vf12 = float2(1.0f, 2.0f);
|
||||||
|
const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
|
||||||
|
const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
|
||||||
|
const float4 x_73 = x_20.Load(int3(int2(vu12), 0));
|
||||||
|
const uint x_1000 = 0u;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
main_1();
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
warning: use of deprecated intrinsic
|
||||||
|
SamplerState x_10 : register(s0, space0);
|
||||||
|
Texture2D<float4> x_20 : register(t1, space2);
|
||||||
|
SamplerState x_30 : register(s1, space0);
|
||||||
|
|
||||||
|
void main_1() {
|
||||||
|
float float_var = 0.0f;
|
||||||
|
const int i1 = 1;
|
||||||
|
const int2 vi12 = int2(1, 2);
|
||||||
|
const int3 vi123 = int3(1, 2, 3);
|
||||||
|
const int4 vi1234 = int4(1, 2, 3, 4);
|
||||||
|
const uint u1 = 1u;
|
||||||
|
const uint2 vu12 = uint2(1u, 2u);
|
||||||
|
const uint3 vu123 = uint3(1u, 2u, 3u);
|
||||||
|
const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
|
||||||
|
const float f1 = 1.0f;
|
||||||
|
const float2 vf12 = float2(1.0f, 2.0f);
|
||||||
|
const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
|
||||||
|
const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
|
||||||
|
const float4 x_71 = x_20.Load(int3(int2(vu12), 0));
|
||||||
|
const uint x_1000 = 0u;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
main_1();
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
warning: use of deprecated intrinsic
|
||||||
|
SamplerState x_10 : register(s0, space0);
|
||||||
|
Texture2DArray<float4> x_20 : register(t1, space2);
|
||||||
|
SamplerState x_30 : register(s1, space0);
|
||||||
|
|
||||||
|
void main_1() {
|
||||||
|
const float f1 = 1.0f;
|
||||||
|
const float2 vf12 = float2(1.0f, 2.0f);
|
||||||
|
const float2 vf21 = float2(2.0f, 1.0f);
|
||||||
|
const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
|
||||||
|
const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
|
||||||
|
const int i1 = 1;
|
||||||
|
const int2 vi12 = int2(1, 2);
|
||||||
|
const int3 vi123 = int3(1, 2, 3);
|
||||||
|
const int4 vi1234 = int4(1, 2, 3, 4);
|
||||||
|
const uint u1 = 1u;
|
||||||
|
const uint2 vu12 = uint2(1u, 2u);
|
||||||
|
const uint3 vu123 = uint3(1u, 2u, 3u);
|
||||||
|
const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
|
||||||
|
const float coords1 = 1.0f;
|
||||||
|
const float2 coords12 = vf12;
|
||||||
|
const float3 coords123 = vf123;
|
||||||
|
const float4 coords1234 = vf1234;
|
||||||
|
int3 tint_tmp;
|
||||||
|
x_20.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||||
|
int3 tint_tmp_1;
|
||||||
|
x_20.GetDimensions(tint_tmp_1.x, tint_tmp_1.y, tint_tmp_1.z);
|
||||||
|
const int3 x_99 = int3(tint_tmp.xy, tint_tmp_1.z);
|
||||||
|
const float4 x_98 = x_20.Load(int4(int3(vi123.xy, vi123.z), 0));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
main_1();
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
SamplerState x_10 : register(s0, space0);
|
||||||
|
Texture2DArray<float4> x_20 : register(t1, space2);
|
||||||
|
SamplerState x_30 : register(s1, space0);
|
||||||
|
|
||||||
|
void main_1() {
|
||||||
|
float float_var = 0.0f;
|
||||||
|
const int i1 = 1;
|
||||||
|
const int2 vi12 = int2(1, 2);
|
||||||
|
const int3 vi123 = int3(1, 2, 3);
|
||||||
|
const int4 vi1234 = int4(1, 2, 3, 4);
|
||||||
|
const uint u1 = 1u;
|
||||||
|
const uint2 vu12 = uint2(1u, 2u);
|
||||||
|
const uint3 vu123 = uint3(1u, 2u, 3u);
|
||||||
|
const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
|
||||||
|
const float f1 = 1.0f;
|
||||||
|
const float2 vf12 = float2(1.0f, 2.0f);
|
||||||
|
const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
|
||||||
|
const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
|
||||||
|
const float4 x_73 = x_20.Load(int4(int3(vi123.xy, vi123.z), 0));
|
||||||
|
const uint x_1000 = 0u;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
main_1();
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
warning: use of deprecated intrinsic
|
||||||
|
SamplerState x_10 : register(s0, space0);
|
||||||
|
Texture2DArray<float4> x_20 : register(t1, space2);
|
||||||
|
SamplerState x_30 : register(s1, space0);
|
||||||
|
|
||||||
|
void main_1() {
|
||||||
|
float float_var = 0.0f;
|
||||||
|
const int i1 = 1;
|
||||||
|
const int2 vi12 = int2(1, 2);
|
||||||
|
const int3 vi123 = int3(1, 2, 3);
|
||||||
|
const int4 vi1234 = int4(1, 2, 3, 4);
|
||||||
|
const uint u1 = 1u;
|
||||||
|
const uint2 vu12 = uint2(1u, 2u);
|
||||||
|
const uint3 vu123 = uint3(1u, 2u, 3u);
|
||||||
|
const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
|
||||||
|
const float f1 = 1.0f;
|
||||||
|
const float2 vf12 = float2(1.0f, 2.0f);
|
||||||
|
const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
|
||||||
|
const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
|
||||||
|
const float4 x_71 = x_20.Load(int4(int3(vi123.xy, vi123.z), 0));
|
||||||
|
const uint x_1000 = 0u;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
main_1();
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 22
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main"
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpName %var_1 "var_1"
|
||||||
|
OpName %main_1 "main_1"
|
||||||
|
OpName %main "main"
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%_ptr_Private_uint = OpTypePointer Private %uint
|
||||||
|
%4 = OpConstantNull %uint
|
||||||
|
%var_1 = OpVariable %_ptr_Private_uint Private %4
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%bool = OpTypeBool
|
||||||
|
%false = OpConstantFalse %bool
|
||||||
|
%true = OpConstantTrue %bool
|
||||||
|
%main_1 = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
OpBranch %9
|
||||||
|
%9 = OpLabel
|
||||||
|
OpLoopMerge %10 %11 None
|
||||||
|
OpBranch %12
|
||||||
|
%12 = OpLabel
|
||||||
|
OpSelectionMerge %15 None
|
||||||
|
OpBranchConditional %false %16 %17
|
||||||
|
%16 = OpLabel
|
||||||
|
OpBranch %15
|
||||||
|
%17 = OpLabel
|
||||||
|
OpBranch %10
|
||||||
|
%15 = OpLabel
|
||||||
|
OpBranch %11
|
||||||
|
%11 = OpLabel
|
||||||
|
OpBranchConditional %true %9 %10
|
||||||
|
%10 = OpLabel
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%20 = OpLabel
|
||||||
|
%21 = OpFunctionCall %void %main_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,46 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 22
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main"
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpName %var_1 "var_1"
|
||||||
|
OpName %main_1 "main_1"
|
||||||
|
OpName %main "main"
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%_ptr_Private_uint = OpTypePointer Private %uint
|
||||||
|
%4 = OpConstantNull %uint
|
||||||
|
%var_1 = OpVariable %_ptr_Private_uint Private %4
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%bool = OpTypeBool
|
||||||
|
%false = OpConstantFalse %bool
|
||||||
|
%true = OpConstantTrue %bool
|
||||||
|
%main_1 = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
OpBranch %9
|
||||||
|
%9 = OpLabel
|
||||||
|
OpLoopMerge %10 %11 None
|
||||||
|
OpBranch %12
|
||||||
|
%12 = OpLabel
|
||||||
|
OpSelectionMerge %15 None
|
||||||
|
OpBranchConditional %false %16 %17
|
||||||
|
%16 = OpLabel
|
||||||
|
OpBranch %15
|
||||||
|
%17 = OpLabel
|
||||||
|
OpBranch %10
|
||||||
|
%15 = OpLabel
|
||||||
|
OpBranch %11
|
||||||
|
%11 = OpLabel
|
||||||
|
OpBranchConditional %true %9 %10
|
||||||
|
%10 = OpLabel
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%20 = OpLabel
|
||||||
|
%21 = OpFunctionCall %void %main_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,46 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 22
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main"
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpName %var_1 "var_1"
|
||||||
|
OpName %main_1 "main_1"
|
||||||
|
OpName %main "main"
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%_ptr_Private_uint = OpTypePointer Private %uint
|
||||||
|
%4 = OpConstantNull %uint
|
||||||
|
%var_1 = OpVariable %_ptr_Private_uint Private %4
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%bool = OpTypeBool
|
||||||
|
%false = OpConstantFalse %bool
|
||||||
|
%true = OpConstantTrue %bool
|
||||||
|
%main_1 = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
OpBranch %9
|
||||||
|
%9 = OpLabel
|
||||||
|
OpLoopMerge %10 %11 None
|
||||||
|
OpBranch %12
|
||||||
|
%12 = OpLabel
|
||||||
|
OpSelectionMerge %15 None
|
||||||
|
OpBranchConditional %false %16 %17
|
||||||
|
%16 = OpLabel
|
||||||
|
OpBranch %15
|
||||||
|
%17 = OpLabel
|
||||||
|
OpBranch %10
|
||||||
|
%15 = OpLabel
|
||||||
|
OpBranch %11
|
||||||
|
%11 = OpLabel
|
||||||
|
OpBranchConditional %true %10 %9
|
||||||
|
%10 = OpLabel
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%20 = OpLabel
|
||||||
|
%21 = OpFunctionCall %void %main_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,46 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 22
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main"
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpName %var_1 "var_1"
|
||||||
|
OpName %main_1 "main_1"
|
||||||
|
OpName %main "main"
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%_ptr_Private_uint = OpTypePointer Private %uint
|
||||||
|
%4 = OpConstantNull %uint
|
||||||
|
%var_1 = OpVariable %_ptr_Private_uint Private %4
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%bool = OpTypeBool
|
||||||
|
%false = OpConstantFalse %bool
|
||||||
|
%true = OpConstantTrue %bool
|
||||||
|
%main_1 = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
OpBranch %9
|
||||||
|
%9 = OpLabel
|
||||||
|
OpLoopMerge %10 %11 None
|
||||||
|
OpBranch %12
|
||||||
|
%12 = OpLabel
|
||||||
|
OpSelectionMerge %15 None
|
||||||
|
OpBranchConditional %false %16 %17
|
||||||
|
%16 = OpLabel
|
||||||
|
OpBranch %15
|
||||||
|
%17 = OpLabel
|
||||||
|
OpBranch %10
|
||||||
|
%15 = OpLabel
|
||||||
|
OpBranch %11
|
||||||
|
%11 = OpLabel
|
||||||
|
OpBranchConditional %true %9 %10
|
||||||
|
%10 = OpLabel
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%20 = OpLabel
|
||||||
|
%21 = OpFunctionCall %void %main_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,62 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 29
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main"
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpName %var_1 "var_1"
|
||||||
|
OpName %main_1 "main_1"
|
||||||
|
OpName %main "main"
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%_ptr_Private_uint = OpTypePointer Private %uint
|
||||||
|
%4 = OpConstantNull %uint
|
||||||
|
%var_1 = OpVariable %_ptr_Private_uint Private %4
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%bool = OpTypeBool
|
||||||
|
%false = OpConstantFalse %bool
|
||||||
|
%true = OpConstantTrue %bool
|
||||||
|
%main_1 = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
OpBranch %9
|
||||||
|
%9 = OpLabel
|
||||||
|
OpLoopMerge %10 %11 None
|
||||||
|
OpBranch %12
|
||||||
|
%12 = OpLabel
|
||||||
|
OpSelectionMerge %15 None
|
||||||
|
OpBranchConditional %false %16 %17
|
||||||
|
%16 = OpLabel
|
||||||
|
OpBranch %15
|
||||||
|
%17 = OpLabel
|
||||||
|
OpBranch %10
|
||||||
|
%15 = OpLabel
|
||||||
|
OpBranch %18
|
||||||
|
%18 = OpLabel
|
||||||
|
OpLoopMerge %19 %20 None
|
||||||
|
OpBranch %21
|
||||||
|
%21 = OpLabel
|
||||||
|
OpSelectionMerge %23 None
|
||||||
|
OpBranchConditional %true %24 %25
|
||||||
|
%24 = OpLabel
|
||||||
|
OpBranch %23
|
||||||
|
%25 = OpLabel
|
||||||
|
OpBranch %19
|
||||||
|
%23 = OpLabel
|
||||||
|
OpBranch %20
|
||||||
|
%20 = OpLabel
|
||||||
|
OpBranchConditional %false %18 %19
|
||||||
|
%19 = OpLabel
|
||||||
|
OpBranch %11
|
||||||
|
%11 = OpLabel
|
||||||
|
OpBranch %9
|
||||||
|
%10 = OpLabel
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%27 = OpLabel
|
||||||
|
%28 = OpFunctionCall %void %main_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,44 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 21
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main"
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpName %var_1 "var_1"
|
||||||
|
OpName %main_1 "main_1"
|
||||||
|
OpName %main "main"
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%_ptr_Private_uint = OpTypePointer Private %uint
|
||||||
|
%4 = OpConstantNull %uint
|
||||||
|
%var_1 = OpVariable %_ptr_Private_uint Private %4
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%bool = OpTypeBool
|
||||||
|
%false = OpConstantFalse %bool
|
||||||
|
%uint_5 = OpConstant %uint 5
|
||||||
|
%main_1 = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
OpStore %var_1 %uint_0
|
||||||
|
OpBranch %10
|
||||||
|
%10 = OpLabel
|
||||||
|
OpLoopMerge %11 %12 None
|
||||||
|
OpBranch %13
|
||||||
|
%13 = OpLabel
|
||||||
|
OpStore %var_1 %uint_1
|
||||||
|
OpBranch %12
|
||||||
|
%12 = OpLabel
|
||||||
|
OpBranchConditional %false %10 %11
|
||||||
|
%11 = OpLabel
|
||||||
|
OpStore %var_1 %uint_5
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%19 = OpLabel
|
||||||
|
%20 = OpFunctionCall %void %main_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,44 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 21
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main"
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpName %var_1 "var_1"
|
||||||
|
OpName %main_1 "main_1"
|
||||||
|
OpName %main "main"
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%_ptr_Private_uint = OpTypePointer Private %uint
|
||||||
|
%4 = OpConstantNull %uint
|
||||||
|
%var_1 = OpVariable %_ptr_Private_uint Private %4
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%bool = OpTypeBool
|
||||||
|
%false = OpConstantFalse %bool
|
||||||
|
%uint_5 = OpConstant %uint 5
|
||||||
|
%main_1 = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
OpStore %var_1 %uint_0
|
||||||
|
OpBranch %10
|
||||||
|
%10 = OpLabel
|
||||||
|
OpLoopMerge %11 %12 None
|
||||||
|
OpBranch %13
|
||||||
|
%13 = OpLabel
|
||||||
|
OpStore %var_1 %uint_1
|
||||||
|
OpBranch %12
|
||||||
|
%12 = OpLabel
|
||||||
|
OpBranchConditional %false %11 %10
|
||||||
|
%11 = OpLabel
|
||||||
|
OpStore %var_1 %uint_5
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%19 = OpLabel
|
||||||
|
%20 = OpFunctionCall %void %main_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,40 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 19
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main"
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpName %var_1 "var_1"
|
||||||
|
OpName %main_1 "main_1"
|
||||||
|
OpName %main "main"
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%_ptr_Private_uint = OpTypePointer Private %uint
|
||||||
|
%4 = OpConstantNull %uint
|
||||||
|
%var_1 = OpVariable %_ptr_Private_uint Private %4
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%bool = OpTypeBool
|
||||||
|
%false = OpConstantFalse %bool
|
||||||
|
%main_1 = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
OpBranch %9
|
||||||
|
%9 = OpLabel
|
||||||
|
OpLoopMerge %10 %11 None
|
||||||
|
OpBranch %12
|
||||||
|
%12 = OpLabel
|
||||||
|
OpBranch %11
|
||||||
|
%11 = OpLabel
|
||||||
|
OpStore %var_1 %uint_1
|
||||||
|
OpBranchConditional %false %9 %10
|
||||||
|
%10 = OpLabel
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%17 = OpLabel
|
||||||
|
%18 = OpFunctionCall %void %main_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,68 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 33
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main"
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpName %x_1 "x_1"
|
||||||
|
OpName %main_1 "main_1"
|
||||||
|
OpName %x_2 "x_2"
|
||||||
|
OpName %main "main"
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%_ptr_Private_uint = OpTypePointer Private %uint
|
||||||
|
%4 = OpConstantNull %uint
|
||||||
|
%x_1 = OpVariable %_ptr_Private_uint Private %4
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Function_uint = OpTypePointer Function %uint
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%bool = OpTypeBool
|
||||||
|
%false = OpConstantFalse %bool
|
||||||
|
%uint_3 = OpConstant %uint 3
|
||||||
|
%true = OpConstantTrue %bool
|
||||||
|
%uint_4 = OpConstant %uint 4
|
||||||
|
%uint_5 = OpConstant %uint 5
|
||||||
|
%main_1 = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
%x_2 = OpVariable %_ptr_Function_uint Function %4
|
||||||
|
OpStore %x_1 %uint_0
|
||||||
|
OpBranch %10
|
||||||
|
%10 = OpLabel
|
||||||
|
OpLoopMerge %11 %12 None
|
||||||
|
OpBranch %13
|
||||||
|
%13 = OpLabel
|
||||||
|
OpStore %x_1 %uint_1
|
||||||
|
OpSelectionMerge %19 None
|
||||||
|
OpBranchConditional %false %20 %19
|
||||||
|
%20 = OpLabel
|
||||||
|
OpBranch %11
|
||||||
|
%19 = OpLabel
|
||||||
|
OpStore %x_1 %uint_3
|
||||||
|
OpSelectionMerge %23 None
|
||||||
|
OpBranchConditional %true %24 %25
|
||||||
|
%24 = OpLabel
|
||||||
|
%26 = OpIAdd %uint %uint_1 %uint_1
|
||||||
|
OpStore %x_2 %26
|
||||||
|
OpBranch %23
|
||||||
|
%25 = OpLabel
|
||||||
|
OpReturn
|
||||||
|
%23 = OpLabel
|
||||||
|
%27 = OpLoad %uint %x_2
|
||||||
|
OpStore %x_1 %27
|
||||||
|
OpBranch %12
|
||||||
|
%12 = OpLabel
|
||||||
|
OpStore %x_1 %uint_4
|
||||||
|
OpBranchConditional %false %11 %10
|
||||||
|
%11 = OpLabel
|
||||||
|
OpStore %x_1 %uint_5
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%31 = OpLabel
|
||||||
|
%32 = OpFunctionCall %void %main_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -5,7 +5,7 @@ static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
void main_1() {
|
void main_1() {
|
||||||
const float4 x_19 = gl_FragCoord;
|
const float4 x_19 = gl_FragCoord;
|
||||||
const float4 x_22 = tint_symbol.Load(int3(float2(x_19.x, x_19.y), 0));
|
const float4 x_22 = tint_symbol.Load(int3(int2(float2(x_19.x, x_19.y)), 0));
|
||||||
color_out = x_22;
|
color_out = x_22;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
void main_1() {
|
void main_1() {
|
||||||
const float4 x_19 = gl_FragCoord;
|
const float4 x_19 = gl_FragCoord;
|
||||||
const float4 x_22 = tint_symbol.Load(int3(float2(x_19.x, x_19.y), 0));
|
const float4 x_22 = tint_symbol.Load(int3(int2(float2(x_19.x, x_19.y)), 0));
|
||||||
color_out = x_22;
|
color_out = x_22;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue