summaryrefslogtreecommitdiffstats
path: root/tests/reflection
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2018-08-22 11:36:02 -0400
committerTim Foley <tfoleyNV@users.noreply.github.com>2018-08-22 08:36:02 -0700
commit6a8ad6eb4cab72c18de48762768e04d08b60a21c (patch)
tree903863bf0154cb73e87c7a70a65c022649c096d3 /tests/reflection
parent0ce1131ba12f777fbaa40004e0e3e7af89ccf4f0 (diff)
Support for [[vk::push_constant]] (#629)
* Support for attributed [[vk::push_constant]] and [[push_constant]]. Can also use layout(push_constant). * Fix test so matches the expected output. * Add expected output to binding-push-constant-gl.hlsl * Trivial change to force travis rebuild to test the gcc linux build really has a problem.
Diffstat (limited to 'tests/reflection')
-rw-r--r--tests/reflection/binding-push-constant-gl.hlsl57
-rw-r--r--tests/reflection/binding-push-constant-gl.hlsl.expected141
2 files changed, 198 insertions, 0 deletions
diff --git a/tests/reflection/binding-push-constant-gl.hlsl b/tests/reflection/binding-push-constant-gl.hlsl
new file mode 100644
index 000000000..f6bf13602
--- /dev/null
+++ b/tests/reflection/binding-push-constant-gl.hlsl
@@ -0,0 +1,57 @@
+//TEST:REFLECTION:-profile ps_4_0 -target spirv
+
+// Confirm that we can generate reflection info for arrays
+//
+// Note: just working with fixed-size arrays for now.
+// Unbounded arrays may require more work.
+
+layout(binding=0, set = 1) cbuffer MyConstantBuffer
+{
+ float x;
+
+ float a[10];
+
+ float y;
+}
+
+struct MyPushConstantStruct
+{
+ float pushX;
+ float pushY;
+};
+
+/* This style doesn't work
+[[vk::push_constant]] MyPushConstantStruct pushConstantBuffer;
+*/
+
+// This style does work
+[[vk::push_constant]]ConstantBuffer<MyPushConstantStruct> pushConstantBuffer;
+
+/* This style works too
+layout(push_constant)
+cbuffer MyPushConstantBuffer
+{
+ float pushX;
+ float pushY;
+}
+*/
+
+/* This works too
+[[vk::push_constant]] cbuffer MyPushConstantBuffer
+{
+ float pushX;
+ float pushY;
+}
+*/
+
+[[vk::binding(1,2)]] Texture2D tx;
+[gl::binding(2,3)] Texture2D ta;
+Texture2D ty;
+SamplerState sx;
+SamplerState sa[4];
+SamplerState sy;
+
+float4 main() : SV_Target
+{
+ return 0.0 + pushConstantBuffer.pushX;
+} \ No newline at end of file
diff --git a/tests/reflection/binding-push-constant-gl.hlsl.expected b/tests/reflection/binding-push-constant-gl.hlsl.expected
new file mode 100644
index 000000000..6dd9d0fdd
--- /dev/null
+++ b/tests/reflection/binding-push-constant-gl.hlsl.expected
@@ -0,0 +1,141 @@
+result code = 0
+standard error = {
+}
+standard output = {
+{
+ "parameters": [
+ {
+ "name": "MyConstantBuffer",
+ "binding": {"kind": "descriptorTableSlot", "space": 1, "index": 0},
+ "type": {
+ "kind": "constantBuffer",
+ "elementType": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "x",
+ "type": {
+ "kind": "scalar",
+ "scalarType": "float32"
+ },
+ "binding": {"kind": "uniform", "offset": 0, "size": 4}
+ },
+ {
+ "name": "a",
+ "type": {
+ "kind": "array",
+ "elementCount": 10,
+ "elementType": {
+ "kind": "scalar",
+ "scalarType": "float32"
+ },
+ "uniformStride": 16
+ },
+ "binding": {"kind": "uniform", "offset": 16, "size": 160}
+ },
+ {
+ "name": "y",
+ "type": {
+ "kind": "scalar",
+ "scalarType": "float32"
+ },
+ "binding": {"kind": "uniform", "offset": 176, "size": 4}
+ }
+ ]
+ }
+ }
+ },
+ {
+ "name": "pushConstantBuffer",
+ "binding": {"kind": "pushConstantBuffer", "index": 0},
+ "type": {
+ "kind": "constantBuffer",
+ "elementType": {
+ "kind": "struct",
+ "name": "MyPushConstantStruct",
+ "fields": [
+ {
+ "name": "pushX",
+ "type": {
+ "kind": "scalar",
+ "scalarType": "float32"
+ },
+ "binding": {"kind": "uniform", "offset": 0, "size": 4}
+ },
+ {
+ "name": "pushY",
+ "type": {
+ "kind": "scalar",
+ "scalarType": "float32"
+ },
+ "binding": {"kind": "uniform", "offset": 4, "size": 4}
+ }
+ ]
+ }
+ }
+ },
+ {
+ "name": "tx",
+ "binding": {"kind": "descriptorTableSlot", "space": 2, "index": 1},
+ "type": {
+ "kind": "resource",
+ "baseShape": "texture2D"
+ }
+ },
+ {
+ "name": "ta",
+ "binding": {"kind": "descriptorTableSlot", "space": 3, "index": 2},
+ "type": {
+ "kind": "resource",
+ "baseShape": "texture2D"
+ }
+ },
+ {
+ "name": "ty",
+ "binding": {"kind": "descriptorTableSlot", "index": 0},
+ "type": {
+ "kind": "resource",
+ "baseShape": "texture2D"
+ }
+ },
+ {
+ "name": "sx",
+ "binding": {"kind": "descriptorTableSlot", "index": 1},
+ "type": {
+ "kind": "samplerState"
+ }
+ },
+ {
+ "name": "sa",
+ "binding": {"kind": "descriptorTableSlot", "index": 2},
+ "type": {
+ "kind": "array",
+ "elementCount": 4,
+ "elementType": {
+ "kind": "samplerState"
+ }
+ }
+ },
+ {
+ "name": "sy",
+ "binding": {"kind": "descriptorTableSlot", "index": 3},
+ "type": {
+ "kind": "samplerState"
+ }
+ },
+ {
+ "name": "SLANG_hack_samplerForTexelFetch",
+ "binding": {"kind": "descriptorTableSlot", "index": 4},
+ "type": {
+ "kind": "samplerState"
+ }
+ }
+ ],
+ "entryPoints": [
+ {
+ "name": "main",
+ "stage:": "fragment"
+ }
+ ]
+}
+}