mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-14 07:36:15 +00:00
intrinsics: textureSampleCompareLevel()
Fixed: tint:862 Change-Id: If85fd589a500afe2c59ba581fcd0124d4b87dfde Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/54181 Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
@@ -128,6 +128,12 @@ enum class ValidTextureOverload {
|
||||
kSampleCompareDepth2dArrayOffsetF32,
|
||||
kSampleCompareDepthCubeF32,
|
||||
kSampleCompareDepthCubeArrayF32,
|
||||
kSampleCompareLevelDepth2dF32,
|
||||
kSampleCompareLevelDepth2dOffsetF32,
|
||||
kSampleCompareLevelDepth2dArrayF32,
|
||||
kSampleCompareLevelDepth2dArrayOffsetF32,
|
||||
kSampleCompareLevelDepthCubeF32,
|
||||
kSampleCompareLevelDepthCubeArrayF32,
|
||||
kLoad1dLevelF32,
|
||||
kLoad1dLevelU32,
|
||||
kLoad1dLevelI32,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -454,6 +454,12 @@ fn textureNumSamples<T: fiu32>(texture: texture_multisampled_2d<T>) -> i32
|
||||
[[stage("fragment")]] fn textureSampleCompare(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: i32, depth_ref: f32, offset: vec2<i32>) -> f32
|
||||
[[stage("fragment")]] fn textureSampleCompare(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> f32
|
||||
[[stage("fragment")]] fn textureSampleCompare(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: i32, depth_ref: f32) -> f32
|
||||
fn textureSampleCompareLevel(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> f32
|
||||
fn textureSampleCompareLevel(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, offset: vec2<i32>) -> f32
|
||||
fn textureSampleCompareLevel(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: i32, depth_ref: f32) -> f32
|
||||
fn textureSampleCompareLevel(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: i32, depth_ref: f32, offset: vec2<i32>) -> f32
|
||||
fn textureSampleCompareLevel(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> f32
|
||||
fn textureSampleCompareLevel(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: i32, depth_ref: f32) -> f32
|
||||
fn textureSampleGrad(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, ddx: vec2<f32>, ddy: vec2<f32>) -> vec4<f32>
|
||||
fn textureSampleGrad(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, ddx: vec2<f32>, ddy: vec2<f32>, offset: vec2<i32>) -> vec4<f32>
|
||||
fn textureSampleGrad(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32, ddx: vec2<f32>, ddy: vec2<f32>) -> vec4<f32>
|
||||
|
||||
@@ -1862,6 +1862,18 @@ const char* expected_texture_overload(
|
||||
return R"(textureSampleCompare(texture, sampler, coords, depth_ref))";
|
||||
case ValidTextureOverload::kSampleCompareDepthCubeArrayF32:
|
||||
return R"(textureSampleCompare(texture, sampler, coords, array_index, depth_ref))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dF32:
|
||||
return R"(textureSampleCompare(texture, sampler, coords, depth_ref))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dOffsetF32:
|
||||
return R"(textureSampleCompare(texture, sampler, coords, depth_ref, offset))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dArrayF32:
|
||||
return R"(textureSampleCompare(texture, sampler, coords, array_index, depth_ref))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dArrayOffsetF32:
|
||||
return R"(textureSampleCompare(texture, sampler, coords, array_index, depth_ref, offset))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepthCubeF32:
|
||||
return R"(textureSampleCompare(texture, sampler, coords, depth_ref))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepthCubeArrayF32:
|
||||
return R"(textureSampleCompare(texture, sampler, coords, array_index, depth_ref))";
|
||||
case ValidTextureOverload::kLoad1dLevelF32:
|
||||
return R"(textureLoad(texture, coords, level))";
|
||||
case ValidTextureOverload::kLoad1dLevelU32:
|
||||
|
||||
@@ -55,6 +55,7 @@ bool IsTextureIntrinsic(IntrinsicType i) {
|
||||
i == IntrinsicType::kTextureSampleLevel ||
|
||||
i == IntrinsicType::kTextureSampleBias ||
|
||||
i == IntrinsicType::kTextureSampleCompare ||
|
||||
i == IntrinsicType::kTextureSampleCompareLevel ||
|
||||
i == IntrinsicType::kTextureSampleGrad ||
|
||||
i == IntrinsicType::kTextureStore;
|
||||
}
|
||||
|
||||
@@ -111,6 +111,8 @@ INSTANTIATE_TEST_SUITE_P(
|
||||
IntrinsicData{"textureSampleBias", IntrinsicType::kTextureSampleBias},
|
||||
IntrinsicData{"textureSampleCompare",
|
||||
IntrinsicType::kTextureSampleCompare},
|
||||
IntrinsicData{"textureSampleCompareLevel",
|
||||
IntrinsicType::kTextureSampleCompareLevel},
|
||||
IntrinsicData{"textureSampleGrad", IntrinsicType::kTextureSampleGrad},
|
||||
IntrinsicData{"textureSampleLevel", IntrinsicType::kTextureSampleLevel},
|
||||
IntrinsicData{"trunc", IntrinsicType::kTrunc},
|
||||
|
||||
@@ -274,6 +274,9 @@ IntrinsicType ParseIntrinsicType(const std::string& name) {
|
||||
if (name == "textureSampleCompare") {
|
||||
return IntrinsicType::kTextureSampleCompare;
|
||||
}
|
||||
if (name == "textureSampleCompareLevel") {
|
||||
return IntrinsicType::kTextureSampleCompareLevel;
|
||||
}
|
||||
if (name == "textureSampleGrad") {
|
||||
return IntrinsicType::kTextureSampleGrad;
|
||||
}
|
||||
@@ -457,6 +460,8 @@ const char* str(IntrinsicType i) {
|
||||
return "textureSampleBias";
|
||||
case IntrinsicType::kTextureSampleCompare:
|
||||
return "textureSampleCompare";
|
||||
case IntrinsicType::kTextureSampleCompareLevel:
|
||||
return "textureSampleCompareLevel";
|
||||
case IntrinsicType::kTextureSampleGrad:
|
||||
return "textureSampleGrad";
|
||||
case IntrinsicType::kTextureSampleLevel:
|
||||
|
||||
@@ -115,6 +115,7 @@ enum class IntrinsicType {
|
||||
kTextureSample,
|
||||
kTextureSampleBias,
|
||||
kTextureSampleCompare,
|
||||
kTextureSampleCompareLevel,
|
||||
kTextureSampleGrad,
|
||||
kTextureSampleLevel,
|
||||
kTextureStore,
|
||||
|
||||
@@ -1117,6 +1117,9 @@ bool GeneratorImpl::EmitTextureCall(std::ostream& pre,
|
||||
out << ".SampleGrad(";
|
||||
break;
|
||||
case sem::IntrinsicType::kTextureSampleCompare:
|
||||
out << ".SampleCmp(";
|
||||
break;
|
||||
case sem::IntrinsicType::kTextureSampleCompareLevel:
|
||||
out << ".SampleCmpLevelZero(";
|
||||
break;
|
||||
case sem::IntrinsicType::kTextureLoad:
|
||||
|
||||
@@ -268,16 +268,28 @@ ExpectedResult expected_texture_overload(
|
||||
case ValidTextureOverload::kSampleGradCubeArrayF32:
|
||||
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_symbol.SampleCmpLevelZero(tint_symbol_1, float2(1.0f, 2.0f), 3.0f))";
|
||||
return R"(tint_symbol.SampleCmp(tint_symbol_1, float2(1.0f, 2.0f), 3.0f))";
|
||||
case ValidTextureOverload::kSampleCompareDepth2dOffsetF32:
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
|
||||
return R"(tint_symbol.SampleCmp(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
|
||||
case ValidTextureOverload::kSampleCompareDepth2dArrayF32:
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f))";
|
||||
return R"(tint_symbol.SampleCmp(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f))";
|
||||
case ValidTextureOverload::kSampleCompareDepth2dArrayOffsetF32:
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f, int2(5, 6)))";
|
||||
return R"(tint_symbol.SampleCmp(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f, int2(5, 6)))";
|
||||
case ValidTextureOverload::kSampleCompareDepthCubeF32:
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
return R"(tint_symbol.SampleCmp(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
case ValidTextureOverload::kSampleCompareDepthCubeArrayF32:
|
||||
return R"(tint_symbol.SampleCmp(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dF32:
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float2(1.0f, 2.0f), 3.0f))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dOffsetF32:
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dArrayF32:
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dArrayOffsetF32:
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f, int2(5, 6)))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepthCubeF32:
|
||||
return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepthCubeArrayF32:
|
||||
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_symbol.Load(int2(1, 0), 3))";
|
||||
|
||||
@@ -650,6 +650,7 @@ bool GeneratorImpl::EmitTextureCall(ast::CallExpression* expr,
|
||||
out_ << ".sample(";
|
||||
break;
|
||||
case sem::IntrinsicType::kTextureSampleCompare:
|
||||
case sem::IntrinsicType::kTextureSampleCompareLevel:
|
||||
out_ << ".sample_compare(";
|
||||
break;
|
||||
case sem::IntrinsicType::kTextureLoad:
|
||||
@@ -732,6 +733,10 @@ bool GeneratorImpl::EmitTextureCall(ast::CallExpression* expr,
|
||||
out_ << ")";
|
||||
}
|
||||
}
|
||||
if (intrinsic->Type() == sem::IntrinsicType::kTextureSampleCompareLevel) {
|
||||
maybe_write_comma();
|
||||
out_ << "level(0)";
|
||||
}
|
||||
if (auto* ddx = arg(Usage::kDdx)) {
|
||||
auto dim = texture_type->dim();
|
||||
switch (dim) {
|
||||
|
||||
@@ -180,6 +180,18 @@ std::string expected_texture_overload(
|
||||
return R"(texture.sample_compare(sampler, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
case ValidTextureOverload::kSampleCompareDepthCubeArrayF32:
|
||||
return R"(texture.sample_compare(sampler, float3(1.0f, 2.0f, 3.0f), 4, 5.0f))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dF32:
|
||||
return R"(texture.sample_compare(sampler, float2(1.0f, 2.0f), 3.0f))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dOffsetF32:
|
||||
return R"(texture.sample_compare(sampler, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dArrayF32:
|
||||
return R"(texture.sample_compare(sampler, float2(1.0f, 2.0f), 4, 3.0f))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dArrayOffsetF32:
|
||||
return R"(texture.sample_compare(sampler, float2(1.0f, 2.0f), 4, 3.0f, int2(5, 6)))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepthCubeF32:
|
||||
return R"(texture.sample_compare(sampler, float3(1.0f, 2.0f, 3.0f), 4.0f))";
|
||||
case ValidTextureOverload::kSampleCompareLevelDepthCubeArrayF32:
|
||||
return R"(texture.sample_compare(sampler, float3(1.0f, 2.0f, 3.0f), 4, 5.0f))";
|
||||
case ValidTextureOverload::kLoad1dLevelF32:
|
||||
return R"(texture.read(uint(1), 3))";
|
||||
case ValidTextureOverload::kLoad1dLevelU32:
|
||||
|
||||
@@ -2783,6 +2783,15 @@ bool Builder::GenerateTextureIntrinsic(ast::CallExpression* call,
|
||||
break;
|
||||
}
|
||||
case IntrinsicType::kTextureSampleCompare: {
|
||||
op = spv::Op::OpImageSampleDrefImplicitLod;
|
||||
append_result_type_and_id_to_spirv_params();
|
||||
if (!append_image_and_coords_to_spirv_params()) {
|
||||
return false;
|
||||
}
|
||||
spirv_params.emplace_back(gen_arg(Usage::kDepthRef));
|
||||
break;
|
||||
}
|
||||
case IntrinsicType::kTextureSampleCompareLevel: {
|
||||
op = spv::Op::OpImageSampleDrefExplicitLod;
|
||||
append_result_type_and_id_to_spirv_params();
|
||||
if (!append_image_and_coords_to_spirv_params()) {
|
||||
|
||||
@@ -549,7 +549,7 @@ TEST_F(IntrinsicBuilderTest, Call_TextureSampleCompare_Twice) {
|
||||
ASSERT_TRUE(b.GenerateGlobalVariable(sampler)) << b.error();
|
||||
|
||||
EXPECT_EQ(b.GenerateExpression(expr1), 8u) << b.error();
|
||||
EXPECT_EQ(b.GenerateExpression(expr2), 18u) << b.error();
|
||||
EXPECT_EQ(b.GenerateExpression(expr2), 17u) << b.error();
|
||||
|
||||
EXPECT_EQ(DumpInstructions(b.types()), R"(%4 = OpTypeFloat 32
|
||||
%3 = OpTypeImage %4 2D 1 0 0 1 Unknown
|
||||
@@ -563,18 +563,17 @@ TEST_F(IntrinsicBuilderTest, Call_TextureSampleCompare_Twice) {
|
||||
%14 = OpConstant %4 1
|
||||
%15 = OpConstant %4 2
|
||||
%16 = OpConstantComposite %13 %14 %15
|
||||
%17 = OpConstant %4 0
|
||||
)");
|
||||
|
||||
EXPECT_EQ(DumpInstructions(b.functions()[0].instructions()),
|
||||
R"(%9 = OpLoad %7 %5
|
||||
%10 = OpLoad %3 %1
|
||||
%12 = OpSampledImage %11 %10 %9
|
||||
%8 = OpImageSampleDrefExplicitLod %4 %12 %16 %15 Lod %17
|
||||
%19 = OpLoad %7 %5
|
||||
%20 = OpLoad %3 %1
|
||||
%21 = OpSampledImage %11 %20 %19
|
||||
%18 = OpImageSampleDrefExplicitLod %4 %21 %16 %15 Lod %17
|
||||
%8 = OpImageSampleDrefImplicitLod %4 %12 %16 %15
|
||||
%18 = OpLoad %7 %5
|
||||
%19 = OpLoad %3 %1
|
||||
%20 = OpSampledImage %11 %19 %18
|
||||
%17 = OpImageSampleDrefImplicitLod %4 %20 %16 %15
|
||||
)");
|
||||
}
|
||||
|
||||
|
||||
@@ -2321,6 +2321,177 @@ OpCapability SampledCubeArray
|
||||
%15 = OpConstant %4 2
|
||||
%16 = OpConstantComposite %13 %14 %15
|
||||
%17 = OpConstant %4 3
|
||||
)",
|
||||
R"(
|
||||
%9 = OpLoad %7 %5
|
||||
%10 = OpLoad %3 %1
|
||||
%12 = OpSampledImage %11 %10 %9
|
||||
%8 = OpImageSampleDrefImplicitLod %4 %12 %16 %17
|
||||
)",
|
||||
R"(
|
||||
)"};
|
||||
case ValidTextureOverload::kSampleCompareDepth2dOffsetF32:
|
||||
return {
|
||||
R"(
|
||||
%4 = OpTypeFloat 32
|
||||
%3 = OpTypeImage %4 2D 1 0 0 1 Unknown
|
||||
%2 = OpTypePointer UniformConstant %3
|
||||
%1 = OpVariable %2 UniformConstant
|
||||
%7 = OpTypeSampler
|
||||
%6 = OpTypePointer UniformConstant %7
|
||||
%5 = OpVariable %6 UniformConstant
|
||||
%11 = OpTypeSampledImage %3
|
||||
%13 = OpTypeVector %4 2
|
||||
%14 = OpConstant %4 1
|
||||
%15 = OpConstant %4 2
|
||||
%16 = OpConstantComposite %13 %14 %15
|
||||
%17 = OpConstant %4 3
|
||||
%19 = OpTypeInt 32 1
|
||||
%18 = OpTypeVector %19 2
|
||||
%20 = OpConstant %19 4
|
||||
%21 = OpConstant %19 5
|
||||
%22 = OpConstantComposite %18 %20 %21
|
||||
)",
|
||||
R"(
|
||||
%9 = OpLoad %7 %5
|
||||
%10 = OpLoad %3 %1
|
||||
%12 = OpSampledImage %11 %10 %9
|
||||
%8 = OpImageSampleDrefImplicitLod %4 %12 %16 %17 ConstOffset %22
|
||||
)",
|
||||
R"(
|
||||
)"};
|
||||
case ValidTextureOverload::kSampleCompareDepth2dArrayF32:
|
||||
return {
|
||||
R"(
|
||||
%4 = OpTypeFloat 32
|
||||
%3 = OpTypeImage %4 2D 1 1 0 1 Unknown
|
||||
%2 = OpTypePointer UniformConstant %3
|
||||
%1 = OpVariable %2 UniformConstant
|
||||
%7 = OpTypeSampler
|
||||
%6 = OpTypePointer UniformConstant %7
|
||||
%5 = OpVariable %6 UniformConstant
|
||||
%11 = OpTypeSampledImage %3
|
||||
%13 = OpTypeVector %4 3
|
||||
%14 = OpConstant %4 1
|
||||
%15 = OpConstant %4 2
|
||||
%17 = OpTypeInt 32 1
|
||||
%18 = OpConstant %17 4
|
||||
%20 = OpConstant %4 3
|
||||
)",
|
||||
R"(
|
||||
%9 = OpLoad %7 %5
|
||||
%10 = OpLoad %3 %1
|
||||
%12 = OpSampledImage %11 %10 %9
|
||||
%16 = OpConvertSToF %4 %18
|
||||
%19 = OpCompositeConstruct %13 %14 %15 %16
|
||||
%8 = OpImageSampleDrefImplicitLod %4 %12 %19 %20
|
||||
)",
|
||||
R"(
|
||||
)"};
|
||||
case ValidTextureOverload::kSampleCompareDepth2dArrayOffsetF32:
|
||||
return {
|
||||
R"(
|
||||
%4 = OpTypeFloat 32
|
||||
%3 = OpTypeImage %4 2D 1 1 0 1 Unknown
|
||||
%2 = OpTypePointer UniformConstant %3
|
||||
%1 = OpVariable %2 UniformConstant
|
||||
%7 = OpTypeSampler
|
||||
%6 = OpTypePointer UniformConstant %7
|
||||
%5 = OpVariable %6 UniformConstant
|
||||
%11 = OpTypeSampledImage %3
|
||||
%13 = OpTypeVector %4 3
|
||||
%14 = OpConstant %4 1
|
||||
%15 = OpConstant %4 2
|
||||
%17 = OpTypeInt 32 1
|
||||
%18 = OpConstant %17 4
|
||||
%20 = OpConstant %4 3
|
||||
%21 = OpTypeVector %17 2
|
||||
%22 = OpConstant %17 5
|
||||
%23 = OpConstant %17 6
|
||||
%24 = OpConstantComposite %21 %22 %23
|
||||
)",
|
||||
R"(
|
||||
%9 = OpLoad %7 %5
|
||||
%10 = OpLoad %3 %1
|
||||
%12 = OpSampledImage %11 %10 %9
|
||||
%16 = OpConvertSToF %4 %18
|
||||
%19 = OpCompositeConstruct %13 %14 %15 %16
|
||||
%8 = OpImageSampleDrefImplicitLod %4 %12 %19 %20 ConstOffset %24
|
||||
)",
|
||||
R"(
|
||||
)"};
|
||||
case ValidTextureOverload::kSampleCompareDepthCubeF32:
|
||||
return {
|
||||
R"(
|
||||
%4 = OpTypeFloat 32
|
||||
%3 = OpTypeImage %4 Cube 1 0 0 1 Unknown
|
||||
%2 = OpTypePointer UniformConstant %3
|
||||
%1 = OpVariable %2 UniformConstant
|
||||
%7 = OpTypeSampler
|
||||
%6 = OpTypePointer UniformConstant %7
|
||||
%5 = OpVariable %6 UniformConstant
|
||||
%11 = OpTypeSampledImage %3
|
||||
%13 = OpTypeVector %4 3
|
||||
%14 = OpConstant %4 1
|
||||
%15 = OpConstant %4 2
|
||||
%16 = OpConstant %4 3
|
||||
%17 = OpConstantComposite %13 %14 %15 %16
|
||||
%18 = OpConstant %4 4
|
||||
)",
|
||||
R"(
|
||||
%9 = OpLoad %7 %5
|
||||
%10 = OpLoad %3 %1
|
||||
%12 = OpSampledImage %11 %10 %9
|
||||
%8 = OpImageSampleDrefImplicitLod %4 %12 %17 %18
|
||||
)",
|
||||
R"(
|
||||
)"};
|
||||
case ValidTextureOverload::kSampleCompareDepthCubeArrayF32:
|
||||
return {
|
||||
R"(
|
||||
%4 = OpTypeFloat 32
|
||||
%3 = OpTypeImage %4 Cube 1 1 0 1 Unknown
|
||||
%2 = OpTypePointer UniformConstant %3
|
||||
%1 = OpVariable %2 UniformConstant
|
||||
%7 = OpTypeSampler
|
||||
%6 = OpTypePointer UniformConstant %7
|
||||
%5 = OpVariable %6 UniformConstant
|
||||
%11 = OpTypeSampledImage %3
|
||||
%13 = OpTypeVector %4 4
|
||||
%14 = OpConstant %4 1
|
||||
%15 = OpConstant %4 2
|
||||
%16 = OpConstant %4 3
|
||||
%18 = OpTypeInt 32 1
|
||||
%19 = OpConstant %18 4
|
||||
%21 = OpConstant %4 5
|
||||
)",
|
||||
R"(
|
||||
%9 = OpLoad %7 %5
|
||||
%10 = OpLoad %3 %1
|
||||
%12 = OpSampledImage %11 %10 %9
|
||||
%17 = OpConvertSToF %4 %19
|
||||
%20 = OpCompositeConstruct %13 %14 %15 %16 %17
|
||||
%8 = OpImageSampleDrefImplicitLod %4 %12 %20 %21
|
||||
)",
|
||||
R"(
|
||||
OpCapability SampledCubeArray
|
||||
)"};
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dF32:
|
||||
return {
|
||||
R"(
|
||||
%4 = OpTypeFloat 32
|
||||
%3 = OpTypeImage %4 2D 1 0 0 1 Unknown
|
||||
%2 = OpTypePointer UniformConstant %3
|
||||
%1 = OpVariable %2 UniformConstant
|
||||
%7 = OpTypeSampler
|
||||
%6 = OpTypePointer UniformConstant %7
|
||||
%5 = OpVariable %6 UniformConstant
|
||||
%11 = OpTypeSampledImage %3
|
||||
%13 = OpTypeVector %4 2
|
||||
%14 = OpConstant %4 1
|
||||
%15 = OpConstant %4 2
|
||||
%16 = OpConstantComposite %13 %14 %15
|
||||
%17 = OpConstant %4 3
|
||||
%18 = OpConstant %4 0
|
||||
)",
|
||||
R"(
|
||||
@@ -2331,7 +2502,7 @@ OpCapability SampledCubeArray
|
||||
)",
|
||||
R"(
|
||||
)"};
|
||||
case ValidTextureOverload::kSampleCompareDepth2dOffsetF32:
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dOffsetF32:
|
||||
return {
|
||||
R"(
|
||||
%4 = OpTypeFloat 32
|
||||
@@ -2362,7 +2533,7 @@ OpCapability SampledCubeArray
|
||||
)",
|
||||
R"(
|
||||
)"};
|
||||
case ValidTextureOverload::kSampleCompareDepth2dArrayF32:
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dArrayF32:
|
||||
return {
|
||||
R"(
|
||||
%4 = OpTypeFloat 32
|
||||
@@ -2391,7 +2562,7 @@ OpCapability SampledCubeArray
|
||||
)",
|
||||
R"(
|
||||
)"};
|
||||
case ValidTextureOverload::kSampleCompareDepth2dArrayOffsetF32:
|
||||
case ValidTextureOverload::kSampleCompareLevelDepth2dArrayOffsetF32:
|
||||
return {
|
||||
R"(
|
||||
%4 = OpTypeFloat 32
|
||||
@@ -2424,7 +2595,7 @@ OpCapability SampledCubeArray
|
||||
)",
|
||||
R"(
|
||||
)"};
|
||||
case ValidTextureOverload::kSampleCompareDepthCubeF32:
|
||||
case ValidTextureOverload::kSampleCompareLevelDepthCubeF32:
|
||||
return {
|
||||
R"(
|
||||
%4 = OpTypeFloat 32
|
||||
@@ -2451,7 +2622,7 @@ OpCapability SampledCubeArray
|
||||
)",
|
||||
R"(
|
||||
)"};
|
||||
case ValidTextureOverload::kSampleCompareDepthCubeArrayF32:
|
||||
case ValidTextureOverload::kSampleCompareLevelDepthCubeArrayF32:
|
||||
return {
|
||||
R"(
|
||||
%4 = OpTypeFloat 32
|
||||
|
||||
Reference in New Issue
Block a user