glsl-in: Add support for texelFetchOffset

This commit is contained in:
João Capucho
2022-02-24 17:05:49 +00:00
committed by Dzmitry Malyshau
parent 62f267a140
commit d449d2e665
3 changed files with 34 additions and 7 deletions

View File

@@ -306,7 +306,8 @@ pub fn inject_builtin(
f,
)
}
"texelFetch" => {
"texelFetch" | "texelFetchOffset" => {
let offset = "texelFetchOffset" == name;
let f = |kind, dim, arrayed, multi, _shadow| {
// Cube images aren't supported
if let Dim::Cube = dim {
@@ -322,7 +323,7 @@ pub fn inject_builtin(
let dim_value = image_dims_to_coords_size(dim);
let coordinates = make_coords_arg(dim_value + arrayed as usize, Sk::Sint);
let args = vec![
let mut args = vec![
image,
coordinates,
TypeInner::Scalar {
@@ -331,6 +332,10 @@ pub fn inject_builtin(
},
];
if offset {
args.push(make_coords_arg(dim_value, Sk::Sint));
}
declaration
.overloads
.push(module.add_builtin(args, MacroCall::ImageLoad { multi }))

View File

@@ -64,7 +64,7 @@ void testTex1D(in float coord) {
c = textureProjOffset(sampler1D(tex1D, samp), vec2(coord, 6.0), 5, 2.0);
c = textureProjOffset(sampler1D(tex1D, samp), vec4(coord, 0.0, 0.0, 6.0), 5, 2.0);
c = texelFetch(sampler1D(tex1D, samp), int(coord), 3);
// c = texelFetchOffset(sampler1D(tex1D, samp), int(coord), 3, 5);
c = texelFetchOffset(sampler1D(tex1D, samp), int(coord), 3, 5);
}
#if HAS_1D_DEPTH_TEXTURES
@@ -102,7 +102,7 @@ void testTex1DArray(in vec2 coord) {
c = textureOffset(sampler1DArray(tex1DArray, samp), coord, 5);
c = textureOffset(sampler1DArray(tex1DArray, samp), coord, 5, 2.0);
c = texelFetch(sampler1DArray(tex1DArray, samp), ivec2(coord), 3);
// c = texelFetchOffset(sampler1DArray(tex1DArray, samp), ivec2(coord), 3, 5);
c = texelFetchOffset(sampler1DArray(tex1DArray, samp), ivec2(coord), 3, 5);
}
#if HAS_1D_DEPTH_TEXTURES
@@ -147,7 +147,7 @@ void testTex2D(in vec2 coord) {
c = textureProjOffset(sampler2D(tex2D, samp), vec3(coord, 6.0), ivec2(5), 2.0);
c = textureProjOffset(sampler2D(tex2D, samp), vec4(coord, 0.0, 6.0), ivec2(5), 2.0);
c = texelFetch(sampler2D(tex2D, samp), ivec2(coord), 3);
// c = texelFetchOffset(sampler2D(tex2D, samp), ivec2(coord), 3, ivec2(5));
c = texelFetchOffset(sampler2D(tex2D, samp), ivec2(coord), 3, ivec2(5));
}
void testTex2DShadow(vec2 coord) {
@@ -183,7 +183,7 @@ void testTex2DArray(in vec3 coord) {
c = textureOffset(sampler2DArray(tex2DArray, samp), coord, ivec2(5));
c = textureOffset(sampler2DArray(tex2DArray, samp), coord, ivec2(5), 2.0);
c = texelFetch(sampler2DArray(tex2DArray, samp), ivec3(coord), 3);
// c = texelFetchOffset(sampler2DArray(tex2DArray, samp), ivec3(coord), 3, ivec2(5));
c = texelFetchOffset(sampler2DArray(tex2DArray, samp), ivec3(coord), 3, ivec2(5));
}
void testTex2DArrayShadow(in vec3 coord) {
@@ -247,7 +247,7 @@ void testTex3D(in vec3 coord) {
c = textureOffset(sampler3D(tex3D, samp), coord, ivec3(5));
c = textureOffset(sampler3D(tex3D, samp), coord, ivec3(5), 2.0);
c = texelFetch(sampler3D(tex3D, samp), ivec3(coord), 3);
// c = texelFetchOffset(sampler3D(tex3D, samp), ivec3(coord), 3, ivec3(5));
c = texelFetchOffset(sampler3D(tex3D, samp), ivec3(coord), 3, ivec3(5));
}
void testTex2DMS(in vec2 coord) {

View File

@@ -147,6 +147,10 @@ fn testTex1D(coord: f32) {
let _e330 = coord_1;
let _e333 = textureLoad(tex1D, i32(_e330), 3);
c = _e333;
let _e334 = coord_1;
let _e338 = coord_1;
let _e342 = textureLoad(tex1D, i32(_e338), 3);
c = _e342;
return;
}
@@ -188,6 +192,11 @@ fn testTex1DArray(coord_2: vec2<f32>) {
let _e101 = vec2<i32>(_e100);
let _e105 = textureLoad(tex1DArray, _e101.x, _e101.y, 3);
c_1 = _e105;
let _e106 = coord_3;
let _e110 = coord_3;
let _e111 = vec2<i32>(_e110);
let _e116 = textureLoad(tex1DArray, _e111.x, _e111.y, 3);
c_1 = _e116;
return;
}
@@ -307,6 +316,10 @@ fn testTex2D(coord_4: vec2<f32>) {
let _e434 = coord_5;
let _e437 = textureLoad(tex2D, vec2<i32>(_e434), 3);
c_2 = _e437;
let _e438 = coord_5;
let _e443 = coord_5;
let _e448 = textureLoad(tex2D, vec2<i32>(_e443), 3);
c_2 = _e448;
return;
}
@@ -425,6 +438,11 @@ fn testTex2DArray(coord_8: vec3<f32>) {
let _e119 = vec3<i32>(_e118);
let _e123 = textureLoad(tex2DArray, _e119.xy, _e119.z, 3);
c_3 = _e123;
let _e124 = coord_9;
let _e129 = coord_9;
let _e130 = vec3<i32>(_e129);
let _e136 = textureLoad(tex2DArray, _e130.xy, _e130.z, 3);
c_3 = _e136;
return;
}
@@ -619,6 +637,10 @@ fn testTex3D(coord_20: vec3<f32>) {
let _e266 = coord_21;
let _e269 = textureLoad(tex3D, vec3<i32>(_e266), 3);
c_6 = _e269;
let _e270 = coord_21;
let _e275 = coord_21;
let _e280 = textureLoad(tex3D, vec3<i32>(_e275), 3);
c_6 = _e280;
return;
}