Skip to content

Commit c31337a

Browse files
authored
Merge branch 'master' into cheneym2/dumper
2 parents 78589d1 + eee974d commit c31337a

14 files changed

+869
-243
lines changed

docs/user-guide/a3-02-reference-capability-atoms.md

+3
Original file line numberDiff line numberDiff line change
@@ -1076,6 +1076,9 @@ Compound Capabilities
10761076
`shader5_sm_5_0`
10771077
> Capabilities required to use sm_5_0 features apart of GL_ARB_gpu_shader5
10781078
1079+
`pack_vector`
1080+
> Capabilities required to use pack/unpack intrinsics on packed vector data
1081+
10791082
`subgroup_basic`
10801083
> Capabilities required to use GLSL-style subgroup operations 'subgroup_basic'
10811084

external/CMakeLists.txt

+1-3
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ endif()
2020

2121
# Similarly, disable warnings for external projects
2222
if(NOT SLANG_ENABLE_EXTERNAL_COMPILER_WARNINGS)
23-
if(MSVC)
24-
add_compile_options(/W0)
25-
else()
23+
if(NOT MSVC)
2624
add_compile_options(-w)
2725
endif()
2826
endif()

lock

Whitespace-only changes.

source/slang/glsl.meta.slang

+10-214
Original file line numberDiff line numberDiff line change
@@ -617,230 +617,34 @@ public vector<float, N> uintBitsToFloat(highp vector<uint, N> x)
617617

618618
[__readNone]
619619
[ForceInline]
620-
uint packUnorm1x16(float c)
621-
{
622-
return uint(round(clamp(c, 0.0, 1.0) * 65535.0));
623-
}
624-
625-
[__readNone]
626-
[ForceInline]
627-
uint packSnorm1x16(float v)
628-
{
629-
return uint(round(clamp(v ,-1.0, 1.0) * 32767.0));
630-
}
631-
632-
[__readNone]
633-
[ForceInline]
634-
uint packUnorm1x8(float c)
635-
{
636-
return uint(round(clamp(c, 0.0, 1.0) * 255.0));
637-
}
638-
639-
[__readNone]
640-
[ForceInline]
641-
uint packSnorm1x8(float c)
642-
{
643-
return uint(round(clamp(c, -1.0, 1.0) * 127.0));
644-
}
645-
646-
[__readNone]
647-
[ForceInline]
648-
float unpackUnorm1x16(uint p)
649-
{
650-
const uint wordMask = 0xffff;
651-
return float(p & wordMask) / 65535.0;
652-
}
653-
654-
[__readNone]
655-
[ForceInline]
656-
float unpackSnorm1x16(uint p)
657-
{
658-
const uint wordMask = 0xffff;
659-
return clamp(float(p & wordMask) / 32767.0, -1.0, 1.0);
660-
}
661-
662-
[__readNone]
663-
[ForceInline]
664-
float unpackUnorm1x8(uint p)
665-
{
666-
const uint byteMask = 0xff;
667-
return float(p & byteMask) / 255.0;
668-
}
669-
670-
[__readNone]
671-
[ForceInline]
672-
float unpackSnorm1x8(uint p)
673-
{
674-
const uint byteMask = 0xff;
675-
return clamp(float(p & byteMask) / 127.0, -1.0, 1.0);
676-
}
677-
678-
[__readNone]
679-
[ForceInline]
680-
[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)]
681-
uint float2half(float f)
682-
{
683-
uint u = floatBitsToUint(f);
684-
uint s = ((u >> uint(16)) & uint(0x8000));
685-
uint e = 0;
686-
uint m = ((u >> uint(13)) & uint(0x03ff));
687-
if (m != 0)
688-
{
689-
e = ((((u & uint(0x7f800000)) - uint(0x38000000)) >> uint(13)) & uint(0x7c00));
690-
}
691-
return (s | e | m);
692-
}
693-
694-
[__readNone]
695-
[ForceInline]
696-
[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)]
697-
public uint packUnorm2x16(vec2 v)
698-
{
699-
__target_switch
700-
{
701-
case glsl: __intrinsic_asm "packUnorm2x16";
702-
case spirv: return spirv_asm {
703-
result:$$uint = OpExtInst glsl450 PackUnorm2x16 $v
704-
};
705-
default:
706-
return packUnorm1x16(v.x) | (packUnorm1x16(v.y) << uint(16));
707-
}
708-
}
709-
710-
[__readNone]
711-
[ForceInline]
712-
[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)]
713-
public uint packSnorm2x16(vec2 v)
714-
{
715-
__target_switch
716-
{
717-
case glsl: __intrinsic_asm "packSnorm2x16";
718-
case spirv: return spirv_asm {
719-
result:$$uint = OpExtInst glsl450 PackSnorm2x16 $v
720-
};
721-
default:
722-
return packSnorm1x16(v.x) | (packSnorm1x16(v.y) << uint(16));
723-
}
724-
}
725-
726-
[__readNone]
727-
[ForceInline]
728-
[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)]
729-
public uint packUnorm4x8(vec4 v)
730-
{
731-
__target_switch
732-
{
733-
case glsl: __intrinsic_asm "packUnorm4x8";
734-
case spirv: return spirv_asm {
735-
result:$$uint = OpExtInst glsl450 PackUnorm4x8 $v
736-
};
737-
default:
738-
return packUnorm1x8(v.x) | (packUnorm1x8(v.y) << uint(8)) | (packUnorm1x8(v.z) << uint(16)) | (packUnorm1x8(v.w) << uint(24));
739-
}
740-
}
741-
742-
[__readNone]
743-
[ForceInline]
744-
[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)]
745-
public uint packSnorm4x8(vec4 v)
746-
{
747-
__target_switch
748-
{
749-
case glsl: __intrinsic_asm "packSnorm4x8";
750-
case spirv: return spirv_asm {
751-
result:$$uint = OpExtInst glsl450 PackSnorm4x8 $v
752-
};
753-
default:
754-
return packSnorm1x8(v.x) | (packSnorm1x8(v.y) << uint(8)) | (packSnorm1x8(v.z) << uint(16)) | (packSnorm1x8(v.w) << uint(24));
755-
}
756-
}
757-
758-
[__readNone]
759-
[ForceInline]
760-
[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)]
620+
[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, pack_vector)]
761621
public vec2 unpackUnorm2x16(uint p)
762622
{
763-
__target_switch
764-
{
765-
case glsl: __intrinsic_asm "unpackUnorm2x16";
766-
case spirv: return spirv_asm {
767-
result:$$vec2 = OpExtInst glsl450 UnpackUnorm2x16 $p
768-
};
769-
default:
770-
return vec2(unpackUnorm1x16(p & uint(0xffff)), unpackUnorm1x16(p >> uint(16)));
771-
}
623+
return unpackUnorm2x16ToFloat(p);
772624
}
773625

774626
[__readNone]
775627
[ForceInline]
776-
[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)]
628+
[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, pack_vector)]
777629
public vec2 unpackSnorm2x16(uint p)
778630
{
779-
__target_switch
780-
{
781-
case glsl: __intrinsic_asm "unpackSnorm2x16";
782-
case spirv: return spirv_asm {
783-
result:$$vec2 = OpExtInst glsl450 UnpackSnorm2x16 $p
784-
};
785-
default:
786-
return vec2(unpackSnorm1x16(p & uint(0xffff)), unpackSnorm1x16(p >> uint(16)));
787-
}
631+
return unpackSnorm2x16ToFloat(p);
788632
}
789633

790634
[__readNone]
791635
[ForceInline]
792-
[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)]
636+
[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, pack_vector)]
793637
public vec4 unpackUnorm4x8(highp uint p)
794638
{
795-
__target_switch
796-
{
797-
case glsl: __intrinsic_asm "unpackUnorm4x8";
798-
case spirv: return spirv_asm {
799-
result:$$vec4 = OpExtInst glsl450 UnpackUnorm4x8 $p
800-
};
801-
default:
802-
return vec4(
803-
unpackUnorm1x8(p),
804-
unpackUnorm1x8(p >> 8),
805-
unpackUnorm1x8(p >> 16),
806-
unpackUnorm1x8(p >> 24));
807-
}
639+
return unpackUnorm4x8ToFloat(p);
808640
}
809641

810642
[__readNone]
811643
[ForceInline]
812-
[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)]
644+
[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, pack_vector)]
813645
public vec4 unpackSnorm4x8(highp uint p)
814646
{
815-
__target_switch
816-
{
817-
case glsl: __intrinsic_asm "unpackSnorm4x8";
818-
case spirv: return spirv_asm {
819-
result:$$vec4 = OpExtInst glsl450 UnpackSnorm4x8 $p
820-
};
821-
default:
822-
return vec4(
823-
unpackSnorm1x8(p),
824-
unpackSnorm1x8(p >> 8),
825-
unpackSnorm1x8(p >> 16),
826-
unpackSnorm1x8(p >> 24));
827-
}
828-
}
829-
830-
[__readNone]
831-
[ForceInline]
832-
[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)]
833-
public uint packHalf2x16(vec2 v)
834-
{
835-
__target_switch
836-
{
837-
case glsl: __intrinsic_asm "packHalf2x16";
838-
case spirv: return spirv_asm {
839-
result:$$uint = OpExtInst glsl450 PackHalf2x16 $v
840-
};
841-
default:
842-
return float2half(v.x) | (float2half(v.y) << uint(16));
843-
}
647+
return unpackSnorm4x8ToFloat(p);
844648
}
845649

846650
[__readNone]
@@ -865,18 +669,10 @@ public float half2float(uint h)
865669

866670
[__readNone]
867671
[ForceInline]
868-
[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)]
672+
[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, pack_vector)]
869673
public vec2 unpackHalf2x16(uint p)
870674
{
871-
__target_switch
872-
{
873-
case glsl: __intrinsic_asm "unpackHalf2x16";
874-
case spirv: return spirv_asm {
875-
result:$$vec2 = OpExtInst glsl450 UnpackHalf2x16 $p
876-
};
877-
default:
878-
return vec2(half2float(p & uint(0xffff)), half2float(p >> uint(16)));
879-
}
675+
return unpackHalf2x16ToFloat(p);
880676
}
881677

882678
[__readNone]

0 commit comments

Comments
 (0)