mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
glsl-in: Add support for texelFetchOffset
This commit is contained in:
committed by
Dzmitry Malyshau
parent
62f267a140
commit
d449d2e665
@@ -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 }))
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user