SampleCmpLevelZero just returns black!

Started by
1 comment, last by five1mon 11 years, 10 months ago
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 [/font]is always returning 0 and the screen goes black. The code used to work before I optimized. I'm calling

[font=Consolas][font=Consolas]SampleCmpLevelZero [/font][/font]with the same uv and depth that functioned well with the unoptimized code and I'm using following sampler state:

[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[/font][/font][/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[/font][/font][/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]


[font=arial,helvetica,sans-serif][size=2][size=2]

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 ([/font][font=arial,helvetica,sans-serif][size=2][size=2]

[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.[/font]

[font=arial,helvetica,sans-serif]When I view the process in PerfStudio the depth map seems valid (and it workes if I just call Sample). 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]

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++.
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 (

[font=Consolas][font=Consolas]PSSetSamplers[/font][/font]). This was only the case for

[font=Consolas][font=Consolas]SamplerComparisonState[/font][/font], 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.

This topic is closed to new replies.

Advertisement