Merge RenameReservedKeywords into the Renamer
Adds additional modes to the Renamer for renaming just HLSL or MSL keywords. The sanitizers no longer rename reserved keywords automatically, which isn't usually necessary anyway since Dawn renames all symbols. The tint executable automatically renames reserved keywords when targeting HLSL and MSL. It now also has an option to rename everything, which is useful for testing the renamer. Change-Id: Idbfd53226805e851050024402be8d8f251b88707 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/47960 Commit-Queue: Ben Clayton <bclayton@chromium.org> Auto-Submit: James Price <jrprice@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: Ben Clayton <bclayton@chromium.org>
This commit is contained in:
parent
fc03a46516
commit
fd7251bb02
|
@ -85,6 +85,7 @@ const char kUsage[] = R"(Usage: tint [options] <input-file>
|
|||
bound_array_accessors
|
||||
emit_vertex_point_size
|
||||
first_index_offset
|
||||
renamer
|
||||
--parse-only -- Stop after parsing the input
|
||||
--dump-ast -- Dump the generated AST to stdout
|
||||
--dawn-validation -- SPIRV outputs are validated with the same flags
|
||||
|
@ -688,6 +689,8 @@ int main(int argc, const char** argv) {
|
|||
} else if (name == "first_index_offset") {
|
||||
transform_manager.append(
|
||||
std::make_unique<tint::transform::FirstIndexOffset>(0, 0));
|
||||
} else if (name == "renamer") {
|
||||
transform_manager.append(std::make_unique<tint::transform::Renamer>());
|
||||
} else {
|
||||
std::cerr << "Unknown transform name: " << name << std::endl;
|
||||
return 1;
|
||||
|
@ -702,14 +705,24 @@ int main(int argc, const char** argv) {
|
|||
break;
|
||||
#endif // TINT_BUILD_SPV_WRITER
|
||||
#if TINT_BUILD_MSL_WRITER
|
||||
case Format::kMsl:
|
||||
case Format::kMsl: {
|
||||
tint::transform::Renamer::Config renamer_config{
|
||||
tint::transform::Renamer::Target::kMslKeywords};
|
||||
transform_manager.append(
|
||||
std::make_unique<tint::transform::Renamer>(renamer_config));
|
||||
transform_manager.append(std::make_unique<tint::transform::Msl>());
|
||||
break;
|
||||
}
|
||||
#endif // TINT_BUILD_MSL_WRITER
|
||||
#if TINT_BUILD_HLSL_WRITER
|
||||
case Format::kHlsl:
|
||||
case Format::kHlsl: {
|
||||
tint::transform::Renamer::Config renamer_config{
|
||||
tint::transform::Renamer::Target::kHlslKeywords};
|
||||
transform_manager.append(
|
||||
std::make_unique<tint::transform::Renamer>(renamer_config));
|
||||
transform_manager.append(std::make_unique<tint::transform::Hlsl>());
|
||||
break;
|
||||
}
|
||||
#endif // TINT_BUILD_HLSL_WRITER
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -30,575 +30,6 @@
|
|||
namespace tint {
|
||||
namespace transform {
|
||||
|
||||
namespace {
|
||||
|
||||
// This list is used for a binary search and must be kept in sorted order.
|
||||
const char* kReservedKeywords[] = {"AddressU",
|
||||
"AddressV",
|
||||
"AddressW",
|
||||
"AllMemoryBarrier",
|
||||
"AllMemoryBarrierWithGroupSync",
|
||||
"AppendStructuredBuffer",
|
||||
"BINORMAL",
|
||||
"BLENDINDICES",
|
||||
"BLENDWEIGHT",
|
||||
"BlendState",
|
||||
"BorderColor",
|
||||
"Buffer",
|
||||
"ByteAddressBuffer",
|
||||
"COLOR",
|
||||
"CheckAccessFullyMapped",
|
||||
"ComparisonFunc",
|
||||
"CompileShader",
|
||||
"ComputeShader",
|
||||
"ConsumeStructuredBuffer",
|
||||
"D3DCOLORtoUBYTE4",
|
||||
"DEPTH",
|
||||
"DepthStencilState",
|
||||
"DepthStencilView",
|
||||
"DeviceMemoryBarrier",
|
||||
"DeviceMemroyBarrierWithGroupSync",
|
||||
"DomainShader",
|
||||
"EvaluateAttributeAtCentroid",
|
||||
"EvaluateAttributeAtSample",
|
||||
"EvaluateAttributeSnapped",
|
||||
"FOG",
|
||||
"Filter",
|
||||
"GeometryShader",
|
||||
"GetRenderTargetSampleCount",
|
||||
"GetRenderTargetSamplePosition",
|
||||
"GroupMemoryBarrier",
|
||||
"GroupMemroyBarrierWithGroupSync",
|
||||
"Hullshader",
|
||||
"InputPatch",
|
||||
"InterlockedAdd",
|
||||
"InterlockedAnd",
|
||||
"InterlockedCompareExchange",
|
||||
"InterlockedCompareStore",
|
||||
"InterlockedExchange",
|
||||
"InterlockedMax",
|
||||
"InterlockedMin",
|
||||
"InterlockedOr",
|
||||
"InterlockedXor",
|
||||
"LineStream",
|
||||
"MaxAnisotropy",
|
||||
"MaxLOD",
|
||||
"MinLOD",
|
||||
"MipLODBias",
|
||||
"NORMAL",
|
||||
"NULL",
|
||||
"Normal",
|
||||
"OutputPatch",
|
||||
"POSITION",
|
||||
"POSITIONT",
|
||||
"PSIZE",
|
||||
"PixelShader",
|
||||
"PointStream",
|
||||
"Process2DQuadTessFactorsAvg",
|
||||
"Process2DQuadTessFactorsMax",
|
||||
"Process2DQuadTessFactorsMin",
|
||||
"ProcessIsolineTessFactors",
|
||||
"ProcessQuadTessFactorsAvg",
|
||||
"ProcessQuadTessFactorsMax",
|
||||
"ProcessQuadTessFactorsMin",
|
||||
"ProcessTriTessFactorsAvg",
|
||||
"ProcessTriTessFactorsMax",
|
||||
"ProcessTriTessFactorsMin",
|
||||
"RWBuffer",
|
||||
"RWByteAddressBuffer",
|
||||
"RWStructuredBuffer",
|
||||
"RWTexture1D",
|
||||
"RWTexture2D",
|
||||
"RWTexture2DArray",
|
||||
"RWTexture3D",
|
||||
"RasterizerState",
|
||||
"RenderTargetView",
|
||||
"SV_ClipDistance",
|
||||
"SV_Coverage",
|
||||
"SV_CullDistance",
|
||||
"SV_Depth",
|
||||
"SV_DepthGreaterEqual",
|
||||
"SV_DepthLessEqual",
|
||||
"SV_DispatchThreadID",
|
||||
"SV_DomainLocation",
|
||||
"SV_GSInstanceID",
|
||||
"SV_GroupID",
|
||||
"SV_GroupIndex",
|
||||
"SV_GroupThreadID",
|
||||
"SV_InnerCoverage",
|
||||
"SV_InsideTessFactor",
|
||||
"SV_InstanceID",
|
||||
"SV_IsFrontFace",
|
||||
"SV_OutputControlPointID",
|
||||
"SV_Position",
|
||||
"SV_PrimitiveID",
|
||||
"SV_RenderTargetArrayIndex",
|
||||
"SV_SampleIndex",
|
||||
"SV_StencilRef",
|
||||
"SV_Target",
|
||||
"SV_TessFactor",
|
||||
"SV_VertexArrayIndex",
|
||||
"SV_VertexID",
|
||||
"Sampler",
|
||||
"Sampler1D",
|
||||
"Sampler2D",
|
||||
"Sampler3D",
|
||||
"SamplerCUBE",
|
||||
"StructuredBuffer",
|
||||
"TANGENT",
|
||||
"TESSFACTOR",
|
||||
"TEXCOORD",
|
||||
"Texcoord",
|
||||
"Texture",
|
||||
"Texture1D",
|
||||
"Texture2D",
|
||||
"Texture2DArray",
|
||||
"Texture2DMS",
|
||||
"Texture2DMSArray",
|
||||
"Texture3D",
|
||||
"TextureCube",
|
||||
"TextureCubeArray",
|
||||
"TriangleStream",
|
||||
"VFACE",
|
||||
"VPOS",
|
||||
"VertexShader",
|
||||
"abort",
|
||||
"allow_uav_condition",
|
||||
"asdouble",
|
||||
"asfloat",
|
||||
"asint",
|
||||
"asm",
|
||||
"asm_fragment",
|
||||
"asuint",
|
||||
"auto",
|
||||
"bool",
|
||||
"bool1",
|
||||
"bool1x1",
|
||||
"bool1x2",
|
||||
"bool1x3",
|
||||
"bool1x4",
|
||||
"bool2",
|
||||
"bool2x1",
|
||||
"bool2x2",
|
||||
"bool2x3",
|
||||
"bool2x4",
|
||||
"bool3",
|
||||
"bool3x1",
|
||||
"bool3x2",
|
||||
"bool3x3",
|
||||
"bool3x4",
|
||||
"bool4",
|
||||
"bool4x1",
|
||||
"bool4x2",
|
||||
"bool4x3",
|
||||
"bool4x4",
|
||||
"branch",
|
||||
"break",
|
||||
"call",
|
||||
"case",
|
||||
"catch",
|
||||
"cbuffer",
|
||||
"centroid",
|
||||
"char",
|
||||
"class",
|
||||
"clip",
|
||||
"column_major",
|
||||
"compile_fragment",
|
||||
"const",
|
||||
"const_cast",
|
||||
"continue",
|
||||
"countbits",
|
||||
"ddx",
|
||||
"ddx_coarse",
|
||||
"ddx_fine",
|
||||
"ddy",
|
||||
"ddy_coarse",
|
||||
"ddy_fine",
|
||||
"degrees",
|
||||
"delete",
|
||||
"discard",
|
||||
"do",
|
||||
"double",
|
||||
"double1",
|
||||
"double1x1",
|
||||
"double1x2",
|
||||
"double1x3",
|
||||
"double1x4",
|
||||
"double2",
|
||||
"double2x1",
|
||||
"double2x2",
|
||||
"double2x3",
|
||||
"double2x4",
|
||||
"double3",
|
||||
"double3x1",
|
||||
"double3x2",
|
||||
"double3x3",
|
||||
"double3x4",
|
||||
"double4",
|
||||
"double4x1",
|
||||
"double4x2",
|
||||
"double4x3",
|
||||
"double4x4",
|
||||
"dst",
|
||||
"dword",
|
||||
"dword1",
|
||||
"dword1x1",
|
||||
"dword1x2",
|
||||
"dword1x3",
|
||||
"dword1x4",
|
||||
"dword2",
|
||||
"dword2x1",
|
||||
"dword2x2",
|
||||
"dword2x3",
|
||||
"dword2x4",
|
||||
"dword3",
|
||||
"dword3x1",
|
||||
"dword3x2",
|
||||
"dword3x3",
|
||||
"dword3x4",
|
||||
"dword4",
|
||||
"dword4x1",
|
||||
"dword4x2",
|
||||
"dword4x3",
|
||||
"dword4x4",
|
||||
"dynamic_cast",
|
||||
"else",
|
||||
"enum",
|
||||
"errorf",
|
||||
"explicit",
|
||||
"export",
|
||||
"extern",
|
||||
"f16to32",
|
||||
"f32tof16",
|
||||
"false",
|
||||
"fastopt",
|
||||
"firstbithigh",
|
||||
"firstbitlow",
|
||||
"flatten",
|
||||
"float",
|
||||
"float1",
|
||||
"float1x1",
|
||||
"float1x2",
|
||||
"float1x3",
|
||||
"float1x4",
|
||||
"float2",
|
||||
"float2x1",
|
||||
"float2x2",
|
||||
"float2x3",
|
||||
"float2x4",
|
||||
"float3",
|
||||
"float3x1",
|
||||
"float3x2",
|
||||
"float3x3",
|
||||
"float3x4",
|
||||
"float4",
|
||||
"float4x1",
|
||||
"float4x2",
|
||||
"float4x3",
|
||||
"float4x4",
|
||||
"fmod",
|
||||
"for",
|
||||
"forcecase",
|
||||
"frac",
|
||||
"friend",
|
||||
"fxgroup",
|
||||
"goto",
|
||||
"groupshared",
|
||||
"half",
|
||||
"half1",
|
||||
"half1x1",
|
||||
"half1x2",
|
||||
"half1x3",
|
||||
"half1x4",
|
||||
"half2",
|
||||
"half2x1",
|
||||
"half2x2",
|
||||
"half2x3",
|
||||
"half2x4",
|
||||
"half3",
|
||||
"half3x1",
|
||||
"half3x2",
|
||||
"half3x3",
|
||||
"half3x4",
|
||||
"half4",
|
||||
"half4x1",
|
||||
"half4x2",
|
||||
"half4x3",
|
||||
"half4x4",
|
||||
"if",
|
||||
"in",
|
||||
"inline",
|
||||
"inout",
|
||||
"int",
|
||||
"int1",
|
||||
"int1x1",
|
||||
"int1x2",
|
||||
"int1x3",
|
||||
"int1x4",
|
||||
"int2",
|
||||
"int2x1",
|
||||
"int2x2",
|
||||
"int2x3",
|
||||
"int2x4",
|
||||
"int3",
|
||||
"int3x1",
|
||||
"int3x2",
|
||||
"int3x3",
|
||||
"int3x4",
|
||||
"int4",
|
||||
"int4x1",
|
||||
"int4x2",
|
||||
"int4x3",
|
||||
"int4x4",
|
||||
"interface",
|
||||
"isfinite",
|
||||
"isinf",
|
||||
"isnan",
|
||||
"lerp",
|
||||
"lineadj",
|
||||
"linear",
|
||||
"lit",
|
||||
"log10",
|
||||
"long",
|
||||
"loop",
|
||||
"mad",
|
||||
"matrix",
|
||||
"min10float",
|
||||
"min10float1",
|
||||
"min10float1x1",
|
||||
"min10float1x2",
|
||||
"min10float1x3",
|
||||
"min10float1x4",
|
||||
"min10float2",
|
||||
"min10float2x1",
|
||||
"min10float2x2",
|
||||
"min10float2x3",
|
||||
"min10float2x4",
|
||||
"min10float3",
|
||||
"min10float3x1",
|
||||
"min10float3x2",
|
||||
"min10float3x3",
|
||||
"min10float3x4",
|
||||
"min10float4",
|
||||
"min10float4x1",
|
||||
"min10float4x2",
|
||||
"min10float4x3",
|
||||
"min10float4x4",
|
||||
"min12int",
|
||||
"min12int1",
|
||||
"min12int1x1",
|
||||
"min12int1x2",
|
||||
"min12int1x3",
|
||||
"min12int1x4",
|
||||
"min12int2",
|
||||
"min12int2x1",
|
||||
"min12int2x2",
|
||||
"min12int2x3",
|
||||
"min12int2x4",
|
||||
"min12int3",
|
||||
"min12int3x1",
|
||||
"min12int3x2",
|
||||
"min12int3x3",
|
||||
"min12int3x4",
|
||||
"min12int4",
|
||||
"min12int4x1",
|
||||
"min12int4x2",
|
||||
"min12int4x3",
|
||||
"min12int4x4",
|
||||
"min16float",
|
||||
"min16float1",
|
||||
"min16float1x1",
|
||||
"min16float1x2",
|
||||
"min16float1x3",
|
||||
"min16float1x4",
|
||||
"min16float2",
|
||||
"min16float2x1",
|
||||
"min16float2x2",
|
||||
"min16float2x3",
|
||||
"min16float2x4",
|
||||
"min16float3",
|
||||
"min16float3x1",
|
||||
"min16float3x2",
|
||||
"min16float3x3",
|
||||
"min16float3x4",
|
||||
"min16float4",
|
||||
"min16float4x1",
|
||||
"min16float4x2",
|
||||
"min16float4x3",
|
||||
"min16float4x4",
|
||||
"min16int",
|
||||
"min16int1",
|
||||
"min16int1x1",
|
||||
"min16int1x2",
|
||||
"min16int1x3",
|
||||
"min16int1x4",
|
||||
"min16int2",
|
||||
"min16int2x1",
|
||||
"min16int2x2",
|
||||
"min16int2x3",
|
||||
"min16int2x4",
|
||||
"min16int3",
|
||||
"min16int3x1",
|
||||
"min16int3x2",
|
||||
"min16int3x3",
|
||||
"min16int3x4",
|
||||
"min16int4",
|
||||
"min16int4x1",
|
||||
"min16int4x2",
|
||||
"min16int4x3",
|
||||
"min16int4x4",
|
||||
"min16uint",
|
||||
"min16uint1",
|
||||
"min16uint1x1",
|
||||
"min16uint1x2",
|
||||
"min16uint1x3",
|
||||
"min16uint1x4",
|
||||
"min16uint2",
|
||||
"min16uint2x1",
|
||||
"min16uint2x2",
|
||||
"min16uint2x3",
|
||||
"min16uint2x4",
|
||||
"min16uint3",
|
||||
"min16uint3x1",
|
||||
"min16uint3x2",
|
||||
"min16uint3x3",
|
||||
"min16uint3x4",
|
||||
"min16uint4",
|
||||
"min16uint4x1",
|
||||
"min16uint4x2",
|
||||
"min16uint4x3",
|
||||
"min16uint4x4",
|
||||
"msad4",
|
||||
"mul",
|
||||
"mutable",
|
||||
"namespace",
|
||||
"new",
|
||||
"nointerpolation",
|
||||
"noise",
|
||||
"noperspective",
|
||||
"numthreads",
|
||||
"operator",
|
||||
"out",
|
||||
"packoffset",
|
||||
"pass",
|
||||
"pixelfragment",
|
||||
"pixelshader",
|
||||
"point",
|
||||
"precise",
|
||||
"printf",
|
||||
"private",
|
||||
"protected",
|
||||
"public",
|
||||
"radians",
|
||||
"rcp",
|
||||
"refract",
|
||||
"register",
|
||||
"reinterpret_cast",
|
||||
"return",
|
||||
"row_major",
|
||||
"rsqrt",
|
||||
"sample",
|
||||
"sampler",
|
||||
"sampler1D",
|
||||
"sampler2D",
|
||||
"sampler3D",
|
||||
"samplerCUBE",
|
||||
"sampler_state",
|
||||
"saturate",
|
||||
"shared",
|
||||
"short",
|
||||
"signed",
|
||||
"sincos",
|
||||
"sizeof",
|
||||
"snorm",
|
||||
"stateblock",
|
||||
"stateblock_state",
|
||||
"static",
|
||||
"static_cast",
|
||||
"string",
|
||||
"struct",
|
||||
"switch",
|
||||
"tbuffer",
|
||||
"technique",
|
||||
"technique10",
|
||||
"technique11",
|
||||
"template",
|
||||
"tex1D",
|
||||
"tex1Dbias",
|
||||
"tex1Dgrad",
|
||||
"tex1Dlod",
|
||||
"tex1Dproj",
|
||||
"tex2D",
|
||||
"tex2Dbias",
|
||||
"tex2Dgrad",
|
||||
"tex2Dlod",
|
||||
"tex2Dproj",
|
||||
"tex3D",
|
||||
"tex3Dbias",
|
||||
"tex3Dgrad",
|
||||
"tex3Dlod",
|
||||
"tex3Dproj",
|
||||
"texCUBE",
|
||||
"texCUBEbias",
|
||||
"texCUBEgrad",
|
||||
"texCUBElod",
|
||||
"texCUBEproj",
|
||||
"texture",
|
||||
"texture1D",
|
||||
"texture1DArray",
|
||||
"texture2D",
|
||||
"texture2DArray",
|
||||
"texture2DMS",
|
||||
"texture2DMSArray",
|
||||
"texture3D",
|
||||
"textureCube",
|
||||
"textureCubeArray",
|
||||
"this",
|
||||
"throw",
|
||||
"transpose",
|
||||
"triangle",
|
||||
"triangleadj",
|
||||
"true",
|
||||
"try",
|
||||
"typedef",
|
||||
"typename",
|
||||
"uint",
|
||||
"uint1",
|
||||
"uint1x1",
|
||||
"uint1x2",
|
||||
"uint1x3",
|
||||
"uint1x4",
|
||||
"uint2",
|
||||
"uint2x1",
|
||||
"uint2x2",
|
||||
"uint2x3",
|
||||
"uint2x4",
|
||||
"uint3",
|
||||
"uint3x1",
|
||||
"uint3x2",
|
||||
"uint3x3",
|
||||
"uint3x4",
|
||||
"uint4",
|
||||
"uint4x1",
|
||||
"uint4x2",
|
||||
"uint4x3",
|
||||
"uint4x4",
|
||||
"uniform",
|
||||
"union",
|
||||
"unorm",
|
||||
"unroll",
|
||||
"unsigned",
|
||||
"using",
|
||||
"vector",
|
||||
"vertexfragment",
|
||||
"vertexshader",
|
||||
"virtual",
|
||||
"void",
|
||||
"volatile",
|
||||
"while"};
|
||||
|
||||
} // namespace
|
||||
|
||||
Hlsl::Hlsl() = default;
|
||||
Hlsl::~Hlsl() = default;
|
||||
|
||||
|
@ -616,7 +47,6 @@ Transform::Output Hlsl::Run(const Program* in, const DataMap& data) {
|
|||
CloneContext ctx(&builder, &out.program);
|
||||
PromoteInitializersToConstVar(ctx);
|
||||
AddEmptyEntryPoint(ctx);
|
||||
RenameReservedKeywords(&ctx, kReservedKeywords);
|
||||
ctx.Clone();
|
||||
return Output{Program(std::move(builder))};
|
||||
}
|
||||
|
|
|
@ -14,8 +14,6 @@
|
|||
|
||||
#include "src/transform/hlsl.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "src/transform/test_helper.h"
|
||||
|
||||
namespace tint {
|
||||
|
@ -291,686 +289,8 @@ fn tint_unused_entry_point() {
|
|||
auto got = Run<Hlsl>(src);
|
||||
|
||||
EXPECT_EQ(expect, str(got));
|
||||
|
||||
}
|
||||
|
||||
using HlslReservedKeywordTest = TransformTestWithParam<std::string>;
|
||||
|
||||
TEST_P(HlslReservedKeywordTest, Keywords) {
|
||||
auto keyword = GetParam();
|
||||
|
||||
auto src = R"(
|
||||
[[stage(fragment)]]
|
||||
fn main() {
|
||||
var )" + keyword +
|
||||
R"( : i32;
|
||||
}
|
||||
)";
|
||||
|
||||
auto expect = R"(
|
||||
[[stage(fragment)]]
|
||||
fn main() {
|
||||
var tint_)" + keyword +
|
||||
R"( : i32;
|
||||
}
|
||||
)";
|
||||
|
||||
auto got = Run<Hlsl>(src);
|
||||
|
||||
EXPECT_EQ(expect, str(got));
|
||||
}
|
||||
|
||||
TEST_P(HlslReservedKeywordTest, AttemptSymbolCollision) {
|
||||
auto keyword = GetParam();
|
||||
|
||||
auto src = R"(
|
||||
[[stage(fragment)]]
|
||||
fn main() {
|
||||
var tint_)" +
|
||||
keyword +
|
||||
R"( : i32;
|
||||
var tint_)" +
|
||||
keyword +
|
||||
R"(_1 : i32;
|
||||
var )" + keyword +
|
||||
R"( : i32;
|
||||
var tint_)" +
|
||||
keyword +
|
||||
R"(_2 : i32;
|
||||
var tint_)" +
|
||||
keyword +
|
||||
R"(_3 : i32;
|
||||
}
|
||||
)";
|
||||
|
||||
auto expect = R"(
|
||||
[[stage(fragment)]]
|
||||
fn main() {
|
||||
var tint_)" + keyword +
|
||||
R"( : i32;
|
||||
var tint_)" + keyword +
|
||||
R"(_1 : i32;
|
||||
var tint_)" + keyword +
|
||||
R"(_2 : i32;
|
||||
var tint_)" + keyword +
|
||||
R"(_2_1 : i32;
|
||||
var tint_)" + keyword +
|
||||
R"(_3 : i32;
|
||||
}
|
||||
)";
|
||||
|
||||
auto got = Run<Hlsl>(src);
|
||||
|
||||
EXPECT_EQ(expect, str(got));
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(HlslReservedKeywordTest,
|
||||
HlslReservedKeywordTest,
|
||||
testing::Values("AddressU",
|
||||
"AddressV",
|
||||
"AddressW",
|
||||
"AllMemoryBarrier",
|
||||
"AllMemoryBarrierWithGroupSync",
|
||||
"AppendStructuredBuffer",
|
||||
"BINORMAL",
|
||||
"BLENDINDICES",
|
||||
"BLENDWEIGHT",
|
||||
"BlendState",
|
||||
"BorderColor",
|
||||
"Buffer",
|
||||
"ByteAddressBuffer",
|
||||
"COLOR",
|
||||
"CheckAccessFullyMapped",
|
||||
"ComparisonFunc",
|
||||
"CompileShader",
|
||||
"ComputeShader",
|
||||
"ConsumeStructuredBuffer",
|
||||
"D3DCOLORtoUBYTE4",
|
||||
"DEPTH",
|
||||
"DepthStencilState",
|
||||
"DepthStencilView",
|
||||
"DeviceMemoryBarrier",
|
||||
"DeviceMemroyBarrierWithGroupSync",
|
||||
"DomainShader",
|
||||
"EvaluateAttributeAtCentroid",
|
||||
"EvaluateAttributeAtSample",
|
||||
"EvaluateAttributeSnapped",
|
||||
"FOG",
|
||||
"Filter",
|
||||
"GeometryShader",
|
||||
"GetRenderTargetSampleCount",
|
||||
"GetRenderTargetSamplePosition",
|
||||
"GroupMemoryBarrier",
|
||||
"GroupMemroyBarrierWithGroupSync",
|
||||
"Hullshader",
|
||||
"InputPatch",
|
||||
"InterlockedAdd",
|
||||
"InterlockedAnd",
|
||||
"InterlockedCompareExchange",
|
||||
"InterlockedCompareStore",
|
||||
"InterlockedExchange",
|
||||
"InterlockedMax",
|
||||
"InterlockedMin",
|
||||
"InterlockedOr",
|
||||
"InterlockedXor",
|
||||
"LineStream",
|
||||
"MaxAnisotropy",
|
||||
"MaxLOD",
|
||||
"MinLOD",
|
||||
"MipLODBias",
|
||||
"NORMAL",
|
||||
"NULL",
|
||||
"Normal",
|
||||
"OutputPatch",
|
||||
"POSITION",
|
||||
"POSITIONT",
|
||||
"PSIZE",
|
||||
"PixelShader",
|
||||
"PointStream",
|
||||
"Process2DQuadTessFactorsAvg",
|
||||
"Process2DQuadTessFactorsMax",
|
||||
"Process2DQuadTessFactorsMin",
|
||||
"ProcessIsolineTessFactors",
|
||||
"ProcessQuadTessFactorsAvg",
|
||||
"ProcessQuadTessFactorsMax",
|
||||
"ProcessQuadTessFactorsMin",
|
||||
"ProcessTriTessFactorsAvg",
|
||||
"ProcessTriTessFactorsMax",
|
||||
"ProcessTriTessFactorsMin",
|
||||
"RWBuffer",
|
||||
"RWByteAddressBuffer",
|
||||
"RWStructuredBuffer",
|
||||
"RWTexture1D",
|
||||
"RWTexture2D",
|
||||
"RWTexture2DArray",
|
||||
"RWTexture3D",
|
||||
"RasterizerState",
|
||||
"RenderTargetView",
|
||||
"SV_ClipDistance",
|
||||
"SV_Coverage",
|
||||
"SV_CullDistance",
|
||||
"SV_Depth",
|
||||
"SV_DepthGreaterEqual",
|
||||
"SV_DepthLessEqual",
|
||||
"SV_DispatchThreadID",
|
||||
"SV_DomainLocation",
|
||||
"SV_GSInstanceID",
|
||||
"SV_GroupID",
|
||||
"SV_GroupIndex",
|
||||
"SV_GroupThreadID",
|
||||
"SV_InnerCoverage",
|
||||
"SV_InsideTessFactor",
|
||||
"SV_InstanceID",
|
||||
"SV_IsFrontFace",
|
||||
"SV_OutputControlPointID",
|
||||
"SV_Position",
|
||||
"SV_PrimitiveID",
|
||||
"SV_RenderTargetArrayIndex",
|
||||
"SV_SampleIndex",
|
||||
"SV_StencilRef",
|
||||
"SV_Target",
|
||||
"SV_TessFactor",
|
||||
"SV_VertexArrayIndex",
|
||||
"SV_VertexID",
|
||||
"Sampler",
|
||||
"Sampler1D",
|
||||
"Sampler2D",
|
||||
"Sampler3D",
|
||||
"SamplerCUBE",
|
||||
"StructuredBuffer",
|
||||
"TANGENT",
|
||||
"TESSFACTOR",
|
||||
"TEXCOORD",
|
||||
"Texcoord",
|
||||
"Texture",
|
||||
"Texture1D",
|
||||
"Texture2D",
|
||||
"Texture2DArray",
|
||||
"Texture2DMS",
|
||||
"Texture2DMSArray",
|
||||
"Texture3D",
|
||||
"TextureCube",
|
||||
"TextureCubeArray",
|
||||
"TriangleStream",
|
||||
"VFACE",
|
||||
"VPOS",
|
||||
"VertexShader",
|
||||
"abort",
|
||||
// "abs", // WGSL intrinsic
|
||||
// "acos", // WGSL intrinsic
|
||||
// "all", // WGSL intrinsic
|
||||
"allow_uav_condition",
|
||||
// "any", // WGSL intrinsic
|
||||
"asdouble",
|
||||
"asfloat",
|
||||
// "asin", // WGSL intrinsic
|
||||
"asint",
|
||||
// "asm", // WGSL keyword
|
||||
"asm_fragment",
|
||||
"asuint",
|
||||
// "atan", // WGSL intrinsic
|
||||
// "atan2", // WGSL intrinsic
|
||||
"auto",
|
||||
// "bool", // WGSL keyword
|
||||
"bool1",
|
||||
"bool1x1",
|
||||
"bool1x2",
|
||||
"bool1x3",
|
||||
"bool1x4",
|
||||
"bool2",
|
||||
"bool2x1",
|
||||
"bool2x2",
|
||||
"bool2x3",
|
||||
"bool2x4",
|
||||
"bool3",
|
||||
"bool3x1",
|
||||
"bool3x2",
|
||||
"bool3x3",
|
||||
"bool3x4",
|
||||
"bool4",
|
||||
"bool4x1",
|
||||
"bool4x2",
|
||||
"bool4x3",
|
||||
"bool4x4",
|
||||
"branch",
|
||||
// "break", // WGSL keyword
|
||||
// "call", // WGSL intrinsic
|
||||
// "case", // WGSL keyword
|
||||
"catch",
|
||||
"cbuffer",
|
||||
// "ceil", // WGSL intrinsic
|
||||
"centroid",
|
||||
"char",
|
||||
// "clamp", // WGSL intrinsic
|
||||
"class",
|
||||
"clip",
|
||||
"column_major",
|
||||
"compile_fragment",
|
||||
// "const", // WGSL keyword
|
||||
"const_cast",
|
||||
// "continue", // WGSL keyword
|
||||
// "cos", // WGSL intrinsic
|
||||
// "cosh", // WGSL intrinsic
|
||||
"countbits",
|
||||
// "cross", // WGSL intrinsic
|
||||
"ddx",
|
||||
"ddx_coarse",
|
||||
"ddx_fine",
|
||||
"ddy",
|
||||
"ddy_coarse",
|
||||
"ddy_fine",
|
||||
"degrees",
|
||||
"delete",
|
||||
// "determinant", // WGSL intrinsic
|
||||
// "discard", // WGSL keyword
|
||||
// "distance", // WGSL intrinsic
|
||||
// "do", // WGSL keyword
|
||||
// "dot", // WGSL intrinsic
|
||||
"double",
|
||||
"double1",
|
||||
"double1x1",
|
||||
"double1x2",
|
||||
"double1x3",
|
||||
"double1x4",
|
||||
"double2",
|
||||
"double2x1",
|
||||
"double2x2",
|
||||
"double2x3",
|
||||
"double2x4",
|
||||
"double3",
|
||||
"double3x1",
|
||||
"double3x2",
|
||||
"double3x3",
|
||||
"double3x4",
|
||||
"double4",
|
||||
"double4x1",
|
||||
"double4x2",
|
||||
"double4x3",
|
||||
"double4x4",
|
||||
"dst",
|
||||
"dword",
|
||||
"dword1",
|
||||
"dword1x1",
|
||||
"dword1x2",
|
||||
"dword1x3",
|
||||
"dword1x4",
|
||||
"dword2",
|
||||
"dword2x1",
|
||||
"dword2x2",
|
||||
"dword2x3",
|
||||
"dword2x4",
|
||||
"dword3",
|
||||
"dword3x1",
|
||||
"dword3x2",
|
||||
"dword3x3",
|
||||
"dword3x4",
|
||||
"dword4",
|
||||
"dword4x1",
|
||||
"dword4x2",
|
||||
"dword4x3",
|
||||
"dword4x4",
|
||||
"dynamic_cast",
|
||||
// "else", // WGSL keyword
|
||||
// "enum", // WGSL keyword
|
||||
"errorf",
|
||||
// "exp", // WGSL intrinsic
|
||||
// "exp2", // WGSL intrinsic
|
||||
"explicit",
|
||||
"export",
|
||||
"extern",
|
||||
"f16to32",
|
||||
"f32tof16",
|
||||
// "faceforward", // WGSL intrinsic
|
||||
// "false", // WGSL keyword
|
||||
"fastopt",
|
||||
"firstbithigh",
|
||||
"firstbitlow",
|
||||
"flatten",
|
||||
"float",
|
||||
"float1",
|
||||
"float1x1",
|
||||
"float1x2",
|
||||
"float1x3",
|
||||
"float1x4",
|
||||
"float2",
|
||||
"float2x1",
|
||||
"float2x2",
|
||||
"float2x3",
|
||||
"float2x4",
|
||||
"float3",
|
||||
"float3x1",
|
||||
"float3x2",
|
||||
"float3x3",
|
||||
"float3x4",
|
||||
"float4",
|
||||
"float4x1",
|
||||
"float4x2",
|
||||
"float4x3",
|
||||
"float4x4",
|
||||
// "floor", // WGSL intrinsic
|
||||
// "fma", // WGSL intrinsic
|
||||
"fmod",
|
||||
// "for", // WGSL keyword
|
||||
"forcecase",
|
||||
"frac",
|
||||
// "frexp", // WGSL intrinsic
|
||||
"friend",
|
||||
// "fwidth", // WGSL intrinsic
|
||||
"fxgroup",
|
||||
"goto",
|
||||
"groupshared",
|
||||
"half",
|
||||
"half1",
|
||||
"half1x1",
|
||||
"half1x2",
|
||||
"half1x3",
|
||||
"half1x4",
|
||||
"half2",
|
||||
"half2x1",
|
||||
"half2x2",
|
||||
"half2x3",
|
||||
"half2x4",
|
||||
"half3",
|
||||
"half3x1",
|
||||
"half3x2",
|
||||
"half3x3",
|
||||
"half3x4",
|
||||
"half4",
|
||||
"half4x1",
|
||||
"half4x2",
|
||||
"half4x3",
|
||||
"half4x4",
|
||||
// "if", // WGSL keyword
|
||||
// "in", // WGSL keyword
|
||||
"inline",
|
||||
"inout",
|
||||
"int",
|
||||
"int1",
|
||||
"int1x1",
|
||||
"int1x2",
|
||||
"int1x3",
|
||||
"int1x4",
|
||||
"int2",
|
||||
"int2x1",
|
||||
"int2x2",
|
||||
"int2x3",
|
||||
"int2x4",
|
||||
"int3",
|
||||
"int3x1",
|
||||
"int3x2",
|
||||
"int3x3",
|
||||
"int3x4",
|
||||
"int4",
|
||||
"int4x1",
|
||||
"int4x2",
|
||||
"int4x3",
|
||||
"int4x4",
|
||||
"interface",
|
||||
"isfinite",
|
||||
"isinf",
|
||||
"isnan",
|
||||
// "ldexp", // WGSL intrinsic
|
||||
// "length", // WGSL intrinsic
|
||||
"lerp",
|
||||
"lineadj",
|
||||
"linear",
|
||||
"lit",
|
||||
// "log", // WGSL intrinsic
|
||||
"log10",
|
||||
// "log2", // WGSL intrinsic
|
||||
"long",
|
||||
// "loop", // WGSL keyword
|
||||
"mad",
|
||||
"matrix",
|
||||
// "max", // WGSL intrinsic
|
||||
// "min", // WGSL intrinsic
|
||||
"min10float",
|
||||
"min10float1",
|
||||
"min10float1x1",
|
||||
"min10float1x2",
|
||||
"min10float1x3",
|
||||
"min10float1x4",
|
||||
"min10float2",
|
||||
"min10float2x1",
|
||||
"min10float2x2",
|
||||
"min10float2x3",
|
||||
"min10float2x4",
|
||||
"min10float3",
|
||||
"min10float3x1",
|
||||
"min10float3x2",
|
||||
"min10float3x3",
|
||||
"min10float3x4",
|
||||
"min10float4",
|
||||
"min10float4x1",
|
||||
"min10float4x2",
|
||||
"min10float4x3",
|
||||
"min10float4x4",
|
||||
"min12int",
|
||||
"min12int1",
|
||||
"min12int1x1",
|
||||
"min12int1x2",
|
||||
"min12int1x3",
|
||||
"min12int1x4",
|
||||
"min12int2",
|
||||
"min12int2x1",
|
||||
"min12int2x2",
|
||||
"min12int2x3",
|
||||
"min12int2x4",
|
||||
"min12int3",
|
||||
"min12int3x1",
|
||||
"min12int3x2",
|
||||
"min12int3x3",
|
||||
"min12int3x4",
|
||||
"min12int4",
|
||||
"min12int4x1",
|
||||
"min12int4x2",
|
||||
"min12int4x3",
|
||||
"min12int4x4",
|
||||
"min16float",
|
||||
"min16float1",
|
||||
"min16float1x1",
|
||||
"min16float1x2",
|
||||
"min16float1x3",
|
||||
"min16float1x4",
|
||||
"min16float2",
|
||||
"min16float2x1",
|
||||
"min16float2x2",
|
||||
"min16float2x3",
|
||||
"min16float2x4",
|
||||
"min16float3",
|
||||
"min16float3x1",
|
||||
"min16float3x2",
|
||||
"min16float3x3",
|
||||
"min16float3x4",
|
||||
"min16float4",
|
||||
"min16float4x1",
|
||||
"min16float4x2",
|
||||
"min16float4x3",
|
||||
"min16float4x4",
|
||||
"min16int",
|
||||
"min16int1",
|
||||
"min16int1x1",
|
||||
"min16int1x2",
|
||||
"min16int1x3",
|
||||
"min16int1x4",
|
||||
"min16int2",
|
||||
"min16int2x1",
|
||||
"min16int2x2",
|
||||
"min16int2x3",
|
||||
"min16int2x4",
|
||||
"min16int3",
|
||||
"min16int3x1",
|
||||
"min16int3x2",
|
||||
"min16int3x3",
|
||||
"min16int3x4",
|
||||
"min16int4",
|
||||
"min16int4x1",
|
||||
"min16int4x2",
|
||||
"min16int4x3",
|
||||
"min16int4x4",
|
||||
"min16uint",
|
||||
"min16uint1",
|
||||
"min16uint1x1",
|
||||
"min16uint1x2",
|
||||
"min16uint1x3",
|
||||
"min16uint1x4",
|
||||
"min16uint2",
|
||||
"min16uint2x1",
|
||||
"min16uint2x2",
|
||||
"min16uint2x3",
|
||||
"min16uint2x4",
|
||||
"min16uint3",
|
||||
"min16uint3x1",
|
||||
"min16uint3x2",
|
||||
"min16uint3x3",
|
||||
"min16uint3x4",
|
||||
"min16uint4",
|
||||
"min16uint4x1",
|
||||
"min16uint4x2",
|
||||
"min16uint4x3",
|
||||
"min16uint4x4",
|
||||
// "modf", // WGSL intrinsic
|
||||
"msad4",
|
||||
"mul",
|
||||
"mutable",
|
||||
"namespace",
|
||||
"new",
|
||||
"nointerpolation",
|
||||
"noise",
|
||||
"noperspective",
|
||||
// "normalize", // WGSL intrinsic
|
||||
"numthreads",
|
||||
"operator",
|
||||
// "out", // WGSL keyword
|
||||
"packoffset",
|
||||
"pass",
|
||||
"pixelfragment",
|
||||
"pixelshader",
|
||||
"point",
|
||||
// "pow", // WGSL intrinsic
|
||||
"precise",
|
||||
"printf",
|
||||
// "private", // WGSL keyword
|
||||
"protected",
|
||||
"public",
|
||||
"radians",
|
||||
"rcp",
|
||||
// "reflect", // WGSL intrinsic
|
||||
"refract",
|
||||
"register",
|
||||
"reinterpret_cast",
|
||||
// "return", // WGSL keyword
|
||||
// "reversebits", // WGSL intrinsic
|
||||
// "round", // WGSL intrinsic
|
||||
"row_major",
|
||||
"rsqrt",
|
||||
"sample",
|
||||
"sampler1D",
|
||||
"sampler2D",
|
||||
"sampler3D",
|
||||
"samplerCUBE",
|
||||
"sampler_state",
|
||||
"saturate",
|
||||
"shared",
|
||||
"short",
|
||||
// "sign", // WGSL intrinsic
|
||||
"signed",
|
||||
// "sin", // WGSL intrinsic
|
||||
"sincos",
|
||||
// "sinh", // WGSL intrinsic
|
||||
"sizeof",
|
||||
// "smoothstep", // WGSL intrinsic
|
||||
"snorm",
|
||||
// "sqrt", // WGSL intrinsic
|
||||
"stateblock",
|
||||
"stateblock_state",
|
||||
"static",
|
||||
"static_cast",
|
||||
// "step", // WGSL intrinsic
|
||||
"string",
|
||||
// "struct", // WGSL keyword
|
||||
// "switch", // WGSL keyword
|
||||
// "tan", // WGSL intrinsic
|
||||
// "tanh", // WGSL intrinsic
|
||||
"tbuffer",
|
||||
"technique",
|
||||
"technique10",
|
||||
"technique11",
|
||||
"template",
|
||||
"tex1D",
|
||||
"tex1Dbias",
|
||||
"tex1Dgrad",
|
||||
"tex1Dlod",
|
||||
"tex1Dproj",
|
||||
"tex2D",
|
||||
"tex2Dbias",
|
||||
"tex2Dgrad",
|
||||
"tex2Dlod",
|
||||
"tex2Dproj",
|
||||
"tex3D",
|
||||
"tex3Dbias",
|
||||
"tex3Dgrad",
|
||||
"tex3Dlod",
|
||||
"tex3Dproj",
|
||||
"texCUBE",
|
||||
"texCUBEbias",
|
||||
"texCUBEgrad",
|
||||
"texCUBElod",
|
||||
"texCUBEproj",
|
||||
"texture",
|
||||
"texture1D",
|
||||
"texture1DArray",
|
||||
"texture2D",
|
||||
"texture2DArray",
|
||||
"texture2DMS",
|
||||
"texture2DMSArray",
|
||||
"texture3D",
|
||||
"textureCube",
|
||||
"textureCubeArray",
|
||||
"this",
|
||||
"throw",
|
||||
"transpose",
|
||||
"triangle",
|
||||
"triangleadj",
|
||||
// "true", // WGSL keyword
|
||||
// "trunc", // WGSL intrinsic
|
||||
"try",
|
||||
// "typedef", // WGSL keyword
|
||||
"typename",
|
||||
"uint",
|
||||
"uint1",
|
||||
"uint1x1",
|
||||
"uint1x2",
|
||||
"uint1x3",
|
||||
"uint1x4",
|
||||
"uint2",
|
||||
"uint2x1",
|
||||
"uint2x2",
|
||||
"uint2x3",
|
||||
"uint2x4",
|
||||
"uint3",
|
||||
"uint3x1",
|
||||
"uint3x2",
|
||||
"uint3x3",
|
||||
"uint3x4",
|
||||
"uint4",
|
||||
"uint4x1",
|
||||
"uint4x2",
|
||||
"uint4x3",
|
||||
"uint4x4",
|
||||
// "uniform", // WGSL keyword
|
||||
"union",
|
||||
"unorm",
|
||||
"unroll",
|
||||
"unsigned",
|
||||
"using",
|
||||
"vector",
|
||||
"vertexfragment",
|
||||
"vertexshader",
|
||||
"virtual",
|
||||
// "void", // WGSL keyword
|
||||
"volatile",
|
||||
"while"));
|
||||
|
||||
} // namespace
|
||||
} // namespace transform
|
||||
} // namespace tint
|
||||
|
|
|
@ -16,251 +16,11 @@
|
|||
|
||||
#include <utility>
|
||||
|
||||
#include "src/program_builder.h"
|
||||
#include "src/transform/canonicalize_entry_point_io.h"
|
||||
#include "src/transform/manager.h"
|
||||
|
||||
namespace tint {
|
||||
namespace transform {
|
||||
namespace {
|
||||
// This list is used for a binary search and must be kept in sorted order.
|
||||
const char* kReservedKeywords[] = {"access",
|
||||
"alignas",
|
||||
"alignof",
|
||||
"and",
|
||||
"and_eq",
|
||||
"array",
|
||||
"array_ref",
|
||||
"as_type",
|
||||
"asm",
|
||||
"atomic",
|
||||
"atomic_bool",
|
||||
"atomic_int",
|
||||
"atomic_uint",
|
||||
"auto",
|
||||
"bitand",
|
||||
"bitor",
|
||||
"bool",
|
||||
"bool2",
|
||||
"bool3",
|
||||
"bool4",
|
||||
"break",
|
||||
"buffer",
|
||||
"case",
|
||||
"catch",
|
||||
"char",
|
||||
"char16_t",
|
||||
"char2",
|
||||
"char3",
|
||||
"char32_t",
|
||||
"char4",
|
||||
"class",
|
||||
"compl",
|
||||
"const",
|
||||
"const_cast",
|
||||
"const_reference",
|
||||
"constant",
|
||||
"constexpr",
|
||||
"continue",
|
||||
"decltype",
|
||||
"default",
|
||||
"delete",
|
||||
"depth2d",
|
||||
"depth2d_array",
|
||||
"depth2d_ms",
|
||||
"depth2d_ms_array",
|
||||
"depthcube",
|
||||
"depthcube_array",
|
||||
"device",
|
||||
"discard_fragment",
|
||||
"do",
|
||||
"double",
|
||||
"dynamic_cast",
|
||||
"else",
|
||||
"enum",
|
||||
"explicit",
|
||||
"extern",
|
||||
"false",
|
||||
"final",
|
||||
"float",
|
||||
"float2",
|
||||
"float2x2",
|
||||
"float2x3",
|
||||
"float2x4",
|
||||
"float3",
|
||||
"float3x2",
|
||||
"float3x3",
|
||||
"float3x4",
|
||||
"float4",
|
||||
"float4x2",
|
||||
"float4x3",
|
||||
"float4x4",
|
||||
"for",
|
||||
"fragment",
|
||||
"friend",
|
||||
"goto",
|
||||
"half",
|
||||
"half2",
|
||||
"half2x2",
|
||||
"half2x3",
|
||||
"half2x4",
|
||||
"half3",
|
||||
"half3x2",
|
||||
"half3x3",
|
||||
"half3x4",
|
||||
"half4",
|
||||
"half4x2",
|
||||
"half4x3",
|
||||
"half4x4",
|
||||
"if",
|
||||
"imageblock",
|
||||
"inline",
|
||||
"int",
|
||||
"int16_t",
|
||||
"int2",
|
||||
"int3",
|
||||
"int32_t",
|
||||
"int4",
|
||||
"int64_t",
|
||||
"int8_t",
|
||||
"kernel",
|
||||
"long",
|
||||
"long2",
|
||||
"long3",
|
||||
"long4",
|
||||
"main",
|
||||
"metal",
|
||||
"mutable",
|
||||
"namespace",
|
||||
"new",
|
||||
"noexcept",
|
||||
"not",
|
||||
"not_eq",
|
||||
"nullptr",
|
||||
"operator",
|
||||
"or",
|
||||
"or_eq",
|
||||
"override",
|
||||
"packed_bool2",
|
||||
"packed_bool3",
|
||||
"packed_bool4",
|
||||
"packed_char2",
|
||||
"packed_char3",
|
||||
"packed_char4",
|
||||
"packed_float2",
|
||||
"packed_float3",
|
||||
"packed_float4",
|
||||
"packed_half2",
|
||||
"packed_half3",
|
||||
"packed_half4",
|
||||
"packed_int2",
|
||||
"packed_int3",
|
||||
"packed_int4",
|
||||
"packed_short2",
|
||||
"packed_short3",
|
||||
"packed_short4",
|
||||
"packed_uchar2",
|
||||
"packed_uchar3",
|
||||
"packed_uchar4",
|
||||
"packed_uint2",
|
||||
"packed_uint3",
|
||||
"packed_uint4",
|
||||
"packed_ushort2",
|
||||
"packed_ushort3",
|
||||
"packed_ushort4",
|
||||
"patch_control_point",
|
||||
"private",
|
||||
"protected",
|
||||
"ptrdiff_t",
|
||||
"public",
|
||||
"r16snorm",
|
||||
"r16unorm",
|
||||
"r8unorm",
|
||||
"reference",
|
||||
"register",
|
||||
"reinterpret_cast",
|
||||
"return",
|
||||
"rg11b10f",
|
||||
"rg16snorm",
|
||||
"rg16unorm",
|
||||
"rg8snorm",
|
||||
"rg8unorm",
|
||||
"rgb10a2",
|
||||
"rgb9e5",
|
||||
"rgba16snorm",
|
||||
"rgba16unorm",
|
||||
"rgba8snorm",
|
||||
"rgba8unorm",
|
||||
"sampler",
|
||||
"short",
|
||||
"short2",
|
||||
"short3",
|
||||
"short4",
|
||||
"signed",
|
||||
"size_t",
|
||||
"sizeof",
|
||||
"srgba8unorm",
|
||||
"static",
|
||||
"static_assert",
|
||||
"static_cast",
|
||||
"struct",
|
||||
"switch",
|
||||
"template",
|
||||
"texture",
|
||||
"texture1d",
|
||||
"texture1d_array",
|
||||
"texture2d",
|
||||
"texture2d_array",
|
||||
"texture2d_ms",
|
||||
"texture2d_ms_array",
|
||||
"texture3d",
|
||||
"texture_buffer",
|
||||
"texturecube",
|
||||
"texturecube_array",
|
||||
"this",
|
||||
"thread",
|
||||
"thread_local",
|
||||
"threadgroup",
|
||||
"threadgroup_imageblock",
|
||||
"throw",
|
||||
"true",
|
||||
"try",
|
||||
"typedef",
|
||||
"typeid",
|
||||
"typename",
|
||||
"uchar",
|
||||
"uchar2",
|
||||
"uchar3",
|
||||
"uchar4",
|
||||
"uint",
|
||||
"uint16_t",
|
||||
"uint2",
|
||||
"uint3",
|
||||
"uint32_t",
|
||||
"uint4",
|
||||
"uint64_t",
|
||||
"uint8_t",
|
||||
"ulong2",
|
||||
"ulong3",
|
||||
"ulong4",
|
||||
"uniform",
|
||||
"union",
|
||||
"unsigned",
|
||||
"ushort",
|
||||
"ushort2",
|
||||
"ushort3",
|
||||
"ushort4",
|
||||
"using",
|
||||
"vec",
|
||||
"vertex",
|
||||
"virtual",
|
||||
"void",
|
||||
"volatile",
|
||||
"wchar_t",
|
||||
"while",
|
||||
"xor",
|
||||
"xor_eq"};
|
||||
} // namespace
|
||||
|
||||
Msl::Msl() = default;
|
||||
Msl::~Msl() = default;
|
||||
|
@ -272,12 +32,7 @@ Transform::Output Msl::Run(const Program* in, const DataMap& data) {
|
|||
if (!out.program.IsValid()) {
|
||||
return out;
|
||||
}
|
||||
|
||||
ProgramBuilder builder;
|
||||
CloneContext ctx(&builder, &out.program);
|
||||
RenameReservedKeywords(&ctx, kReservedKeywords);
|
||||
ctx.Clone();
|
||||
return Output{Program(std::move(builder))};
|
||||
return Output{Program(std::move(out.program))};
|
||||
}
|
||||
|
||||
} // namespace transform
|
||||
|
|
|
@ -14,363 +14,12 @@
|
|||
|
||||
#include "src/transform/msl.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "src/transform/test_helper.h"
|
||||
|
||||
namespace tint {
|
||||
namespace transform {
|
||||
namespace {
|
||||
|
||||
using MslReservedKeywordTest = TransformTestWithParam<std::string>;
|
||||
|
||||
TEST_F(MslReservedKeywordTest, Basic) {
|
||||
auto* src = R"(
|
||||
struct class {
|
||||
delete : i32;
|
||||
};
|
||||
|
||||
[[stage(fragment)]]
|
||||
fn main() {
|
||||
var foo : i32;
|
||||
var half : f32;
|
||||
var half1 : f32;
|
||||
var half2 : f32;
|
||||
var tint_half2 : f32;
|
||||
}
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
struct tint_class {
|
||||
tint_delete : i32;
|
||||
};
|
||||
|
||||
[[stage(fragment)]]
|
||||
fn tint_main() {
|
||||
var foo : i32;
|
||||
var tint_half : f32;
|
||||
var half1 : f32;
|
||||
var tint_half2 : f32;
|
||||
var tint_half2_1 : f32;
|
||||
}
|
||||
)";
|
||||
|
||||
auto got = Run<Msl>(src);
|
||||
|
||||
EXPECT_EQ(expect, str(got));
|
||||
}
|
||||
|
||||
TEST_P(MslReservedKeywordTest, Keywords) {
|
||||
auto keyword = GetParam();
|
||||
|
||||
auto src = R"(
|
||||
[[stage(fragment)]]
|
||||
fn main() {
|
||||
var )" + keyword +
|
||||
R"( : i32;
|
||||
}
|
||||
)";
|
||||
|
||||
auto expect = R"(
|
||||
[[stage(fragment)]]
|
||||
fn tint_main() {
|
||||
var tint_)" + keyword +
|
||||
R"( : i32;
|
||||
}
|
||||
)";
|
||||
|
||||
auto got = Run<Msl>(src);
|
||||
|
||||
EXPECT_EQ(expect, str(got));
|
||||
}
|
||||
|
||||
TEST_P(MslReservedKeywordTest, AttemptSymbolCollision) {
|
||||
auto keyword = GetParam();
|
||||
|
||||
auto src = R"(
|
||||
[[stage(fragment)]]
|
||||
fn frag_main() {
|
||||
var tint_)" +
|
||||
keyword +
|
||||
R"( : i32;
|
||||
var tint_)" +
|
||||
keyword +
|
||||
R"(_1 : i32;
|
||||
var )" + keyword +
|
||||
R"( : i32;
|
||||
var tint_)" +
|
||||
keyword +
|
||||
R"(_2 : i32;
|
||||
var tint_)" +
|
||||
keyword +
|
||||
R"(_3 : i32;
|
||||
}
|
||||
)";
|
||||
|
||||
auto expect = R"(
|
||||
[[stage(fragment)]]
|
||||
fn frag_main() {
|
||||
var tint_)" + keyword +
|
||||
R"( : i32;
|
||||
var tint_)" + keyword +
|
||||
R"(_1 : i32;
|
||||
var tint_)" + keyword +
|
||||
R"(_2 : i32;
|
||||
var tint_)" + keyword +
|
||||
R"(_2_1 : i32;
|
||||
var tint_)" + keyword +
|
||||
R"(_3 : i32;
|
||||
}
|
||||
)";
|
||||
|
||||
auto got = Run<Msl>(src);
|
||||
|
||||
EXPECT_EQ(expect, str(got));
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(MslReservedKeywordTest,
|
||||
MslReservedKeywordTest,
|
||||
testing::Values(
|
||||
// c++14 spec
|
||||
"alignas",
|
||||
"alignof",
|
||||
"and",
|
||||
"and_eq",
|
||||
// "asm", // Also reserved in WGSL
|
||||
"auto",
|
||||
"bitand",
|
||||
"bitor",
|
||||
// "bool", // Also used in WGSL
|
||||
// "break", // Also used in WGSL
|
||||
// "case", // Also used in WGSL
|
||||
"catch",
|
||||
"char",
|
||||
"char16_t",
|
||||
"char32_t",
|
||||
"class",
|
||||
"compl",
|
||||
// "const", // Also used in WGSL
|
||||
"const_cast",
|
||||
"constexpr",
|
||||
// "continue", // Also used in WGSL
|
||||
"decltype",
|
||||
// "default", // Also used in WGSL
|
||||
"delete",
|
||||
// "do", // Also used in WGSL
|
||||
"double",
|
||||
"dynamic_cast",
|
||||
// "else", // Also used in WGSL
|
||||
// "enum", // Also used in WGSL
|
||||
"explicit",
|
||||
"extern",
|
||||
// "false", // Also used in WGSL
|
||||
"final",
|
||||
"float",
|
||||
// "for", // Also used in WGSL
|
||||
"friend",
|
||||
"goto",
|
||||
// "if", // Also used in WGSL
|
||||
"inline",
|
||||
"int",
|
||||
"long",
|
||||
"mutable",
|
||||
"namespace",
|
||||
"new",
|
||||
"noexcept",
|
||||
"not",
|
||||
"not_eq",
|
||||
"nullptr",
|
||||
"operator",
|
||||
"or",
|
||||
"or_eq",
|
||||
"override",
|
||||
// "private", // Also used in WGSL
|
||||
"protected",
|
||||
"public",
|
||||
"register",
|
||||
"reinterpret_cast",
|
||||
// "return", // Also used in WGSL
|
||||
"short",
|
||||
"signed",
|
||||
"sizeof",
|
||||
"static",
|
||||
"static_assert",
|
||||
"static_cast",
|
||||
// "struct", // Also used in WGSL
|
||||
// "switch", // Also used in WGSL
|
||||
"template",
|
||||
"this",
|
||||
"thread_local",
|
||||
"throw",
|
||||
// "true", // Also used in WGSL
|
||||
"try",
|
||||
// "typedef", // Also used in WGSL
|
||||
"typeid",
|
||||
"typename",
|
||||
"union",
|
||||
"unsigned",
|
||||
"using",
|
||||
"virtual",
|
||||
// "void", // Also used in WGSL
|
||||
"volatile",
|
||||
"wchar_t",
|
||||
"while",
|
||||
"xor",
|
||||
"xor_eq",
|
||||
|
||||
// Metal Spec
|
||||
"access",
|
||||
// "array", // Also used in WGSL
|
||||
"array_ref",
|
||||
"as_type",
|
||||
"atomic",
|
||||
"atomic_bool",
|
||||
"atomic_int",
|
||||
"atomic_uint",
|
||||
"bool2",
|
||||
"bool3",
|
||||
"bool4",
|
||||
"buffer",
|
||||
"char2",
|
||||
"char3",
|
||||
"char4",
|
||||
"const_reference",
|
||||
"constant",
|
||||
"depth2d",
|
||||
"depth2d_array",
|
||||
"depth2d_ms",
|
||||
"depth2d_ms_array",
|
||||
"depthcube",
|
||||
"depthcube_array",
|
||||
"device",
|
||||
"discard_fragment",
|
||||
"float2",
|
||||
"float2x2",
|
||||
"float2x3",
|
||||
"float2x4",
|
||||
"float3",
|
||||
"float3x2",
|
||||
"float3x3",
|
||||
"float3x4",
|
||||
"float4",
|
||||
"float4x2",
|
||||
"float4x3",
|
||||
"float4x4",
|
||||
"fragment",
|
||||
"half",
|
||||
"half2",
|
||||
"half2x2",
|
||||
"half2x3",
|
||||
"half2x4",
|
||||
"half3",
|
||||
"half3x2",
|
||||
"half3x3",
|
||||
"half3x4",
|
||||
"half4",
|
||||
"half4x2",
|
||||
"half4x3",
|
||||
"half4x4",
|
||||
"imageblock",
|
||||
"int16_t",
|
||||
"int2",
|
||||
"int3",
|
||||
"int32_t",
|
||||
"int4",
|
||||
"int64_t",
|
||||
"int8_t",
|
||||
"kernel",
|
||||
"long2",
|
||||
"long3",
|
||||
"long4",
|
||||
"main", // No functions called main
|
||||
"metal", // The namespace
|
||||
"packed_bool2",
|
||||
"packed_bool3",
|
||||
"packed_bool4",
|
||||
"packed_char2",
|
||||
"packed_char3",
|
||||
"packed_char4",
|
||||
"packed_float2",
|
||||
"packed_float3",
|
||||
"packed_float4",
|
||||
"packed_half2",
|
||||
"packed_half3",
|
||||
"packed_half4",
|
||||
"packed_int2",
|
||||
"packed_int3",
|
||||
"packed_int4",
|
||||
"packed_short2",
|
||||
"packed_short3",
|
||||
"packed_short4",
|
||||
"packed_uchar2",
|
||||
"packed_uchar3",
|
||||
"packed_uchar4",
|
||||
"packed_uint2",
|
||||
"packed_uint3",
|
||||
"packed_uint4",
|
||||
"packed_ushort2",
|
||||
"packed_ushort3",
|
||||
"packed_ushort4",
|
||||
"patch_control_point",
|
||||
"ptrdiff_t",
|
||||
"r16snorm",
|
||||
"r16unorm",
|
||||
// "r8unorm", // Also used in WGSL
|
||||
"reference",
|
||||
"rg11b10f",
|
||||
"rg16snorm",
|
||||
"rg16unorm",
|
||||
// "rg8snorm", // Also used in WGSL
|
||||
// "rg8unorm", // Also used in WGSL
|
||||
"rgb10a2",
|
||||
"rgb9e5",
|
||||
"rgba16snorm",
|
||||
"rgba16unorm",
|
||||
// "rgba8snorm", // Also used in WGSL
|
||||
// "rgba8unorm", // Also used in WGSL
|
||||
// "sampler", // Also used in WGSL
|
||||
"short2",
|
||||
"short3",
|
||||
"short4",
|
||||
"size_t",
|
||||
"srgba8unorm",
|
||||
"texture",
|
||||
"texture1d",
|
||||
"texture1d_array",
|
||||
"texture2d",
|
||||
"texture2d_array",
|
||||
"texture2d_ms",
|
||||
"texture2d_ms_array",
|
||||
"texture3d",
|
||||
"texture_buffer",
|
||||
"texturecube",
|
||||
"texturecube_array",
|
||||
"thread",
|
||||
"threadgroup",
|
||||
"threadgroup_imageblock",
|
||||
"uchar",
|
||||
"uchar2",
|
||||
"uchar3",
|
||||
"uchar4",
|
||||
"uint",
|
||||
"uint16_t",
|
||||
"uint2",
|
||||
"uint3",
|
||||
"uint32_t",
|
||||
"uint4",
|
||||
"uint64_t",
|
||||
"uint8_t",
|
||||
"ulong2",
|
||||
"ulong3",
|
||||
"ulong4",
|
||||
// "uniform", // Also used in WGSL
|
||||
"ushort",
|
||||
"ushort2",
|
||||
"ushort3",
|
||||
"ushort4",
|
||||
"vec",
|
||||
"vertex"));
|
||||
|
||||
} // namespace
|
||||
} // namespace transform
|
||||
} // namespace tint
|
||||
|
|
|
@ -27,6 +27,813 @@ TINT_INSTANTIATE_TYPEINFO(tint::transform::Renamer::Data);
|
|||
namespace tint {
|
||||
namespace transform {
|
||||
|
||||
namespace {
|
||||
|
||||
// This list is used for a binary search and must be kept in sorted order.
|
||||
const char* kReservedKeywordsHLSL[] = {"AddressU",
|
||||
"AddressV",
|
||||
"AddressW",
|
||||
"AllMemoryBarrier",
|
||||
"AllMemoryBarrierWithGroupSync",
|
||||
"AppendStructuredBuffer",
|
||||
"BINORMAL",
|
||||
"BLENDINDICES",
|
||||
"BLENDWEIGHT",
|
||||
"BlendState",
|
||||
"BorderColor",
|
||||
"Buffer",
|
||||
"ByteAddressBuffer",
|
||||
"COLOR",
|
||||
"CheckAccessFullyMapped",
|
||||
"ComparisonFunc",
|
||||
"CompileShader",
|
||||
"ComputeShader",
|
||||
"ConsumeStructuredBuffer",
|
||||
"D3DCOLORtoUBYTE4",
|
||||
"DEPTH",
|
||||
"DepthStencilState",
|
||||
"DepthStencilView",
|
||||
"DeviceMemoryBarrier",
|
||||
"DeviceMemroyBarrierWithGroupSync",
|
||||
"DomainShader",
|
||||
"EvaluateAttributeAtCentroid",
|
||||
"EvaluateAttributeAtSample",
|
||||
"EvaluateAttributeSnapped",
|
||||
"FOG",
|
||||
"Filter",
|
||||
"GeometryShader",
|
||||
"GetRenderTargetSampleCount",
|
||||
"GetRenderTargetSamplePosition",
|
||||
"GroupMemoryBarrier",
|
||||
"GroupMemroyBarrierWithGroupSync",
|
||||
"Hullshader",
|
||||
"InputPatch",
|
||||
"InterlockedAdd",
|
||||
"InterlockedAnd",
|
||||
"InterlockedCompareExchange",
|
||||
"InterlockedCompareStore",
|
||||
"InterlockedExchange",
|
||||
"InterlockedMax",
|
||||
"InterlockedMin",
|
||||
"InterlockedOr",
|
||||
"InterlockedXor",
|
||||
"LineStream",
|
||||
"MaxAnisotropy",
|
||||
"MaxLOD",
|
||||
"MinLOD",
|
||||
"MipLODBias",
|
||||
"NORMAL",
|
||||
"NULL",
|
||||
"Normal",
|
||||
"OutputPatch",
|
||||
"POSITION",
|
||||
"POSITIONT",
|
||||
"PSIZE",
|
||||
"PixelShader",
|
||||
"PointStream",
|
||||
"Process2DQuadTessFactorsAvg",
|
||||
"Process2DQuadTessFactorsMax",
|
||||
"Process2DQuadTessFactorsMin",
|
||||
"ProcessIsolineTessFactors",
|
||||
"ProcessQuadTessFactorsAvg",
|
||||
"ProcessQuadTessFactorsMax",
|
||||
"ProcessQuadTessFactorsMin",
|
||||
"ProcessTriTessFactorsAvg",
|
||||
"ProcessTriTessFactorsMax",
|
||||
"ProcessTriTessFactorsMin",
|
||||
"RWBuffer",
|
||||
"RWByteAddressBuffer",
|
||||
"RWStructuredBuffer",
|
||||
"RWTexture1D",
|
||||
"RWTexture2D",
|
||||
"RWTexture2DArray",
|
||||
"RWTexture3D",
|
||||
"RasterizerState",
|
||||
"RenderTargetView",
|
||||
"SV_ClipDistance",
|
||||
"SV_Coverage",
|
||||
"SV_CullDistance",
|
||||
"SV_Depth",
|
||||
"SV_DepthGreaterEqual",
|
||||
"SV_DepthLessEqual",
|
||||
"SV_DispatchThreadID",
|
||||
"SV_DomainLocation",
|
||||
"SV_GSInstanceID",
|
||||
"SV_GroupID",
|
||||
"SV_GroupIndex",
|
||||
"SV_GroupThreadID",
|
||||
"SV_InnerCoverage",
|
||||
"SV_InsideTessFactor",
|
||||
"SV_InstanceID",
|
||||
"SV_IsFrontFace",
|
||||
"SV_OutputControlPointID",
|
||||
"SV_Position",
|
||||
"SV_PrimitiveID",
|
||||
"SV_RenderTargetArrayIndex",
|
||||
"SV_SampleIndex",
|
||||
"SV_StencilRef",
|
||||
"SV_Target",
|
||||
"SV_TessFactor",
|
||||
"SV_VertexArrayIndex",
|
||||
"SV_VertexID",
|
||||
"Sampler",
|
||||
"Sampler1D",
|
||||
"Sampler2D",
|
||||
"Sampler3D",
|
||||
"SamplerCUBE",
|
||||
"StructuredBuffer",
|
||||
"TANGENT",
|
||||
"TESSFACTOR",
|
||||
"TEXCOORD",
|
||||
"Texcoord",
|
||||
"Texture",
|
||||
"Texture1D",
|
||||
"Texture2D",
|
||||
"Texture2DArray",
|
||||
"Texture2DMS",
|
||||
"Texture2DMSArray",
|
||||
"Texture3D",
|
||||
"TextureCube",
|
||||
"TextureCubeArray",
|
||||
"TriangleStream",
|
||||
"VFACE",
|
||||
"VPOS",
|
||||
"VertexShader",
|
||||
"abort",
|
||||
"allow_uav_condition",
|
||||
"asdouble",
|
||||
"asfloat",
|
||||
"asint",
|
||||
"asm",
|
||||
"asm_fragment",
|
||||
"asuint",
|
||||
"auto",
|
||||
"bool",
|
||||
"bool1",
|
||||
"bool1x1",
|
||||
"bool1x2",
|
||||
"bool1x3",
|
||||
"bool1x4",
|
||||
"bool2",
|
||||
"bool2x1",
|
||||
"bool2x2",
|
||||
"bool2x3",
|
||||
"bool2x4",
|
||||
"bool3",
|
||||
"bool3x1",
|
||||
"bool3x2",
|
||||
"bool3x3",
|
||||
"bool3x4",
|
||||
"bool4",
|
||||
"bool4x1",
|
||||
"bool4x2",
|
||||
"bool4x3",
|
||||
"bool4x4",
|
||||
"branch",
|
||||
"break",
|
||||
"call",
|
||||
"case",
|
||||
"catch",
|
||||
"cbuffer",
|
||||
"centroid",
|
||||
"char",
|
||||
"class",
|
||||
"clip",
|
||||
"column_major",
|
||||
"compile_fragment",
|
||||
"const",
|
||||
"const_cast",
|
||||
"continue",
|
||||
"countbits",
|
||||
"ddx",
|
||||
"ddx_coarse",
|
||||
"ddx_fine",
|
||||
"ddy",
|
||||
"ddy_coarse",
|
||||
"ddy_fine",
|
||||
"degrees",
|
||||
"delete",
|
||||
"discard",
|
||||
"do",
|
||||
"double",
|
||||
"double1",
|
||||
"double1x1",
|
||||
"double1x2",
|
||||
"double1x3",
|
||||
"double1x4",
|
||||
"double2",
|
||||
"double2x1",
|
||||
"double2x2",
|
||||
"double2x3",
|
||||
"double2x4",
|
||||
"double3",
|
||||
"double3x1",
|
||||
"double3x2",
|
||||
"double3x3",
|
||||
"double3x4",
|
||||
"double4",
|
||||
"double4x1",
|
||||
"double4x2",
|
||||
"double4x3",
|
||||
"double4x4",
|
||||
"dst",
|
||||
"dword",
|
||||
"dword1",
|
||||
"dword1x1",
|
||||
"dword1x2",
|
||||
"dword1x3",
|
||||
"dword1x4",
|
||||
"dword2",
|
||||
"dword2x1",
|
||||
"dword2x2",
|
||||
"dword2x3",
|
||||
"dword2x4",
|
||||
"dword3",
|
||||
"dword3x1",
|
||||
"dword3x2",
|
||||
"dword3x3",
|
||||
"dword3x4",
|
||||
"dword4",
|
||||
"dword4x1",
|
||||
"dword4x2",
|
||||
"dword4x3",
|
||||
"dword4x4",
|
||||
"dynamic_cast",
|
||||
"else",
|
||||
"enum",
|
||||
"errorf",
|
||||
"explicit",
|
||||
"export",
|
||||
"extern",
|
||||
"f16to32",
|
||||
"f32tof16",
|
||||
"false",
|
||||
"fastopt",
|
||||
"firstbithigh",
|
||||
"firstbitlow",
|
||||
"flatten",
|
||||
"float",
|
||||
"float1",
|
||||
"float1x1",
|
||||
"float1x2",
|
||||
"float1x3",
|
||||
"float1x4",
|
||||
"float2",
|
||||
"float2x1",
|
||||
"float2x2",
|
||||
"float2x3",
|
||||
"float2x4",
|
||||
"float3",
|
||||
"float3x1",
|
||||
"float3x2",
|
||||
"float3x3",
|
||||
"float3x4",
|
||||
"float4",
|
||||
"float4x1",
|
||||
"float4x2",
|
||||
"float4x3",
|
||||
"float4x4",
|
||||
"fmod",
|
||||
"for",
|
||||
"forcecase",
|
||||
"frac",
|
||||
"friend",
|
||||
"fxgroup",
|
||||
"goto",
|
||||
"groupshared",
|
||||
"half",
|
||||
"half1",
|
||||
"half1x1",
|
||||
"half1x2",
|
||||
"half1x3",
|
||||
"half1x4",
|
||||
"half2",
|
||||
"half2x1",
|
||||
"half2x2",
|
||||
"half2x3",
|
||||
"half2x4",
|
||||
"half3",
|
||||
"half3x1",
|
||||
"half3x2",
|
||||
"half3x3",
|
||||
"half3x4",
|
||||
"half4",
|
||||
"half4x1",
|
||||
"half4x2",
|
||||
"half4x3",
|
||||
"half4x4",
|
||||
"if",
|
||||
"in",
|
||||
"inline",
|
||||
"inout",
|
||||
"int",
|
||||
"int1",
|
||||
"int1x1",
|
||||
"int1x2",
|
||||
"int1x3",
|
||||
"int1x4",
|
||||
"int2",
|
||||
"int2x1",
|
||||
"int2x2",
|
||||
"int2x3",
|
||||
"int2x4",
|
||||
"int3",
|
||||
"int3x1",
|
||||
"int3x2",
|
||||
"int3x3",
|
||||
"int3x4",
|
||||
"int4",
|
||||
"int4x1",
|
||||
"int4x2",
|
||||
"int4x3",
|
||||
"int4x4",
|
||||
"interface",
|
||||
"isfinite",
|
||||
"isinf",
|
||||
"isnan",
|
||||
"lerp",
|
||||
"lineadj",
|
||||
"linear",
|
||||
"lit",
|
||||
"log10",
|
||||
"long",
|
||||
"loop",
|
||||
"mad",
|
||||
"matrix",
|
||||
"min10float",
|
||||
"min10float1",
|
||||
"min10float1x1",
|
||||
"min10float1x2",
|
||||
"min10float1x3",
|
||||
"min10float1x4",
|
||||
"min10float2",
|
||||
"min10float2x1",
|
||||
"min10float2x2",
|
||||
"min10float2x3",
|
||||
"min10float2x4",
|
||||
"min10float3",
|
||||
"min10float3x1",
|
||||
"min10float3x2",
|
||||
"min10float3x3",
|
||||
"min10float3x4",
|
||||
"min10float4",
|
||||
"min10float4x1",
|
||||
"min10float4x2",
|
||||
"min10float4x3",
|
||||
"min10float4x4",
|
||||
"min12int",
|
||||
"min12int1",
|
||||
"min12int1x1",
|
||||
"min12int1x2",
|
||||
"min12int1x3",
|
||||
"min12int1x4",
|
||||
"min12int2",
|
||||
"min12int2x1",
|
||||
"min12int2x2",
|
||||
"min12int2x3",
|
||||
"min12int2x4",
|
||||
"min12int3",
|
||||
"min12int3x1",
|
||||
"min12int3x2",
|
||||
"min12int3x3",
|
||||
"min12int3x4",
|
||||
"min12int4",
|
||||
"min12int4x1",
|
||||
"min12int4x2",
|
||||
"min12int4x3",
|
||||
"min12int4x4",
|
||||
"min16float",
|
||||
"min16float1",
|
||||
"min16float1x1",
|
||||
"min16float1x2",
|
||||
"min16float1x3",
|
||||
"min16float1x4",
|
||||
"min16float2",
|
||||
"min16float2x1",
|
||||
"min16float2x2",
|
||||
"min16float2x3",
|
||||
"min16float2x4",
|
||||
"min16float3",
|
||||
"min16float3x1",
|
||||
"min16float3x2",
|
||||
"min16float3x3",
|
||||
"min16float3x4",
|
||||
"min16float4",
|
||||
"min16float4x1",
|
||||
"min16float4x2",
|
||||
"min16float4x3",
|
||||
"min16float4x4",
|
||||
"min16int",
|
||||
"min16int1",
|
||||
"min16int1x1",
|
||||
"min16int1x2",
|
||||
"min16int1x3",
|
||||
"min16int1x4",
|
||||
"min16int2",
|
||||
"min16int2x1",
|
||||
"min16int2x2",
|
||||
"min16int2x3",
|
||||
"min16int2x4",
|
||||
"min16int3",
|
||||
"min16int3x1",
|
||||
"min16int3x2",
|
||||
"min16int3x3",
|
||||
"min16int3x4",
|
||||
"min16int4",
|
||||
"min16int4x1",
|
||||
"min16int4x2",
|
||||
"min16int4x3",
|
||||
"min16int4x4",
|
||||
"min16uint",
|
||||
"min16uint1",
|
||||
"min16uint1x1",
|
||||
"min16uint1x2",
|
||||
"min16uint1x3",
|
||||
"min16uint1x4",
|
||||
"min16uint2",
|
||||
"min16uint2x1",
|
||||
"min16uint2x2",
|
||||
"min16uint2x3",
|
||||
"min16uint2x4",
|
||||
"min16uint3",
|
||||
"min16uint3x1",
|
||||
"min16uint3x2",
|
||||
"min16uint3x3",
|
||||
"min16uint3x4",
|
||||
"min16uint4",
|
||||
"min16uint4x1",
|
||||
"min16uint4x2",
|
||||
"min16uint4x3",
|
||||
"min16uint4x4",
|
||||
"msad4",
|
||||
"mul",
|
||||
"mutable",
|
||||
"namespace",
|
||||
"new",
|
||||
"nointerpolation",
|
||||
"noise",
|
||||
"noperspective",
|
||||
"numthreads",
|
||||
"operator",
|
||||
"out",
|
||||
"packoffset",
|
||||
"pass",
|
||||
"pixelfragment",
|
||||
"pixelshader",
|
||||
"point",
|
||||
"precise",
|
||||
"printf",
|
||||
"private",
|
||||
"protected",
|
||||
"public",
|
||||
"radians",
|
||||
"rcp",
|
||||
"refract",
|
||||
"register",
|
||||
"reinterpret_cast",
|
||||
"return",
|
||||
"row_major",
|
||||
"rsqrt",
|
||||
"sample",
|
||||
"sampler",
|
||||
"sampler1D",
|
||||
"sampler2D",
|
||||
"sampler3D",
|
||||
"samplerCUBE",
|
||||
"sampler_state",
|
||||
"saturate",
|
||||
"shared",
|
||||
"short",
|
||||
"signed",
|
||||
"sincos",
|
||||
"sizeof",
|
||||
"snorm",
|
||||
"stateblock",
|
||||
"stateblock_state",
|
||||
"static",
|
||||
"static_cast",
|
||||
"string",
|
||||
"struct",
|
||||
"switch",
|
||||
"tbuffer",
|
||||
"technique",
|
||||
"technique10",
|
||||
"technique11",
|
||||
"template",
|
||||
"tex1D",
|
||||
"tex1Dbias",
|
||||
"tex1Dgrad",
|
||||
"tex1Dlod",
|
||||
"tex1Dproj",
|
||||
"tex2D",
|
||||
"tex2Dbias",
|
||||
"tex2Dgrad",
|
||||
"tex2Dlod",
|
||||
"tex2Dproj",
|
||||
"tex3D",
|
||||
"tex3Dbias",
|
||||
"tex3Dgrad",
|
||||
"tex3Dlod",
|
||||
"tex3Dproj",
|
||||
"texCUBE",
|
||||
"texCUBEbias",
|
||||
"texCUBEgrad",
|
||||
"texCUBElod",
|
||||
"texCUBEproj",
|
||||
"texture",
|
||||
"texture1D",
|
||||
"texture1DArray",
|
||||
"texture2D",
|
||||
"texture2DArray",
|
||||
"texture2DMS",
|
||||
"texture2DMSArray",
|
||||
"texture3D",
|
||||
"textureCube",
|
||||
"textureCubeArray",
|
||||
"this",
|
||||
"throw",
|
||||
"transpose",
|
||||
"triangle",
|
||||
"triangleadj",
|
||||
"true",
|
||||
"try",
|
||||
"typedef",
|
||||
"typename",
|
||||
"uint",
|
||||
"uint1",
|
||||
"uint1x1",
|
||||
"uint1x2",
|
||||
"uint1x3",
|
||||
"uint1x4",
|
||||
"uint2",
|
||||
"uint2x1",
|
||||
"uint2x2",
|
||||
"uint2x3",
|
||||
"uint2x4",
|
||||
"uint3",
|
||||
"uint3x1",
|
||||
"uint3x2",
|
||||
"uint3x3",
|
||||
"uint3x4",
|
||||
"uint4",
|
||||
"uint4x1",
|
||||
"uint4x2",
|
||||
"uint4x3",
|
||||
"uint4x4",
|
||||
"uniform",
|
||||
"union",
|
||||
"unorm",
|
||||
"unroll",
|
||||
"unsigned",
|
||||
"using",
|
||||
"vector",
|
||||
"vertexfragment",
|
||||
"vertexshader",
|
||||
"virtual",
|
||||
"void",
|
||||
"volatile",
|
||||
"while"};
|
||||
|
||||
// This list is used for a binary search and must be kept in sorted order.
|
||||
const char* kReservedKeywordsMSL[] = {"access",
|
||||
"alignas",
|
||||
"alignof",
|
||||
"and",
|
||||
"and_eq",
|
||||
"array",
|
||||
"array_ref",
|
||||
"as_type",
|
||||
"asm",
|
||||
"atomic",
|
||||
"atomic_bool",
|
||||
"atomic_int",
|
||||
"atomic_uint",
|
||||
"auto",
|
||||
"bitand",
|
||||
"bitor",
|
||||
"bool",
|
||||
"bool2",
|
||||
"bool3",
|
||||
"bool4",
|
||||
"break",
|
||||
"buffer",
|
||||
"case",
|
||||
"catch",
|
||||
"char",
|
||||
"char16_t",
|
||||
"char2",
|
||||
"char3",
|
||||
"char32_t",
|
||||
"char4",
|
||||
"class",
|
||||
"compl",
|
||||
"const",
|
||||
"const_cast",
|
||||
"const_reference",
|
||||
"constant",
|
||||
"constexpr",
|
||||
"continue",
|
||||
"decltype",
|
||||
"default",
|
||||
"delete",
|
||||
"depth2d",
|
||||
"depth2d_array",
|
||||
"depth2d_ms",
|
||||
"depth2d_ms_array",
|
||||
"depthcube",
|
||||
"depthcube_array",
|
||||
"device",
|
||||
"discard_fragment",
|
||||
"do",
|
||||
"double",
|
||||
"dynamic_cast",
|
||||
"else",
|
||||
"enum",
|
||||
"explicit",
|
||||
"extern",
|
||||
"false",
|
||||
"final",
|
||||
"float",
|
||||
"float2",
|
||||
"float2x2",
|
||||
"float2x3",
|
||||
"float2x4",
|
||||
"float3",
|
||||
"float3x2",
|
||||
"float3x3",
|
||||
"float3x4",
|
||||
"float4",
|
||||
"float4x2",
|
||||
"float4x3",
|
||||
"float4x4",
|
||||
"for",
|
||||
"fragment",
|
||||
"friend",
|
||||
"goto",
|
||||
"half",
|
||||
"half2",
|
||||
"half2x2",
|
||||
"half2x3",
|
||||
"half2x4",
|
||||
"half3",
|
||||
"half3x2",
|
||||
"half3x3",
|
||||
"half3x4",
|
||||
"half4",
|
||||
"half4x2",
|
||||
"half4x3",
|
||||
"half4x4",
|
||||
"if",
|
||||
"imageblock",
|
||||
"inline",
|
||||
"int",
|
||||
"int16_t",
|
||||
"int2",
|
||||
"int3",
|
||||
"int32_t",
|
||||
"int4",
|
||||
"int64_t",
|
||||
"int8_t",
|
||||
"kernel",
|
||||
"long",
|
||||
"long2",
|
||||
"long3",
|
||||
"long4",
|
||||
"main",
|
||||
"metal",
|
||||
"mutable",
|
||||
"namespace",
|
||||
"new",
|
||||
"noexcept",
|
||||
"not",
|
||||
"not_eq",
|
||||
"nullptr",
|
||||
"operator",
|
||||
"or",
|
||||
"or_eq",
|
||||
"override",
|
||||
"packed_bool2",
|
||||
"packed_bool3",
|
||||
"packed_bool4",
|
||||
"packed_char2",
|
||||
"packed_char3",
|
||||
"packed_char4",
|
||||
"packed_float2",
|
||||
"packed_float3",
|
||||
"packed_float4",
|
||||
"packed_half2",
|
||||
"packed_half3",
|
||||
"packed_half4",
|
||||
"packed_int2",
|
||||
"packed_int3",
|
||||
"packed_int4",
|
||||
"packed_short2",
|
||||
"packed_short3",
|
||||
"packed_short4",
|
||||
"packed_uchar2",
|
||||
"packed_uchar3",
|
||||
"packed_uchar4",
|
||||
"packed_uint2",
|
||||
"packed_uint3",
|
||||
"packed_uint4",
|
||||
"packed_ushort2",
|
||||
"packed_ushort3",
|
||||
"packed_ushort4",
|
||||
"patch_control_point",
|
||||
"private",
|
||||
"protected",
|
||||
"ptrdiff_t",
|
||||
"public",
|
||||
"r16snorm",
|
||||
"r16unorm",
|
||||
"r8unorm",
|
||||
"reference",
|
||||
"register",
|
||||
"reinterpret_cast",
|
||||
"return",
|
||||
"rg11b10f",
|
||||
"rg16snorm",
|
||||
"rg16unorm",
|
||||
"rg8snorm",
|
||||
"rg8unorm",
|
||||
"rgb10a2",
|
||||
"rgb9e5",
|
||||
"rgba16snorm",
|
||||
"rgba16unorm",
|
||||
"rgba8snorm",
|
||||
"rgba8unorm",
|
||||
"sampler",
|
||||
"short",
|
||||
"short2",
|
||||
"short3",
|
||||
"short4",
|
||||
"signed",
|
||||
"size_t",
|
||||
"sizeof",
|
||||
"srgba8unorm",
|
||||
"static",
|
||||
"static_assert",
|
||||
"static_cast",
|
||||
"struct",
|
||||
"switch",
|
||||
"template",
|
||||
"texture",
|
||||
"texture1d",
|
||||
"texture1d_array",
|
||||
"texture2d",
|
||||
"texture2d_array",
|
||||
"texture2d_ms",
|
||||
"texture2d_ms_array",
|
||||
"texture3d",
|
||||
"texture_buffer",
|
||||
"texturecube",
|
||||
"texturecube_array",
|
||||
"this",
|
||||
"thread",
|
||||
"thread_local",
|
||||
"threadgroup",
|
||||
"threadgroup_imageblock",
|
||||
"throw",
|
||||
"true",
|
||||
"try",
|
||||
"typedef",
|
||||
"typeid",
|
||||
"typename",
|
||||
"uchar",
|
||||
"uchar2",
|
||||
"uchar3",
|
||||
"uchar4",
|
||||
"uint",
|
||||
"uint16_t",
|
||||
"uint2",
|
||||
"uint3",
|
||||
"uint32_t",
|
||||
"uint4",
|
||||
"uint64_t",
|
||||
"uint8_t",
|
||||
"ulong2",
|
||||
"ulong3",
|
||||
"ulong4",
|
||||
"uniform",
|
||||
"union",
|
||||
"unsigned",
|
||||
"ushort",
|
||||
"ushort2",
|
||||
"ushort3",
|
||||
"ushort4",
|
||||
"using",
|
||||
"vec",
|
||||
"vertex",
|
||||
"virtual",
|
||||
"void",
|
||||
"volatile",
|
||||
"wchar_t",
|
||||
"while",
|
||||
"xor",
|
||||
"xor_eq"};
|
||||
|
||||
} // namespace
|
||||
|
||||
Renamer::Data::Data(Remappings&& r) : remappings(std::move(r)) {}
|
||||
|
||||
Renamer::Data::Data(const Data&) = default;
|
||||
|
@ -70,12 +877,36 @@ Transform::Output Renamer::Run(const Program* in, const DataMap&) {
|
|||
|
||||
Data::Remappings remappings;
|
||||
|
||||
switch (cfg_.method) {
|
||||
case Method::kMonotonic:
|
||||
ctx.ReplaceAll([&](Symbol sym_in) {
|
||||
auto name_in = ctx.src->Symbols().NameFor(sym_in);
|
||||
switch (cfg_.target) {
|
||||
case Target::kAll:
|
||||
// Always rename.
|
||||
break;
|
||||
case Target::kHlslKeywords:
|
||||
if (!std::binary_search(
|
||||
kReservedKeywordsHLSL,
|
||||
kReservedKeywordsHLSL +
|
||||
sizeof(kReservedKeywordsHLSL) / sizeof(const char*),
|
||||
name_in)) {
|
||||
// No match, just reuse the original name.
|
||||
return ctx.dst->Symbols().New(name_in);
|
||||
}
|
||||
break;
|
||||
case Target::kMslKeywords:
|
||||
if (!std::binary_search(
|
||||
kReservedKeywordsMSL,
|
||||
kReservedKeywordsMSL +
|
||||
sizeof(kReservedKeywordsMSL) / sizeof(const char*),
|
||||
name_in)) {
|
||||
// No match, just reuse the original name.
|
||||
return ctx.dst->Symbols().New(name_in);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
auto sym_out = ctx.dst->Symbols().New();
|
||||
remappings.emplace(ctx.src->Symbols().NameFor(sym_in),
|
||||
ctx.dst->Symbols().NameFor(sym_out));
|
||||
remappings.emplace(name_in, ctx.dst->Symbols().NameFor(sym_out));
|
||||
return sym_out;
|
||||
});
|
||||
|
||||
|
@ -90,8 +921,6 @@ Transform::Output Renamer::Run(const Program* in, const DataMap&) {
|
|||
}
|
||||
return nullptr; // Clone ident. Uses the symbol remapping above.
|
||||
});
|
||||
break;
|
||||
}
|
||||
ctx.Clone();
|
||||
|
||||
return Output(Program(std::move(out)),
|
||||
|
|
|
@ -46,17 +46,20 @@ class Renamer : public Transform {
|
|||
Remappings const remappings;
|
||||
};
|
||||
|
||||
/// Method is an enumerator of renaming methods that can be used
|
||||
enum class Method {
|
||||
/// Every symbol will be replaced with an identifier containing a
|
||||
/// monotonically incrementing integer.
|
||||
kMonotonic,
|
||||
/// Target is an enumerator of rename targets that can be used
|
||||
enum class Target {
|
||||
/// Rename every symbol.
|
||||
kAll,
|
||||
/// Only rename symbols that are reserved keywords in HLSL.
|
||||
kHlslKeywords,
|
||||
/// Only rename symbols that are reserved keywords in MSL.
|
||||
kMslKeywords,
|
||||
};
|
||||
|
||||
/// Configuration options for the transform
|
||||
struct Config {
|
||||
/// The method used for renaming symbols
|
||||
Method method = Method::kMonotonic;
|
||||
/// The targets to rename
|
||||
Target target = Target::kAll;
|
||||
};
|
||||
|
||||
/// Constructor using a default configuration
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
|
||||
#include "src/transform/renamer.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "gmock/gmock.h"
|
||||
#include "src/transform/test_helper.h"
|
||||
|
||||
|
@ -185,6 +187,908 @@ fn tint_symbol() -> [[builtin(position)]] vec4<f32> {
|
|||
EXPECT_THAT(data->remappings, ContainerEq(expected_remappings));
|
||||
}
|
||||
|
||||
using RenamerTestHlsl = TransformTestWithParam<std::string>;
|
||||
using RenamerTestMsl = TransformTestWithParam<std::string>;
|
||||
|
||||
TEST_P(RenamerTestHlsl, Keywords) {
|
||||
auto keyword = GetParam();
|
||||
|
||||
auto src = R"(
|
||||
[[stage(fragment)]]
|
||||
fn frag_main() {
|
||||
var )" + keyword +
|
||||
R"( : i32;
|
||||
}
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
[[stage(fragment)]]
|
||||
fn frag_main() {
|
||||
var tint_symbol : i32;
|
||||
}
|
||||
)";
|
||||
|
||||
Renamer::Config config{Renamer::Target::kHlslKeywords};
|
||||
auto got = Run(src, std::make_unique<Renamer>(config));
|
||||
|
||||
EXPECT_EQ(expect, str(got));
|
||||
}
|
||||
|
||||
TEST_P(RenamerTestMsl, Keywords) {
|
||||
auto keyword = GetParam();
|
||||
|
||||
auto src = R"(
|
||||
[[stage(fragment)]]
|
||||
fn frag_main() {
|
||||
var )" + keyword +
|
||||
R"( : i32;
|
||||
}
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
[[stage(fragment)]]
|
||||
fn frag_main() {
|
||||
var tint_symbol : i32;
|
||||
}
|
||||
)";
|
||||
|
||||
Renamer::Config config{Renamer::Target::kMslKeywords};
|
||||
auto got = Run(src, std::make_unique<Renamer>(config));
|
||||
|
||||
EXPECT_EQ(expect, str(got));
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(RenamerTestHlsl,
|
||||
RenamerTestHlsl,
|
||||
testing::Values("AddressU",
|
||||
"AddressV",
|
||||
"AddressW",
|
||||
"AllMemoryBarrier",
|
||||
"AllMemoryBarrierWithGroupSync",
|
||||
"AppendStructuredBuffer",
|
||||
"BINORMAL",
|
||||
"BLENDINDICES",
|
||||
"BLENDWEIGHT",
|
||||
"BlendState",
|
||||
"BorderColor",
|
||||
"Buffer",
|
||||
"ByteAddressBuffer",
|
||||
"COLOR",
|
||||
"CheckAccessFullyMapped",
|
||||
"ComparisonFunc",
|
||||
"CompileShader",
|
||||
"ComputeShader",
|
||||
"ConsumeStructuredBuffer",
|
||||
"D3DCOLORtoUBYTE4",
|
||||
"DEPTH",
|
||||
"DepthStencilState",
|
||||
"DepthStencilView",
|
||||
"DeviceMemoryBarrier",
|
||||
"DeviceMemroyBarrierWithGroupSync",
|
||||
"DomainShader",
|
||||
"EvaluateAttributeAtCentroid",
|
||||
"EvaluateAttributeAtSample",
|
||||
"EvaluateAttributeSnapped",
|
||||
"FOG",
|
||||
"Filter",
|
||||
"GeometryShader",
|
||||
"GetRenderTargetSampleCount",
|
||||
"GetRenderTargetSamplePosition",
|
||||
"GroupMemoryBarrier",
|
||||
"GroupMemroyBarrierWithGroupSync",
|
||||
"Hullshader",
|
||||
"InputPatch",
|
||||
"InterlockedAdd",
|
||||
"InterlockedAnd",
|
||||
"InterlockedCompareExchange",
|
||||
"InterlockedCompareStore",
|
||||
"InterlockedExchange",
|
||||
"InterlockedMax",
|
||||
"InterlockedMin",
|
||||
"InterlockedOr",
|
||||
"InterlockedXor",
|
||||
"LineStream",
|
||||
"MaxAnisotropy",
|
||||
"MaxLOD",
|
||||
"MinLOD",
|
||||
"MipLODBias",
|
||||
"NORMAL",
|
||||
"NULL",
|
||||
"Normal",
|
||||
"OutputPatch",
|
||||
"POSITION",
|
||||
"POSITIONT",
|
||||
"PSIZE",
|
||||
"PixelShader",
|
||||
"PointStream",
|
||||
"Process2DQuadTessFactorsAvg",
|
||||
"Process2DQuadTessFactorsMax",
|
||||
"Process2DQuadTessFactorsMin",
|
||||
"ProcessIsolineTessFactors",
|
||||
"ProcessQuadTessFactorsAvg",
|
||||
"ProcessQuadTessFactorsMax",
|
||||
"ProcessQuadTessFactorsMin",
|
||||
"ProcessTriTessFactorsAvg",
|
||||
"ProcessTriTessFactorsMax",
|
||||
"ProcessTriTessFactorsMin",
|
||||
"RWBuffer",
|
||||
"RWByteAddressBuffer",
|
||||
"RWStructuredBuffer",
|
||||
"RWTexture1D",
|
||||
"RWTexture2D",
|
||||
"RWTexture2DArray",
|
||||
"RWTexture3D",
|
||||
"RasterizerState",
|
||||
"RenderTargetView",
|
||||
"SV_ClipDistance",
|
||||
"SV_Coverage",
|
||||
"SV_CullDistance",
|
||||
"SV_Depth",
|
||||
"SV_DepthGreaterEqual",
|
||||
"SV_DepthLessEqual",
|
||||
"SV_DispatchThreadID",
|
||||
"SV_DomainLocation",
|
||||
"SV_GSInstanceID",
|
||||
"SV_GroupID",
|
||||
"SV_GroupIndex",
|
||||
"SV_GroupThreadID",
|
||||
"SV_InnerCoverage",
|
||||
"SV_InsideTessFactor",
|
||||
"SV_InstanceID",
|
||||
"SV_IsFrontFace",
|
||||
"SV_OutputControlPointID",
|
||||
"SV_Position",
|
||||
"SV_PrimitiveID",
|
||||
"SV_RenderTargetArrayIndex",
|
||||
"SV_SampleIndex",
|
||||
"SV_StencilRef",
|
||||
"SV_Target",
|
||||
"SV_TessFactor",
|
||||
"SV_VertexArrayIndex",
|
||||
"SV_VertexID",
|
||||
"Sampler",
|
||||
"Sampler1D",
|
||||
"Sampler2D",
|
||||
"Sampler3D",
|
||||
"SamplerCUBE",
|
||||
"StructuredBuffer",
|
||||
"TANGENT",
|
||||
"TESSFACTOR",
|
||||
"TEXCOORD",
|
||||
"Texcoord",
|
||||
"Texture",
|
||||
"Texture1D",
|
||||
"Texture2D",
|
||||
"Texture2DArray",
|
||||
"Texture2DMS",
|
||||
"Texture2DMSArray",
|
||||
"Texture3D",
|
||||
"TextureCube",
|
||||
"TextureCubeArray",
|
||||
"TriangleStream",
|
||||
"VFACE",
|
||||
"VPOS",
|
||||
"VertexShader",
|
||||
"abort",
|
||||
// "abs", // WGSL intrinsic
|
||||
// "acos", // WGSL intrinsic
|
||||
// "all", // WGSL intrinsic
|
||||
"allow_uav_condition",
|
||||
// "any", // WGSL intrinsic
|
||||
"asdouble",
|
||||
"asfloat",
|
||||
// "asin", // WGSL intrinsic
|
||||
"asint",
|
||||
// "asm", // WGSL keyword
|
||||
"asm_fragment",
|
||||
"asuint",
|
||||
// "atan", // WGSL intrinsic
|
||||
// "atan2", // WGSL intrinsic
|
||||
"auto",
|
||||
// "bool", // WGSL keyword
|
||||
"bool1",
|
||||
"bool1x1",
|
||||
"bool1x2",
|
||||
"bool1x3",
|
||||
"bool1x4",
|
||||
"bool2",
|
||||
"bool2x1",
|
||||
"bool2x2",
|
||||
"bool2x3",
|
||||
"bool2x4",
|
||||
"bool3",
|
||||
"bool3x1",
|
||||
"bool3x2",
|
||||
"bool3x3",
|
||||
"bool3x4",
|
||||
"bool4",
|
||||
"bool4x1",
|
||||
"bool4x2",
|
||||
"bool4x3",
|
||||
"bool4x4",
|
||||
"branch",
|
||||
// "break", // WGSL keyword
|
||||
// "call", // WGSL intrinsic
|
||||
// "case", // WGSL keyword
|
||||
"catch",
|
||||
"cbuffer",
|
||||
// "ceil", // WGSL intrinsic
|
||||
"centroid",
|
||||
"char",
|
||||
// "clamp", // WGSL intrinsic
|
||||
"class",
|
||||
"clip",
|
||||
"column_major",
|
||||
"compile_fragment",
|
||||
// "const", // WGSL keyword
|
||||
"const_cast",
|
||||
// "continue", // WGSL keyword
|
||||
// "cos", // WGSL intrinsic
|
||||
// "cosh", // WGSL intrinsic
|
||||
"countbits",
|
||||
// "cross", // WGSL intrinsic
|
||||
"ddx",
|
||||
"ddx_coarse",
|
||||
"ddx_fine",
|
||||
"ddy",
|
||||
"ddy_coarse",
|
||||
"ddy_fine",
|
||||
"degrees",
|
||||
"delete",
|
||||
// "determinant", // WGSL intrinsic
|
||||
// "discard", // WGSL keyword
|
||||
// "distance", // WGSL intrinsic
|
||||
// "do", // WGSL keyword
|
||||
// "dot", // WGSL intrinsic
|
||||
"double",
|
||||
"double1",
|
||||
"double1x1",
|
||||
"double1x2",
|
||||
"double1x3",
|
||||
"double1x4",
|
||||
"double2",
|
||||
"double2x1",
|
||||
"double2x2",
|
||||
"double2x3",
|
||||
"double2x4",
|
||||
"double3",
|
||||
"double3x1",
|
||||
"double3x2",
|
||||
"double3x3",
|
||||
"double3x4",
|
||||
"double4",
|
||||
"double4x1",
|
||||
"double4x2",
|
||||
"double4x3",
|
||||
"double4x4",
|
||||
"dst",
|
||||
"dword",
|
||||
"dword1",
|
||||
"dword1x1",
|
||||
"dword1x2",
|
||||
"dword1x3",
|
||||
"dword1x4",
|
||||
"dword2",
|
||||
"dword2x1",
|
||||
"dword2x2",
|
||||
"dword2x3",
|
||||
"dword2x4",
|
||||
"dword3",
|
||||
"dword3x1",
|
||||
"dword3x2",
|
||||
"dword3x3",
|
||||
"dword3x4",
|
||||
"dword4",
|
||||
"dword4x1",
|
||||
"dword4x2",
|
||||
"dword4x3",
|
||||
"dword4x4",
|
||||
"dynamic_cast",
|
||||
// "else", // WGSL keyword
|
||||
// "enum", // WGSL keyword
|
||||
"errorf",
|
||||
// "exp", // WGSL intrinsic
|
||||
// "exp2", // WGSL intrinsic
|
||||
"explicit",
|
||||
"export",
|
||||
"extern",
|
||||
"f16to32",
|
||||
"f32tof16",
|
||||
// "faceforward", // WGSL intrinsic
|
||||
// "false", // WGSL keyword
|
||||
"fastopt",
|
||||
"firstbithigh",
|
||||
"firstbitlow",
|
||||
"flatten",
|
||||
"float",
|
||||
"float1",
|
||||
"float1x1",
|
||||
"float1x2",
|
||||
"float1x3",
|
||||
"float1x4",
|
||||
"float2",
|
||||
"float2x1",
|
||||
"float2x2",
|
||||
"float2x3",
|
||||
"float2x4",
|
||||
"float3",
|
||||
"float3x1",
|
||||
"float3x2",
|
||||
"float3x3",
|
||||
"float3x4",
|
||||
"float4",
|
||||
"float4x1",
|
||||
"float4x2",
|
||||
"float4x3",
|
||||
"float4x4",
|
||||
// "floor", // WGSL intrinsic
|
||||
// "fma", // WGSL intrinsic
|
||||
"fmod",
|
||||
// "for", // WGSL keyword
|
||||
"forcecase",
|
||||
"frac",
|
||||
// "frexp", // WGSL intrinsic
|
||||
"friend",
|
||||
// "fwidth", // WGSL intrinsic
|
||||
"fxgroup",
|
||||
"goto",
|
||||
"groupshared",
|
||||
"half",
|
||||
"half1",
|
||||
"half1x1",
|
||||
"half1x2",
|
||||
"half1x3",
|
||||
"half1x4",
|
||||
"half2",
|
||||
"half2x1",
|
||||
"half2x2",
|
||||
"half2x3",
|
||||
"half2x4",
|
||||
"half3",
|
||||
"half3x1",
|
||||
"half3x2",
|
||||
"half3x3",
|
||||
"half3x4",
|
||||
"half4",
|
||||
"half4x1",
|
||||
"half4x2",
|
||||
"half4x3",
|
||||
"half4x4",
|
||||
// "if", // WGSL keyword
|
||||
// "in", // WGSL keyword
|
||||
"inline",
|
||||
"inout",
|
||||
"int",
|
||||
"int1",
|
||||
"int1x1",
|
||||
"int1x2",
|
||||
"int1x3",
|
||||
"int1x4",
|
||||
"int2",
|
||||
"int2x1",
|
||||
"int2x2",
|
||||
"int2x3",
|
||||
"int2x4",
|
||||
"int3",
|
||||
"int3x1",
|
||||
"int3x2",
|
||||
"int3x3",
|
||||
"int3x4",
|
||||
"int4",
|
||||
"int4x1",
|
||||
"int4x2",
|
||||
"int4x3",
|
||||
"int4x4",
|
||||
"interface",
|
||||
"isfinite",
|
||||
"isinf",
|
||||
"isnan",
|
||||
// "ldexp", // WGSL intrinsic
|
||||
// "length", // WGSL intrinsic
|
||||
"lerp",
|
||||
"lineadj",
|
||||
"linear",
|
||||
"lit",
|
||||
// "log", // WGSL intrinsic
|
||||
"log10",
|
||||
// "log2", // WGSL intrinsic
|
||||
"long",
|
||||
// "loop", // WGSL keyword
|
||||
"mad",
|
||||
"matrix",
|
||||
// "max", // WGSL intrinsic
|
||||
// "min", // WGSL intrinsic
|
||||
"min10float",
|
||||
"min10float1",
|
||||
"min10float1x1",
|
||||
"min10float1x2",
|
||||
"min10float1x3",
|
||||
"min10float1x4",
|
||||
"min10float2",
|
||||
"min10float2x1",
|
||||
"min10float2x2",
|
||||
"min10float2x3",
|
||||
"min10float2x4",
|
||||
"min10float3",
|
||||
"min10float3x1",
|
||||
"min10float3x2",
|
||||
"min10float3x3",
|
||||
"min10float3x4",
|
||||
"min10float4",
|
||||
"min10float4x1",
|
||||
"min10float4x2",
|
||||
"min10float4x3",
|
||||
"min10float4x4",
|
||||
"min12int",
|
||||
"min12int1",
|
||||
"min12int1x1",
|
||||
"min12int1x2",
|
||||
"min12int1x3",
|
||||
"min12int1x4",
|
||||
"min12int2",
|
||||
"min12int2x1",
|
||||
"min12int2x2",
|
||||
"min12int2x3",
|
||||
"min12int2x4",
|
||||
"min12int3",
|
||||
"min12int3x1",
|
||||
"min12int3x2",
|
||||
"min12int3x3",
|
||||
"min12int3x4",
|
||||
"min12int4",
|
||||
"min12int4x1",
|
||||
"min12int4x2",
|
||||
"min12int4x3",
|
||||
"min12int4x4",
|
||||
"min16float",
|
||||
"min16float1",
|
||||
"min16float1x1",
|
||||
"min16float1x2",
|
||||
"min16float1x3",
|
||||
"min16float1x4",
|
||||
"min16float2",
|
||||
"min16float2x1",
|
||||
"min16float2x2",
|
||||
"min16float2x3",
|
||||
"min16float2x4",
|
||||
"min16float3",
|
||||
"min16float3x1",
|
||||
"min16float3x2",
|
||||
"min16float3x3",
|
||||
"min16float3x4",
|
||||
"min16float4",
|
||||
"min16float4x1",
|
||||
"min16float4x2",
|
||||
"min16float4x3",
|
||||
"min16float4x4",
|
||||
"min16int",
|
||||
"min16int1",
|
||||
"min16int1x1",
|
||||
"min16int1x2",
|
||||
"min16int1x3",
|
||||
"min16int1x4",
|
||||
"min16int2",
|
||||
"min16int2x1",
|
||||
"min16int2x2",
|
||||
"min16int2x3",
|
||||
"min16int2x4",
|
||||
"min16int3",
|
||||
"min16int3x1",
|
||||
"min16int3x2",
|
||||
"min16int3x3",
|
||||
"min16int3x4",
|
||||
"min16int4",
|
||||
"min16int4x1",
|
||||
"min16int4x2",
|
||||
"min16int4x3",
|
||||
"min16int4x4",
|
||||
"min16uint",
|
||||
"min16uint1",
|
||||
"min16uint1x1",
|
||||
"min16uint1x2",
|
||||
"min16uint1x3",
|
||||
"min16uint1x4",
|
||||
"min16uint2",
|
||||
"min16uint2x1",
|
||||
"min16uint2x2",
|
||||
"min16uint2x3",
|
||||
"min16uint2x4",
|
||||
"min16uint3",
|
||||
"min16uint3x1",
|
||||
"min16uint3x2",
|
||||
"min16uint3x3",
|
||||
"min16uint3x4",
|
||||
"min16uint4",
|
||||
"min16uint4x1",
|
||||
"min16uint4x2",
|
||||
"min16uint4x3",
|
||||
"min16uint4x4",
|
||||
// "modf", // WGSL intrinsic
|
||||
"msad4",
|
||||
"mul",
|
||||
"mutable",
|
||||
"namespace",
|
||||
"new",
|
||||
"nointerpolation",
|
||||
"noise",
|
||||
"noperspective",
|
||||
// "normalize", // WGSL intrinsic
|
||||
"numthreads",
|
||||
"operator",
|
||||
// "out", // WGSL keyword
|
||||
"packoffset",
|
||||
"pass",
|
||||
"pixelfragment",
|
||||
"pixelshader",
|
||||
"point",
|
||||
// "pow", // WGSL intrinsic
|
||||
"precise",
|
||||
"printf",
|
||||
// "private", // WGSL keyword
|
||||
"protected",
|
||||
"public",
|
||||
"radians",
|
||||
"rcp",
|
||||
// "reflect", // WGSL intrinsic
|
||||
"refract",
|
||||
"register",
|
||||
"reinterpret_cast",
|
||||
// "return", // WGSL keyword
|
||||
// "reversebits", // WGSL intrinsic
|
||||
// "round", // WGSL intrinsic
|
||||
"row_major",
|
||||
"rsqrt",
|
||||
"sample",
|
||||
"sampler1D",
|
||||
"sampler2D",
|
||||
"sampler3D",
|
||||
"samplerCUBE",
|
||||
"sampler_state",
|
||||
"saturate",
|
||||
"shared",
|
||||
"short",
|
||||
// "sign", // WGSL intrinsic
|
||||
"signed",
|
||||
// "sin", // WGSL intrinsic
|
||||
"sincos",
|
||||
// "sinh", // WGSL intrinsic
|
||||
"sizeof",
|
||||
// "smoothstep", // WGSL intrinsic
|
||||
"snorm",
|
||||
// "sqrt", // WGSL intrinsic
|
||||
"stateblock",
|
||||
"stateblock_state",
|
||||
"static",
|
||||
"static_cast",
|
||||
// "step", // WGSL intrinsic
|
||||
"string",
|
||||
// "struct", // WGSL keyword
|
||||
// "switch", // WGSL keyword
|
||||
// "tan", // WGSL intrinsic
|
||||
// "tanh", // WGSL intrinsic
|
||||
"tbuffer",
|
||||
"technique",
|
||||
"technique10",
|
||||
"technique11",
|
||||
"template",
|
||||
"tex1D",
|
||||
"tex1Dbias",
|
||||
"tex1Dgrad",
|
||||
"tex1Dlod",
|
||||
"tex1Dproj",
|
||||
"tex2D",
|
||||
"tex2Dbias",
|
||||
"tex2Dgrad",
|
||||
"tex2Dlod",
|
||||
"tex2Dproj",
|
||||
"tex3D",
|
||||
"tex3Dbias",
|
||||
"tex3Dgrad",
|
||||
"tex3Dlod",
|
||||
"tex3Dproj",
|
||||
"texCUBE",
|
||||
"texCUBEbias",
|
||||
"texCUBEgrad",
|
||||
"texCUBElod",
|
||||
"texCUBEproj",
|
||||
"texture",
|
||||
"texture1D",
|
||||
"texture1DArray",
|
||||
"texture2D",
|
||||
"texture2DArray",
|
||||
"texture2DMS",
|
||||
"texture2DMSArray",
|
||||
"texture3D",
|
||||
"textureCube",
|
||||
"textureCubeArray",
|
||||
"this",
|
||||
"throw",
|
||||
"transpose",
|
||||
"triangle",
|
||||
"triangleadj",
|
||||
// "true", // WGSL keyword
|
||||
// "trunc", // WGSL intrinsic
|
||||
"try",
|
||||
// "typedef", // WGSL keyword
|
||||
"typename",
|
||||
"uint",
|
||||
"uint1",
|
||||
"uint1x1",
|
||||
"uint1x2",
|
||||
"uint1x3",
|
||||
"uint1x4",
|
||||
"uint2",
|
||||
"uint2x1",
|
||||
"uint2x2",
|
||||
"uint2x3",
|
||||
"uint2x4",
|
||||
"uint3",
|
||||
"uint3x1",
|
||||
"uint3x2",
|
||||
"uint3x3",
|
||||
"uint3x4",
|
||||
"uint4",
|
||||
"uint4x1",
|
||||
"uint4x2",
|
||||
"uint4x3",
|
||||
"uint4x4",
|
||||
// "uniform", // WGSL keyword
|
||||
"union",
|
||||
"unorm",
|
||||
"unroll",
|
||||
"unsigned",
|
||||
"using",
|
||||
"vector",
|
||||
"vertexfragment",
|
||||
"vertexshader",
|
||||
"virtual",
|
||||
// "void", // WGSL keyword
|
||||
"volatile",
|
||||
"while"));
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(RenamerTestMsl,
|
||||
RenamerTestMsl,
|
||||
testing::Values(
|
||||
// c++14 spec
|
||||
"alignas",
|
||||
"alignof",
|
||||
"and",
|
||||
"and_eq",
|
||||
// "asm", // Also reserved in WGSL
|
||||
"auto",
|
||||
"bitand",
|
||||
"bitor",
|
||||
// "bool", // Also used in WGSL
|
||||
// "break", // Also used in WGSL
|
||||
// "case", // Also used in WGSL
|
||||
"catch",
|
||||
"char",
|
||||
"char16_t",
|
||||
"char32_t",
|
||||
"class",
|
||||
"compl",
|
||||
// "const", // Also used in WGSL
|
||||
"const_cast",
|
||||
"constexpr",
|
||||
// "continue", // Also used in WGSL
|
||||
"decltype",
|
||||
// "default", // Also used in WGSL
|
||||
"delete",
|
||||
// "do", // Also used in WGSL
|
||||
"double",
|
||||
"dynamic_cast",
|
||||
// "else", // Also used in WGSL
|
||||
// "enum", // Also used in WGSL
|
||||
"explicit",
|
||||
"extern",
|
||||
// "false", // Also used in WGSL
|
||||
"final",
|
||||
"float",
|
||||
// "for", // Also used in WGSL
|
||||
"friend",
|
||||
"goto",
|
||||
// "if", // Also used in WGSL
|
||||
"inline",
|
||||
"int",
|
||||
"long",
|
||||
"mutable",
|
||||
"namespace",
|
||||
"new",
|
||||
"noexcept",
|
||||
"not",
|
||||
"not_eq",
|
||||
"nullptr",
|
||||
"operator",
|
||||
"or",
|
||||
"or_eq",
|
||||
"override",
|
||||
// "private", // Also used in WGSL
|
||||
"protected",
|
||||
"public",
|
||||
"register",
|
||||
"reinterpret_cast",
|
||||
// "return", // Also used in WGSL
|
||||
"short",
|
||||
"signed",
|
||||
"sizeof",
|
||||
"static",
|
||||
"static_assert",
|
||||
"static_cast",
|
||||
// "struct", // Also used in WGSL
|
||||
// "switch", // Also used in WGSL
|
||||
"template",
|
||||
"this",
|
||||
"thread_local",
|
||||
"throw",
|
||||
// "true", // Also used in WGSL
|
||||
"try",
|
||||
// "typedef", // Also used in WGSL
|
||||
"typeid",
|
||||
"typename",
|
||||
"union",
|
||||
"unsigned",
|
||||
"using",
|
||||
"virtual",
|
||||
// "void", // Also used in WGSL
|
||||
"volatile",
|
||||
"wchar_t",
|
||||
"while",
|
||||
"xor",
|
||||
"xor_eq",
|
||||
|
||||
// Metal Spec
|
||||
"access",
|
||||
// "array", // Also used in WGSL
|
||||
"array_ref",
|
||||
"as_type",
|
||||
"atomic",
|
||||
"atomic_bool",
|
||||
"atomic_int",
|
||||
"atomic_uint",
|
||||
"bool2",
|
||||
"bool3",
|
||||
"bool4",
|
||||
"buffer",
|
||||
"char2",
|
||||
"char3",
|
||||
"char4",
|
||||
"const_reference",
|
||||
"constant",
|
||||
"depth2d",
|
||||
"depth2d_array",
|
||||
"depth2d_ms",
|
||||
"depth2d_ms_array",
|
||||
"depthcube",
|
||||
"depthcube_array",
|
||||
"device",
|
||||
"discard_fragment",
|
||||
"float2",
|
||||
"float2x2",
|
||||
"float2x3",
|
||||
"float2x4",
|
||||
"float3",
|
||||
"float3x2",
|
||||
"float3x3",
|
||||
"float3x4",
|
||||
"float4",
|
||||
"float4x2",
|
||||
"float4x3",
|
||||
"float4x4",
|
||||
"fragment",
|
||||
"half",
|
||||
"half2",
|
||||
"half2x2",
|
||||
"half2x3",
|
||||
"half2x4",
|
||||
"half3",
|
||||
"half3x2",
|
||||
"half3x3",
|
||||
"half3x4",
|
||||
"half4",
|
||||
"half4x2",
|
||||
"half4x3",
|
||||
"half4x4",
|
||||
"imageblock",
|
||||
"int16_t",
|
||||
"int2",
|
||||
"int3",
|
||||
"int32_t",
|
||||
"int4",
|
||||
"int64_t",
|
||||
"int8_t",
|
||||
"kernel",
|
||||
"long2",
|
||||
"long3",
|
||||
"long4",
|
||||
"main", // No functions called main
|
||||
"metal", // The namespace
|
||||
"packed_bool2",
|
||||
"packed_bool3",
|
||||
"packed_bool4",
|
||||
"packed_char2",
|
||||
"packed_char3",
|
||||
"packed_char4",
|
||||
"packed_float2",
|
||||
"packed_float3",
|
||||
"packed_float4",
|
||||
"packed_half2",
|
||||
"packed_half3",
|
||||
"packed_half4",
|
||||
"packed_int2",
|
||||
"packed_int3",
|
||||
"packed_int4",
|
||||
"packed_short2",
|
||||
"packed_short3",
|
||||
"packed_short4",
|
||||
"packed_uchar2",
|
||||
"packed_uchar3",
|
||||
"packed_uchar4",
|
||||
"packed_uint2",
|
||||
"packed_uint3",
|
||||
"packed_uint4",
|
||||
"packed_ushort2",
|
||||
"packed_ushort3",
|
||||
"packed_ushort4",
|
||||
"patch_control_point",
|
||||
"ptrdiff_t",
|
||||
"r16snorm",
|
||||
"r16unorm",
|
||||
// "r8unorm", // Also used in WGSL
|
||||
"reference",
|
||||
"rg11b10f",
|
||||
"rg16snorm",
|
||||
"rg16unorm",
|
||||
// "rg8snorm", // Also used in WGSL
|
||||
// "rg8unorm", // Also used in WGSL
|
||||
"rgb10a2",
|
||||
"rgb9e5",
|
||||
"rgba16snorm",
|
||||
"rgba16unorm",
|
||||
// "rgba8snorm", // Also used in WGSL
|
||||
// "rgba8unorm", // Also used in WGSL
|
||||
// "sampler", // Also used in WGSL
|
||||
"short2",
|
||||
"short3",
|
||||
"short4",
|
||||
"size_t",
|
||||
"srgba8unorm",
|
||||
"texture",
|
||||
"texture1d",
|
||||
"texture1d_array",
|
||||
"texture2d",
|
||||
"texture2d_array",
|
||||
"texture2d_ms",
|
||||
"texture2d_ms_array",
|
||||
"texture3d",
|
||||
"texture_buffer",
|
||||
"texturecube",
|
||||
"texturecube_array",
|
||||
"thread",
|
||||
"threadgroup",
|
||||
"threadgroup_imageblock",
|
||||
"uchar",
|
||||
"uchar2",
|
||||
"uchar3",
|
||||
"uchar4",
|
||||
"uint",
|
||||
"uint16_t",
|
||||
"uint2",
|
||||
"uint3",
|
||||
"uint32_t",
|
||||
"uint4",
|
||||
"uint64_t",
|
||||
"uint8_t",
|
||||
"ulong2",
|
||||
"ulong3",
|
||||
"ulong4",
|
||||
// "uniform", // Also used in WGSL
|
||||
"ushort",
|
||||
"ushort2",
|
||||
"ushort3",
|
||||
"ushort4",
|
||||
"vec",
|
||||
"vertex"));
|
||||
|
||||
} // namespace
|
||||
} // namespace transform
|
||||
} // namespace tint
|
||||
|
|
|
@ -57,18 +57,6 @@ ast::Function* Transform::CloneWithStatementsAtStart(
|
|||
body, decos, ret_decos);
|
||||
}
|
||||
|
||||
void Transform::RenameReservedKeywords(CloneContext* ctx,
|
||||
const char* names[],
|
||||
size_t count) {
|
||||
ctx->ReplaceAll([=](Symbol in) {
|
||||
auto name_in = ctx->src->Symbols().NameFor(in);
|
||||
if (std::binary_search(names, names + count, name_in)) {
|
||||
return ctx->dst->Symbols().New("tint_" + name_in);
|
||||
}
|
||||
return ctx->dst->Symbols().New(name_in);
|
||||
});
|
||||
}
|
||||
|
||||
ast::DecorationList Transform::RemoveDecorations(
|
||||
CloneContext* ctx,
|
||||
const ast::DecorationList& in,
|
||||
|
|
|
@ -165,25 +165,6 @@ class Transform {
|
|||
ast::Function* in,
|
||||
ast::StatementList statements);
|
||||
|
||||
/// Registers a symbol renamer on `ctx` for any symbol that is found in the
|
||||
/// list of reserved identifiers.
|
||||
/// @param ctx the clone context
|
||||
/// @param names the lexicographically sorted list of reserved identifiers
|
||||
/// @param count the number of identifiers in the array `names`
|
||||
static void RenameReservedKeywords(CloneContext* ctx,
|
||||
const char* names[],
|
||||
size_t count);
|
||||
|
||||
/// Registers a symbol renamer on `ctx` for any symbol that is found in the
|
||||
/// list of reserved identifiers.
|
||||
/// @param ctx the clone context
|
||||
/// @param names the lexicographically sorted list of reserved identifiers
|
||||
template <size_t N>
|
||||
static void RenameReservedKeywords(CloneContext* ctx,
|
||||
const char* (&names)[N]) {
|
||||
RenameReservedKeywords(ctx, names, N);
|
||||
}
|
||||
|
||||
/// Clones the decoration list `in`, removing decorations based on a filter.
|
||||
/// @param ctx the clone context
|
||||
/// @param in the decorations to clone
|
||||
|
|
|
@ -40,7 +40,7 @@ TEST_F(HlslGeneratorImplTest_Alias, EmitAlias_NameCollision) {
|
|||
GeneratorImpl& gen = SanitizeAndBuild();
|
||||
|
||||
ASSERT_TRUE(gen.Generate(out)) << gen.error();
|
||||
EXPECT_THAT(result(), HasSubstr(R"(typedef float tint_float;
|
||||
EXPECT_THAT(result(), HasSubstr(R"(typedef float tint_symbol;
|
||||
)"));
|
||||
}
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ TEST_F(HlslGeneratorImplTest_Function, Emit_Function_Name_Collision) {
|
|||
gen.increment_indent();
|
||||
|
||||
ASSERT_TRUE(gen.Generate(out)) << gen.error();
|
||||
EXPECT_THAT(result(), HasSubstr(R"( void tint_GeometryShader() {
|
||||
EXPECT_THAT(result(), HasSubstr(R"( void tint_symbol() {
|
||||
return;
|
||||
})"));
|
||||
}
|
||||
|
@ -877,7 +877,7 @@ TEST_F(HlslGeneratorImplTest_Function,
|
|||
GeneratorImpl& gen = SanitizeAndBuild();
|
||||
|
||||
ASSERT_TRUE(gen.Generate(out)) << gen.error();
|
||||
EXPECT_EQ(result(), R"(void tint_GeometryShader() {
|
||||
EXPECT_EQ(result(), R"(void tint_symbol() {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kDimensionsStorageWO1d:
|
||||
return {
|
||||
R"(int tint_tmp;
|
||||
tint_texture.GetDimensions(tint_tmp);
|
||||
tint_symbol.GetDimensions(tint_tmp);
|
||||
)",
|
||||
"tint_tmp",
|
||||
};
|
||||
|
@ -52,14 +52,14 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kDimensionsStorageWO2d:
|
||||
return {
|
||||
R"(int2 tint_tmp;
|
||||
tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y);
|
||||
tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y);
|
||||
)",
|
||||
"tint_tmp",
|
||||
};
|
||||
case ValidTextureOverload::kDimensionsMultisampled2d:
|
||||
return {
|
||||
R"(int3 tint_tmp;
|
||||
tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
)",
|
||||
"tint_tmp.xy",
|
||||
};
|
||||
|
@ -70,14 +70,14 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kDimensionsStorageWO2dArray:
|
||||
return {
|
||||
R"(int3 tint_tmp;
|
||||
tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
)",
|
||||
"tint_tmp.xy",
|
||||
};
|
||||
case ValidTextureOverload::kDimensionsMultisampled2dArray:
|
||||
return {
|
||||
R"(int4 tint_tmp;
|
||||
tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
)",
|
||||
"tint_tmp.xy",
|
||||
};
|
||||
|
@ -86,7 +86,7 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kDimensionsStorageWO3d:
|
||||
return {
|
||||
R"(int3 tint_tmp;
|
||||
tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
)",
|
||||
"tint_tmp",
|
||||
};
|
||||
|
@ -94,7 +94,7 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kDimensionsDepthCube:
|
||||
return {
|
||||
R"(int2 tint_tmp;
|
||||
tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y);
|
||||
tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y);
|
||||
)",
|
||||
"tint_tmp.xyy",
|
||||
};
|
||||
|
@ -102,7 +102,7 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kDimensionsDepthCubeArray:
|
||||
return {
|
||||
R"(int3 tint_tmp;
|
||||
tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
)",
|
||||
"tint_tmp.xyy",
|
||||
};
|
||||
|
@ -110,7 +110,7 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kDimensionsDepth2dLevel:
|
||||
return {
|
||||
R"(int3 tint_tmp;
|
||||
tint_texture.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
tint_symbol.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
)",
|
||||
"tint_tmp.xy",
|
||||
};
|
||||
|
@ -118,14 +118,14 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kDimensionsDepth2dArrayLevel:
|
||||
return {
|
||||
R"(int4 tint_tmp;
|
||||
tint_texture.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
tint_symbol.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
)",
|
||||
"tint_tmp.xy",
|
||||
};
|
||||
case ValidTextureOverload::kDimensions3dLevel:
|
||||
return {
|
||||
R"(int4 tint_tmp;
|
||||
tint_texture.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
tint_symbol.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
)",
|
||||
"tint_tmp.xyz",
|
||||
};
|
||||
|
@ -133,7 +133,7 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kDimensionsDepthCubeLevel:
|
||||
return {
|
||||
R"(int3 tint_tmp;
|
||||
tint_texture.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
tint_symbol.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
)",
|
||||
"tint_tmp.xyy",
|
||||
};
|
||||
|
@ -141,7 +141,7 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kDimensionsDepthCubeArrayLevel:
|
||||
return {
|
||||
R"(int4 tint_tmp;
|
||||
tint_texture.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
tint_symbol.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
)",
|
||||
"tint_tmp.xyy",
|
||||
};
|
||||
|
@ -152,14 +152,14 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kNumLayersStorageWO2dArray:
|
||||
return {
|
||||
R"(int3 tint_tmp;
|
||||
tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
)",
|
||||
"tint_tmp.z",
|
||||
};
|
||||
case ValidTextureOverload::kNumLayersMultisampled2dArray:
|
||||
return {
|
||||
R"(int4 tint_tmp;
|
||||
tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
)",
|
||||
"tint_tmp.z",
|
||||
};
|
||||
|
@ -170,7 +170,7 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kNumLevelsDepthCube:
|
||||
return {
|
||||
R"(int3 tint_tmp;
|
||||
tint_texture.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
tint_symbol.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
)",
|
||||
"tint_tmp.z",
|
||||
};
|
||||
|
@ -181,168 +181,168 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kNumLevelsDepthCubeArray:
|
||||
return {
|
||||
R"(int4 tint_tmp;
|
||||
tint_texture.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
tint_symbol.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
)",
|
||||
"tint_tmp.w",
|
||||
};
|
||||
case ValidTextureOverload::kNumSamplesMultisampled2d:
|
||||
return {
|
||||
R"(int3 tint_tmp;
|
||||
tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
)",
|
||||
"tint_tmp.z",
|
||||
};
|
||||
case ValidTextureOverload::kNumSamplesMultisampled2dArray:
|
||||
return {
|
||||
R"(int4 tint_tmp;
|
||||
tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
|
||||
)",
|
||||
"tint_tmp.w",
|
||||
};
|
||||
case ValidTextureOverload::kSample1dF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, 1.0f))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, 1.0f))";
|
||||
case ValidTextureOverload::kSample2dF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float2(1.0f, 2.0f)))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float2(1.0f, 2.0f)))";
|
||||
case ValidTextureOverload::kSample2dOffsetF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float2(1.0f, 2.0f), int2(3, 4)))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float2(1.0f, 2.0f), int2(3, 4)))";
|
||||
case ValidTextureOverload::kSample2dArrayF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float3(1.0f, 2.0f, float(3))))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, float(3))))";
|
||||
case ValidTextureOverload::kSample2dArrayOffsetF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float3(1.0f, 2.0f, float(3)), int2(4, 5)))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, float(3)), int2(4, 5)))";
|
||||
case ValidTextureOverload::kSample3dF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float3(1.0f, 2.0f, 3.0f)))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, 3.0f)))";
|
||||
case ValidTextureOverload::kSample3dOffsetF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float3(1.0f, 2.0f, 3.0f), int3(4, 5, 6)))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), int3(4, 5, 6)))";
|
||||
case ValidTextureOverload::kSampleCubeF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float3(1.0f, 2.0f, 3.0f)))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, 3.0f)))";
|
||||
case ValidTextureOverload::kSampleCubeArrayF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float4(1.0f, 2.0f, 3.0f, float(4))))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4))))";
|
||||
case ValidTextureOverload::kSampleDepth2dF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float2(1.0f, 2.0f)))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float2(1.0f, 2.0f)))";
|
||||
case ValidTextureOverload::kSampleDepth2dOffsetF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float2(1.0f, 2.0f), int2(3, 4)))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float2(1.0f, 2.0f), int2(3, 4)))";
|
||||
case ValidTextureOverload::kSampleDepth2dArrayF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float3(1.0f, 2.0f, float(3))))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, float(3))))";
|
||||
case ValidTextureOverload::kSampleDepth2dArrayOffsetF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float3(1.0f, 2.0f, float(3)), int2(4, 5)))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, float(3)), int2(4, 5)))";
|
||||
case ValidTextureOverload::kSampleDepthCubeF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float3(1.0f, 2.0f, 3.0f)))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, 3.0f)))";
|
||||
case ValidTextureOverload::kSampleDepthCubeArrayF32:
|
||||
return R"(tint_texture.Sample(tint_sampler, float4(1.0f, 2.0f, 3.0f, float(4))))";
|
||||
return R"(tint_symbol.Sample(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4))))";
|
||||
case ValidTextureOverload::kSampleBias2dF32:
|
||||
return R"(tint_texture.SampleBias(tint_sampler, float2(1.0f, 2.0f), 3.0f))";
|
||||
return R"(tint_symbol.SampleBias(tint_symbol_1, float2(1.0f, 2.0f), 3.0f))";
|
||||
case ValidTextureOverload::kSampleBias2dOffsetF32:
|
||||
return R"(tint_texture.SampleBias(tint_sampler, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
|
||||
return R"(tint_symbol.SampleBias(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
|
||||
case ValidTextureOverload::kSampleBias2dArrayF32:
|
||||
return R"(tint_texture.SampleBias(tint_sampler, float3(1.0f, 2.0f, float(4)), 3.0f))";
|
||||
return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f))";
|
||||
case ValidTextureOverload::kSampleBias2dArrayOffsetF32:
|
||||
return R"(tint_texture.SampleBias(tint_sampler, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6)))";
|
||||
return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6)))";
|
||||
case ValidTextureOverload::kSampleBias3dF32:
|
||||
return R"(tint_texture.SampleBias(tint_sampler, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
case ValidTextureOverload::kSampleBias3dOffsetF32:
|
||||
return R"(tint_texture.SampleBias(tint_sampler, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7)))";
|
||||
return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7)))";
|
||||
case ValidTextureOverload::kSampleBiasCubeF32:
|
||||
return R"(tint_texture.SampleBias(tint_sampler, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
case ValidTextureOverload::kSampleBiasCubeArrayF32:
|
||||
return R"(tint_texture.SampleBias(tint_sampler, float4(1.0f, 2.0f, 3.0f, float(3)), 4.0f))";
|
||||
return R"(tint_symbol.SampleBias(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(3)), 4.0f))";
|
||||
case ValidTextureOverload::kSampleLevel2dF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float2(1.0f, 2.0f), 3.0f))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float2(1.0f, 2.0f), 3.0f))";
|
||||
case ValidTextureOverload::kSampleLevel2dOffsetF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
|
||||
case ValidTextureOverload::kSampleLevel2dArrayF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float3(1.0f, 2.0f, float(3)), 4.0f))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4.0f))";
|
||||
case ValidTextureOverload::kSampleLevel2dArrayOffsetF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6)))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6)))";
|
||||
case ValidTextureOverload::kSampleLevel3dF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
case ValidTextureOverload::kSampleLevel3dOffsetF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7)))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7)))";
|
||||
case ValidTextureOverload::kSampleLevelCubeF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
case ValidTextureOverload::kSampleLevelCubeArrayF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))";
|
||||
case ValidTextureOverload::kSampleLevelDepth2dF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float2(1.0f, 2.0f), 3))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float2(1.0f, 2.0f), 3))";
|
||||
case ValidTextureOverload::kSampleLevelDepth2dOffsetF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float2(1.0f, 2.0f), 3, int2(4, 5)))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float2(1.0f, 2.0f), 3, int2(4, 5)))";
|
||||
case ValidTextureOverload::kSampleLevelDepth2dArrayF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float3(1.0f, 2.0f, float(3)), 4))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4))";
|
||||
case ValidTextureOverload::kSampleLevelDepth2dArrayOffsetF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float3(1.0f, 2.0f, float(3)), 4, int2(5, 6)))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4, int2(5, 6)))";
|
||||
case ValidTextureOverload::kSampleLevelDepthCubeF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float3(1.0f, 2.0f, 3.0f), 4))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4))";
|
||||
case ValidTextureOverload::kSampleLevelDepthCubeArrayF32:
|
||||
return R"(tint_texture.SampleLevel(tint_sampler, float4(1.0f, 2.0f, 3.0f, float(4)), 5))";
|
||||
return R"(tint_symbol.SampleLevel(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), 5))";
|
||||
case ValidTextureOverload::kSampleGrad2dF32:
|
||||
return R"(tint_texture.SampleGrad(tint_sampler, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f)))";
|
||||
return R"(tint_symbol.SampleGrad(tint_symbol_1, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f)))";
|
||||
case ValidTextureOverload::kSampleGrad2dOffsetF32:
|
||||
return R"(tint_texture.SampleGrad(tint_sampler, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f), int2(7, 8)))";
|
||||
return R"(tint_symbol.SampleGrad(tint_symbol_1, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f), int2(7, 8)))";
|
||||
case ValidTextureOverload::kSampleGrad2dArrayF32:
|
||||
return R"(tint_texture.SampleGrad(tint_sampler, float3(1.0f, 2.0f, float(3)), float2(4.0f, 5.0f), float2(6.0f, 7.0f)))";
|
||||
return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, float(3)), float2(4.0f, 5.0f), float2(6.0f, 7.0f)))";
|
||||
case ValidTextureOverload::kSampleGrad2dArrayOffsetF32:
|
||||
return R"(tint_texture.SampleGrad(tint_sampler, float3(1.0f, 2.0f, float(3)), float2(4.0f, 5.0f), float2(6.0f, 7.0f), int2(8, 9)))";
|
||||
return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, float(3)), float2(4.0f, 5.0f), float2(6.0f, 7.0f), int2(8, 9)))";
|
||||
case ValidTextureOverload::kSampleGrad3dF32:
|
||||
return R"(tint_texture.SampleGrad(tint_sampler, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f)))";
|
||||
return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f)))";
|
||||
case ValidTextureOverload::kSampleGrad3dOffsetF32:
|
||||
return R"(tint_texture.SampleGrad(tint_sampler, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f), int3(10, 11, 12)))";
|
||||
return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f), int3(10, 11, 12)))";
|
||||
case ValidTextureOverload::kSampleGradCubeF32:
|
||||
return R"(tint_texture.SampleGrad(tint_sampler, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f)))";
|
||||
return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f)))";
|
||||
case ValidTextureOverload::kSampleGradCubeArrayF32:
|
||||
return R"(tint_texture.SampleGrad(tint_sampler, float4(1.0f, 2.0f, 3.0f, float(4)), float3(5.0f, 6.0f, 7.0f), float3(8.0f, 9.0f, 10.0f)))";
|
||||
return R"(tint_symbol.SampleGrad(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), float3(5.0f, 6.0f, 7.0f), float3(8.0f, 9.0f, 10.0f)))";
|
||||
case ValidTextureOverload::kSampleCompareDepth2dF32:
|
||||
return R"(tint_texture.SampleCmpLevelZero(tint_sampler, float2(1.0f, 2.0f), 3.0f))";
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float2(1.0f, 2.0f), 3.0f))";
|
||||
case ValidTextureOverload::kSampleCompareDepth2dOffsetF32:
|
||||
return R"(tint_texture.SampleCmpLevelZero(tint_sampler, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
|
||||
case ValidTextureOverload::kSampleCompareDepth2dArrayF32:
|
||||
return R"(tint_texture.SampleCmpLevelZero(tint_sampler, float3(1.0f, 2.0f, float(4)), 3.0f))";
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f))";
|
||||
case ValidTextureOverload::kSampleCompareDepth2dArrayOffsetF32:
|
||||
return R"(tint_texture.SampleCmpLevelZero(tint_sampler, float3(1.0f, 2.0f, float(4)), 3.0f, int2(5, 6)))";
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f, int2(5, 6)))";
|
||||
case ValidTextureOverload::kSampleCompareDepthCubeF32:
|
||||
return R"(tint_texture.SampleCmpLevelZero(tint_sampler, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
case ValidTextureOverload::kSampleCompareDepthCubeArrayF32:
|
||||
return R"(tint_texture.SampleCmpLevelZero(tint_sampler, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))";
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))";
|
||||
case ValidTextureOverload::kLoad1dLevelF32:
|
||||
return R"(tint_texture.Load(int2(1, 0), 3))";
|
||||
return R"(tint_symbol.Load(int2(1, 0), 3))";
|
||||
case ValidTextureOverload::kLoad1dLevelU32:
|
||||
return R"(tint_texture.Load(int2(1, 0), 3))";
|
||||
return R"(tint_symbol.Load(int2(1, 0), 3))";
|
||||
case ValidTextureOverload::kLoad1dLevelI32:
|
||||
return R"(tint_texture.Load(int2(1, 0), 3))";
|
||||
return R"(tint_symbol.Load(int2(1, 0), 3))";
|
||||
case ValidTextureOverload::kLoad2dLevelF32:
|
||||
return R"(tint_texture.Load(int3(1, 2, 0), 3))";
|
||||
return R"(tint_symbol.Load(int3(1, 2, 0), 3))";
|
||||
case ValidTextureOverload::kLoad2dLevelU32:
|
||||
return R"(tint_texture.Load(int3(1, 2, 0), 3))";
|
||||
return R"(tint_symbol.Load(int3(1, 2, 0), 3))";
|
||||
case ValidTextureOverload::kLoad2dLevelI32:
|
||||
return R"(tint_texture.Load(int3(1, 2, 0), 3))";
|
||||
return R"(tint_symbol.Load(int3(1, 2, 0), 3))";
|
||||
case ValidTextureOverload::kLoad2dArrayLevelF32:
|
||||
return R"(tint_texture.Load(int4(1, 2, 3, 0), 4))";
|
||||
return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))";
|
||||
case ValidTextureOverload::kLoad2dArrayLevelU32:
|
||||
return R"(tint_texture.Load(int4(1, 2, 3, 0), 4))";
|
||||
return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))";
|
||||
case ValidTextureOverload::kLoad2dArrayLevelI32:
|
||||
return R"(tint_texture.Load(int4(1, 2, 3, 0), 4))";
|
||||
return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))";
|
||||
case ValidTextureOverload::kLoad3dLevelF32:
|
||||
return R"(tint_texture.Load(int4(1, 2, 3, 0), 4))";
|
||||
return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))";
|
||||
case ValidTextureOverload::kLoad3dLevelU32:
|
||||
return R"(tint_texture.Load(int4(1, 2, 3, 0), 4))";
|
||||
return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))";
|
||||
case ValidTextureOverload::kLoad3dLevelI32:
|
||||
return R"(tint_texture.Load(int4(1, 2, 3, 0), 4))";
|
||||
return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))";
|
||||
case ValidTextureOverload::kLoadMultisampled2dF32:
|
||||
return R"(tint_texture.Load(int3(1, 2, 0), 3))";
|
||||
return R"(tint_symbol.Load(int3(1, 2, 0), 3))";
|
||||
case ValidTextureOverload::kLoadMultisampled2dU32:
|
||||
return R"(tint_texture.Load(int3(1, 2, 0), 3))";
|
||||
return R"(tint_symbol.Load(int3(1, 2, 0), 3))";
|
||||
case ValidTextureOverload::kLoadMultisampled2dI32:
|
||||
return R"(tint_texture.Load(int3(1, 2, 0), 3))";
|
||||
return R"(tint_symbol.Load(int3(1, 2, 0), 3))";
|
||||
case ValidTextureOverload::kLoadMultisampled2dArrayF32:
|
||||
return R"(tint_texture.Load(int4(1, 2, 3, 0), 4))";
|
||||
return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))";
|
||||
case ValidTextureOverload::kLoadMultisampled2dArrayU32:
|
||||
return R"(tint_texture.Load(int4(1, 2, 3, 0), 4))";
|
||||
return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))";
|
||||
case ValidTextureOverload::kLoadMultisampled2dArrayI32:
|
||||
return R"(tint_texture.Load(int4(1, 2, 3, 0), 4))";
|
||||
return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))";
|
||||
case ValidTextureOverload::kLoadDepth2dLevelF32:
|
||||
return R"(tint_texture.Load(int3(1, 2, 0), 3))";
|
||||
return R"(tint_symbol.Load(int3(1, 2, 0), 3))";
|
||||
case ValidTextureOverload::kLoadDepth2dArrayLevelF32:
|
||||
return R"(tint_texture.Load(int4(1, 2, 3, 0), 4))";
|
||||
return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))";
|
||||
case ValidTextureOverload::kLoadStorageRO1dRgba32float:
|
||||
return R"(tint_texture.Load(int2(1, 0)))";
|
||||
return R"(tint_symbol.Load(int2(1, 0)))";
|
||||
case ValidTextureOverload::kLoadStorageRO2dRgba8unorm:
|
||||
case ValidTextureOverload::kLoadStorageRO2dRgba8snorm:
|
||||
case ValidTextureOverload::kLoadStorageRO2dRgba8uint:
|
||||
|
@ -359,19 +359,19 @@ ExpectedResult expected_texture_overload(
|
|||
case ValidTextureOverload::kLoadStorageRO2dRgba32uint:
|
||||
case ValidTextureOverload::kLoadStorageRO2dRgba32sint:
|
||||
case ValidTextureOverload::kLoadStorageRO2dRgba32float:
|
||||
return R"(tint_texture.Load(int3(1, 2, 0)))";
|
||||
return R"(tint_symbol.Load(int3(1, 2, 0)))";
|
||||
case ValidTextureOverload::kLoadStorageRO2dArrayRgba32float:
|
||||
return R"(tint_texture.Load(int4(1, 2, 3, 0)))";
|
||||
return R"(tint_symbol.Load(int4(1, 2, 3, 0)))";
|
||||
case ValidTextureOverload::kLoadStorageRO3dRgba32float:
|
||||
return R"(tint_texture.Load(int4(1, 2, 3, 0)))";
|
||||
return R"(tint_symbol.Load(int4(1, 2, 3, 0)))";
|
||||
case ValidTextureOverload::kStoreWO1dRgba32float:
|
||||
return R"(tint_texture[1] = float4(2.0f, 3.0f, 4.0f, 5.0f))";
|
||||
return R"(tint_symbol[1] = float4(2.0f, 3.0f, 4.0f, 5.0f))";
|
||||
case ValidTextureOverload::kStoreWO2dRgba32float:
|
||||
return R"(tint_texture[int2(1, 2)] = float4(3.0f, 4.0f, 5.0f, 6.0f))";
|
||||
return R"(tint_symbol[int2(1, 2)] = float4(3.0f, 4.0f, 5.0f, 6.0f))";
|
||||
case ValidTextureOverload::kStoreWO2dArrayRgba32float:
|
||||
return R"(tint_texture[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f))";
|
||||
return R"(tint_symbol[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f))";
|
||||
case ValidTextureOverload::kStoreWO3dRgba32float:
|
||||
return R"(tint_texture[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f))";
|
||||
return R"(tint_symbol[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f))";
|
||||
}
|
||||
return "<unmatched texture overload>";
|
||||
} // NOLINT - Ignore the length of this function
|
||||
|
|
|
@ -236,8 +236,8 @@ TEST_F(HlslGeneratorImplTest_Type, EmitType_Struct_NameCollision) {
|
|||
|
||||
ASSERT_TRUE(gen.Generate(out)) << gen.error();
|
||||
EXPECT_THAT(result(), HasSubstr(R"(struct S {
|
||||
int tint_double;
|
||||
float tint_float;
|
||||
int tint_symbol;
|
||||
float tint_symbol_1;
|
||||
};
|
||||
)"));
|
||||
}
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
|
||||
#include "gtest/gtest.h"
|
||||
#include "src/transform/hlsl.h"
|
||||
#include "src/transform/manager.h"
|
||||
#include "src/transform/renamer.h"
|
||||
#include "src/writer/hlsl/generator_impl.h"
|
||||
|
||||
namespace tint {
|
||||
|
@ -99,7 +101,13 @@ class TestHelperBase : public BODY, public ProgramBuilder {
|
|||
<< formatter.format(program->Diagnostics());
|
||||
}();
|
||||
|
||||
auto result = transform::Hlsl().Run(program.get());
|
||||
transform::Manager transform_manager;
|
||||
transform::Renamer::Config renamer_config{
|
||||
transform::Renamer::Target::kHlslKeywords};
|
||||
transform_manager.append(
|
||||
std::make_unique<tint::transform::Renamer>(renamer_config));
|
||||
transform_manager.append(std::make_unique<tint::transform::Hlsl>());
|
||||
auto result = transform_manager.Run(program.get());
|
||||
[&]() {
|
||||
ASSERT_TRUE(result.program.IsValid())
|
||||
<< formatter.format(result.program.Diagnostics());
|
||||
|
|
Loading…
Reference in New Issue