Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interested in a FREE copy of HTML5 game maker Construct 2?

We'll be giving away three Personal Edition licences in next Tuesday's GDNet Direct email newsletter!

Sign up from the right-hand sidebar on our homepage and read Tuesday's newsletter for details!


We're also offering banner ads on our site from just $5! 1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Compiled Shader looks different


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
4 replies to this topic

#1 Xoliul   Members   -  Reputation: 125

Like
0Likes
Like

Posted 24 May 2012 - 06:58 AM

I've written a procedural noise shader. It's pretty heavy but it only serves to Render-To-Texture so that's fine.
One big problem I have is that the compile time is pretty insane, so I'm trying to precompile it using FXC.exe. I have to use the June 2010 DX SDK because it's not an SM4.0 shader (my application, 3DS Max, is still D3D9).

Now the problem with the assembly code that FXC generates, is that it doesn't work exactly the same as the uncompiled code. The values the noise functions generate are in a very different range, resulting in pretty much nothing visible. If my application compiles it with its own compiler, it works fine...

This is a bit of a long shot, but would anyone know what is going wrong?

Sponsor:

#2 Ashaman73   Crossbones+   -  Reputation: 7801

Like
0Likes
Like

Posted 24 May 2012 - 07:31 AM

You are the guy who makes all the artists happy ?

Are you compiling with the legacy compiler ? Found the following discription over here, maybe it is helpful:

Compiling with the Legacy Compiler

Beginning with Direct3D 10, some shader models are no longer supported. These include pixel shader models: ps_1_1, ps_1_2, ps_1_3, and ps_1_4 which support very limited resources and are dependent on hardware. The compiler has been redesigned with shader model 2 (or greater) which allows for greater efficiencies with compilation. This of course will require that you are running on hardware that supports shader models 2 and greater.
If you still want to compile shaders using the legacy compiler, use the /LD switch. This supports shader models 1, 2 and 3 and does not contain the improvements and bug fixes found in the current compiler.
Also note that you should consult the SDK release notes associated with your version of the Effect-Compiler Tool for behavior affected by the /Gec switch.
Compiling Shader Model 1 with the Current Compiler

The legacy compiler is not recommended for compiling new shader code due to the limitations caused by pixel shaders in shader model 1 (see Compiling with the Legacy Compiler). However, there are libraries of existing shaders that were created for ps_1_x.
To use the current compiler to build shader model 1 pixel shaders and effects, use the /Gec switch. This causes the effect-compiler tool to compile all ps_1_x targets to ps_2_0 targets. This can be done without changing any existing shader or effect code. This switch has no effect when used with higher level compile targets.



#3 Xoliul   Members   -  Reputation: 125

Like
0Likes
Like

Posted 24 May 2012 - 11:23 AM

Hey Ashaman, I guess that's me yes hah. I've tried using the /LD switch but I didn't fix things. I did so many different compiles with different options so i can't remember what was wrong.

I've progressed a bit, I'm basically re-building the code step by step, compiling it again and again and so far it has worked fine. I think I'm 85% of the way and it is working. I'm not even using the /LD switch at the moment.

#4 Xoliul   Members   -  Reputation: 125

Like
0Likes
Like

Posted 24 May 2012 - 12:34 PM

I've found the culprit. Looks like when I add a texcoord input from the application, it breaks the entire thing.

Basically:

// input from application
struct a2v
{
float4 position  : POSITION;
};
// output to fragment program
struct v2f
{
	    float4 position	  : POSITION;
	    float4 wposition	  : TEXCOORD0;
};

to this:

// input from application
struct a2v
{
float4 position  : POSITION;
half2 texCoord  : TEXCOORD0;
};
// output to fragment program
struct v2f
{
	    float4 position	  : POSITION;
	    half2 texCoord			 : TEXCOORD0;
	    float4 wposition	  : TEXCOORD1;
};


#5 Ashaman73   Crossbones+   -  Reputation: 7801

Like
0Likes
Like

Posted 24 May 2012 - 11:14 PM

Have you tried to map it to other varying varibles ? Like
// input from application
struct a2v
{
float4 position  : POSITION;
half2 texCoord  : TEXCOORD0;
};
// output to fragment program
struct v2f
{
		float4 position	  : TEXCOORD1;
		half2 texCoord			 : TEXCOORD2;
		float4 wposition	  : TEXCOORD3;
};





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.



PARTNERS