diff --git a/common/output_stream.cpp b/common/output_stream.cpp index 4f2a86c..f7643c2 100644 --- a/common/output_stream.cpp +++ b/common/output_stream.cpp @@ -804,6 +804,8 @@ std::string ToStringDecorationFlags(SpvReflectDecorationFlags decoration_flags) PRINT_AND_CLEAR_DECORATION_FLAG(sstream, decoration_flags, PATCH); PRINT_AND_CLEAR_DECORATION_FLAG(sstream, decoration_flags, PER_VERTEX); PRINT_AND_CLEAR_DECORATION_FLAG(sstream, decoration_flags, PER_TASK); + PRINT_AND_CLEAR_DECORATION_FLAG(sstream, decoration_flags, WEIGHT_TEXTURE); + PRINT_AND_CLEAR_DECORATION_FLAG(sstream, decoration_flags, BLOCK_MATCH_TEXTURE); #undef PRINT_AND_CLEAR_DECORATION_FLAG if (decoration_flags != 0) { // Unhandled SpvReflectDecorationFlags bit diff --git a/tests/glsl/weight_texture_qcom.glsl b/tests/glsl/weight_texture_qcom.glsl new file mode 100644 index 0000000..985f3ac --- /dev/null +++ b/tests/glsl/weight_texture_qcom.glsl @@ -0,0 +1,17 @@ +#version 450 +#extension GL_QCOM_image_processing : require + +layout(set = 0, binding = 0) uniform texture2D inTex; +layout(set = 0, binding = 3) uniform sampler linearSampler; +layout(set = 0, binding = 1) uniform texture2DArray kernelTex; +layout(set = 0, binding = 4) uniform sampler weightSampler; + +layout(location = 0) out vec4 fragColor; +layout(location = 0) in vec2 uv; + +void main() +{ + vec4 _32 = textureWeightedQCOM(sampler2D(inTex, linearSampler), uv, sampler2DArray(kernelTex, weightSampler)); + fragColor = _32; +} + diff --git a/tests/glsl/weight_texture_qcom.spv b/tests/glsl/weight_texture_qcom.spv new file mode 100644 index 0000000..94fb0fd Binary files /dev/null and b/tests/glsl/weight_texture_qcom.spv differ diff --git a/tests/glsl/weight_texture_qcom.spv.yaml b/tests/glsl/weight_texture_qcom.spv.yaml new file mode 100644 index 0000000..a297c8a --- /dev/null +++ b/tests/glsl/weight_texture_qcom.spv.yaml @@ -0,0 +1,293 @@ +%YAML 1.1 +--- +all_type_descriptions: + - &td0 + id: 10 + 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: + - &td1 + id: 24 + 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: 1, 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: 14 + 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: + - &td3 + id: 20 + 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: 2 } + 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: + - &td4 + id: 7 + 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 } + flags: 0x00000000 # NONE + 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 } + flags: 0x00000000 # NONE + 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 } + flags: 0x00000000 # NONE + 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 } + flags: 0x00000000 # NONE + member_count: 0 + members: + type_description: +all_descriptor_bindings: + - &db0 + spirv_id: 12 + name: "inTex" + binding: 0 + 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: *bv0 # + array: { dims_count: 0, dims: [] } + accessed: 1 + uav_counter_id: 4294967295 + uav_counter_binding: + type_description: *td0 + word_offset: { binding: 91, set: 87 } + - &db1 + spirv_id: 26 + name: "kernelTex" + binding: 1 + input_attachment_index: 0 + set: 0 + decoration_flags: 0x00002000 # WEIGHT_TEXTURE + descriptor_type: 2 # VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE + resource_type: 4 # SRV + image: { dim: 1, depth: 0, arrayed: 1, 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: 111, set: 107 } + - &db2 + spirv_id: 16 + name: "linearSampler" + 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: *bv2 # + array: { dims_count: 0, dims: [] } + accessed: 1 + uav_counter_id: 4294967295 + uav_counter_binding: + type_description: *td2 + word_offset: { binding: 99, set: 95 } + - &db3 + spirv_id: 28 + name: "weightSampler" + binding: 4 + 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: 1 + uav_counter_id: 4294967295 + uav_counter_binding: + type_description: *td2 + word_offset: { binding: 119, set: 115 } +all_interface_variables: + - &iv0 + spirv_id: 22 + name: "uv" + location: 0 + storage_class: 1 # Input + semantic: + decoration_flags: 0x00000000 # NONE + built_in: -1 # ??? (-1) + numeric: + scalar: { width: 32, signedness: 0 } + vector: { component_count: 2 } + matrix: { column_count: 0, row_count: 0, stride: 0 } + array: { dims_count: 0, dims: [], stride: 0 } + member_count: 0 + members: + format: 103 # VK_FORMAT_R32G32_SFLOAT + type_description: *td3 + word_offset: { location: 103 } + - &iv1 + spirv_id: 9 + name: "fragColor" + 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: *td4 + word_offset: { location: 83 } +module: + generator: 8 # Khronos Glslang Reference Front End + entry_point_name: "main" + entry_point_id: 4 + source_language: 2 # GLSL + source_language_version: 450 + spirv_execution_model: 4 # Fragment + shader_stage: 0x00000010 # PS + descriptor_binding_count: 4 + descriptor_bindings: + - *db0 # "inTex" + - *db1 # "kernelTex" + - *db2 # "linearSampler" + - *db3 # "weightSampler" + descriptor_set_count: 1 + descriptor_sets: + - set: 0 + binding_count: 4 + bindings: + - *db0 # "inTex" + - *db1 # "kernelTex" + - *db2 # "linearSampler" + - *db3 # "weightSampler" + input_variable_count: 1, + input_variables: + - *iv0 # "uv" + output_variable_count: 1, + output_variables: + - *iv1 # "fragColor" + push_constant_count: 0, + push_constants: + specialization_constant_count: 0, + specialization_constants: +...