msad4
比較 4 位元組參考值和 8 位元組來源值,並累積 4 個總和的向量。 每個總和都會對應至參考值與來源值之間不同位元組對齊的絕對差異遮罩總和。
uint4 result = msad4 (uint reference, uint2 source, uint4 accum) ; |
---|
參數
-
參考
-
[in]一個 uint 值中 4 個位元組的參考陣列。
-
源
-
[in]兩 個 uint2 值中 8 個位元組的來源陣列。
-
accum
-
[in]4 值的向量。 msad4 會將這個向量新增至參考值與來源值之間不同位元組對齊方式的遮罩絕對差異總和。
傳回值
4 個總和的向量。 每個總和都會對應至參考值與來源值之間不同位元組對齊的絕對差異遮罩總和。 msad4 不包含總和的差異,如果該差異是遮罩 (,則參考位元組為 0) 。
備註
若要在著色器程式碼中使用msad4內建函式,請使用D3D11_FEATURE_D3D11_OPTIONS呼叫ID3D11Device::CheckFeatureSupport方法,以確認 Direct3D 裝置支援SAD4ShaderInstructions功能選項。 msad4內建函式需要 WDDM 1.2 顯示驅動程式,而所有 WDDM 1.2 顯示驅動程式都必須支援msad4。 如果您的應用程式建立 功能層級 為 11.0 或 11.1 的轉譯裝置,而且編譯目標為著色器模型 5 或更新版本,HLSL 原始程式碼可以使用 msad4 內建函式。
傳回值最多精確到 65535。 如果您使用可能導致傳回值大於 65535 的輸入呼叫 msad4 內建函式, msad4 會產生未定義的結果。
最小著色器模型
下列著色器模型中支援此函式。
著色器模型 | 支援 |
---|---|
著色器模型 5 或更新版本 | 是 |
範例
以下是 msad4的範例結果計算:
reference = 0xA100B2C3;
source.x = 0xD7B0C372
source.y = 0x4F57C2A3
accum = {1,2,3,4}
result.x alignment source: 0xD7B0C372
result.x = accum.x + |0xD7 0xA1| + 0 (masked) + |0xC3 0xB2| + |0x72 0xC3| = 1 + 54 + 0 + 17 + 81 = 153
result.y alignment source: 0xA3D7B0C3
result.y = accum.y + |0xA3 0xA1| + 0 (masked) + |0xB0 0xB2| + |0xC3 0xC3| = 2 + 2 + 0 + 2 + 0 = 6
result.z alignment source: 0xC2A3D7B0
result.z = accum.z + |0xC2 0xA1| + 0 (masked) + |0xD7 0xB2| + |0xB0 0xC3| = 3 + 33 + 0 + 37 + 19 = 92
result.w alignment source: 0x57C2A3D7
result.w = accum.w + |0x57 0xA1| + 0 (masked) + |0xA3 0xB2| + |0xD7 0xC3| = 4 + 74 + 0 + 15 + 20 = 113
result = {153,6,92,113}
以下是如何使用 msad4 在緩衝區內搜尋參考模式的範例:
uint4 accum = {0,0,0,0};
for(uint i=0;i<REF_SIZE;i++)
accum = msad4(
buf_ref[i],
uint2(buf_src[DTid.x+i], buf_src[DTid.x+i+1]),
accum);
buf_accum[DTid.x] = accum;
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 |
Windows 8 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 |
Windows Server 2012 [傳統型應用程式 |UWP 應用程式] |