For "s.m = t", a sampler member assigned a sampler, make t an alias for s.m, and when s.m is flattened, it will flatten to the alias t. Normally, assignments to samplers are disallowed.
		
			
				
	
	
		
			30 lines
		
	
	
		
			452 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			452 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
struct OS {
 | 
						|
    SamplerState ss;
 | 
						|
    float a;
 | 
						|
    Texture2D tex;
 | 
						|
};
 | 
						|
 | 
						|
SamplerState gss;
 | 
						|
SamplerState gss2;
 | 
						|
Texture2D gtex;
 | 
						|
 | 
						|
float4 osCall(OS s)
 | 
						|
{
 | 
						|
    return s.a * s.tex.Sample(s.ss, float2(0.2, 0.3));
 | 
						|
}
 | 
						|
 | 
						|
float4 main() : SV_TARGET0
 | 
						|
{
 | 
						|
    OS os;
 | 
						|
    os.ss = gss2;
 | 
						|
    os.ss = gss;
 | 
						|
    os.tex = gtex;
 | 
						|
    os.a = 3.0;
 | 
						|
 | 
						|
    // this should give an error
 | 
						|
    //SamplerState localss;
 | 
						|
    //localss = gss2;
 | 
						|
 | 
						|
    return osCall(os);
 | 
						|
}
 |