From a22e23a6b3df66cd8f826375b4d4763093349b61 Mon Sep 17 00:00:00 2001 From: Daniel Story Date: Wed, 26 Jun 2024 11:27:04 -0700 Subject: [PATCH] Add function parameter access test --- .../issues/102/function_parameter_access.glsl | 51 +++ .../issues/102/function_parameter_access.spv | Bin 0 -> 2288 bytes .../102/function_parameter_access.spv.yaml | 321 ++++++++++++++++++ tests/test-spirv-reflect.cpp | 1 + 4 files changed, 373 insertions(+) create mode 100644 tests/issues/102/function_parameter_access.glsl create mode 100644 tests/issues/102/function_parameter_access.spv create mode 100644 tests/issues/102/function_parameter_access.spv.yaml diff --git a/tests/issues/102/function_parameter_access.glsl b/tests/issues/102/function_parameter_access.glsl new file mode 100644 index 00000000..8daa2fdc --- /dev/null +++ b/tests/issues/102/function_parameter_access.glsl @@ -0,0 +1,51 @@ +/* +glslangValidator -V -S frag -g0 --ku -o function_parameter_access.spv function_parameter_access.glsl +*/ + +#version 450 + +layout(binding = 0) uniform sampler Sampler; +layout(binding = 1) uniform texture2D Texture; +layout(binding = 2) uniform sampler2D Sampler2D; + +layout(binding = 3) uniform sampler NeverAccessedSampler; +layout(binding = 4) uniform texture2D NeverAccessedTexture; +layout(binding = 5) uniform sampler2D NeverAccessedSampler2D; + +layout(location = 0) out vec4 color; + +vec4 access_sampler_and_texture(texture2D t, sampler s, vec2 coord) +{ + vec4 ret = texture(sampler2D(t, s), coord); + return vec4(5.0) * ret; +} + +vec4 access_combined_sampler(sampler2D s) +{ + vec2 coord = vec2(0.5, 0.5); + vec4 ret = texture(s, coord); + return vec4(1.0, 2.0, 3.0, 1.0) * ret; +} + +vec4 call_access_functions(texture2D t, sampler s) +{ + return access_combined_sampler(Sampler2D) + access_sampler_and_texture(t, s, vec2(0.25, 0.75)); +} + +vec4 never_called(texture2D t, sampler s, float u, float v) +{ + vec4 ret = texture(sampler2D(t, s), vec2(u, v)); + return vec4(-3.0) * ret; +} + +vec4 never_called_2(vec2 coord) +{ + vec4 ret = texture(sampler2D(NeverAccessedTexture, NeverAccessedSampler), coord); + ret *= texture(NeverAccessedSampler2D, coord); + return ret; +} + +void main() +{ + color = vec4(-1.0) * call_access_functions(Texture, Sampler); +} diff --git a/tests/issues/102/function_parameter_access.spv b/tests/issues/102/function_parameter_access.spv new file mode 100644 index 0000000000000000000000000000000000000000..7638142a8239ca88dd19b41f31818044406626af GIT binary patch literal 2288 zcmZ9M*HTnL5QYa(1TiB9FzlKYL<}e^0&A#R16oEfRf&jV!cxI-i5I?yZ=#Rojh5ec zoW@g5)nDCzcTcA?yDiPTSESUGI#OHuoc^BmsToVc)>_EM_^t8&`GuMO6N3XrtVu0J zpfPKSS%wsIk6*me@eZsbMjOdf1FeDF1w6s4=*^i=AeVE?dK?8W=?xlh)jt0M6 z@cL3eSK!8IkC=OZV}8VZ_u<;gu%0`f0v@^FY`S3o`kBq#UA{&4-MKU4<-TuiQTsi5 zN{ip4_B>2m8ByD}?}^&Jb#`{vRXGn_})7BgHx_xGUP z8RX>|{Kg*t7vekhWZmzy4LFbgu`$m$y7ScXUN54%iw3YK{r+xhM7h_i!1rKY^XdPR z?_NXqzA^SEFZZ_>?x}$2ubOrH+m&_ypLUn@J?Qqm4;g#Efo|XKN_i8QOYWPx1NdJD+KutQ?GCU`@CkHlU1uKO+$1nYdwjFI=;qSre(Xb=Io!_!pe?@HLv;UBw7U~| zc_#e~qrq*r=f`;^)wfcQ@+p<_~!ndfos4 literal 0 HcmV?d00001 diff --git a/tests/issues/102/function_parameter_access.spv.yaml b/tests/issues/102/function_parameter_access.spv.yaml new file mode 100644 index 00000000..93143d12 --- /dev/null +++ b/tests/issues/102/function_parameter_access.spv.yaml @@ -0,0 +1,321 @@ +%YAML 1.0 +--- +all_type_descriptions: + - &td0 + id: 9 + op: 26 + type_name: + struct_member_name: + storage_class: -1 # NOT APPLICABLE + type_flags: 0x00020000 # EXTERNAL_SAMPLER + decoration_flags: 0x00000000 # NONE + traits: + numeric: + scalar: { width: 0, signedness: 0 } + vector: { component_count: 0 } + matrix: { column_count: 0, row_count: 0, stride: 0 } + image: { dim: 0, depth: 0, arrayed: 0, ms: 0, sampled: 0, image_format: 0 } # dim=1D image_format=Unknown + array: { dims_count: 0, dims: [], stride: 0 } + member_count: 0 + members: + - &td1 + id: 7 + op: 25 + type_name: + struct_member_name: + storage_class: -1 # NOT APPLICABLE + type_flags: 0x00010008 # EXTERNAL_IMAGE FLOAT + decoration_flags: 0x00000000 # NONE + traits: + numeric: + scalar: { width: 32, signedness: 0 } + vector: { component_count: 0 } + matrix: { column_count: 0, row_count: 0, stride: 0 } + image: { dim: 1, depth: 0, arrayed: 0, ms: 0, sampled: 1, image_format: 0 } # dim=2D image_format=Unknown + array: { dims_count: 0, dims: [], stride: 0 } + member_count: 0 + members: + - &td2 + id: 20 + op: 27 + type_name: + struct_member_name: + storage_class: -1 # NOT APPLICABLE + type_flags: 0x00050008 # EXTERNAL_SAMPLED_IMAGE EXTERNAL_IMAGE FLOAT + decoration_flags: 0x00000000 # NONE + traits: + numeric: + scalar: { width: 32, signedness: 0 } + vector: { component_count: 0 } + matrix: { column_count: 0, row_count: 0, stride: 0 } + image: { dim: 1, depth: 0, arrayed: 0, ms: 0, sampled: 1, image_format: 0 } # dim=2D image_format=Unknown + array: { dims_count: 0, dims: [], stride: 0 } + member_count: 0 + members: + - &td3 + id: 13 + op: 23 + type_name: + struct_member_name: + storage_class: -1 # NOT APPLICABLE + type_flags: 0x00000108 # VECTOR FLOAT + decoration_flags: 0x00000000 # NONE + traits: + numeric: + scalar: { width: 32, signedness: 0 } + vector: { component_count: 4 } + matrix: { column_count: 0, row_count: 0, stride: 0 } + image: { dim: 0, depth: 0, arrayed: 0, ms: 0, sampled: 0, image_format: 0 } # dim=1D image_format=Unknown + array: { dims_count: 0, dims: [], stride: 0 } + member_count: 0 + members: +all_block_variables: + - &bv0 + name: + offset: 0 + absolute_offset: 0 + size: 0 + padded_size: 0 + decorations: 0x00000000 # NONE + numeric: + scalar: { width: 0, signedness: 0 } + vector: { component_count: 0 } + matrix: { column_count: 0, row_count: 0, stride: 0 } + array: { dims_count: 0, dims: [], stride: 0 } + member_count: 0 + members: + type_description: + - &bv1 + name: + offset: 0 + absolute_offset: 0 + size: 0 + padded_size: 0 + decorations: 0x00000000 # NONE + numeric: + scalar: { width: 0, signedness: 0 } + vector: { component_count: 0 } + matrix: { column_count: 0, row_count: 0, stride: 0 } + array: { dims_count: 0, dims: [], stride: 0 } + member_count: 0 + members: + type_description: + - &bv2 + name: + offset: 0 + absolute_offset: 0 + size: 0 + padded_size: 0 + decorations: 0x00000000 # NONE + numeric: + scalar: { width: 0, signedness: 0 } + vector: { component_count: 0 } + matrix: { column_count: 0, row_count: 0, stride: 0 } + array: { dims_count: 0, dims: [], stride: 0 } + member_count: 0 + members: + type_description: + - &bv3 + name: + offset: 0 + absolute_offset: 0 + size: 0 + padded_size: 0 + decorations: 0x00000000 # NONE + numeric: + scalar: { width: 0, signedness: 0 } + vector: { component_count: 0 } + matrix: { column_count: 0, row_count: 0, stride: 0 } + array: { dims_count: 0, dims: [], stride: 0 } + member_count: 0 + members: + type_description: + - &bv4 + name: + offset: 0 + absolute_offset: 0 + size: 0 + padded_size: 0 + decorations: 0x00000000 # NONE + numeric: + scalar: { width: 0, signedness: 0 } + vector: { component_count: 0 } + matrix: { column_count: 0, row_count: 0, stride: 0 } + array: { dims_count: 0, dims: [], stride: 0 } + member_count: 0 + members: + type_description: + - &bv5 + name: + offset: 0 + absolute_offset: 0 + size: 0 + padded_size: 0 + decorations: 0x00000000 # NONE + numeric: + scalar: { width: 0, signedness: 0 } + vector: { component_count: 0 } + matrix: { column_count: 0, row_count: 0, stride: 0 } + array: { dims_count: 0, dims: [], stride: 0 } + member_count: 0 + members: + type_description: +all_descriptor_bindings: + - &db0 + spirv_id: 117 + name: + binding: 0 + input_attachment_index: 0 + set: 0 + decoration_flags: 0x00000000 # NONE + descriptor_type: 0 # VK_DESCRIPTOR_TYPE_SAMPLER + resource_type: 1 # SAMPLER + image: { dim: 0, depth: 0, arrayed: 0, ms: 0, sampled: 0, image_format: 0 } # dim=1D image_format=Unknown + block: *bv0 # + array: { dims_count: 0, dims: [] } + accessed: 1 + uav_counter_id: 4294967295 + uav_counter_binding: + type_description: *td0 + word_offset: { binding: 76, set: 72 } + - &db1 + spirv_id: 116 + name: + binding: 1 + input_attachment_index: 0 + set: 0 + decoration_flags: 0x00000000 # NONE + descriptor_type: 2 # VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE + resource_type: 4 # SRV + image: { dim: 1, depth: 0, arrayed: 0, ms: 0, sampled: 1, image_format: 0 } # dim=2D image_format=Unknown + block: *bv1 # + array: { dims_count: 0, dims: [] } + accessed: 1 + uav_counter_id: 4294967295 + uav_counter_binding: + type_description: *td1 + word_offset: { binding: 68, set: 64 } + - &db2 + spirv_id: 71 + name: + binding: 2 + input_attachment_index: 0 + set: 0 + decoration_flags: 0x00000000 # NONE + descriptor_type: 1 # VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER + resource_type: 5 # ??? + image: { dim: 1, depth: 0, arrayed: 0, ms: 0, sampled: 1, image_format: 0 } # dim=2D image_format=Unknown + block: *bv2 # + array: { dims_count: 0, dims: [] } + accessed: 1 + uav_counter_id: 4294967295 + uav_counter_binding: + type_description: *td2 + word_offset: { binding: 32, set: 28 } + - &db3 + spirv_id: 98 + name: + binding: 3 + input_attachment_index: 0 + set: 0 + decoration_flags: 0x00000000 # NONE + descriptor_type: 0 # VK_DESCRIPTOR_TYPE_SAMPLER + resource_type: 1 # SAMPLER + image: { dim: 0, depth: 0, arrayed: 0, ms: 0, sampled: 0, image_format: 0 } # dim=1D image_format=Unknown + block: *bv3 # + array: { dims_count: 0, dims: [] } + accessed: 0 + uav_counter_id: 4294967295 + uav_counter_binding: + type_description: *td0 + word_offset: { binding: 48, set: 44 } + - &db4 + spirv_id: 96 + name: + binding: 4 + input_attachment_index: 0 + set: 0 + decoration_flags: 0x00000000 # NONE + descriptor_type: 2 # VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE + resource_type: 4 # SRV + image: { dim: 1, depth: 0, arrayed: 0, ms: 0, sampled: 1, image_format: 0 } # dim=2D image_format=Unknown + block: *bv4 # + array: { dims_count: 0, dims: [] } + accessed: 0 + uav_counter_id: 4294967295 + uav_counter_binding: + type_description: *td1 + word_offset: { binding: 40, set: 36 } + - &db5 + spirv_id: 103 + name: + binding: 5 + input_attachment_index: 0 + set: 0 + decoration_flags: 0x00000000 # NONE + descriptor_type: 1 # VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER + resource_type: 5 # ??? + image: { dim: 1, depth: 0, arrayed: 0, ms: 0, sampled: 1, image_format: 0 } # dim=2D image_format=Unknown + block: *bv5 # + array: { dims_count: 0, dims: [] } + accessed: 0 + uav_counter_id: 4294967295 + uav_counter_binding: + type_description: *td2 + word_offset: { binding: 56, set: 52 } +all_interface_variables: + - &iv0 + spirv_id: 113 + name: + location: 0 + storage_class: 3 # Output + semantic: + decoration_flags: 0x00000000 # NONE + built_in: -1 # ??? (-1) + numeric: + scalar: { width: 32, signedness: 0 } + vector: { component_count: 4 } + matrix: { column_count: 0, row_count: 0, stride: 0 } + array: { dims_count: 0, dims: [], stride: 0 } + member_count: 0 + members: + format: 109 # VK_FORMAT_R32G32B32A32_SFLOAT + type_description: *td3 + word_offset: { location: 60 } +module: + generator: 8 # Khronos Glslang Reference Front End + entry_point_name: "main" + entry_point_id: 4 + source_language: 0 # Unknown + source_language_version: 0 + spirv_execution_model: 4 # Fragment + shader_stage: 0x00000010 # PS + descriptor_binding_count: 6 + descriptor_bindings: + - *db0 # + - *db1 # + - *db2 # + - *db3 # + - *db4 # + - *db5 # + descriptor_set_count: 1 + descriptor_sets: + - set: 0 + binding_count: 6 + bindings: + - *db0 # + - *db1 # + - *db2 # + - *db3 # + - *db4 # + - *db5 # + input_variable_count: 0, + input_variables: + output_variable_count: 1, + output_variables: + - *iv0 # + push_constant_count: 0, + push_constants: + specialization_constant_count: 0, + specialization_constants: +... diff --git a/tests/test-spirv-reflect.cpp b/tests/test-spirv-reflect.cpp index 1cc3b6a0..1c062b94 100644 --- a/tests/test-spirv-reflect.cpp +++ b/tests/test-spirv-reflect.cpp @@ -821,6 +821,7 @@ const std::vector all_spirv_paths = { "../tests/issues/77/hlsl/array_from_ubo.spv", "../tests/issues/77/hlsl/array_from_ubo_with_O0.spv", "../tests/issues/77/hlsl/rocketz.spv", + "../tests/issues/102/function_parameter_access.spv", "../tests/issues/178/vertex_input_struct.spv", "../tests/issues/178/vertex_input_struct2.spv", "../tests/multi_entrypoint/multi_entrypoint.spv",