yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f02b08490
master
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}