“Optimizing the Graphics Pipeline with Compute”を見ていたら,ラスタライザーの効率性を表示するピクセルシェーダが載っていたので,忘れないようにメモしておこうかと思います。
float3 main() : SV_TARGET0 { bool inside = false; float2 barycentric = fbGetBarycentricLinearCenter(); //__XB_GetBarycentricCoords_Linear_Center(); if (barycentric.x >= 0 && barycentric.y >= 0 && barycentric.x + barycentric.y <= 1) inside = true; uint2 insideBallot = fbBallot(inside); //__XB_Ballot64(); uint insideCount = countbits(insideBallot.x) + countbits(insideBallot.y); float insidePrecent = insideCount * (1.0 / 64.0); return float3(1 - insidePercent, insidePercent, 0); }
合っているどうか全くわからないけども,Shader Model 6.0以降で書くと次のような感じ???
SM6.0全然弄ってないから分からん。
float3 main(linear float3 barycentric : SV_Barycentrics) : SV_TARGET0 { bool inside = false; if (baryenctric.x >= 0 && barycentric.y >= 0 && barycentric.x + barycentric.y <= 1) inside = true; uint insideCount = WaveActiveCountBits(inside); float insidePercent = insideCount * (1.0 / 64.0); return float3(1 - insidePercent, insidePercent, 0); }
たぶん,間違っていると思うので誰か正しいコード教えてください。