簡體   English   中英

Synax用於金屬着色器文件中除vertex | fragment | kernel之外的函數

[英]Synax for functions other than vertex|fragment|kernel in metal shader file

我正在將一些基本的OpenCL代碼移植到Metal計算着色器。 在嘗試轉換其他輔助函數時很快就卡住了。 例如,在.metal文件中包含類似以下函數的.metal Xcode(7.1)給我一個“沒有以前的函數原型”警告

float maxComponent(float4 a) {
    return fmax(a.x, fmax(a.y, fmax(a.z, a.w)));
}

這種“金屬”方式是什么?

我知道的三種方式:

(我把這個函數改寫為重載,對我來說更具可讀性。)

實際上宣布原型:

float fmax(float4 float4);
float fmax(float4 float4) {
   return fmax(
      fmax(float4[0], float4[1]),
      fmax(float4[2], float4[3])
   );
}

將其范圍限定為具有靜態的文件:

static float fmax(float4 float4) {
   return fmax(
      fmax(float4[0], float4[1]),
      fmax(float4[2], float4[3])
   );
}

將其包裝在匿名命名空間中:

namespace {
   float fmax(float4 float4) {
      return metal::fmax(
         metal::fmax(float4[0], float4[1]),
         metal::fmax(float4[2], float4[3])
      );
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM