yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

James Helferty (NVIDIA)render-test: Change D3D12 default to sm_6_5 (#8320)f02b08490

master
2.5 KiB64 linesraw
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: 1
9// CHECK-NEXT: 2
10// CHECK-NEXT: 3
11// CHECK-NEXT: 4
12// CHECK-NEXT: 5
13// CHECK-NEXT: 6
14// CHECK-NEXT: 7
15// CHECK-NEXT: 8
16// CHECK-NEXT: 21
17// CHECK-NEXT: 7A
18// CHECK-NEXT: FFFFFFFA
19// CHECK-NEXT: A
20// CHECK-NEXT: 67
21// CHECK-NEXT: FFFFFFEF
22// CHECK-NEXT: 32
23// CHECK-NEXT: FFFFFFA9
24
25//TEST_INPUT:ubuffer(data=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1], stride=4):out,name=i32Buffer
26RWStructuredBuffer<int> i32Buffer;
27
28[numthreads(1, 1, 1)]
29void computeMain()
30{
31    // 32-bit tests
32    {
33        // Simple hex extraction to test, varying the offset.
34        uint value = 0x87654321;
35        i32Buffer[0] = bitfieldExtract(value, 4 * 0, 4);
36        i32Buffer[1] = bitfieldExtract(value, 4 * 1, 4);
37        i32Buffer[2] = bitfieldExtract(value, 4 * 2, 4);
38        i32Buffer[3] = bitfieldExtract(value, 4 * 3, 4);
39        i32Buffer[4] = bitfieldExtract(value, 4 * 4, 4);
40        i32Buffer[5] = bitfieldExtract(value, 4 * 5, 4);
41        i32Buffer[6] = bitfieldExtract(value, 4 * 6, 4);
42        i32Buffer[7] = bitfieldExtract(value, 4 * 7, 4);
43
44        // Now varying the bit length
45        value = 0b00111011111011110001111010100001;
46        i32Buffer[8] = bitfieldExtract(value, 0, 6);
47        i32Buffer[9] = bitfieldExtract(value, 6, 8);
48
49        // Sign extension case
50        //  - For unsigned data types, the most significant bits of the result will be set to zero.
51        //  - For signed data types, the most significant bits will be set to the value of bit offset + base - 1
52        //    (i.e., it is sign extended to the width of the return type).
53        i32Buffer[10] = bitfieldExtract(0b1010111, 3, 4);  // 0b1010 -> 0b11111111111111111111111111111010
54        i32Buffer[11] = bitfieldExtract(0b1010111u, 3, 4); // 0b1111 -> 0b00000000000000000000000000001010
55
56        // Component-wise extraction
57        int4 val4 = int4(0x12345678, 0x9abcdef0, 0x87654321, 0xfedcba98);
58        int4 ext4 = bitfieldExtract(val4, 4, 8);
59        i32Buffer[12] = ext4.x;
60        i32Buffer[13] = ext4.y;
61        i32Buffer[14] = ext4.z;
62        i32Buffer[15] = ext4.w;
63    }
64}