summaryrefslogtreecommitdiff
path: root/Runtime/Export/UnityEngineComputeShader.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Runtime/Export/UnityEngineComputeShader.txt')
-rw-r--r--Runtime/Export/UnityEngineComputeShader.txt216
1 files changed, 216 insertions, 0 deletions
diff --git a/Runtime/Export/UnityEngineComputeShader.txt b/Runtime/Export/UnityEngineComputeShader.txt
new file mode 100644
index 0000000..8631069
--- /dev/null
+++ b/Runtime/Export/UnityEngineComputeShader.txt
@@ -0,0 +1,216 @@
+C++RAW
+
+#include "UnityPrefix.h"
+#include "Configuration/UnityConfigure.h"
+#include "Runtime/Shaders/ComputeShader.h"
+#include "Runtime/Graphics/Texture.h"
+#include "Runtime/Math/Vector4.h"
+#include "Runtime/Threads/AtomicOps.h"
+
+#include "Runtime/Scripting/ScriptingUtility.h"
+#include "Runtime/Scripting/ScriptingObjectWithIntPtrField.h"
+#include "Runtime/Mono/MonoBehaviour.h"
+#include "Runtime/Misc/GraphicsScriptingUtility.h"
+
+
+CSRAW
+using System;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Collections;
+
+namespace UnityEngine
+{
+
+// Compute Shader asset.
+CLASS ComputeShader : Object
+
+ // Find [[ComputeShader]] kernel index.
+ CUSTOM int FindKernel (string name) {
+ FastPropertyName fpName = ScriptingStringToProperty(name);
+ return self->FindKernel (fpName);
+ }
+
+ // Set a float parameter.
+ CUSTOM void SetFloat (string name, float val) {
+ FastPropertyName fpName = ScriptingStringToProperty(name);
+ self->SetValueParam (fpName, 4, &val);
+ }
+
+ // Set an integer parameter.
+ CUSTOM void SetInt (string name, int val) {
+ FastPropertyName fpName = ScriptingStringToProperty(name);
+ self->SetValueParam (fpName, 4, &val);
+ }
+
+ // Set a vector parameter.
+ CUSTOM void SetVector (string name, Vector4 val) {
+ FastPropertyName fpName = ScriptingStringToProperty(name);
+ self->SetValueParam (fpName, 16, &val.x);
+ }
+
+ // Set multiple consecutive float parameters at once.
+ CSRAW public void SetFloats (string name, params float[] values) {
+ Internal_SetFloats (name, values);
+ }
+ CUSTOM private void Internal_SetFloats (string name, float[] values) {
+ FastPropertyName fpName = ScriptingStringToProperty(name);
+ int size = GetScriptingArraySize (values);
+ const float* arr = Scripting::GetScriptingArrayStart<float> (values);
+ self->SetValueParam (fpName, size*4, arr);
+ }
+
+ // Set multiple consecutive integer parameters at once.
+ CSRAW public void SetInts (string name, params int[] values) {
+ Internal_SetInts (name, values);
+ }
+ CUSTOM private void Internal_SetInts (string name, int[] values) {
+ FastPropertyName fpName = ScriptingStringToProperty(name);
+ int size = GetScriptingArraySize (values);
+ const int* arr = Scripting::GetScriptingArrayStart<int> (values);
+ self->SetValueParam (fpName, size*4, arr);
+ }
+
+ // Set a texture parameter.
+ CUSTOM void SetTexture (int kernelIndex, string name, Texture texture) {
+ FastPropertyName fpName = ScriptingStringToProperty(name);
+ Texture& tex = *texture;
+ self->SetTextureParam (kernelIndex, fpName, tex.GetTextureID());
+ }
+
+ // Set a [[ComputeBuffer]] parameter.
+ //
+ CUSTOM void SetBuffer (int kernelIndex, string name, ComputeBuffer buffer) {
+ FastPropertyName fpName = ScriptingStringToProperty(name);
+ self->SetBufferParam (kernelIndex, fpName, buffer->GetBufferHandle());
+ }
+
+ // Execute a compute shader.
+ CUSTOM void Dispatch (int kernelIndex, int threadsX, int threadsY, int threadsZ)
+ {
+ self->DispatchComputeShader (kernelIndex, threadsX, threadsY, threadsZ);
+ }
+
+END
+
+// [[ComputeBuffer]] type.
+CSRAW [Flags]
+ENUM ComputeBufferType
+ // Default [[ComputeBuffer]] type.
+ Default = 0,
+ // Raw [[ComputeBuffer]] type.
+ Raw = 1,
+ // Append-consume [[ComputeBuffer]] type.
+ Append = 2,
+ // [[ComputeBuffer]] with a counter.
+ Counter = 4,
+ // [[ComputeBuffer]] used for Graphics.DrawProceduralIndirect.
+ DrawIndirect = 256,
+END
+
+
+// Data buffer to hold data for compute shaders.
+CLASS ComputeBuffer : IDisposable
+
+ CSRAW #pragma warning disable 414
+ CSRAW internal IntPtr m_Ptr;
+ CSRAW #pragma warning restore 414
+
+ // IDisposable implementation, with Release() for explicit cleanup.
+
+ ~ComputeBuffer()
+ {
+ Dispose(false);
+ }
+
+ //*undocumented*
+ CSRAW public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ private void Dispose (bool disposing)
+ {
+ // we don't have any managed references, so
+ // 'disposing' part of standard IDisposable pattern
+ // does not apply
+
+ // Release native resources
+ DestroyBuffer (this);
+ m_Ptr = IntPtr.Zero;
+ }
+
+ CUSTOM private static void InitBuffer (ComputeBuffer buf, int count, int stride, ComputeBufferType type) {
+ buf.SetPtr(new ComputeBuffer(count, stride, type));
+ }
+ CUSTOM private static void DestroyBuffer(ComputeBuffer buf) {
+ delete buf.GetPtr();
+ }
+
+ ///*listonly*
+ CSRAW public ComputeBuffer (int count, int stride) : this (count, stride, ComputeBufferType.Default)
+ {
+ }
+
+ // Create a Compute Buffer.
+ CSRAW public ComputeBuffer (int count, int stride, ComputeBufferType type)
+ {
+ m_Ptr = IntPtr.Zero;
+ InitBuffer (this, count, stride, type);
+ }
+
+ // Release a Compute Buffer.
+ CSRAW public void Release ()
+ {
+ Dispose();
+ }
+
+ // Number of elements in the buffer (RO).
+ CUSTOM_PROP public int count {
+ return self->GetCount();
+ }
+
+ // Size of one element in the buffer (RO).
+ CUSTOM_PROP public int stride {
+ return self->GetStride();
+ }
+
+ // Set buffer data.
+ CSRAW
+ [System.Security.SecuritySafeCritical] // due to Marshal.SizeOf
+ public void SetData (System.Array data) {
+ #if !UNITY_FLASH
+ InternalSetData (data, Marshal.SizeOf(data.GetType().GetElementType()));
+ #endif
+ }
+
+ CSRAW [System.Security.SecurityCritical] // to prevent accidentally making this public in the future
+ CUSTOM private void InternalSetData (System.Array data, int elemSize) {
+ self->SetData (Scripting::GetScriptingArrayStart<char>(data), GetScriptingArraySize(data) * elemSize);
+ }
+
+
+ // Read buffer data.
+ CSRAW
+ [System.Security.SecuritySafeCritical] // due to Marshal.SizeOf
+ public void GetData (System.Array data) {
+ #if !UNITY_FLASH
+ InternalGetData (data, Marshal.SizeOf(data.GetType().GetElementType()));
+ #endif
+ }
+
+ CSRAW [System.Security.SecurityCritical] // to prevent accidentally making this public in the future
+ CUSTOM private void InternalGetData (System.Array data, int elemSize) {
+ self->GetData (Scripting::GetScriptingArrayStart<char>(data), GetScriptingArraySize(data) * elemSize);
+ }
+
+ // Copy counter value of append/consume buffer into another buffer.
+ CUSTOM static void CopyCount (ComputeBuffer src, ComputeBuffer dst, int dstOffset) {
+ ComputeBuffer::CopyCount (src.GetPtr(), dst.GetPtr(), dstOffset);
+ }
+
+END
+
+CSRAW
+}