compute shader 模板

 CS脚本:

using UnityEngine;
public class Control : MonoBehaviour {

    public ComputeShader shader;
    int[] inputData = new int[2000000];
    int[] outputData = new int[2000000];
    int[] inputData1 = new int[10000000];
    int[] outputData1 = new int[10000000];
    ComputeBuffer inputbuffer;
    ComputeBuffer outputbuffer;
    int k;

    private void Start() {
        k = shader.FindKernel("CSMain1");                       //获取执行函数的序号
    }

    private void Update() {
        ComputeData();  //GPU
        //ComputeData1(); //CPU
    }

    private void ComputeData() {
        ComputeBuffer inputbuffer = new ComputeBuffer(inputData.Length, 4);   //定义缓冲区(参数:数组长度、每个数组元素占用字节数)
        ComputeBuffer outputbuffer = new ComputeBuffer(outputData.Length, 4);
        inputbuffer.SetData(inputData);                 //待计算数据加载入缓冲区
        shader.SetBuffer(k, "inputData", inputbuffer);  //定义输入口
        shader.SetBuffer(k, "outputData", outputbuffer);//定义输出口
        shader.Dispatch(k, 64, 1, 1);     //开始执行(参数:主函数下标、线程组的XYZ个数)
        outputbuffer.GetData(outputData);               //缓冲区获得计算好的数据
        inputbuffer.Dispose();  //清除缓存
        outputbuffer.Dispose();
    }

    private void ComputeData1() {
        for (int i = 0; i < inputData1.Length; i++) {
            outputData1[i] = inputData1[i] + 999;
        }
    }
}

Compute Shader代码:

#pragma kernel CSMain
#pragma kernel CSMain1

StructuredBuffer<int> inputData;   //CPU传过来的数据(CPU->GPU)
RWStructuredBuffer<int> outputData;//计算完要传出的数据(GPU->CPU)

[numthreads(32, 32, 1)]
void CSMain(uint3 id : SV_DispatchThreadID) {
	outputData[id.x] = inputData[id.x] + 999;
}

[numthreads(32, 32, 1)]
void CSMain1(uint3 id : SV_DispatchThreadID) {//计算函数,可有多个
	outputData[id.x] = inputData[id.x] + 999;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值