yum-mirror/glslang

git clone https://git.yummers.dev/yum-mirror/glslang

alelenvAdd support for GL_NV_explicit_typecast. (#4161)968eb87c

main
1.5 KiB90 linesraw
1#version 460
2#extension GL_NV_explicit_typecast : enable
3#extension GL_NV_gpu_shader5 : enable
4#extension GL_EXT_buffer_reference : enable
5#extension GL_EXT_buffer_reference_uvec2 : enable
6
7layout(buffer_reference) buffer BufRef
8{
9	vec4 inp;
10	vec4 op;
11};
12
13float func(float a, vec2 b)
14{
15	return dot(b, vec2(a));
16}
17void main()
18{
19	float f_0;
20	uint u_0;
21	int i_0;
22	float16_t f16_0; 
23	uint8_t u8_0;
24	int8_t i8_0;
25	uint64_t u64_0;
26
27	u8vec2 u8v2_0;
28	u8vec4 u8v4_0;
29	vec4 v4_0;
30	f16vec3 f16v3_0;
31	u64vec2 u64v2_0;
32	vec3 v3_0;
33	vec2 v2_0;
34
35	mat2 m2_0, m2_1;
36	mat3x2 m32_0;
37	mat3 m3_0;
38	mat4x4 m4_0;
39	dmat2 d2_0;
40
41	
42	// Type cast scalars
43	f_0 = (float) f_0;
44	f_0 = (float) u_0;
45	u_0 = (uint) i_0;
46	i_0 = (int) f16_0;
47	f16_0 = (float16_t) u64_0;
48	u8_0 = (uint8_t) f16_0;
49	i8_0 = (int8_t) f16_0;
50	u64_0 = (uint64_t) f_0;
51
52	// Type cast vectors
53	v4_0 = (vec4) v4_0;
54	v4_0 = (vec4) u8v4_0;
55	f16v3_0 = (f16vec3) v3_0;
56	u64v2_0 = (u64vec2) u8v2_0;
57
58	// Narrowing vector cast
59
60	v3_0 = (vec3)u8v4_0;
61	u64v2_0 = (u64vec2)(v4_0);
62
63	// Widening vector cast
64
65	v4_0 = (vec4) u8_0;
66	u64v2_0  = (u64vec2) f16_0;
67
68	// Type cast matrix
69
70	m2_0 = (mat2)m2_1;
71	d2_0 = (dmat2)m2_0;
72	m2_0 = (mat2)f16_0;
73
74	// Type cast matrix slices
75	m4_0 = (mat4) m3_0;
76	m3_0 = (mat3) m4_0;
77
78	// Type cast buffer reference
79	BufRef B = (BufRef) u64_0;
80	BufRef B2 = (BufRef) (uvec2) v2_0;
81	// Type cast right to left
82	u8_0 = (uint8_t)(float)(int)f16_0;
83
84	// Type cast unary expression
85	v3_0 = (vec3)(1.0f, 2.0f, 3.0f);
86	f16v3_0 = (f16vec3)(u8_0, f16_0, i8_0);
87	func((float)u8_0, (vec2)u64v2_0);
88
89
90}