summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/radeonsi/glsl_tests/pack_unpack_half.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/radeonsi/glsl_tests/pack_unpack_half.glsl')
-rw-r--r--src/gallium/drivers/radeonsi/glsl_tests/pack_unpack_half.glsl37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeonsi/glsl_tests/pack_unpack_half.glsl b/src/gallium/drivers/radeonsi/glsl_tests/pack_unpack_half.glsl
new file mode 100644
index 00000000000..d744d711360
--- /dev/null
+++ b/src/gallium/drivers/radeonsi/glsl_tests/pack_unpack_half.glsl
@@ -0,0 +1,37 @@
+; RUN: ./amdgcn_glslc %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s
+
+; We don't want any "v_and" or "v_or" here. v_cvt_f16 only writes the lower 16 bits.
+
+; FUNC-LABEL: {{^}}@packhalf:
+; GCN: main
+; GCN: v_interp_mov
+; GCN: v_interp_mov
+; GCN-NEXT: v_cvt_f16_f32
+; GCN-NEXT: v_lshlrev_b32
+; GCN-NEXT: v_cvt_f16_f32
+; GCN-NEXT: epilog
+
+#shader fs packhalf
+#version 420
+flat in vec2 v;
+out uvec4 o;
+void main() {
+ o.x = packHalf2x16(v);
+}
+
+
+; FUNC-LABEL: {{^}}@unpackhalf:
+; GCN: main
+; GCN: v_interp_mov
+; GCN-NEXT: v_cvt_f32_f16
+; GCN-NEXT: v_lshrrev_b32
+; GCN-NEXT: v_cvt_f32_f16
+; GCN-NEXT: epilog
+
+#shader fs unpackhalf
+#version 420
+flat in uint u;
+out vec4 o;
+void main() {
+ o.xy = unpackHalf2x16(u);
+}