Hi,
i have script and compute shader like below. My OutputData array length are equal to overall threads number in compute shader. How i should access my OutputData array, to set 1 on each array element by every individual thread?
Script
using System;
using System.Collections;
using System.IO;
using UnityEngine;
public class ComputeShadersManager : MonoBehaviour
{
private const int INPUT_DATA_ARRAY_SIZE = 32768;
private const string KERNEL_NAME = "Main";
private const string OUTPUT_PROPERTY_NAME = "OutputData";
private readonly int[] EMPTY_OUTPUT_DATA = new int[INPUT_DATA_ARRAY_SIZE];
[SerializeField]
private ComputeShader computeShaderKernel;
private int computeShaderKernelIndex;
private ComputeBuffer outputDataBuffer;
private int[] outputData;
private void Awake()
{
computeShaderKernelIndex = computeShaderKernel.FindKernel(KERNEL_NAME);
outputDataBuffer = new ComputeBuffer(INPUT_DATA_ARRAY_SIZE, sizeof(int));
outputData = EMPTY_OUTPUT_DATA;
computeShaderKernel.SetBuffer(computeShaderKernelIndex, OUTPUT_PROPERTY_NAME, outputDataBuffer);
}
private IEnumerator Start()
{
while (true)
{
outputDataBuffer.SetData(EMPTY_OUTPUT_DATA);
computeShaderKernel.Dispatch(computeShaderKernelIndex, 8, 8, 8);
yield return null;
outputDataBuffer.GetData(outputData);
File.WriteAllText(@"D:\Results.txt", String.Join("\n", outputData));
}
}
}
Compute shader
#pragma kernel Main
RWStructuredBuffer<int> OutputData;
[numthreads(8,8,1)]
void Main (uint3 groupID : SV_GroupID, uint3 groupThreadID : SV_GroupThreadID, uint groupIndex : SV_GroupIndex, uint3 id : SV_DispatchThreadID)
{
OutputData[???] = 1;
}