#pragma kernel TesterKernel
RWTexture2D<float4> Result;
[numthreads(8, 8, 1)]
void TesterKernel(uint2 id : SV_DispatchThreadID)
{
float2 iResolution=float2(1024,1024); //texture resolution
Result[id] = float4(id/iResolution,0,1);
}
RWTexture2D<float4> Result;
[numthreads(8, 8, 1)]
void TesterKernel(uint2 id : SV_DispatchThreadID)
{
float2 iResolution=float2(1024,1024); //texture resolution
Result[id] = float4(id/iResolution,0,1);
}
using UnityEngine;
[ExecuteInEditMode]
public class Test : MonoBehaviour
{
[SerializeField] ComputeShader _compute;
RenderTexture _buffer;
const int kSize = 512;
void OnDestroy()
{
if (_buffer != null)
if (Application.isPlaying)
Destroy(_buffer);
else
DestroyImmediate(_buffer);
}
void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (_buffer == null)
{
_buffer = new RenderTexture(kSize, kSize, 0);
_buffer.enableRandomWrite = true;
_buffer.filterMode = FilterMode.Point;
_buffer.hideFlags = HideFlags.DontSave;
_buffer.Create();
}
var kernel = _compute.FindKernel("TesterKernel");
_compute.SetTexture(kernel, "Result", _buffer);
_compute.Dispatch(kernel, kSize / 8, kSize / 8, 1);
Graphics.Blit(_buffer, destination);
}
}
[ExecuteInEditMode]
public class Test : MonoBehaviour
{
[SerializeField] ComputeShader _compute;
RenderTexture _buffer;
const int kSize = 512;
void OnDestroy()
{
if (_buffer != null)
if (Application.isPlaying)
Destroy(_buffer);
else
DestroyImmediate(_buffer);
}
void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (_buffer == null)
{
_buffer = new RenderTexture(kSize, kSize, 0);
_buffer.enableRandomWrite = true;
_buffer.filterMode = FilterMode.Point;
_buffer.hideFlags = HideFlags.DontSave;
_buffer.Create();
}
var kernel = _compute.FindKernel("TesterKernel");
_compute.SetTexture(kernel, "Result", _buffer);
_compute.Dispatch(kernel, kSize / 8, kSize / 8, 1);
Graphics.Blit(_buffer, destination);
}
}
#pragma kernel TesterKernel
RWTexture2D<float4> Result;
float4 drawline(float2 uv)
{
float Thickness = 0.02;
float LineSideA = step((uv.x+Thickness)+uv.y,0.5);
float LineSideB = step((uv.x-Thickness)+uv.y,0.5);
return float4(1,1,1,1)*LineSideB-LineSideA;
}
[numthreads(8, 8, 1)]
void TesterKernel(uint2 id : SV_DispatchThreadID)
{
float2 iResolution=float2(1024,1024); //texture resolution
Result[id] = drawline(id/iResolution);
}
RWTexture2D<float4> Result;
float4 drawline(float2 uv)
{
float Thickness = 0.02;
float LineSideA = step((uv.x+Thickness)+uv.y,0.5);
float LineSideB = step((uv.x-Thickness)+uv.y,0.5);
return float4(1,1,1,1)*LineSideB-LineSideA;
}
[numthreads(8, 8, 1)]
void TesterKernel(uint2 id : SV_DispatchThreadID)
{
float2 iResolution=float2(1024,1024); //texture resolution
Result[id] = drawline(id/iResolution);
}
Forwarded from Mostafa
سلام
یه سوال داشتم
چرا میگن تو نوشتن شیدر بهتره که از if استفاده نشه؟
یه سوال داشتم
چرا میگن تو نوشتن شیدر بهتره که از if استفاده نشه؟
Forwarded from Kamali
چون GPU در حالت عادی به صورت موازی عمل می کنه اما اگر از if-else statement استفاده کنید دیگه موازی عمل نمی کنه!
یکسری از Thread ها از بلوک IF عبور می کنند و باقی اونا از بلوک ELSE به خاطر همین دیگه مثل قبل با هم پیش نمیرن و باعث میشه سرعتشون کند بشه
یکسری از Thread ها از بلوک IF عبور می کنند و باقی اونا از بلوک ELSE به خاطر همین دیگه مثل قبل با هم پیش نمیرن و باعث میشه سرعتشون کند بشه
Forwarded from Kamali
یک لشکر سرباز رو در نظر بگیرید که به دو قسمت تقسیم میشه
در این صورت قدرت این لشکر دیگه مثل سابق نیست!
در این صورت قدرت این لشکر دیگه مثل سابق نیست!
Forwarded from MHD
میخواستم بدونم شیدر بدنه های ماشین csr2 چجوری کار میکنه و الگوریتمش چیه که هم باکیفیته و هم پردازش کمتری داره