#include "Include/PlatformDefines.hlsl" #pragma kernel CSCopyTexture #pragma kernel CSReduceTexture #pragma kernel CSCopyTextureArray uniform Texture2D source; uniform SamplerState sampler_source; uniform Texture2DArray textureArray; uniform SamplerState sampler_textureArray; uniform RWTexture2D destination; uniform uint offsetX; uniform uint sourceSizeX; uniform uint sourceSizeY; uniform uint destinationSizeX; uniform uint destinationSizeY; uniform bool reverseZ; uniform uint textureArrayIndex; [numthreads(GPUI_THREADS_2D, GPUI_THREADS_2D, 1)] void CSCopyTexture(uint3 id : SV_DispatchThreadID) { if (id.x >= sourceSizeX || id.y >= sourceSizeY) return; uint indexX = id.x + offsetX; float4 color = source[id.xy]; #if SHADER_API_GLCORE || SHADER_API_GLES3 if (reverseZ) color.r = 1 - color.r; #endif destination[uint2(indexX, id.y)] = color; } [numthreads(GPUI_THREADS_2D, GPUI_THREADS_2D, 1)] void CSReduceTexture(uint3 id : SV_DispatchThreadID) { uint indexX = id.x + offsetX; if (indexX >= destinationSizeX || id.y >= destinationSizeY) return; float2 uv = float2((id.x + 0.5) / destinationSizeX, (id.y + 0.5) / destinationSizeY); float4 r; r.x = source.SampleLevel(sampler_source, uv + float2(1.0 / sourceSizeX, 0), 0).r; r.y = source.SampleLevel(sampler_source, uv + float2(-1.0 / sourceSizeX, 0), 0).r; r.z = source.SampleLevel(sampler_source, uv + float2(0, 1.0 / sourceSizeY), 0).r; r.w = source.SampleLevel(sampler_source, uv + float2(0, -1.0 / sourceSizeY), 0).r; float minimum = min(min(min(r.x, r.y), r.z), r.w); destination[uint2(indexX, id.y)] = float4(minimum, 1.0, 1.0, 1.0); } [numthreads(GPUI_THREADS_2D, GPUI_THREADS_2D, 1)] void CSCopyTextureArray(uint3 id : SV_DispatchThreadID) { if (id.x >= sourceSizeX || id.y >= sourceSizeY) return; uint indexX = id.x + offsetX; float4 color = textureArray.SampleLevel(sampler_textureArray, float3(id.x / float(sourceSizeX), id.y / float(sourceSizeY), textureArrayIndex), 0); #if SHADER_API_GLCORE || SHADER_API_GLES3 if (reverseZ) color.r = 1 - color.r; #endif destination[uint2(indexX, id.y)] = color; }