one variable for an intance

Started by
5 comments, last by lomateron 11 years, 2 months ago

The title is wrong, This is what i relly want, i have this in hlsl code

Texture2D Texture;

....

....

is there a way to take this Tex2Da.Load( uint3(0,0,0))

and Tex2Da.Load( uint3(1,0,0))

and Tex2Da.Load( uint3(2,0,0))

and transform it into a global effect vector variable so i don't have to Load() them every vertex shader or pixel shader.

Advertisement
Could you set the 3 texels once per frame and using them throughout all processed instanced?
(by setting the effect parameter)

Crealysm game & engine development: http://www.crealysm.com

Looking for a passionate, disciplined and structured producer? PM me

I improved 1 original post question

How is that, i will like to see an example, code

the three texels are already on a

Texture2D Tex2Da;

And I load them in the vertex shader but 64*1000*3 Load()s is too much, i want to know if there is a way to load them just onetime, and pass the 3 values to all the pixel shaders or vertex shaders that will run on all the intances.

If there could be something like that, for a complete drawIntanced()

I'm not 100% sure if I understand it correct, but it looks like you're doing it in the technique (function) itself.

Where do you use the l1, l2 and l3 variables in the effect/shader?

My 1st thought would be that you use them for each processed vertex or pixel, and that those 3 lines would be in your VS or PS function.

Crealysm game & engine development: http://www.crealysm.com

Looking for a passionate, disciplined and structured producer? PM me

read first post again

yes they are inside the vertex shader and passed to the pixel shader (the code that i showed is incorrect, but i want to know if there is something like that )

There are less vertices than pixels so its better to have the load() in the vertex shader and then pass them to the pixel shader

I think what you're asking is:

When rendering your frame, you render some data to a texture. Then you want to use this texture data in subsequent runs of a vertex shader (the same three texture samples for all runs of the vertex shader). Normally this would make sense to be a shader constant; but in your case it can't be because the data was generated on the GPU earlier in that frame and is never pulled back to the CPU. So you're basically searching for a way to use this data in your vertex shader, without having every vertex shader run have to take the 3 samples.

Is that correct?

I don't know of a way to do that, but:

1) Could you instead calculate this data on the CPU? Or do the calculations that go into those 3 pixels of interest in your texture come from something that has to be done on the GPU? Or,

2) Could you put up with a delay of a couple of frames, allowing you to pull this data back to the CPU when it's available and then set it as a shader constant?

Also, is doing the 3 samples in every VS run an actual a performance problem, or an imagined one?

The 3 texels are inside a texture that indicates the position of spheres, the position changes in complex ways and the change is done inside the GPU.

I take those 3 or more spheres and transform into points of lights. Then when rendering the many spheres I need the 3 or more points of light positions to calculate how the other spheres shine.

The 3 Load() are very costly as the number of spheres increases, 3 Load() for every vertice of the many spheres i render (its better than for every pixel, in average there are more pixels than vertices)

This topic is closed to new replies.

Advertisement