• Advertisement
Sign in to follow this  

SampleCmpLevelZero just returns black!

This topic is 2051 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hey
I've started using a new engine and am going to modify the shadow generation. I'm currently strugling with implementing hardware PCF in the shader. [font=Consolas][size=2]SampleCmpLevelZero [/size][/font]is always returning 0 and the screen goes black. The code used to work before I optimized. I'm calling [size=3][font=Consolas][font=Consolas]SampleCmpLevelZero [/font][/font][/size]with the same uv and depth that functioned well with the unoptimized code and I'm using following sampler state:

[size=3][font=Consolas][font=Consolas]SamplerComparisonState ShadowSampler[/font][/font]
[font=Consolas][font=Consolas]{[/font][/font]
[font=Consolas][color=#008000][font=Consolas][color=#008000][font=Consolas][color=#008000] // sampler state[/color][/font][/color][/font][/color][/font]
[font=Consolas][font=Consolas] Filter = MIN_MAG_LINEAR_MIP_POINT;[/font][/font]
[font=Consolas][font=Consolas] AddressU = MIRROR;[/font][/font]
[font=Consolas][font=Consolas] AddressV = MIRROR;[/font][/font]

[font=Consolas][color=#008000][font=Consolas][color=#008000][font=Consolas][color=#008000] // sampler comparison state[/color][/font][/color][/font][/color][/font]
[font=Consolas][font=Consolas] ComparisonFunc = LESS;[/font][/font]
[font=Consolas][font=Consolas] ComparisonFilter = COMPARISON_MIN_MAG_LINEAR_MIP_POINT;[/font][/font]
[font=Consolas][font=Consolas]};[/font][/font][/size]


[font=arial,helvetica,sans-serif][size=2][size=2][size=3]The same that I found in the documentation. I had a look at what format the texture resource, depth stencil view and shader resource view were using and it seemed to be the same that worked in the cascade shadow sample that comes with the directx SDK [/size]([/size][/size][/font][font=arial,helvetica,sans-serif][size=2][size=2][size=3][font=Consolas][font=Consolas]DXGI_FORMAT_R24_UNORM_X8_TYPELESS, [font=Consolas][font=Consolas]DXGI_FORMAT_D24_UNORM_S8_UINT[/font][/font][/font][/font]). What I could see all other settings were identical.[/size][/size][/size][/font]

[size=3][font=arial,helvetica,sans-serif]When I view the process in PerfStudio the depth map seems valid (and it workes if I just call [i]Sample[/i]). What can be the reason for this behaviour. Has anybody experienced the same or know what I should check?[/font]


[font=arial,helvetica,sans-serif]Thanks a lot :-)[/font][/size] Edited by five1mon

Share this post


Link to post
Share on other sites
Advertisement
I don't use effects so I might be wrong about this, but I don't think that there's a "ComparisonFilter" member. According the docs there's only "Filter". So you should try setting Filter = COMPARISON_MIN_MAG_LINEAR_MIP_POINT and see if that works. This would also be consistent with how it works if you set up a sampler desc structure in C++.

Share this post


Link to post
Share on other sites
Thanks MJP. Maybe you're right, I've seen examples of both implementations?

However that didn't solve my problem but I found another solution. It turned out that I had to set the sampler on the application side ([size=3][font=Consolas][font=Consolas]PSSetSamplers[/font][/font][/size]). This was only the case for
[size=3][font=Consolas][font=Consolas]SamplerComparisonState[/font][/font][/size], all other samplers worked fine when declared in the shader. The reason I didn't try that sooner was that it got a little tricky to do that in our engine framework. I don't know why this is happening but maybe there's some minor driver bug? I'm using ATI hardware. Edited by five1mon

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement