ラスタライザーの効率性を測るシェーダ

“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);
}

たぶん,間違っていると思うので誰か正しいコード教えてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください