0
\$\begingroup\$

When trying to compile the following HLSL:

Texture2DArray gShadowmap : register(TEXTURE_REGISTER_DEPTH);
SamplerState gShadowmapSampler : register(SAMPLER_REGISTER_DEPTH);

// ...

float3 projCoords = (float3)mul(gSplitVPMatrices[index], worldPos);
float viewDepth = projCoords.z - DEPTH_BIAS;
projCoords.z = float(index);
float visibilty = gShadowmap.SampleCmp(gShadowmapSampler, projCoords, viewDepth).r;

visual studio gives me:

error X3013: 'SampleCmp': no matching 3 parameter intrinsic method
error X3013: Possible intrinsic methods are:
error X3013: Texture2DArray<float4>.SampleCmp(SamplerComparisonState, float3|half3|min10float3|min16float3, float1|half1|min10float1|min16float1)
error X3013: Texture2DArray<float4>.SampleCmp(SamplerComparisonState, float3|half3|min10float3|min16float3, float1|half1|min10float1|min16float1, int2)
error X3013: Texture2DArray<float4>.SampleCmp(SamplerComparisonState, float3|half3|min10float3|min16float3, float1|half1|min10float1|min16float1, int2, float1|half1|min10float1|min16float1)
error X3013: Texture2DArray<float4>.SampleCmp(SamplerComparisonState, float3|half3|min10float3|min16float3, float1|half1|min10float1|min16float1, int2, float1|half1|min10float1|min16float1, out uint status)

I believe I match the first method, so why is this?

\$\endgroup\$
2

1 Answer 1

0
\$\begingroup\$

If we look at the documentation, we see that a SamplerComparisonState is not a regular SamplerState:

[in] SamplerComparisonState: A sampler-comparison state, which is the sampler state plus a comparison state (a comparison function and a comparison filter).

Change your SamplerState creation code into a SamplerComparisonState. A good example (that seems to match your shadowing purposes) can be found on the Sampler Type bottom example:

SamplerComparisonState ShadowSampler
{
   // sampler state
   Filter = COMPARISON_MIN_MAG_LINEAR_MIP_POINT;
   AddressU = MIRROR;
   AddressV = MIRROR;

   // sampler comparison state
   ComparisonFunc = LESS;  
};

float3 vModProjUV;
  ...
float fShadow = g_ShadowMap.SampleCmpLevelZero( ShadowSampler, vModProjUV.xy, vModProjUV.z);
\$\endgroup\$
1
  • \$\begingroup\$ Keep in mind the syntax you are using for the sampler is specific to Effects, and is not part of the base runtime. \$\endgroup\$ Sep 16, 2014 at 7:24

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .