Jump to content

Image of the Day

#QuestOfDungeons is an old-fashioned dungeon crawler. #ScreenshotSaturday  #PS4share

https://t.co/1mztLegxeN https://t.co/DpYimg3MZb
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net's newsletters to receive the latest updates and exclusive content.


Sign up now

HLSL: Resource as function parameter

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.


  • You cannot reply to this topic
3 replies to this topic

#1 zolwik   Members   

135
Like
0Likes
Like

Posted 02 April 2013 - 03:59 AM

I can't find this in doc. Is there any way to declare helper function argument as resource (as in interlocked intrinsic functions)? I want to make my own general atomic function working on resource and declaring argument as uint returns compile error.

 

error X3669: Resources being indexed cannot come from conditional expressions, they must come from literal expressions.

Index is available at compile time, so I hope it is just some fancy syntax problem.



#2 Jason Z   Members   

6422
Like
0Likes
Like

Posted 02 April 2013 - 04:41 AM

I haven't ever seen a resource passed as an argument, since all of the resources are available at the 'global' scope of the shader.  You can just use the resource without having to explicitly pass it as an argument.  What you can do is make some helper functions where you pass the location and value and the function would modify a particular resource accordingly.

 

It also depends on your resource configurations how you will be able to address them in your function.

 

EDIT: Can you post the shader so we can try to modify and re-compile it?


Edited by Jason Z, 02 April 2013 - 04:41 AM.


#3 BrentChua   Members   

1066
Like
0Likes
Like

Posted 02 April 2013 - 05:01 AM

I'm guessing his helper function is located in a separate file where it has no knowledge about the resource it wants to modify and it is being included in a file where the shader function and the resource declaration are located.



#4 zolwik   Members   

135
Like
0Likes
Like

Posted 02 April 2013 - 05:04 AM

@up

Exactly. Right now I just do what Jason wrote. I wondered if there is option to avoid code redundancy and duplicating same code for each resource and index. I would like to pass Nodes[i0].nodes[i1].data[1] as argument, not i0 and i1, same as in InterlockedCompareExchange.

 

void InterlockedAverage(uint i0, uint i1, float4 val)
{
	val.rgb *= 255.;
	uint nval = Float4ToUint(val);
	uint prev = 0;
	uint current;

	InterlockedCompareExchange(Nodes[i0].nodes[i1].data[1], prev, nval, current);
	[allow_uav_condition]
	while(prev != current)
	{
		prev = current;
		float4 rval = UintToFloat4(current);
		rval.xyz *= rval.w;
		float4 curf = rval + val;
		curf.xyz /= curf.w;
		nval = Float4ToUint(curf);
		InterlockedCompareExchange(Nodes[i0].nodes[i1].data[1], prev, nval, current);
	}
}

Edited by zolwik, 02 April 2013 - 07:49 AM.





Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.