diff options
| author | Ellie Hermaszewska <ellieh@nvidia.com> | 2023-07-11 03:06:40 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-10 12:06:40 -0700 |
| commit | 5569b4850dabbb7dbcb72278bb2918c281e0d475 (patch) | |
| tree | 0acae3b4aeb3921513894fa31be4c0f1ba44c573 | |
| parent | 0363a4d18c655697cfb0d958add2c7bf4b156874 (diff) | |
Add glsl intrinsic for SampleCmpLevelZero with offset and correct existing intrinsic (#2975)
* Correct glsl intrinsic for SampleCmpLevelZero without offset
* Add glsl intrinsic for SampleCmpLevelZero with offset
* Add test for samplecmplevelzero glsl translation
---------
Co-authored-by: Yong He <yonghe@outlook.com>
| -rw-r--r-- | source/slang/core.meta.slang | 4 | ||||
| -rw-r--r-- | tests/cross-compile/glsl-samplecmplevelzero.slang | 12 |
2 files changed, 15 insertions, 1 deletions
diff --git a/source/slang/core.meta.slang b/source/slang/core.meta.slang index d99b241c0..5342800be 100644 --- a/source/slang/core.meta.slang +++ b/source/slang/core.meta.slang @@ -1944,7 +1944,7 @@ struct TextureTypeInfo sb << "float" << base.coordCount + isArray << " location, "; sb << "float compareValue"; sb << ");\n"; - sb << "__target_intrinsic(glsl, \"texture($p, vec" << arrCoordCount + 1 << "($2, $3))\")"; + sb << "__target_intrinsic(glsl, \"textureLod($p, vec" << arrCoordCount + 1 << "($2, $3), 0)\")"; if (isReadOnly) sb << "[__readNone]\n"; sb << "float SampleCmpLevelZero(SamplerComparisonState s, "; @@ -2001,6 +2001,7 @@ struct TextureTypeInfo // saying they only exclude `offset` for cube maps (which makes // sense). I'm going to assume the documentation for `SampleCmp` // is just wrong. + sb << "__target_intrinsic(glsl, \"textureOffset($p, vec" << arrCoordCount + 1 << "($2, $3), $4)\")"; if (isReadOnly) sb << "[__readNone]\n"; sb << "float SampleCmp(SamplerComparisonState s, "; @@ -2008,6 +2009,7 @@ struct TextureTypeInfo sb << "float compareValue, "; sb << "constexpr int" << base.coordCount << " offset);\n"; + sb << "__target_intrinsic(glsl, \"textureLodOffset($p, vec" << arrCoordCount + 1 << "($2, $3), 0, $4)\")"; if (isReadOnly) sb << "[__readNone]\n"; sb << "float SampleCmpLevelZero(SamplerComparisonState s, "; diff --git a/tests/cross-compile/glsl-samplecmplevelzero.slang b/tests/cross-compile/glsl-samplecmplevelzero.slang new file mode 100644 index 000000000..4bfd557cc --- /dev/null +++ b/tests/cross-compile/glsl-samplecmplevelzero.slang @@ -0,0 +1,12 @@ +//TEST:CROSS_COMPILE(filecheck=CHECK): -profile ps_5_0 -entry main -target glsl + +// CHECK: float _S3 = (textureLod(sampler2DShadow(shadowMap_0,sampler_0), vec3((_S2), (0.0)), 0)); +// CHECK: float _S4 = (textureLodOffset(sampler2DShadow(shadowMap_0,sampler_0), vec3((_S2), (0.0)), 0, (ivec2(1, 1)))); + +Texture2D shadowMap; +SamplerComparisonState sampler; +float4 main(float4 p : SV_POSITION) +{ + return shadowMap.SampleCmpLevelZero(sampler, float2(0.0), 0.0) + + shadowMap.SampleCmpLevelZero(sampler, float2(0.0), 0.0, int2(1,1)); +} |
