From d93c71d53f969e5cd3911fbada0e566cd1887ec1 Mon Sep 17 00:00:00 2001 From: kaizhangNV <149626564+kaizhangNV@users.noreply.github.com> Date: Tue, 10 Jun 2025 12:35:01 -0500 Subject: Fix reflection to json issue (#7379) Apply argument buffer tier2 rule when using parameter block for Metal target. Close #6803. --- .../metal/nested-parameter-block-reflection.slang | 23 +++++++++++++++++++--- tests/metal/simple-compute.slang | 6 +++--- tests/metal/vector-argument-buffer-layout.slang | 17 +++++++++++++--- 3 files changed, 37 insertions(+), 9 deletions(-) (limited to 'tests') diff --git a/tests/metal/nested-parameter-block-reflection.slang b/tests/metal/nested-parameter-block-reflection.slang index 8282f5573..a294755da 100644 --- a/tests/metal/nested-parameter-block-reflection.slang +++ b/tests/metal/nested-parameter-block-reflection.slang @@ -1,10 +1,27 @@ //TEST:REFLECTION(filecheck=CHECK): -target metal + + +// CHECK: "name": "gParams", +// CHECK: "binding": {"kind": "constantBuffer", "index": 0}, + +// CHECK:"name": "pdata", +// CHECK:"binding": {"kind": "uniform", "offset": 0, "size": 16} // CHECK:"name": "tex", -// CHECK:"binding": {"kind": "metalArgumentBufferElement", "index": 1} +// Since we will apply MetalArgumentBufferTier2, 'tex' here will just be a uniform. +// The pdata is a nested parameter block, so it will be a 64-bit device pointer which take +// 8 bytes. So the offset of `tex` will be 8 bytes. +// CHECK:"binding": {"kind": "uniform", "offset": 8, "size": 8} + + +// Check that there will be only two bindings. +// +// CHECK: "name": "output", +// CHECK: "binding": {"kind": "constantBuffer", "index": 1}, +// struct Data { int3 content; } -struct Params +struct Params { ParameterBlock pdata; Texture2D tex; @@ -15,4 +32,4 @@ RWStructuredBuffer output; void computeMain() { output[0] = gParams.tex.Load(gParams.pdata.content); -} \ No newline at end of file +} diff --git a/tests/metal/simple-compute.slang b/tests/metal/simple-compute.slang index 85abaffb4..d70d37f5c 100644 --- a/tests/metal/simple-compute.slang +++ b/tests/metal/simple-compute.slang @@ -18,10 +18,10 @@ ParameterBlock block2; // REFLECT: "elementVarLayout": { // REFLECT: "name": "b1", -// REFLECT: "binding": {"kind": "metalArgumentBufferElement", "index": 0} +// REFLECT: "binding": {"kind": "uniform", "offset": 0, "size": 8} // REFLECT: "name": "b2", -// REFLECT: "binding": {"kind": "metalArgumentBufferElement", "index": 1} +// REFLECT: "binding": {"kind": "uniform", "offset": 8, "size": 8} // REFLECT: "binding": {"kind": "metalArgumentBufferElement", "index": 0, "count": 2} @@ -42,4 +42,4 @@ void func(float v) void main_kernel() { func(3.0f); -} \ No newline at end of file +} diff --git a/tests/metal/vector-argument-buffer-layout.slang b/tests/metal/vector-argument-buffer-layout.slang index 698fd30d8..8b74e90d3 100644 --- a/tests/metal/vector-argument-buffer-layout.slang +++ b/tests/metal/vector-argument-buffer-layout.slang @@ -1,6 +1,17 @@ //TEST:REFLECTION(filecheck=CHECK): -target metal -//CHECK: "binding": {"kind": "metalArgumentBufferElement", "index": 0} -//CHECK: "binding": {"kind": "metalArgumentBufferElement", "index": 1} + + +//CHECK: "name": "o", +//CHECK: "binding": {"kind": "constantBuffer", "index": 0}, + +//CHECK: "name": "gParams", +//CHECK: "binding": {"kind": "constantBuffer", "index": 1}, + + +//CHECK: "dir" +//CHECK: "binding": {"kind": "uniform", "offset": 0, "size": 16} +//CHECK: "color" +//CHECK: "binding": {"kind": "uniform", "offset": 16, "size": 16} struct Params { @@ -15,4 +26,4 @@ ParameterBlock gParams; void computeMain() { o[0] = gParams.dir.x; -} \ No newline at end of file +} -- cgit v1.2.3