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
1.7 KiB53 linesraw
1// nested-parameter-block-3.slang
2// 
3// Same as nest-parameter-block-2, the only difference is that we added member methods
4// to ParameterBlock element types to exercise the legalization logic of method calls.
5
6//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj -output-using-type
7//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d12 -shaderobj -output-using-type
8//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -shaderobj -output-using-type
9//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -metal -shaderobj -output-using-type -render-features argument-buffer-tier-2
10
11
12struct CB
13{
14    uint4 value;
15}
16
17struct MaterialSystem
18{
19    CB cb;
20    RWStructuredBuffer<uint4> data;
21    uint4 readData() { return data[0]; }
22}
23
24struct Scene
25{
26    CB sceneCb;
27    RWStructuredBuffer<uint4> data;
28    ParameterBlock<MaterialSystem> material;
29    uint4 readMaterialData() { return material.readData(); }
30}
31
32//TEST_INPUT: set scene = new Scene { { {1,2,3,4} }, ubuffer(data=[1 2 3 4], stride=4), new MaterialSystem {{ {1,2,3,4} }, ubuffer(data=[1 2 3 4], stride=4)} }
33ParameterBlock<Scene> scene;
34
35struct MyBuffer
36{
37    RWStructuredBuffer<uint> resultBuffer;
38}
39//TEST_INPUT: set pb2 = new MyBuffer { out ubuffer(data=[0 0 0 0], stride=4) }
40ParameterBlock<MyBuffer> pb2;
41
42// Main entry-point. Applies the transformation encoded by `transformer`
43// to all elements in `buffer`.
44[shader("compute")]
45[numthreads(1,1,1)]
46void computeMain(uint3 sv_dispatchThreadID : SV_DispatchThreadID)
47{
48    // CHECK: type: uint32_t
49    // CHECK-NEXT: 4
50    // CHECK-NEXT: 2
51    pb2.resultBuffer[0] = scene.sceneCb.value.x + scene.data[0].x + scene.material.cb.value.x + scene.material.data[0].x;
52    pb2.resultBuffer[1] = scene.readMaterialData().y;
53}