This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #define COMPUTE_SHADER_MAIN(dimx, dimy, dimz) [numthreads(dimx, dimy, dimz)] void main(uvec3 gl_LocalInvocationID : SV_GroupThreadID, uvec3 gl_WorkGroupID : SV_GroupID) | |
| #define UNIFORM_BUFFER(name, bindidx) cbuffer name : register(b##bindidx) | |
| #define DECLARE_SAMPLER_IBUF(bindidx, type, name) Buffer<type> name : register(t##bindidx) | |
| #define DECLARE_SAMPLER_U2D(bindidx, name) Texture2D<uint4> name : register(t##bindidx) | |
| #define DECLARE_SAMPLER_U2D_GATHER(bindidx, name) Texture2D<float4> name : register(t##bindidx) | |
| #define DECLARE_IMAGE_R16I_BUF(bindidx, name) RWBuffer<int> name : register(u##bindidx) | |
| #define DECLARE_IMAGE_R32I_BUF(bindidx, name) RWBuffer<int> name : register(u##bindidx) | |
| #define DECLARE_IMAGE_TYPELESS_BUF(bindidx, name) RWByteAddressBuffer name : register(u##bindidx) | |
| #define DECLARE_IMAGE_R8UI_2D(bindidx, name) RWTexture2D<uint> name : register(u##bindidx) | |
| #define DECLARE_IMAGE_RG8UI_2D(bindidx, name) RWTexture2D<uint2> name : register(u##bindidx) | |
| #define NEED_DC_COPY | |
| #define DC_TYPELESS | |
| #define DC_WRITE_OFFS dir_mask.x | |
| typedef float2 vec2; | |
| typedef float3 vec3; | |
| typedef float4 vec4; | |
| typedef int2 ivec2; | |
| typedef int3 ivec3; | |
| typedef int4 ivec4; | |
| typedef uint2 uvec2; | |
| typedef uint3 uvec3; | |
| typedef uint4 uvec4; | |
| #define shared groupshared | |
| SamplerState default_sampler : register(s0); | |
| #define IMPL_BITFIELD(T) \ | |
| T bitfieldExtract(T val, int offset, int size) \ | |
| { \ | |
| val <<= 32 - (offset + size); \ | |
| val >>= 32 - size; \ | |
| return val; \ | |
| } \ | |
| T bitfieldInsert(T base, T insert, int offset, int bits) \ | |
| { \ | |
| int mask = (-1 >> (32 - bits)) << offset; \ | |
| return (base & ~mask) | ((insert << offset) & mask); \ | |
| } | |
| IMPL_BITFIELD(int); | |
| IMPL_BITFIELD(ivec2); | |
| IMPL_BITFIELD(ivec3); | |
| IMPL_BITFIELD(ivec4); | |
| IMPL_BITFIELD(uint); | |
| IMPL_BITFIELD(uvec2); | |
| IMPL_BITFIELD(uvec3); | |
| IMPL_BITFIELD(uvec4); | |
| int bitCount(int v) | |
| { | |
| return int(countbits(uint(v))); | |
| } | |
| uint bitCount(uint v) | |
| { | |
| return countbits(v); | |
| } | |
| int2 imageLoad_buf_i2(RWByteAddressBuffer in_buf, uint pos) { return int2(in_buf.Load2(pos*8)); } | |
| int4 imageLoad_buf_i4(RWByteAddressBuffer in_buf, uint pos) { return int4(in_buf.Load4(pos*16)); } | |
| void imageStore_u1(RWTexture2D<uint> out_tex, uvec2 pos, uint val) { out_tex[pos] = val; } | |
| void imageStore_u2(RWTexture2D<uint2> out_tex, uvec2 pos, uvec2 vals) { out_tex[pos] = vals; } | |
| void imageStore_buf_i1(RWBuffer<int> out_buf, uint pos, int val) { out_buf[pos] = val; } | |
| void imageStore_buf_i2(RWByteAddressBuffer out_buf, uint pos, int2 val) { out_buf.Store2(pos*8, uint2(val)); } | |
| void imageStore_buf_i4(RWByteAddressBuffer out_buf, uint pos, int4 val) { out_buf.Store4(pos*16, uint4(val)); } | |
| uvec4 texelFetch(Texture2D<uint4> tex, ivec2 pos, int mip) { return tex.Load(int3(pos, mip)); } | |
| uvec4 textureGather(Texture2D<float4> tex, vec2 st) { return uvec4(tex.Gather(default_sampler, st) * 255.0 + 0.5); } | |
| uvec4 textureGatherOffset(Texture2D<float4> tex, vec2 st, ivec2 offs) { return uvec4(tex.Gather(default_sampler, st, offs) * 255.0 + 0.5); } | |
| bool2 lessThan(uvec2 a, uvec2 b) { return a < b; } | |
| bool2 greaterThan(uvec2 a, uvec2 b) { return a > b; } | |
| #define bufferFetch(buf, offs) buf[offs] | |
| #define texelOrImageFetch(tex, image, pos) (image).Load(int2(pos)) | |
| #define imul24(a,b) ((a)*(b)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment