Update spirv-reader docs: supports texture and sampler func args
Change-Id: I893f050e3377c2aebe933a55d6e75c505c3e23d2
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/113560
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
Auto-Submit: David Neto <dneto@google.com>
Reviewed-by: David Neto <dneto@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: David Neto <dneto@google.com>
diff --git a/docs/tint/spirv-reader-overview.md b/docs/tint/spirv-reader-overview.md
index 8cc7de2..7411e16 100644
--- a/docs/tint/spirv-reader-overview.md
+++ b/docs/tint/spirv-reader-overview.md
@@ -158,9 +158,6 @@
### Passing textures and samplers into helper functions
-Note: Bug https://crbug.com/tint/1039 is open to support passing
-textures and samplers as function arguments.
-
Glslang generates SPIR-V where texture and sampler formal parameters
are as pointer-to-UniformConstant.
@@ -168,9 +165,12 @@
conceptually as opaque handles. This is similar to GLSL, but unlike
SPIR-V.
-The tracing logic described in the previous section does not know
-what to do when it bottoms out on a formal parameter,
-e.g. OpFunctionParameter.
+To support textures and samplers as arguments to user-defined functions,
+we extend the tracing logic so it knows to bottom out at OpFunctionParameter.
+
+Also, code that generates function declarations now understands formal
+parameters declared as a pointer to uniform-constant as
+well as direct image and sampler values.
Example GLSL compute shader:
@@ -253,35 +253,6 @@
@group(0) @binding(1) var s : sampler;
- fn helper_t21_p1_(imparam : ptr<none, void>, sparam : ptr<none, void>) -> vec4<f32> {
- let x_24 : vec4<f32> = textureSampleLevel(imparam, sparam, vec2<f32>(0.0f, 0.0f), 0.0f);
- return x_24;
- }
-
- fn main_1() {
- var v : vec4<f32>;
- let x_31 : vec4<f32> = helper_t21_p1_(&(im), &(s));
- v = x_31;
- return;
- }
-
- @compute @workgroup_size(1i, 1i, 1i)
- fn main() {
- main_1();
- }
-
-with an error:
-
- error: function parameter of pointer type cannot be in 'none' address space
-
-Instead, the generated WGSL should have formal parameters with texture
-and sampler types, rather than as pointers to them. So the generated WGSL
-should look like this instead:
-
- @group(0) @binding(0) var im : texture_2d<f32>;
-
- @group(0) @binding(1) var s : sampler;
-
fn helper_t21_p1_(imparam : texture_2d<f32>, sparam : sampler) -> vec4<f32> {
let x_24 : vec4<f32> = textureSampleLevel(imparam, sparam, vec2<f32>(0.0f, 0.0f), 0.0f);
return x_24;