This makes struct returns from functions work, but breaks structs containing arrays, due to limitations in subsequent transforms in spirv-opt. This is expected to be fixed soon.
		
			
				
	
	
		
			28 lines
		
	
	
		
			605 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			605 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
struct FxaaTex { SamplerState smpl; Texture2D tex; };
 | 
						|
SamplerState g_tInputTexture_sampler; Texture2D g_tInputTexture;
 | 
						|
 | 
						|
float4 lookUp(FxaaTex tex)
 | 
						|
{
 | 
						|
    return tex.tex.Sample(tex.smpl, float2(0.3, 0.4));
 | 
						|
}
 | 
						|
 | 
						|
FxaaTex fillOpaque()
 | 
						|
{
 | 
						|
    FxaaTex t;
 | 
						|
    t.smpl = g_tInputTexture_sampler;
 | 
						|
    t.tex = g_tInputTexture;
 | 
						|
    return t;
 | 
						|
}
 | 
						|
 | 
						|
float4 main() : SV_TARGET0
 | 
						|
{
 | 
						|
    FxaaTex tex1 = { g_tInputTexture_sampler, g_tInputTexture };
 | 
						|
    float4 res = lookUp(tex1);
 | 
						|
    FxaaTex tex2 = fillOpaque();
 | 
						|
    res += lookUp(tex2);
 | 
						|
    FxaaTex tex3 = tex1;
 | 
						|
    res += lookUp(tex3);
 | 
						|
 | 
						|
    return res;
 | 
						|
}
 |