3333#define AFAIL_RGB_ONLY 3
3434#endif
3535
36+ #ifndef PS_ATST_NONE
37+ #define PS_ATST_NONE 0
38+ #define PS_ATST_LEQUAL 1
39+ #define PS_ATST_GEQUAL 2
40+ #define PS_ATST_EQUAL 3
41+ #define PS_ATST_NOTEQUAL 4
42+ #endif
43+
3644#ifndef PS_FST
3745#define PS_IIP 0
3846#define PS_FST 0
@@ -154,7 +162,7 @@ struct PS_OUTPUT
154162#endif
155163#endif
156164#endif
157- #if PS_ZCLAMP || (PS_DEPTH_FEEDBACK && AFAIL_NEEDS_DEPTH)
165+ #if PS_ZCLAMP
158166 float depth : SV_Depth ;
159167#endif
160168};
@@ -729,27 +737,27 @@ bool atst(float4 C)
729737{
730738 float a = C.a;
731739
732- if ( PS_ATST == 1 )
733- {
734- return (a <= AREF);
735- }
736- else if ( PS_ATST == 2 )
737- {
738- return (a >= AREF);
739- }
740- else if ( PS_ATST == 3 )
741- {
742- return (abs (a - AREF) <= 0.5f );
743- }
744- else if ( PS_ATST == 4 )
745- {
746- return (abs (a - AREF) >= 0.5f );
747- }
748- else
749- {
750- // nothing to do
751- return true ;
752- }
740+ #if PS_ATST == PS_ATST_LEQUAL
741+
742+ return (a <= AREF);
743+
744+ #elif PS_ATST == PS_ATST_GEQUAL
745+
746+ return (a >= AREF);
747+
748+ #elif PS_ATST == PS_ATST_EQUAL
749+
750+ return (abs (a - AREF) <= 0.5f );
751+
752+ #elif PS_ATST == PS_ATST_NOTEQUAL
753+
754+ return (abs (a - AREF) >= 0.5f );
755+
756+ # else
757+
758+ return true ;
759+
760+ #endif
753761}
754762
755763float4 fog (float4 c, float f)
@@ -1225,7 +1233,7 @@ PS_OUTPUT ps_main(PS_INPUT input)
12251233#endif
12261234
12271235 // Alpha test with feedback
1228- #if (PS_AFAIL == AFAIL_FB_ONLY) && PS_DEPTH_FEEDBACK
1236+ #if (PS_AFAIL == AFAIL_FB_ONLY) && PS_DEPTH_FEEDBACK && PS_ZCLAMP
12291237 if (!atst_pass)
12301238 input.p.z = DepthTexture.Load (int3 (input.p.xy, 0 )).r;
12311239#elif (PS_AFAIL == AFAIL_ZB_ONLY) && PS_COLOR_FEEDBACK
@@ -1237,7 +1245,7 @@ PS_OUTPUT ps_main(PS_INPUT input)
12371245 #if PS_COLOR_FEEDBACK && PS_NO_COLOR1 // No dual src blend
12381246 output.c0.a = RtTexture.Load (int3 (input.p.xy, 0 )).a;
12391247 #endif
1240- #if PS_DEPTH_FEEDBACK
1248+ #if PS_DEPTH_FEEDBACK && PS_ZCLAMP
12411249 input.p.z = DepthTexture.Load (int3 (input.p.xy, 0 )).r;
12421250 #endif
12431251 }
@@ -1249,8 +1257,6 @@ PS_OUTPUT ps_main(PS_INPUT input)
12491257
12501258#if PS_ZCLAMP
12511259 output.depth = min (input.p.z, MaxDepthPS);
1252- #elif PS_DEPTH_FEEDBACK && AFAIL_NEEDS_DEPTH
1253- output.depth = input.p.z; // Output depth value for ATST pass/fail
12541260#endif
12551261
12561262 return output;
0 commit comments