yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f02b08490
master
1//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-vk -compile-arg -skip-spirv-validation -emit-spirv-directly 2//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-dx12 3//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-mtl 4//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu 5//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cuda 6//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-wgpu 7 8// CHECK: 8765432F 9// CHECK-NEXT: 876543F1 10// CHECK-NEXT: 87654F21 11// CHECK-NEXT: 8765F321 12// CHECK-NEXT: A8 13// CHECK-NEXT: 3FC0 14// CHECK-NEXT: AF 15// CHECK-NEXT: 123456F8 16// CHECK-NEXT: 9ABCDE60 17// CHECK-NEXT: 87654331 18// CHECK-NEXT: FEDCBA68 19// CHECK-NEXT: 12345EF8 20// CHECK-NEXT: 9ABCD560 21// CHECK-NEXT: 87654431 22// CHECK-NEXT: FEDCB568 23 24//TEST_INPUT:ubuffer(data=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14], stride=4):out,name=u32Buffer 25RWStructuredBuffer<uint> u32Buffer; 26 27[numthreads(1, 1, 1)] 28void computeMain() 29{ 30 // 32-bit tests 31 { 32 // Simple hex insertion to test, varying the offset. 33 uint base = 0x87654321; 34 uint value = 0xABCDEF; 35 u32Buffer[0] = bitfieldInsert(base, value, 4 * 0, 4); // 0x8765432F 36 u32Buffer[1] = bitfieldInsert(base, value, 4 * 1, 4); // 0x876543F1 37 u32Buffer[2] = bitfieldInsert(base, value, 4 * 2, 4); // 0x8765F321 38 u32Buffer[3] = bitfieldInsert(base, value, 4 * 3, 4); // 0x87F54321 39 40 // Test with varying bit length 41 base = 0; 42 value = 0b101010; 43 u32Buffer[4] = bitfieldInsert(base, value, 2, 6); // 0b10101000 44 value = 0b11111111; 45 u32Buffer[5] = bitfieldInsert(base, value, 6, 8); // 0b11111111000000 46 47 // Test with int input 48 u32Buffer[6] = bitfieldInsert(0b10100000, 0b1111, 0, 4); // 0b10101111 49 50 // Test with a vector 51 uint4 base4 = uint4(0x12345678, 0x9abcdef0, 0x87654321, 0xfedcba98); 52 uint4 value4 = uint4(0xABCDEF, 0x123456, 0x876543, 0x123456); 53 uint4 output4 = bitfieldInsert(base4, value4, 4, 4); 54 u32Buffer[7] = output4.x; 55 u32Buffer[8] = output4.y; 56 u32Buffer[9] = output4.z; 57 u32Buffer[10] = output4.w; 58 59 // Test with a int vector 60 int4 ibase4 = int4(0x12345678, 0x9abcdef0, 0x87654321, 0xfedcba98); 61 int4 ivalue4 = int4(0xABCDEF, 0x123456, 0x876543, 0x123456); 62 int4 ioutput4 = bitfieldInsert(ibase4, ivalue4, 4, 8); 63 u32Buffer[11] = ioutput4.x; 64 u32Buffer[12] = ioutput4.y; 65 u32Buffer[13] = ioutput4.z; 66 u32Buffer[14] = ioutput4.w; 67 } 68}