diff options
| author | Tim Foley <tfoleyNV@users.noreply.github.com> | 2019-01-25 12:02:50 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-01-25 12:02:50 -0800 |
| commit | 41fde4b836dbab627f8643a5002b2b6dd0417211 (patch) | |
| tree | 1b1030137fc25403f4b414328dee72e08ea88344 /tests/cross-compile/texture-load.slang.glsl | |
| parent | 027e4518ad52b39e4600fa1f94dcae6ce370519f (diff) | |
Fix GLSL translation of several Texture* operations (#800)
A user found that the `Texture2D<float2>.Load(...)` operation was not being compiled to GLSL properly, such that it returned a `vec4` instead of the expected `vec2`.
The GLSL texture-related functions always return (and take) 4-component vectors, and we already have infrastructure in `emit.cpp` for recognizing a `$z` operator in the GLSL intrinsic definition to stand in for an appropriate swizzle based on teh number of components in the texture result type.
This change just adds that `$z` operator to the GLSL code for several more texture operations (including `Load()`) that are defined on a `Texture*<T>` and that return `T`.
This change doesn't try to add additional GLSL translations for texture-related operations (e.g., additional variations like `SampleCmp` that we have defined in the stdlib but not given GLSL translations for). That work still needs to be done.
Diffstat (limited to 'tests/cross-compile/texture-load.slang.glsl')
| -rw-r--r-- | tests/cross-compile/texture-load.slang.glsl | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/cross-compile/texture-load.slang.glsl b/tests/cross-compile/texture-load.slang.glsl new file mode 100644 index 000000000..23646db91 --- /dev/null +++ b/tests/cross-compile/texture-load.slang.glsl @@ -0,0 +1,44 @@ +// texture-load.slang.glsl +//TEST_IGNORE_FILE: + +#version 450 + +layout(row_major) uniform; +layout(row_major) buffer; + +#extension GL_EXT_samplerless_texture_functions : require + +struct SLANG_ParameterGroup_C_0 +{ + ivec2 pos_0; +}; + +layout(binding = 2) +layout(std140) +uniform _S1 +{ + SLANG_ParameterGroup_C_0 _data; +} C_0; + +layout(binding = 0) +uniform texture2D inputTexture_0; + +layout(rg32f) +layout(binding = 1) +uniform image2D outputTexture_0; + +layout(local_size_x = 16, local_size_y = 16, local_size_z = 1) in; +void main() +{ + vec2 tmp_0 = texelFetch( + inputTexture_0, + ivec3(C_0._data.pos_0, 0).xy, + ivec3(C_0._data.pos_0, 0).z).xy; + + imageStore( + outputTexture_0, + ivec2(uvec2(C_0._data.pos_0)), + vec4(tmp_0, float(0), float(0))); + + return; +} |
