This modifies function parameter passing to pass the counter buffer associated with a struct buffer to a function as a hidden parameter. Similarly function declarations will have hidden parameters added to accept the associated counter buffers. There is a limitation: if a SB type may or may not have an associated counter, passing it as a function parameter will assume that it does, and the counter will appear in the linkage whether or not there is a counter method used on the object.
		
			
				
	
	
		
			24 lines
		
	
	
		
			477 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			24 lines
		
	
	
		
			477 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
 | 
						|
// float4 Fn1(ConsumeStructuredBuffer<float4> arg_c)
 | 
						|
// {
 | 
						|
//     return arg_c.Consume();
 | 
						|
// }
 | 
						|
 | 
						|
float4 Fn2(AppendStructuredBuffer<float4> arg_a, ConsumeStructuredBuffer<float4> arg_c)
 | 
						|
{
 | 
						|
    arg_a.Append(float4(1,2,3,4));
 | 
						|
    return arg_c.Consume();
 | 
						|
}
 | 
						|
 | 
						|
AppendStructuredBuffer<float4>  sbuf_a;
 | 
						|
ConsumeStructuredBuffer<float4> sbuf_c;
 | 
						|
 | 
						|
AppendStructuredBuffer<float4>  sbuf_unused;
 | 
						|
 | 
						|
float4 main(uint pos : FOO) : SV_Target0
 | 
						|
{
 | 
						|
    // Fn1(sbuf_c);
 | 
						|
 | 
						|
    return Fn2(sbuf_a, sbuf_c);
 | 
						|
}
 |