Skip to content

Commit c946db5

Browse files
committed
Implemented pack and unpack functions
1 parent fb5ec5d commit c946db5

File tree

2 files changed

+105
-0
lines changed

2 files changed

+105
-0
lines changed

include/nbl/builtin/hlsl/cpp_compat/intrinsics.hlsl

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,74 @@ inline FrexpOutput<T> frexpStruct(NBL_CONST_REF_ARG(T) val)
243243
return cpp_compat_intrinsics_impl::frexpStruct_helper<T>::__call(val);
244244
}
245245

246+
#ifdef __HLSL_VERSION
247+
#define NAMESPACE spirv
248+
#else
249+
#define NAMESPACE glm
250+
#endif
251+
252+
inline int32_t packSnorm4x8(float32_t4 vec)
253+
{
254+
return NAMESPACE::packSnorm4x8(vec);
255+
}
256+
257+
inline int32_t packUnorm4x8(float32_t4 vec)
258+
{
259+
return NAMESPACE::packUnorm4x8(vec);
260+
}
261+
262+
inline int32_t packSnorm2x16(float32_t2 vec)
263+
{
264+
return NAMESPACE::packSnorm2x16(vec);
265+
}
266+
267+
inline int32_t packUnorm2x16(float32_t2 vec)
268+
{
269+
return NAMESPACE::packUnorm2x16(vec);
270+
}
271+
272+
inline int32_t packHalf2x16(float32_t2 vec)
273+
{
274+
return NAMESPACE::packHalf2x16(vec);
275+
}
276+
277+
inline float64_t packDouble2x32(int32_t2 vec)
278+
{
279+
return NAMESPACE::packDouble2x32(vec);
280+
}
281+
282+
inline float32_t2 unpackSnorm2x16(int32_t val)
283+
{
284+
return NAMESPACE::unpackSnorm2x16(val);
285+
}
286+
287+
inline float32_t2 unpackUnorm2x16(int32_t val)
288+
{
289+
return NAMESPACE::unpackUnorm2x16(val);
290+
}
291+
292+
inline float32_t2 unpackHalf2x16(int32_t val)
293+
{
294+
return NAMESPACE::unpackHalf2x16(val);
295+
}
296+
297+
inline float32_t4 unpackSnorm4x8(int32_t val)
298+
{
299+
return NAMESPACE::unpackSnorm4x8(val);
300+
}
301+
302+
inline float32_t4 unpackUnorm4x8(int32_t val)
303+
{
304+
return NAMESPACE::unpackUnorm4x8(val);
305+
}
306+
307+
inline int32_t2 unpackDouble2x32(float64_t val)
308+
{
309+
return NAMESPACE::unpackDouble2x32(val);
310+
}
311+
312+
#undef NAMESPACE
313+
246314
}
247315
}
248316

include/nbl/builtin/hlsl/spirv_intrinsics/glsl.std.450.hlsl

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,43 @@ template<typename T NBL_FUNC_REQUIRES(concepts::FloatingPointVectorOrScalar<T>)
243243
[[vk::ext_instruction(GLSLstd450FrexpStruct, "GLSL.std.450")]]
244244
FrexpOutput<T> frexpStruct(T val);
245245

246+
[[vk::ext_instruction(GLSLstd450PackSnorm4x8, "GLSL.std.450")]]
247+
int32_t packSnorm4x8(float32_t4 vec);
248+
249+
[[vk::ext_instruction(GLSLstd450PackUnorm4x8, "GLSL.std.450")]]
250+
int32_t packUnorm4x8(float32_t4 vec);
251+
252+
[[vk::ext_instruction(GLSLstd450PackSnorm2x16, "GLSL.std.450")]]
253+
int32_t packSnorm2x16(float32_t2 vec);
254+
255+
[[vk::ext_instruction(GLSLstd450PackUnorm2x16, "GLSL.std.450")]]
256+
int32_t packUnorm2x16(float32_t2 vec);
257+
258+
[[vk::ext_instruction(GLSLstd450PackHalf2x16, "GLSL.std.450")]]
259+
int32_t packHalf2x16(float32_t2 vec);
260+
261+
[[vk::ext_instruction(GLSLstd450PackDouble2x32, "GLSL.std.450")]]
262+
float64_t packDouble2x32(int32_t2 vec);
263+
264+
[[vk::ext_instruction(GLSLstd450UnpackSnorm2x16, "GLSL.std.450")]]
265+
float32_t2 unpackSnorm2x16(int32_t vec);
266+
267+
[[vk::ext_instruction(GLSLstd450UnpackUnorm2x16, "GLSL.std.450")]]
268+
float32_t2 unpackUnorm2x16(int32_t vec);
269+
270+
[[vk::ext_instruction(GLSLstd450UnpackHalf2x16, "GLSL.std.450")]]
271+
float32_t2 unpackHalf2x16(int32_t vec);
272+
273+
[[vk::ext_instruction(GLSLstd450UnpackSnorm4x8, "GLSL.std.450")]]
274+
float32_t4 unpackSnorm4x8(int32_t vec);
275+
276+
[[vk::ext_instruction(GLSLstd450UnpackUnorm4x8, "GLSL.std.450")]]
277+
float32_t4 unpackUnorm4x8(int32_t vec);
278+
279+
[[vk::ext_instruction(GLSLstd450UnpackDouble2x32, "GLSL.std.450")]]
280+
int32_t2 unpackDouble2x32(float64_t vec);
281+
282+
246283
}
247284
}
248285
}

0 commit comments

Comments
 (0)