Skip to content

TSL: setLayout out/inout parameter not working in custom TSL Fn #31326

Open
@mdevecka

Description

@mdevecka

Description

Unable to create TSL function that supports out / inout parameters.
Tested both with WebGPU and WebGL fallback.

Reproduction steps

See code.

Code

const setStuff = Fn(({ value }: { value: ShaderNodeObject<Node> }) => {
  value.mulAssign(vec4(1, 0, 0, 1));
  return value;
}).setLayout({
  name: 'setStuff', type: 'vec4',
  inputs: [{ name: 'value', type: 'vec4', qualifier: 'out' }],
});
...
const value = vec4(1, 1, 1, 1).toVar('value');
testMaterial.fragmentNode = value.bypass(setStuff({ value: value }));

Result

// Error while parsing WGSL: :27:2 error: cannot assign to parameter 'value'

fn setStuff ( value : vec4<f32> ) -> vec4<f32> {
  value = ( value * vec4<f32>( 1.0, 0.0, 0.0, 1.0 ) );
  return value;
}
vec4 setStuff ( vec4 value ) {
  value = ( value * vec4( 1.0, 0.0, 0.0, 1.0 ) );
  return value;
}

Live example

N/A

Screenshots

No response

Version

three 0.177.0

Device

No response

Browser

No response

OS

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    TSLThree.js Shading Language

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions