yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
ae1a5e408
master
1//TEST:SIMPLE(filecheck=CHECK_GLSL): -allow-glsl -stage compute -entry computeMain -target glsl 2//TEST:SIMPLE(filecheck=CHECK_SPV): -allow-glsl -stage compute -entry computeMain -target spirv -emit-spirv-directly 3 4// not testing hlsl due to missing impl 5//DISABLE_TEST:SIMPLE(filecheck=CHECK_HLSL): -allow-glsl -stage compute -entry computeMain -target hlsl -DTARGET_HLSL 6// not testing cuda due to missing impl 7//DISABLE_TEST:SIMPLE(filecheck=CHECK_CUDA): -allow-glsl -stage compute -entry computeMain -target cuda -DTARGET_CUDA 8// not testing cpp due to missing impl 9//DISABLE_TEST:SIMPLE(filecheck=CHECK_CPP): -allow-glsl -stage compute -entry computeMain -target cpp -DTARGET_CPP 10 11//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl 12//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl -emit-spirv-directly 13//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-wgpu -compute -entry computeMain -allow-glsl -xslang -DWGPU -render-feature half 14//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-metal -compute -entry computeMain -allow-glsl -xslang -DMETAL 15 16#version 430 17 18#if 1 \ 19 && !defined(TARGET_HLSL) \ 20 && !defined(TARGET_CUDA) 21// hlsl is missing an implementation 22// cuda is missing an implementation 23#define TEST_when_subgroupShuffleXor_is_implemented 24#endif 25 26//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer 27buffer MyBlockName2 28{ 29 uint data[]; 30} outputBuffer; 31 32layout(local_size_x = 32) in; 33 34__generic<T : __BuiltinLogicalType> 35bool test1ShuffleX() { 36 return true 37 & subgroupShuffle(T(1), 1) == T(1) 38#ifdef TEST_when_subgroupShuffleXor_is_implemented 39 & subgroupShuffleXor(T(1), 1) == T(1) 40#endif // #ifdef TEST_when_subgroupShuffleXor_is_implemented 41 ; 42} 43__generic<T : __BuiltinLogicalType, let N : int> 44bool testVShuffleX() { 45 typealias gvec = vector<T, N>; 46 47 return true 48 & subgroupShuffle(gvec(T(1)), 1) == gvec(T(1)) 49#ifdef TEST_when_subgroupShuffleXor_is_implemented 50 & subgroupShuffleXor(gvec(T(1)), 1) == gvec(T(1)) 51#endif // #ifdef TEST_when_subgroupShuffleXor_is_implemented 52 ; 53} 54 55__generic<T : __BuiltinFloatingPointType> 56bool test1ShuffleX() { 57 return true 58 & subgroupShuffle(T(1), 1) == T(1) 59#if !defined(TARGET_CUDA) & !defined(TARGET_HLSL) 60 & subgroupShuffleXor(T(1), 1) == T(1) 61#endif // #if !defined(TARGET_CUDA) & !defined(TARGET_HLSL) 62 ; 63} 64__generic<T : __BuiltinFloatingPointType, let N : int> 65bool testVShuffleX() { 66 typealias gvec = vector<T, N>; 67 68 return true 69 & subgroupShuffle(gvec(T(1)), 1) == gvec(T(1)) 70#if !defined(TARGET_CUDA) & !defined(TARGET_HLSL) 71 & subgroupShuffleXor(gvec(T(1)), 1) == gvec(T(1)) 72#endif // #if !defined(TARGET_CUDA) & !defined(TARGET_HLSL) 73 ; 74} 75bool testShuffleX() { 76 return true 77 & test1ShuffleX<float>() 78 & testVShuffleX<float, 2>() 79 & testVShuffleX<float, 3>() 80 & testVShuffleX<float, 4>() 81 & test1ShuffleX<half>() 82 & testVShuffleX<half, 2>() 83 & testVShuffleX<half, 3>() 84 & testVShuffleX<half, 4>() 85 & test1ShuffleX<int>() 86 & testVShuffleX<int, 2>() 87 & testVShuffleX<int, 3>() 88 & testVShuffleX<int, 4>() 89 & test1ShuffleX<uint>() 90 & testVShuffleX<uint, 2>() 91 & testVShuffleX<uint, 3>() 92 & testVShuffleX<uint, 4>() 93 94 // Disabled on WGPU and Metal as these built-in types are not supported as of time of writing. 95#if !defined(WGPU) && !defined(METAL) 96 & test1ShuffleX<double>() // WARNING: intel GPU's lack FP64 support 97 & testVShuffleX<double, 2>() 98 & testVShuffleX<double, 3>() 99 & testVShuffleX<double, 4>() 100 & test1ShuffleX<int8_t>() 101 & testVShuffleX<int8_t, 2>() 102 & testVShuffleX<int8_t, 3>() 103 & testVShuffleX<int8_t, 4>() 104 & test1ShuffleX<int64_t>() 105 & testVShuffleX<int64_t, 2>() 106 & testVShuffleX<int64_t, 3>() 107 & testVShuffleX<int64_t, 4>() 108 & test1ShuffleX<uint8_t>() 109 & testVShuffleX<uint8_t, 2>() 110 & testVShuffleX<uint8_t, 3>() 111 & testVShuffleX<uint8_t, 4>() 112 & test1ShuffleX<bool>() 113 & testVShuffleX<bool, 2>() 114 & testVShuffleX<bool, 3>() 115 & testVShuffleX<bool, 4>() 116 & test1ShuffleX<uint64_t>() 117 & testVShuffleX<uint64_t, 2>() 118 & testVShuffleX<uint64_t, 3>() 119 & testVShuffleX<uint64_t, 4>() 120#endif 121 // Disabled on WGPU as these built-in types are not supported as of time of writing. 122#if !defined(WGPU) 123 & test1ShuffleX<int16_t>() 124 & testVShuffleX<int16_t, 2>() 125 & testVShuffleX<int16_t, 3>() 126 & testVShuffleX<int16_t, 4>() 127 & test1ShuffleX<uint16_t>() 128 & testVShuffleX<uint16_t, 2>() 129 & testVShuffleX<uint16_t, 3>() 130 & testVShuffleX<uint16_t, 4>() 131#endif 132 ; 133} 134 135 136void computeMain() 137{ 138 139 outputBuffer.data[0] = true 140 & testShuffleX() 141 ; 142 143 // CHECK_GLSL: void main( 144 // CHECK_SPV: OpEntryPoint 145 // CHECK_HLSL: void computeMain( 146 // CHECK_CUDA: void computeMain( 147 // CHECK_CPP: void _computeMain( 148 // BUF: 1 149}