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