mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-30 18:33:46 +00:00
BUG=tint:516 Change-Id: I7004e0dbd44d703c684118136b05b84cf609c6ba Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/42703 Reviewed-by: Ben Clayton <bclayton@google.com> Commit-Queue: Ryan Harrison <rharrison@chromium.org>
423 lines
20 KiB
C++
423 lines
20 KiB
C++
// Copyright 2020 The Tint Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include <memory>
|
|
|
|
#include "gtest/gtest.h"
|
|
#include "src/ast/call_statement.h"
|
|
#include "src/ast/intrinsic_texture_helper_test.h"
|
|
#include "src/ast/stage_decoration.h"
|
|
#include "src/type/depth_texture_type.h"
|
|
#include "src/type/multisampled_texture_type.h"
|
|
#include "src/type/sampled_texture_type.h"
|
|
#include "src/type_determiner.h"
|
|
#include "src/writer/hlsl/generator_impl.h"
|
|
#include "src/writer/hlsl/test_helper.h"
|
|
|
|
namespace tint {
|
|
namespace writer {
|
|
namespace hlsl {
|
|
namespace {
|
|
|
|
struct ExpectedResult {
|
|
ExpectedResult(const char* o) : out(o) {} // NOLINT
|
|
ExpectedResult(const char* p, const char* o) : pre(p), out(o) {}
|
|
|
|
std::string pre;
|
|
std::string out;
|
|
};
|
|
|
|
ExpectedResult expected_texture_overload(
|
|
ast::intrinsic::test::ValidTextureOverload overload) {
|
|
using ValidTextureOverload = ast::intrinsic::test::ValidTextureOverload;
|
|
switch (overload) {
|
|
case ValidTextureOverload::kDimensions1d:
|
|
case ValidTextureOverload::kDimensionsStorageRO1d:
|
|
case ValidTextureOverload::kDimensionsStorageWO1d:
|
|
return {
|
|
R"(int _tint_tmp;
|
|
texture_tint_0.GetDimensions(_tint_tmp);
|
|
)",
|
|
"_tint_tmp",
|
|
};
|
|
case ValidTextureOverload::kDimensions2d:
|
|
case ValidTextureOverload::kDimensionsDepth2d:
|
|
case ValidTextureOverload::kDimensionsStorageRO2d:
|
|
case ValidTextureOverload::kDimensionsStorageWO2d:
|
|
return {
|
|
R"(int2 _tint_tmp;
|
|
texture_tint_0.GetDimensions(_tint_tmp.x, _tint_tmp.y);
|
|
)",
|
|
"_tint_tmp",
|
|
};
|
|
case ValidTextureOverload::kDimensionsMultisampled2d:
|
|
return {
|
|
R"(int3 _tint_tmp;
|
|
texture_tint_0.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
|
|
)",
|
|
"_tint_tmp.xy",
|
|
};
|
|
|
|
case ValidTextureOverload::kDimensions2dArray:
|
|
case ValidTextureOverload::kDimensionsDepth2dArray:
|
|
case ValidTextureOverload::kDimensionsStorageRO2dArray:
|
|
case ValidTextureOverload::kDimensionsStorageWO2dArray:
|
|
return {
|
|
R"(int3 _tint_tmp;
|
|
texture_tint_0.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
|
|
)",
|
|
"_tint_tmp.xy",
|
|
};
|
|
case ValidTextureOverload::kDimensionsMultisampled2dArray:
|
|
return {
|
|
R"(int4 _tint_tmp;
|
|
texture_tint_0.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z, _tint_tmp.w);
|
|
)",
|
|
"_tint_tmp.xy",
|
|
};
|
|
case ValidTextureOverload::kDimensions3d:
|
|
case ValidTextureOverload::kDimensionsStorageRO3d:
|
|
case ValidTextureOverload::kDimensionsStorageWO3d:
|
|
return {
|
|
R"(int3 _tint_tmp;
|
|
texture_tint_0.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
|
|
)",
|
|
"_tint_tmp",
|
|
};
|
|
case ValidTextureOverload::kDimensionsCube:
|
|
case ValidTextureOverload::kDimensionsDepthCube:
|
|
return {
|
|
"int2 _tint_tmp;\n"
|
|
"texture_tint_0.GetDimensions(_tint_tmp.x, _tint_tmp.y);\n",
|
|
"_tint_tmp.xyy",
|
|
};
|
|
case ValidTextureOverload::kDimensionsCubeArray:
|
|
case ValidTextureOverload::kDimensionsDepthCubeArray:
|
|
return {
|
|
R"(int3 _tint_tmp;
|
|
texture_tint_0.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
|
|
)",
|
|
"_tint_tmp.xyy",
|
|
};
|
|
case ValidTextureOverload::kDimensions2dLevel:
|
|
case ValidTextureOverload::kDimensionsDepth2dLevel:
|
|
return {
|
|
R"(int3 _tint_tmp;
|
|
texture_tint_0.GetDimensions(1, _tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
|
|
)",
|
|
"_tint_tmp.xy",
|
|
};
|
|
case ValidTextureOverload::kDimensions2dArrayLevel:
|
|
case ValidTextureOverload::kDimensionsDepth2dArrayLevel:
|
|
return {
|
|
R"(int4 _tint_tmp;
|
|
texture_tint_0.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;
|
|
texture_tint_0.GetDimensions(1, _tint_tmp.x, _tint_tmp.y, _tint_tmp.z, _tint_tmp.w);
|
|
)",
|
|
"_tint_tmp.xyz",
|
|
};
|
|
case ValidTextureOverload::kDimensionsCubeLevel:
|
|
case ValidTextureOverload::kDimensionsDepthCubeLevel:
|
|
return {
|
|
R"(int3 _tint_tmp;
|
|
texture_tint_0.GetDimensions(1, _tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
|
|
)",
|
|
"_tint_tmp.xyy",
|
|
};
|
|
case ValidTextureOverload::kDimensionsCubeArrayLevel:
|
|
case ValidTextureOverload::kDimensionsDepthCubeArrayLevel:
|
|
return {
|
|
R"(int4 _tint_tmp;
|
|
texture_tint_0.GetDimensions(1, _tint_tmp.x, _tint_tmp.y, _tint_tmp.z, _tint_tmp.w);
|
|
)",
|
|
"_tint_tmp.xyy",
|
|
};
|
|
case ValidTextureOverload::kNumLayers2dArray:
|
|
case ValidTextureOverload::kNumLayersDepth2dArray:
|
|
case ValidTextureOverload::kNumLayersCubeArray:
|
|
case ValidTextureOverload::kNumLayersDepthCubeArray:
|
|
case ValidTextureOverload::kNumLayersStorageWO2dArray:
|
|
return {
|
|
R"(int3 _tint_tmp;
|
|
texture_tint_0.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
|
|
)",
|
|
"_tint_tmp.z",
|
|
};
|
|
case ValidTextureOverload::kNumLayersMultisampled2dArray:
|
|
return {
|
|
R"(int4 _tint_tmp;
|
|
texture_tint_0.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z, _tint_tmp.w);
|
|
)",
|
|
"_tint_tmp.z",
|
|
};
|
|
|
|
case ValidTextureOverload::kNumLevels2d:
|
|
case ValidTextureOverload::kNumLevelsCube:
|
|
case ValidTextureOverload::kNumLevelsDepth2d:
|
|
case ValidTextureOverload::kNumLevelsDepthCube:
|
|
return {
|
|
R"(int3 _tint_tmp;
|
|
texture_tint_0.GetDimensions(0, _tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
|
|
)",
|
|
"_tint_tmp.z",
|
|
};
|
|
case ValidTextureOverload::kNumLevels2dArray:
|
|
case ValidTextureOverload::kNumLevels3d:
|
|
case ValidTextureOverload::kNumLevelsCubeArray:
|
|
case ValidTextureOverload::kNumLevelsDepth2dArray:
|
|
case ValidTextureOverload::kNumLevelsDepthCubeArray:
|
|
return {
|
|
R"(int4 _tint_tmp;
|
|
texture_tint_0.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;
|
|
texture_tint_0.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
|
|
)",
|
|
"_tint_tmp.z",
|
|
};
|
|
case ValidTextureOverload::kNumSamplesMultisampled2dArray:
|
|
return {
|
|
R"(int4 _tint_tmp;
|
|
texture_tint_0.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z, _tint_tmp.w);
|
|
)",
|
|
"_tint_tmp.w",
|
|
};
|
|
case ValidTextureOverload::kSample1dF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, 1.0f))";
|
|
case ValidTextureOverload::kSample2dF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float2(1.0f, 2.0f)))";
|
|
case ValidTextureOverload::kSample2dOffsetF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float2(1.0f, 2.0f), int2(3, 4)))";
|
|
case ValidTextureOverload::kSample2dArrayF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, float(3))))";
|
|
case ValidTextureOverload::kSample2dArrayOffsetF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, float(3)), int2(4, 5)))";
|
|
case ValidTextureOverload::kSample3dF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, 3.0f)))";
|
|
case ValidTextureOverload::kSample3dOffsetF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), int3(4, 5, 6)))";
|
|
case ValidTextureOverload::kSampleCubeF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, 3.0f)))";
|
|
case ValidTextureOverload::kSampleCubeArrayF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float4(1.0f, 2.0f, 3.0f, float(4))))";
|
|
case ValidTextureOverload::kSampleDepth2dF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float2(1.0f, 2.0f)))";
|
|
case ValidTextureOverload::kSampleDepth2dOffsetF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float2(1.0f, 2.0f), int2(3, 4)))";
|
|
case ValidTextureOverload::kSampleDepth2dArrayF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, float(3))))";
|
|
case ValidTextureOverload::kSampleDepth2dArrayOffsetF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, float(3)), int2(4, 5)))";
|
|
case ValidTextureOverload::kSampleDepthCubeF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, 3.0f)))";
|
|
case ValidTextureOverload::kSampleDepthCubeArrayF32:
|
|
return R"(texture_tint_0.Sample(sampler_tint_0, float4(1.0f, 2.0f, 3.0f, float(4))))";
|
|
case ValidTextureOverload::kSampleBias2dF32:
|
|
return R"(texture_tint_0.SampleBias(sampler_tint_0, float2(1.0f, 2.0f), 3.0f))";
|
|
case ValidTextureOverload::kSampleBias2dOffsetF32:
|
|
return R"(texture_tint_0.SampleBias(sampler_tint_0, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
|
|
case ValidTextureOverload::kSampleBias2dArrayF32:
|
|
return R"(texture_tint_0.SampleBias(sampler_tint_0, float3(1.0f, 2.0f, float(4)), 3.0f))";
|
|
case ValidTextureOverload::kSampleBias2dArrayOffsetF32:
|
|
return R"(texture_tint_0.SampleBias(sampler_tint_0, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6)))";
|
|
case ValidTextureOverload::kSampleBias3dF32:
|
|
return R"(texture_tint_0.SampleBias(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
|
case ValidTextureOverload::kSampleBias3dOffsetF32:
|
|
return R"(texture_tint_0.SampleBias(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7)))";
|
|
case ValidTextureOverload::kSampleBiasCubeF32:
|
|
return R"(texture_tint_0.SampleBias(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
|
case ValidTextureOverload::kSampleBiasCubeArrayF32:
|
|
return R"(texture_tint_0.SampleBias(sampler_tint_0, float4(1.0f, 2.0f, 3.0f, float(3)), 4.0f))";
|
|
case ValidTextureOverload::kSampleLevel2dF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float2(1.0f, 2.0f), 3.0f))";
|
|
case ValidTextureOverload::kSampleLevel2dOffsetF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
|
|
case ValidTextureOverload::kSampleLevel2dArrayF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, float(3)), 4.0f))";
|
|
case ValidTextureOverload::kSampleLevel2dArrayOffsetF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6)))";
|
|
case ValidTextureOverload::kSampleLevel3dF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
|
case ValidTextureOverload::kSampleLevel3dOffsetF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7)))";
|
|
case ValidTextureOverload::kSampleLevelCubeF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
|
case ValidTextureOverload::kSampleLevelCubeArrayF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))";
|
|
case ValidTextureOverload::kSampleLevelDepth2dF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float2(1.0f, 2.0f), 3))";
|
|
case ValidTextureOverload::kSampleLevelDepth2dOffsetF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float2(1.0f, 2.0f), 3, int2(4, 5)))";
|
|
case ValidTextureOverload::kSampleLevelDepth2dArrayF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, float(3)), 4))";
|
|
case ValidTextureOverload::kSampleLevelDepth2dArrayOffsetF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, float(3)), 4, int2(5, 6)))";
|
|
case ValidTextureOverload::kSampleLevelDepthCubeF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4))";
|
|
case ValidTextureOverload::kSampleLevelDepthCubeArrayF32:
|
|
return R"(texture_tint_0.SampleLevel(sampler_tint_0, float4(1.0f, 2.0f, 3.0f, float(4)), 5))";
|
|
case ValidTextureOverload::kSampleGrad2dF32:
|
|
return R"(texture_tint_0.SampleGrad(sampler_tint_0, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f)))";
|
|
case ValidTextureOverload::kSampleGrad2dOffsetF32:
|
|
return R"(texture_tint_0.SampleGrad(sampler_tint_0, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f), int2(7, 8)))";
|
|
case ValidTextureOverload::kSampleGrad2dArrayF32:
|
|
return R"(texture_tint_0.SampleGrad(sampler_tint_0, float3(1.0f, 2.0f, float(3)), float2(4.0f, 5.0f), float2(6.0f, 7.0f)))";
|
|
case ValidTextureOverload::kSampleGrad2dArrayOffsetF32:
|
|
return R"(texture_tint_0.SampleGrad(sampler_tint_0, 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"(texture_tint_0.SampleGrad(sampler_tint_0, 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"(texture_tint_0.SampleGrad(sampler_tint_0, 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"(texture_tint_0.SampleGrad(sampler_tint_0, 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"(texture_tint_0.SampleGrad(sampler_tint_0, 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"(texture_tint_0.SampleCmp(sampler_tint_0, float2(1.0f, 2.0f), 3.0f))";
|
|
case ValidTextureOverload::kSampleCompareDepth2dOffsetF32:
|
|
return R"(texture_tint_0.SampleCmp(sampler_tint_0, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
|
|
case ValidTextureOverload::kSampleCompareDepth2dArrayF32:
|
|
return R"(texture_tint_0.SampleCmp(sampler_tint_0, float3(1.0f, 2.0f, float(4)), 3.0f))";
|
|
case ValidTextureOverload::kSampleCompareDepth2dArrayOffsetF32:
|
|
return R"(texture_tint_0.SampleCmp(sampler_tint_0, float3(1.0f, 2.0f, float(4)), 3.0f, int2(5, 6)))";
|
|
case ValidTextureOverload::kSampleCompareDepthCubeF32:
|
|
return R"(texture_tint_0.SampleCmp(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
|
case ValidTextureOverload::kSampleCompareDepthCubeArrayF32:
|
|
return R"(texture_tint_0.SampleCmp(sampler_tint_0, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))";
|
|
case ValidTextureOverload::kLoad1dLevelF32:
|
|
return R"(texture_tint_0.Load(int2(1, 0), 3))";
|
|
case ValidTextureOverload::kLoad1dLevelU32:
|
|
return R"(texture_tint_0.Load(int2(1, 0), 3))";
|
|
case ValidTextureOverload::kLoad1dLevelI32:
|
|
return R"(texture_tint_0.Load(int2(1, 0), 3))";
|
|
case ValidTextureOverload::kLoad2dLevelF32:
|
|
return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
|
|
case ValidTextureOverload::kLoad2dLevelU32:
|
|
return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
|
|
case ValidTextureOverload::kLoad2dLevelI32:
|
|
return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
|
|
case ValidTextureOverload::kLoad2dArrayLevelF32:
|
|
return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
|
|
case ValidTextureOverload::kLoad2dArrayLevelU32:
|
|
return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
|
|
case ValidTextureOverload::kLoad2dArrayLevelI32:
|
|
return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
|
|
case ValidTextureOverload::kLoad3dLevelF32:
|
|
return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
|
|
case ValidTextureOverload::kLoad3dLevelU32:
|
|
return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
|
|
case ValidTextureOverload::kLoad3dLevelI32:
|
|
return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
|
|
case ValidTextureOverload::kLoadMultisampled2dF32:
|
|
return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
|
|
case ValidTextureOverload::kLoadMultisampled2dU32:
|
|
return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
|
|
case ValidTextureOverload::kLoadMultisampled2dI32:
|
|
return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
|
|
case ValidTextureOverload::kLoadMultisampled2dArrayF32:
|
|
return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
|
|
case ValidTextureOverload::kLoadMultisampled2dArrayU32:
|
|
return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
|
|
case ValidTextureOverload::kLoadMultisampled2dArrayI32:
|
|
return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
|
|
case ValidTextureOverload::kLoadDepth2dLevelF32:
|
|
return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
|
|
case ValidTextureOverload::kLoadDepth2dArrayLevelF32:
|
|
return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
|
|
case ValidTextureOverload::kLoadStorageRO1dRgba32float:
|
|
return R"(texture_tint_0.Load(1))";
|
|
case ValidTextureOverload::kLoadStorageRO2dRgba8unorm:
|
|
case ValidTextureOverload::kLoadStorageRO2dRgba8snorm:
|
|
case ValidTextureOverload::kLoadStorageRO2dRgba8uint:
|
|
case ValidTextureOverload::kLoadStorageRO2dRgba8sint:
|
|
case ValidTextureOverload::kLoadStorageRO2dRgba16uint:
|
|
case ValidTextureOverload::kLoadStorageRO2dRgba16sint:
|
|
case ValidTextureOverload::kLoadStorageRO2dRgba16float:
|
|
case ValidTextureOverload::kLoadStorageRO2dR32uint:
|
|
case ValidTextureOverload::kLoadStorageRO2dR32sint:
|
|
case ValidTextureOverload::kLoadStorageRO2dR32float:
|
|
case ValidTextureOverload::kLoadStorageRO2dRg32uint:
|
|
case ValidTextureOverload::kLoadStorageRO2dRg32sint:
|
|
case ValidTextureOverload::kLoadStorageRO2dRg32float:
|
|
case ValidTextureOverload::kLoadStorageRO2dRgba32uint:
|
|
case ValidTextureOverload::kLoadStorageRO2dRgba32sint:
|
|
case ValidTextureOverload::kLoadStorageRO2dRgba32float:
|
|
return R"(texture_tint_0.Load(int2(1, 2)))";
|
|
case ValidTextureOverload::kLoadStorageRO2dArrayRgba32float:
|
|
return R"(texture_tint_0.Load(int3(1, 2, 3)))";
|
|
case ValidTextureOverload::kLoadStorageRO3dRgba32float:
|
|
return R"(texture_tint_0.Load(int3(1, 2, 3)))";
|
|
case ValidTextureOverload::kStoreWO1dRgba32float:
|
|
return R"(texture_tint_0[1] = float4(2.0f, 3.0f, 4.0f, 5.0f))";
|
|
case ValidTextureOverload::kStoreWO2dRgba32float:
|
|
return R"(texture_tint_0[int2(1, 2)] = float4(3.0f, 4.0f, 5.0f, 6.0f))";
|
|
case ValidTextureOverload::kStoreWO2dArrayRgba32float:
|
|
return R"(texture_tint_0[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f))";
|
|
case ValidTextureOverload::kStoreWO3dRgba32float:
|
|
return R"(texture_tint_0[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f))";
|
|
}
|
|
return "<unmatched texture overload>";
|
|
} // NOLINT - Ignore the length of this function
|
|
|
|
class HlslGeneratorIntrinsicTextureTest
|
|
: public TestParamHelper<ast::intrinsic::test::TextureOverloadCase> {};
|
|
|
|
TEST_P(HlslGeneratorIntrinsicTextureTest, Call) {
|
|
auto param = GetParam();
|
|
|
|
param.buildTextureVariable(this);
|
|
param.buildSamplerVariable(this);
|
|
|
|
auto* call = Call(param.function, param.args(this));
|
|
|
|
Func("main", ast::VariableList{}, ty.void_(),
|
|
ast::StatementList{
|
|
create<ast::CallStatement>(call),
|
|
},
|
|
ast::FunctionDecorationList{
|
|
create<ast::StageDecoration>(ast::PipelineStage::kFragment),
|
|
});
|
|
|
|
GeneratorImpl& gen = Build();
|
|
|
|
ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
|
|
|
|
auto expected = expected_texture_overload(param.overload);
|
|
|
|
EXPECT_EQ(expected.pre, pre_result());
|
|
EXPECT_EQ(expected.out, result());
|
|
|
|
Validate();
|
|
}
|
|
|
|
INSTANTIATE_TEST_SUITE_P(
|
|
HlslGeneratorIntrinsicTextureTest,
|
|
HlslGeneratorIntrinsicTextureTest,
|
|
testing::ValuesIn(ast::intrinsic::test::TextureOverloadCase::ValidCases()));
|
|
|
|
} // namespace
|
|
} // namespace hlsl
|
|
} // namespace writer
|
|
} // namespace tint
|