summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2024-03-01 01:50:19 +0800
committerGitHub <noreply@github.com>2024-03-01 01:50:19 +0800
commitd979b5048009c3909cfc13476a78a12ae5f4d61b (patch)
tree550815d37916be845fb0aa1dcc6131960c2bf517
parent21f86773771c26da8bf3c458642e51b1728d419c (diff)
Add support for bitfields (#3639)
* Add support for bitfields Closes https://github.com/shader-slang/slang/issues/3559 * Set scopes for syntsized bitfield accessors * Simplify generated code for bitfield accessors * spelling * regenerate vs project * warnings
-rw-r--r--build/visual-studio/platform-test/platform-test.vcxproj608
-rw-r--r--build/visual-studio/platform-test/platform-test.vcxproj.filters24
-rw-r--r--build/visual-studio/slang-capability-generator/slang-capability-generator.vcxproj590
-rw-r--r--build/visual-studio/slang-capability-generator/slang-capability-generator.vcxproj.filters40
-rw-r--r--build/visual-studio/slang/slang.vcxproj2
-rw-r--r--build/visual-studio/slang/slang.vcxproj.filters6
-rw-r--r--source/slang/slang-ast-modifier.h12
-rw-r--r--source/slang/slang-check-conversion.cpp2
-rw-r--r--source/slang/slang-check-decl.cpp187
-rw-r--r--source/slang/slang-check-impl.h2
-rw-r--r--source/slang/slang-diagnostic-defs.h4
-rw-r--r--source/slang/slang-ir-autodiff.cpp36
-rw-r--r--source/slang/slang-ir-autodiff.h2
-rw-r--r--source/slang/slang-ir-bit-field-accessors.cpp160
-rw-r--r--source/slang/slang-ir-bit-field-accessors.h7
-rw-r--r--source/slang/slang-ir-inst-defs.h6
-rw-r--r--source/slang/slang-ir-insts.h8
-rw-r--r--source/slang/slang-ir.cpp39
-rw-r--r--source/slang/slang-ir.h7
-rw-r--r--source/slang/slang-lower-to-ir.cpp25
-rw-r--r--source/slang/slang-parser.cpp9
-rw-r--r--tests/language-feature/bitfield/generic.slang29
-rw-r--r--tests/language-feature/bitfield/non-integral.slang14
-rw-r--r--tests/language-feature/bitfield/overflow.slang29
-rw-r--r--tests/language-feature/bitfield/simple.slang74
-rw-r--r--tests/language-feature/bitfield/sizeof.slang42
-rw-r--r--tests/language-feature/bitfield/too-large.slang14
-rw-r--r--tests/language-feature/bitfield/type-alias.slang32
-rw-r--r--tests/language-feature/bitfield/zero-width.slang28
29 files changed, 1372 insertions, 666 deletions
diff --git a/build/visual-studio/platform-test/platform-test.vcxproj b/build/visual-studio/platform-test/platform-test.vcxproj
index 7f9eb6013..7ea0cb675 100644
--- a/build/visual-studio/platform-test/platform-test.vcxproj
+++ b/build/visual-studio/platform-test/platform-test.vcxproj
@@ -1,305 +1,305 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|ARM64">
- <Configuration>Debug</Configuration>
- <Platform>ARM64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug aarch64|Win32">
- <Configuration>Debug aarch64</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug aarch64|x64">
- <Configuration>Debug aarch64</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug aarch64|ARM64">
- <Configuration>Debug aarch64</Configuration>
- <Platform>ARM64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|ARM64">
- <Configuration>Release</Configuration>
- <Platform>ARM64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release aarch64|Win32">
- <Configuration>Release aarch64</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release aarch64|x64">
- <Configuration>Release aarch64</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release aarch64|ARM64">
- <Configuration>Release aarch64</Configuration>
- <Platform>ARM64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{F385D6A7-DF6C-989F-88BD-FEBC74831106}</ProjectGuid>
- <IgnoreWarnCompileDuplicatedFilename>true</IgnoreWarnCompileDuplicatedFilename>
- <Keyword>Win32Proj</Keyword>
- <RootNamespace>platform-test</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
- <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
- <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <LinkIncremental>true</LinkIncremental>
- <OutDir>..\..\..\bin\windows-x86\debug\</OutDir>
- <IntDir>..\..\..\intermediate\windows-x86\debug\platform-test\</IntDir>
- <TargetName>platform-test</TargetName>
- <TargetExt>.exe</TargetExt>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <LinkIncremental>true</LinkIncremental>
- <OutDir>..\..\..\bin\windows-x64\debug\</OutDir>
- <IntDir>..\..\..\intermediate\windows-x64\debug\platform-test\</IntDir>
- <TargetName>platform-test</TargetName>
- <TargetExt>.exe</TargetExt>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">
- <LinkIncremental>true</LinkIncremental>
- <OutDir>..\..\..\bin\windows-aarch64\debug\</OutDir>
- <IntDir>..\..\..\intermediate\windows-aarch64\debug\platform-test\</IntDir>
- <TargetName>platform-test</TargetName>
- <TargetExt>.exe</TargetExt>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <LinkIncremental>false</LinkIncremental>
- <OutDir>..\..\..\bin\windows-x86\release\</OutDir>
- <IntDir>..\..\..\intermediate\windows-x86\release\platform-test\</IntDir>
- <TargetName>platform-test</TargetName>
- <TargetExt>.exe</TargetExt>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <LinkIncremental>false</LinkIncremental>
- <OutDir>..\..\..\bin\windows-x64\release\</OutDir>
- <IntDir>..\..\..\intermediate\windows-x64\release\platform-test\</IntDir>
- <TargetName>platform-test</TargetName>
- <TargetExt>.exe</TargetExt>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">
- <LinkIncremental>false</LinkIncremental>
- <OutDir>..\..\..\bin\windows-aarch64\release\</OutDir>
- <IntDir>..\..\..\intermediate\windows-aarch64\release\platform-test\</IntDir>
- <TargetName>platform-test</TargetName>
- <TargetExt>.exe</TargetExt>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..;..\..\..\tools;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <Optimization>Disabled</Optimization>
- <MinimalRebuild>false</MinimalRebuild>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Windows</SubSystem>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..;..\..\..\tools;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <Optimization>Disabled</Optimization>
- <MinimalRebuild>false</MinimalRebuild>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Windows</SubSystem>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">
- <ClCompile>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..;..\..\..\tools;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <Optimization>Disabled</Optimization>
- <MinimalRebuild>false</MinimalRebuild>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Windows</SubSystem>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..;..\..\..\tools;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <Optimization>Full</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <MinimalRebuild>false</MinimalRebuild>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Windows</SubSystem>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..;..\..\..\tools;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <Optimization>Full</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <MinimalRebuild>false</MinimalRebuild>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Windows</SubSystem>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">
- <ClCompile>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..;..\..\..\tools;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <Optimization>Full</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <MinimalRebuild>false</MinimalRebuild>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Windows</SubSystem>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\examples\platform-test\main.cpp" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\example-base\example-base.vcxproj">
- <Project>{37BED5B5-23FA-D81F-8C0C-F1167867813A}</Project>
- </ProjectReference>
- <ProjectReference Include="..\slang\slang.vcxproj">
- <Project>{DB00DA62-0533-4AFD-B59F-A67D5B3A0808}</Project>
- </ProjectReference>
- <ProjectReference Include="..\gfx\gfx.vcxproj">
- <Project>{222F7498-B40C-4F3F-A704-DDEB91A4484A}</Project>
- </ProjectReference>
- <ProjectReference Include="..\gfx-util\gfx-util.vcxproj">
- <Project>{F5ADB74E-02A7-44FB-AA3B-FC02F8AC7A4B}</Project>
- </ProjectReference>
- <ProjectReference Include="..\platform\platform.vcxproj">
- <Project>{3565FE5E-4FA3-11EB-AE93-0242AC130002}</Project>
- </ProjectReference>
- <ProjectReference Include="..\core\core.vcxproj">
- <Project>{F9BE7957-8399-899E-0C49-E714FDDD4B65}</Project>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|ARM64">
+ <Configuration>Debug</Configuration>
+ <Platform>ARM64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug aarch64|Win32">
+ <Configuration>Debug aarch64</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug aarch64|x64">
+ <Configuration>Debug aarch64</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug aarch64|ARM64">
+ <Configuration>Debug aarch64</Configuration>
+ <Platform>ARM64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|ARM64">
+ <Configuration>Release</Configuration>
+ <Platform>ARM64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release aarch64|Win32">
+ <Configuration>Release aarch64</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release aarch64|x64">
+ <Configuration>Release aarch64</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release aarch64|ARM64">
+ <Configuration>Release aarch64</Configuration>
+ <Platform>ARM64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{F385D6A7-DF6C-989F-88BD-FEBC74831106}</ProjectGuid>
+ <IgnoreWarnCompileDuplicatedFilename>true</IgnoreWarnCompileDuplicatedFilename>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>platform-test</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>..\..\..\bin\windows-x86\debug\</OutDir>
+ <IntDir>..\..\..\intermediate\windows-x86\debug\platform-test\</IntDir>
+ <TargetName>platform-test</TargetName>
+ <TargetExt>.exe</TargetExt>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>..\..\..\bin\windows-x64\debug\</OutDir>
+ <IntDir>..\..\..\intermediate\windows-x64\debug\platform-test\</IntDir>
+ <TargetName>platform-test</TargetName>
+ <TargetExt>.exe</TargetExt>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>..\..\..\bin\windows-aarch64\debug\</OutDir>
+ <IntDir>..\..\..\intermediate\windows-aarch64\debug\platform-test\</IntDir>
+ <TargetName>platform-test</TargetName>
+ <TargetExt>.exe</TargetExt>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>..\..\..\bin\windows-x86\release\</OutDir>
+ <IntDir>..\..\..\intermediate\windows-x86\release\platform-test\</IntDir>
+ <TargetName>platform-test</TargetName>
+ <TargetExt>.exe</TargetExt>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>..\..\..\bin\windows-x64\release\</OutDir>
+ <IntDir>..\..\..\intermediate\windows-x64\release\platform-test\</IntDir>
+ <TargetName>platform-test</TargetName>
+ <TargetExt>.exe</TargetExt>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>..\..\..\bin\windows-aarch64\release\</OutDir>
+ <IntDir>..\..\..\intermediate\windows-aarch64\release\platform-test\</IntDir>
+ <TargetName>platform-test</TargetName>
+ <TargetExt>.exe</TargetExt>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..;..\..\..\tools;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Disabled</Optimization>
+ <MinimalRebuild>false</MinimalRebuild>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <LanguageStandard>stdcpp17</LanguageStandard>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..;..\..\..\tools;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Disabled</Optimization>
+ <MinimalRebuild>false</MinimalRebuild>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <LanguageStandard>stdcpp17</LanguageStandard>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..;..\..\..\tools;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Disabled</Optimization>
+ <MinimalRebuild>false</MinimalRebuild>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <LanguageStandard>stdcpp17</LanguageStandard>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..;..\..\..\tools;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <Optimization>Full</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <MinimalRebuild>false</MinimalRebuild>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <LanguageStandard>stdcpp17</LanguageStandard>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..;..\..\..\tools;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <Optimization>Full</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <MinimalRebuild>false</MinimalRebuild>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <LanguageStandard>stdcpp17</LanguageStandard>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..;..\..\..\tools;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <Optimization>Full</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <MinimalRebuild>false</MinimalRebuild>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <LanguageStandard>stdcpp17</LanguageStandard>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\examples\platform-test\main.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\example-base\example-base.vcxproj">
+ <Project>{37BED5B5-23FA-D81F-8C0C-F1167867813A}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\slang\slang.vcxproj">
+ <Project>{DB00DA62-0533-4AFD-B59F-A67D5B3A0808}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\gfx\gfx.vcxproj">
+ <Project>{222F7498-B40C-4F3F-A704-DDEB91A4484A}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\gfx-util\gfx-util.vcxproj">
+ <Project>{F5ADB74E-02A7-44FB-AA3B-FC02F8AC7A4B}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\platform\platform.vcxproj">
+ <Project>{3565FE5E-4FA3-11EB-AE93-0242AC130002}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\core\core.vcxproj">
+ <Project>{F9BE7957-8399-899E-0C49-E714FDDD4B65}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
</Project> \ No newline at end of file
diff --git a/build/visual-studio/platform-test/platform-test.vcxproj.filters b/build/visual-studio/platform-test/platform-test.vcxproj.filters
index 5fb5eb4dc..d2de85c34 100644
--- a/build/visual-studio/platform-test/platform-test.vcxproj.filters
+++ b/build/visual-studio/platform-test/platform-test.vcxproj.filters
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{E9C7FDCE-D52A-8D73-7EB0-C5296AF258F6}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\examples\platform-test\main.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{E9C7FDCE-D52A-8D73-7EB0-C5296AF258F6}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\examples\platform-test\main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
</Project> \ No newline at end of file
diff --git a/build/visual-studio/slang-capability-generator/slang-capability-generator.vcxproj b/build/visual-studio/slang-capability-generator/slang-capability-generator.vcxproj
index 1ab291e8d..9d052c2be 100644
--- a/build/visual-studio/slang-capability-generator/slang-capability-generator.vcxproj
+++ b/build/visual-studio/slang-capability-generator/slang-capability-generator.vcxproj
@@ -1,296 +1,296 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|ARM64">
- <Configuration>Debug</Configuration>
- <Platform>ARM64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug aarch64|Win32">
- <Configuration>Debug aarch64</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug aarch64|x64">
- <Configuration>Debug aarch64</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug aarch64|ARM64">
- <Configuration>Debug aarch64</Configuration>
- <Platform>ARM64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|ARM64">
- <Configuration>Release</Configuration>
- <Platform>ARM64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release aarch64|Win32">
- <Configuration>Release aarch64</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release aarch64|x64">
- <Configuration>Release aarch64</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release aarch64|ARM64">
- <Configuration>Release aarch64</Configuration>
- <Platform>ARM64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{FD16CA29-C66A-430A-822C-C09655088611}</ProjectGuid>
- <IgnoreWarnCompileDuplicatedFilename>true</IgnoreWarnCompileDuplicatedFilename>
- <Keyword>Win32Proj</Keyword>
- <RootNamespace>slang-capability-generator</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
- <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
- <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <LinkIncremental>true</LinkIncremental>
- <OutDir>..\..\..\bin\windows-x86\debug\</OutDir>
- <IntDir>..\..\..\intermediate\windows-x86\debug\slang-capability-generator\</IntDir>
- <TargetName>slang-capability-generator</TargetName>
- <TargetExt>.exe</TargetExt>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <LinkIncremental>true</LinkIncremental>
- <OutDir>..\..\..\bin\windows-x64\debug\</OutDir>
- <IntDir>..\..\..\intermediate\windows-x64\debug\slang-capability-generator\</IntDir>
- <TargetName>slang-capability-generator</TargetName>
- <TargetExt>.exe</TargetExt>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">
- <LinkIncremental>true</LinkIncremental>
- <OutDir>..\..\..\bin\windows-aarch64\debug\</OutDir>
- <IntDir>..\..\..\intermediate\windows-aarch64\debug\slang-capability-generator\</IntDir>
- <TargetName>slang-capability-generator</TargetName>
- <TargetExt>.exe</TargetExt>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <LinkIncremental>false</LinkIncremental>
- <OutDir>..\..\..\bin\windows-x86\release\</OutDir>
- <IntDir>..\..\..\intermediate\windows-x86\release\slang-capability-generator\</IntDir>
- <TargetName>slang-capability-generator</TargetName>
- <TargetExt>.exe</TargetExt>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <LinkIncremental>false</LinkIncremental>
- <OutDir>..\..\..\bin\windows-x64\release\</OutDir>
- <IntDir>..\..\..\intermediate\windows-x64\release\slang-capability-generator\</IntDir>
- <TargetName>slang-capability-generator</TargetName>
- <TargetExt>.exe</TargetExt>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">
- <LinkIncremental>false</LinkIncremental>
- <OutDir>..\..\..\bin\windows-aarch64\release\</OutDir>
- <IntDir>..\..\..\intermediate\windows-aarch64\release\slang-capability-generator\</IntDir>
- <TargetName>slang-capability-generator</TargetName>
- <TargetExt>.exe</TargetExt>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <Optimization>Disabled</Optimization>
- <MinimalRebuild>false</MinimalRebuild>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <Optimization>Disabled</Optimization>
- <MinimalRebuild>false</MinimalRebuild>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">
- <ClCompile>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <Optimization>Disabled</Optimization>
- <MinimalRebuild>false</MinimalRebuild>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <Optimization>Full</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <MinimalRebuild>false</MinimalRebuild>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <Optimization>Full</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <MinimalRebuild>false</MinimalRebuild>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">
- <ClCompile>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <Optimization>Full</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <MinimalRebuild>false</MinimalRebuild>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\tools\slang-capability-generator\slang-capability-diagnostic-defs.h" />
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\tools\slang-capability-generator\capability-generator-main.cpp" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\compiler-core\compiler-core.vcxproj">
- <Project>{12C1E89D-F5D0-41D3-8E8D-FB3F358F8126}</Project>
- </ProjectReference>
- <ProjectReference Include="..\core\core.vcxproj">
- <Project>{F9BE7957-8399-899E-0C49-E714FDDD4B65}</Project>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|ARM64">
+ <Configuration>Debug</Configuration>
+ <Platform>ARM64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug aarch64|Win32">
+ <Configuration>Debug aarch64</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug aarch64|x64">
+ <Configuration>Debug aarch64</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug aarch64|ARM64">
+ <Configuration>Debug aarch64</Configuration>
+ <Platform>ARM64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|ARM64">
+ <Configuration>Release</Configuration>
+ <Platform>ARM64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release aarch64|Win32">
+ <Configuration>Release aarch64</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release aarch64|x64">
+ <Configuration>Release aarch64</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release aarch64|ARM64">
+ <Configuration>Release aarch64</Configuration>
+ <Platform>ARM64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{FD16CA29-C66A-430A-822C-C09655088611}</ProjectGuid>
+ <IgnoreWarnCompileDuplicatedFilename>true</IgnoreWarnCompileDuplicatedFilename>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>slang-capability-generator</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v142</PlatformToolset>
+ <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>..\..\..\bin\windows-x86\debug\</OutDir>
+ <IntDir>..\..\..\intermediate\windows-x86\debug\slang-capability-generator\</IntDir>
+ <TargetName>slang-capability-generator</TargetName>
+ <TargetExt>.exe</TargetExt>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>..\..\..\bin\windows-x64\debug\</OutDir>
+ <IntDir>..\..\..\intermediate\windows-x64\debug\slang-capability-generator\</IntDir>
+ <TargetName>slang-capability-generator</TargetName>
+ <TargetExt>.exe</TargetExt>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>..\..\..\bin\windows-aarch64\debug\</OutDir>
+ <IntDir>..\..\..\intermediate\windows-aarch64\debug\slang-capability-generator\</IntDir>
+ <TargetName>slang-capability-generator</TargetName>
+ <TargetExt>.exe</TargetExt>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>..\..\..\bin\windows-x86\release\</OutDir>
+ <IntDir>..\..\..\intermediate\windows-x86\release\slang-capability-generator\</IntDir>
+ <TargetName>slang-capability-generator</TargetName>
+ <TargetExt>.exe</TargetExt>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>..\..\..\bin\windows-x64\release\</OutDir>
+ <IntDir>..\..\..\intermediate\windows-x64\release\slang-capability-generator\</IntDir>
+ <TargetName>slang-capability-generator</TargetName>
+ <TargetExt>.exe</TargetExt>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>..\..\..\bin\windows-aarch64\release\</OutDir>
+ <IntDir>..\..\..\intermediate\windows-aarch64\release\slang-capability-generator\</IntDir>
+ <TargetName>slang-capability-generator</TargetName>
+ <TargetExt>.exe</TargetExt>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Disabled</Optimization>
+ <MinimalRebuild>false</MinimalRebuild>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <LanguageStandard>stdcpp17</LanguageStandard>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Disabled</Optimization>
+ <MinimalRebuild>false</MinimalRebuild>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <LanguageStandard>stdcpp17</LanguageStandard>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Disabled</Optimization>
+ <MinimalRebuild>false</MinimalRebuild>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <LanguageStandard>stdcpp17</LanguageStandard>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <Optimization>Full</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <MinimalRebuild>false</MinimalRebuild>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <LanguageStandard>stdcpp17</LanguageStandard>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <Optimization>Full</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <MinimalRebuild>false</MinimalRebuild>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <LanguageStandard>stdcpp17</LanguageStandard>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <Optimization>Full</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <MinimalRebuild>false</MinimalRebuild>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <LanguageStandard>stdcpp17</LanguageStandard>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\tools\slang-capability-generator\slang-capability-diagnostic-defs.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\tools\slang-capability-generator\capability-generator-main.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\compiler-core\compiler-core.vcxproj">
+ <Project>{12C1E89D-F5D0-41D3-8E8D-FB3F358F8126}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\core\core.vcxproj">
+ <Project>{F9BE7957-8399-899E-0C49-E714FDDD4B65}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
</Project> \ No newline at end of file
diff --git a/build/visual-studio/slang-capability-generator/slang-capability-generator.vcxproj.filters b/build/visual-studio/slang-capability-generator/slang-capability-generator.vcxproj.filters
index bc38eaf38..e6cf91b2c 100644
--- a/build/visual-studio/slang-capability-generator/slang-capability-generator.vcxproj.filters
+++ b/build/visual-studio/slang-capability-generator/slang-capability-generator.vcxproj.filters
@@ -1,21 +1,21 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Header Files">
- <UniqueIdentifier>{21EB8090-0D4E-1035-B6D3-48EBA215DCB7}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files">
- <UniqueIdentifier>{E9C7FDCE-D52A-8D73-7EB0-C5296AF258F6}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\tools\slang-capability-generator\slang-capability-diagnostic-defs.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\tools\slang-capability-generator\capability-generator-main.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{21EB8090-0D4E-1035-B6D3-48EBA215DCB7}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{E9C7FDCE-D52A-8D73-7EB0-C5296AF258F6}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\tools\slang-capability-generator\slang-capability-diagnostic-defs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\tools\slang-capability-generator\capability-generator-main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
</Project> \ No newline at end of file
diff --git a/build/visual-studio/slang/slang.vcxproj b/build/visual-studio/slang/slang.vcxproj
index 53ceb4caf..6314e660c 100644
--- a/build/visual-studio/slang/slang.vcxproj
+++ b/build/visual-studio/slang/slang.vcxproj
@@ -370,6 +370,7 @@ IF EXIST ..\..\..\external\slang-glslang\bin\windows-aarch64\release\slang-glsla
<ClInclude Include="..\..\..\source\slang\slang-ir-autodiff-unzip.h" />
<ClInclude Include="..\..\..\source\slang\slang-ir-autodiff.h" />
<ClInclude Include="..\..\..\source\slang\slang-ir-bind-existentials.h" />
+ <ClInclude Include="..\..\..\source\slang\slang-ir-bit-field-accessors.h" />
<ClInclude Include="..\..\..\source\slang\slang-ir-byte-address-legalize.h" />
<ClInclude Include="..\..\..\source\slang\slang-ir-check-differentiability.h" />
<ClInclude Include="..\..\..\source\slang\slang-ir-cleanup-void.h" />
@@ -590,6 +591,7 @@ IF EXIST ..\..\..\external\slang-glslang\bin\windows-aarch64\release\slang-glsla
<ClCompile Include="..\..\..\source\slang\slang-ir-autodiff-unzip.cpp" />
<ClCompile Include="..\..\..\source\slang\slang-ir-autodiff.cpp" />
<ClCompile Include="..\..\..\source\slang\slang-ir-bind-existentials.cpp" />
+ <ClCompile Include="..\..\..\source\slang\slang-ir-bit-field-accessors.cpp" />
<ClCompile Include="..\..\..\source\slang\slang-ir-byte-address-legalize.cpp" />
<ClCompile Include="..\..\..\source\slang\slang-ir-check-differentiability.cpp" />
<ClCompile Include="..\..\..\source\slang\slang-ir-cleanup-void.cpp" />
diff --git a/build/visual-studio/slang/slang.vcxproj.filters b/build/visual-studio/slang/slang.vcxproj.filters
index 9a3f70a7e..9a029dcb7 100644
--- a/build/visual-studio/slang/slang.vcxproj.filters
+++ b/build/visual-studio/slang/slang.vcxproj.filters
@@ -198,6 +198,9 @@
<ClInclude Include="..\..\..\source\slang\slang-ir-bind-existentials.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\..\..\source\slang\slang-ir-bit-field-accessors.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
<ClInclude Include="..\..\..\source\slang\slang-ir-byte-address-legalize.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -854,6 +857,9 @@
<ClCompile Include="..\..\..\source\slang\slang-ir-bind-existentials.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\source\slang\slang-ir-bit-field-accessors.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="..\..\..\source\slang\slang-ir-byte-address-legalize.cpp">
<Filter>Source Files</Filter>
</ClCompile>
diff --git a/source/slang/slang-ast-modifier.h b/source/slang/slang-ast-modifier.h
index 155363e0c..c5d18f4f8 100644
--- a/source/slang/slang-ast-modifier.h
+++ b/source/slang/slang-ast-modifier.h
@@ -1479,4 +1479,16 @@ class GLSLPatchModifier : public SimpleModifier
SLANG_AST_CLASS(GLSLPatchModifier)
};
+//
+class BitFieldModifier : public Modifier
+{
+ SLANG_ABSTRACT_AST_CLASS(BitFieldModifier)
+
+ IntegerLiteralValue width;
+
+ // Fields filled during semantic analysis
+ IntegerLiteralValue offset = 0;
+ DeclRef<VarDecl> backingDeclRef;
+};
+
} // namespace Slang
diff --git a/source/slang/slang-check-conversion.cpp b/source/slang/slang-check-conversion.cpp
index d76b2a80e..9dae07018 100644
--- a/source/slang/slang-check-conversion.cpp
+++ b/source/slang/slang-check-conversion.cpp
@@ -645,7 +645,7 @@ namespace Slang
}
}
- static int getTypeBitSize(Type* t)
+ int getTypeBitSize(Type* t)
{
auto basicType = as<BasicExpressionType>(t);
if (!basicType) return 0;
diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp
index 5a9559ce6..4dfffc414 100644
--- a/source/slang/slang-check-decl.cpp
+++ b/source/slang/slang-check-decl.cpp
@@ -1,4 +1,6 @@
// slang-check-decl.cpp
+#include "slang-ast-modifier.h"
+#include "slang-ast-support-types.h"
#include "slang-check-impl.h"
// This file constaints the semantic checking logic and
@@ -34,6 +36,8 @@ namespace Slang
{
checkModifiers(decl);
}
+
+ void visitStructDecl(StructDecl* structDecl);
};
struct SemanticsDeclScopeWiringVisitor : public SemanticsDeclVisitorBase, public DeclVisitor<SemanticsDeclScopeWiringVisitor>
@@ -64,6 +68,8 @@ namespace Slang
void visitDecl(Decl*) {}
void visitDeclGroup(DeclGroup*) {}
+ void visitStructDecl(StructDecl* structDecl);
+
void visitFunctionDeclBase(FunctionDeclBase* decl);
void checkForwardDerivativeOfAttribute(FunctionDeclBase* funcDecl, ForwardDerivativeOfAttribute* attr);
@@ -1375,6 +1381,47 @@ namespace Slang
tryConstantFoldDeclRef(DeclRef<VarDeclBase>(varDecl), nullptr);
}
+ void SemanticsDeclModifiersVisitor::visitStructDecl(StructDecl* structDecl)
+ {
+ checkModifiers(structDecl);
+
+ // Replace any bitfield member with a property, do this here before
+ // name lookup to avoid the original var decl being referenced
+ for(auto& m : structDecl->members)
+ {
+ const auto bfm = m->findModifier<BitFieldModifier>();
+ if(!bfm)
+ continue;
+
+ auto property = m_astBuilder->create<PropertyDecl>();
+ property->modifiers = m->modifiers;
+ property->type = as<VarDecl>(m)->type;
+ property->loc = m->loc;
+ property->nameAndLoc = m->getNameAndLoc();
+ property->parentDecl = structDecl;
+ property->ownedScope = m_astBuilder->create<Scope>();
+ property->ownedScope->containerDecl = property;
+ property->ownedScope->parent = getScope(structDecl);
+ m = property;
+
+ const auto get = m_astBuilder->create<GetterDecl>();
+ get->ownedScope = m_astBuilder->create<Scope>();
+ get->ownedScope->containerDecl = get;
+ get->ownedScope->parent = getScope(property);
+ property->addMember(get);
+
+ const auto set = m_astBuilder->create<SetterDecl>();
+ addModifier(set, m_astBuilder->create<MutatingAttribute>());
+ set->ownedScope = m_astBuilder->create<Scope>();
+ set->ownedScope->containerDecl = set;
+ set->ownedScope->parent = getScope(property);
+ property->addMember(set);
+
+ structDecl->invalidateMemberDictionary();
+ }
+ structDecl->buildMemberDictionary();
+ }
+
void SemanticsDeclHeaderVisitor::checkDerivativeMemberAttribute(
VarDeclBase* varDecl, DerivativeMemberAttribute* derivativeMemberAttr)
{
@@ -8943,6 +8990,146 @@ namespace Slang
this, funcDecl, attr, DeclAssociationKind::PrimalSubstituteFunc);
}
+ void SemanticsDeclAttributesVisitor::visitStructDecl(StructDecl* structDecl)
+ {
+ int backingWidth = 0;
+ [[maybe_unused]]
+ int totalWidth = 0;
+ struct BitFieldInfo
+ {
+ int memberIndex;
+ int bitWidth;
+ Type* memberType;
+ BitFieldModifier* bitFieldModifier;
+ };
+ List<BitFieldInfo> groupInfo;
+
+ int memberIndex = 0;
+ int backing_nonce = 0;
+ const auto dispatchSomeBitPackedMembers = [&](){
+ SLANG_ASSERT(totalWidth <= backingWidth);
+ SLANG_ASSERT(backingWidth <= 64);
+
+ // We're going to insert a backing member to be referenced in
+ // all the bitfield properties
+ if(groupInfo.getCount())
+ {
+ const auto backingMemberBasicType
+ = backingWidth <= 8 ? BaseType::UInt8
+ : backingWidth <= 16 ? BaseType::UInt16
+ : backingWidth <= 32 ? BaseType::UInt
+ : BaseType::UInt64;
+ auto backingMember = m_astBuilder->create<VarDecl>();
+ backingMember->type.type = m_astBuilder->getBuiltinType(backingMemberBasicType);
+ backingMember->nameAndLoc.name = getName(String("$bit_field_backing_") + String(backing_nonce));
+ backing_nonce++;
+ backingMember->initExpr = nullptr;
+ backingMember->parentDecl = structDecl;
+ const auto backingMemberDeclRef = DeclRef<VarDecl>(backingMember->getDefaultDeclRef());
+
+ int bottomOfMember = 0;
+ for(const auto m : groupInfo)
+ {
+ SLANG_ASSERT(bottomOfMember <= backingWidth);
+
+ m.bitFieldModifier->backingDeclRef = backingMemberDeclRef;
+ m.bitFieldModifier->offset = bottomOfMember;
+
+ bottomOfMember += m.bitWidth;
+ }
+
+ const auto backingMemberIndex = groupInfo[0].memberIndex;
+ structDecl->members.insert(backingMemberIndex, backingMember);
+ structDecl->invalidateMemberDictionary();
+ ++memberIndex;
+ }
+ structDecl->buildMemberDictionary();
+
+ // Reset everything
+ backingWidth = 0;
+ totalWidth = 0;
+ groupInfo.clear();
+ };
+ for(; memberIndex < structDecl->members.getCount(); ++memberIndex)
+ {
+ const auto& m = structDecl->members[memberIndex];
+
+ // We can trivially skip any non-property decls
+ const auto v = as<PropertyDecl>(m);
+ if(!v)
+ {
+ // If this is a non-bitfield member then finish the current group
+ if(as<VarDecl>(m))
+ dispatchSomeBitPackedMembers();
+ continue;
+ }
+
+ const auto bfm = m->findModifier<BitFieldModifier>();
+ // If there isn't a bit field modifier, then dispatch the
+ // current group and continue
+ if(!bfm)
+ {
+ dispatchSomeBitPackedMembers();
+ continue;
+ }
+
+ // Verify that this makes sense as a bitfield
+ const auto t = v->type.type->getCanonicalType();
+ SLANG_ASSERT(t);
+ const auto b = as<BasicExpressionType>(t);
+ if(!b)
+ {
+ getSink()->diagnose(v->loc, Diagnostics::bitFieldNonIntegral, t);
+ continue;
+ }
+ const auto baseType = b->getBaseType();
+ const bool isIntegerType = isIntegerBaseType(baseType);
+ if(!isIntegerType)
+ {
+ getSink()->diagnose(v->loc, Diagnostics::bitFieldNonIntegral, t);
+ continue;
+ }
+
+ // The bit width of this member, and the member type width
+ const auto thisFieldWidth = bfm->width;
+ const auto thisFieldTypeWidth = getTypeBitSize(b);
+ SLANG_ASSERT(thisFieldTypeWidth != 0);
+ if(thisFieldWidth > thisFieldTypeWidth)
+ {
+ getSink()->diagnose(
+ v->loc,
+ Diagnostics::bitFieldTooWide,
+ thisFieldWidth,
+ t,
+ thisFieldTypeWidth
+ );
+ // Not much we can do with this field, just ignore it
+ continue;
+ }
+
+ // At this point we're sure that we have a bit field,
+ // update our bit packing state
+
+ // If there's a 0 width type, dispatch the current group
+ if(thisFieldWidth == 0)
+ dispatchSomeBitPackedMembers();
+
+ // If this member wouldn't fit into the current group, dispatch
+ // everything so far;
+ if(totalWidth + thisFieldWidth > std::max(thisFieldTypeWidth, backingWidth))
+ dispatchSomeBitPackedMembers();
+
+ // Add this member to the group,
+ // Grow the backing width if necessary
+ backingWidth = std::max(thisFieldTypeWidth, backingWidth);
+ // Grow the total width
+ totalWidth += int(thisFieldWidth);
+ groupInfo.add({memberIndex, int(thisFieldWidth), t, bfm});
+ }
+ // If the struct ended with a bitpacked member, then make sure we don't forget the last group
+ dispatchSomeBitPackedMembers();
+ }
+
void SemanticsDeclAttributesVisitor::visitFunctionDeclBase(FunctionDeclBase* decl)
{
// Run checking on attributes that can't be fully checked in header checking stage.
diff --git a/source/slang/slang-check-impl.h b/source/slang/slang-check-impl.h
index d91bbb75b..eb3f9486c 100644
--- a/source/slang/slang-check-impl.h
+++ b/source/slang/slang-check-impl.h
@@ -41,6 +41,8 @@ namespace Slang
return result;
}
+ int getTypeBitSize(Type* t);
+
// A flat representation of basic types (scalars, vectors and matrices)
// that can be used as lookup key in caches
struct BasicTypeKey
diff --git a/source/slang/slang-diagnostic-defs.h b/source/slang/slang-diagnostic-defs.h
index d638f7be6..037e441d4 100644
--- a/source/slang/slang-diagnostic-defs.h
+++ b/source/slang/slang-diagnostic-defs.h
@@ -518,6 +518,10 @@ DIAGNOSTIC(31101, Error, nonSetAccessorMustNotHaveParams, "accessors other than
DIAGNOSTIC(31102, Error, setAccessorMayNotHaveMoreThanOneParam, "a 'set' accessor may not have more than one parameter")
DIAGNOSTIC(31102, Error, setAccessorParamWrongType, "'set' parameter '$0' has type '$1' which does not match the expected type '$2'")
+// 313xx: bit fields
+DIAGNOSTIC(31300, Error, bitFieldTooWide, "bit-field size ($0) exceeds the width of its type $1 ($2)")
+DIAGNOSTIC(31301, Error, bitFieldNonIntegral, "bit-field type ($0) must be an integral type")
+
// 39999 waiting to be placed in the right range
DIAGNOSTIC(39999, Error, expectedIntegerConstantWrongType, "expected integer constant (found: '$0')")
diff --git a/source/slang/slang-ir-autodiff.cpp b/source/slang/slang-ir-autodiff.cpp
index 2cc4e3b57..14b53c0e0 100644
--- a/source/slang/slang-ir-autodiff.cpp
+++ b/source/slang/slang-ir-autodiff.cpp
@@ -96,32 +96,6 @@ IRInst* lookupForwardDerivativeReference(IRInst* primalFunction)
return nullptr;
}
-IRStructField* DifferentialPairTypeBuilder::findField(IRInst* type, IRStructKey* key)
-{
- if (auto irStructType = as<IRStructType>(type))
- {
- for (auto field : irStructType->getFields())
- {
- if (field->getKey() == key)
- {
- return field;
- }
- }
- }
- else if (auto irSpecialize = as<IRSpecialize>(type))
- {
- if (auto irGeneric = as<IRGeneric>(irSpecialize->getBase()))
- {
- if (auto irGenericStructType = as<IRStructType>(findInnerMostGenericReturnVal(irGeneric)))
- {
- return findField(irGenericStructType, key);
- }
- }
- }
-
- return nullptr;
-}
-
IRInst* DifferentialPairTypeBuilder::findSpecializationForParam(IRInst* specializeInst, IRInst* genericParam)
{
// Get base generic that's being specialized.
@@ -162,7 +136,7 @@ IRInst* DifferentialPairTypeBuilder::emitFieldAccessor(IRBuilder* builder, IRIns
if (auto basePairStructType = as<IRStructType>(pairType))
{
return as<IRFieldExtract>(builder->emitFieldExtract(
- findField(basePairStructType, key)->getFieldType(),
+ findStructField(basePairStructType, key)->getFieldType(),
baseInst,
key
));
@@ -178,7 +152,7 @@ IRInst* DifferentialPairTypeBuilder::emitFieldAccessor(IRBuilder* builder, IRIns
builder->getPtrType((IRType*)
findSpecializationForParam(
ptrInnerSpecializedType,
- findField(ptrInnerSpecializedType, key)->getFieldType())),
+ findStructField(ptrInnerSpecializedType, key)->getFieldType())),
baseInst,
key
));
@@ -188,7 +162,7 @@ IRInst* DifferentialPairTypeBuilder::emitFieldAccessor(IRBuilder* builder, IRIns
{
return as<IRFieldAddress>(builder->emitFieldAddress(
builder->getPtrType((IRType*)
- findField(ptrBaseStructType, key)->getFieldType()),
+ findStructField(ptrBaseStructType, key)->getFieldType()),
baseInst,
key));
}
@@ -204,7 +178,7 @@ IRInst* DifferentialPairTypeBuilder::emitFieldAccessor(IRBuilder* builder, IRIns
return as<IRFieldExtract>(builder->emitFieldExtract(
(IRType*)findSpecializationForParam(
specializedType,
- findField(genericBasePairStructType, key)->getFieldType()),
+ findStructField(genericBasePairStructType, key)->getFieldType()),
baseInst,
key
));
@@ -217,7 +191,7 @@ IRInst* DifferentialPairTypeBuilder::emitFieldAccessor(IRBuilder* builder, IRIns
builder->getPtrType((IRType*)
findSpecializationForParam(
specializedType,
- findField(genericPairStructType, key)->getFieldType())),
+ findStructField(genericPairStructType, key)->getFieldType())),
baseInst,
key
));
diff --git a/source/slang/slang-ir-autodiff.h b/source/slang/slang-ir-autodiff.h
index 811002091..d8f0373ac 100644
--- a/source/slang/slang-ir-autodiff.h
+++ b/source/slang/slang-ir-autodiff.h
@@ -308,8 +308,6 @@ struct DifferentialPairTypeBuilder
DifferentialPairTypeBuilder(AutoDiffSharedContext* sharedContext) : sharedContext(sharedContext) {}
- IRStructField* findField(IRInst* type, IRStructKey* key);
-
IRInst* findSpecializationForParam(IRInst* specializeInst, IRInst* genericParam);
IRInst* emitFieldAccessor(IRBuilder* builder, IRInst* baseInst, IRStructKey* key);
diff --git a/source/slang/slang-ir-bit-field-accessors.cpp b/source/slang/slang-ir-bit-field-accessors.cpp
new file mode 100644
index 000000000..3ca660a30
--- /dev/null
+++ b/source/slang/slang-ir-bit-field-accessors.cpp
@@ -0,0 +1,160 @@
+#include "slang-ir-bit-field-accessors.h"
+
+#include "slang-ir.h"
+#include "slang-ir-insts.h"
+
+namespace Slang
+{
+static IRInst* maybeUnwrapGeneric(IRInst* inst)
+{
+ if(const auto g = as<IRGeneric>(inst))
+ return findInnerMostGenericReturnVal(g);
+ return inst;
+}
+
+static IRInst* maybeUnwrapSpecialize(IRInst* inst)
+{
+ if(const auto g = as<IRSpecialize>(inst))
+ return maybeUnwrapGeneric(maybeUnwrapSpecialize(g->getBase()));
+ return inst;
+}
+
+static IRInst* shl(IRBuilder& builder, IRInst* inst, const IRIntegerValue value)
+{
+ if(value == 0)
+ return inst;
+ const auto [width, isSigned] = getIntTypeInfo(inst->getDataType());
+ if(value >= width)
+ return builder.getIntValue(inst->getDataType(), 0);
+ if(value == 0)
+ return inst;
+ return builder.emitShl(inst->getDataType(), inst, builder.getIntValue(builder.getIntType(), value));
+}
+
+static IRInst* shr(IRBuilder& builder, IRInst* inst, const IRIntegerValue value)
+{
+ if(value == 0)
+ return inst;
+ const auto [width, isSigned] = getIntTypeInfo(inst->getDataType());
+ // If it's not signed, then we just shift all the set bits away
+ if(value >= width && !isSigned)
+ return builder.getIntValue(inst->getDataType(), 0);
+ // Since on many platforms bit shifting by the number of bits in the number
+ // is undefined, correct this here assuming that the Slang IR has the same
+ // restriction
+ if(value >= width && isSigned)
+ return builder.emitShr(inst->getDataType(), inst, builder.getIntValue(builder.getIntType(), width-1));
+ if(value == 0)
+ return inst;
+ return builder.emitShr(inst->getDataType(), inst, builder.getIntValue(builder.getIntType(), value));
+}
+
+static void synthesizeBitFieldGetter(IRFunc* func, IRBitFieldAccessorDecoration* dec)
+{
+ const auto bitFieldType = func->getResultType();
+ SLANG_ASSERT(isIntegralType(bitFieldType));
+ SLANG_ASSERT(func->getParamCount() == 1);
+ const auto structParamType = func->getParamType(0);
+ const auto structType = as<IRStructType>(maybeUnwrapSpecialize(structParamType));
+ SLANG_ASSERT(structType);
+
+ const auto backingMember = findStructField(structType, dec->getBackingMemberKey());
+ const auto backingType = backingMember->getFieldType();
+ SLANG_ASSERT(isIntegralType(backingType));
+
+ IRBuilder builder{func};
+
+ const auto isSigned = getIntTypeInfo(func->getResultType()).isSigned;
+ builder.setInsertInto(func);
+ builder.emitBlock();
+ const auto s = builder.emitParam(structParamType);
+
+ // Construct the equivalent of this:
+ // Note the cast of the backing value in order to get the correct sign
+ // extension behaviour on the right shift
+ // return (int(_backing) << (backingWidth-topOfFoo)) >> (backingWidth-fooWidth);
+
+ const auto backingWidth = getIntTypeInfo(backingType).width;
+ const auto fieldWidth = dec->getFieldWidth();
+ const auto topOfField = dec->getFieldOffset() + fieldWidth;
+ const auto leftShiftAmount = backingWidth - topOfField;
+ const auto rightShiftAmount = backingWidth - fieldWidth;
+ const auto backingValue = builder.emitFieldExtract(backingType, s, dec->getBackingMemberKey());
+ const auto castBackingType = builder.getType(getIntTypeOpFromInfo({backingWidth, isSigned}));
+ const auto castedBacking = builder.emitCast(castBackingType, backingValue);
+ const auto leftShifted = shl(builder, castedBacking, leftShiftAmount);
+ const auto rightShifted = shr(builder, leftShifted, rightShiftAmount);
+ const auto castedToBitFieldType = builder.emitCast(bitFieldType, rightShifted);
+ builder.emitReturn(castedToBitFieldType);
+
+ builder.addSimpleDecoration<IRForceInlineDecoration>(func);
+}
+
+static IRIntegerValue setLowBits(IRIntegerValue bits)
+{
+ SLANG_ASSERT(bits >= 0 && bits <= 64);
+ return ~(bits >= 64 ? 0 : (~0 << bits));
+}
+
+static void synthesizeBitFieldSetter(IRFunc* func, IRBitFieldAccessorDecoration* dec)
+{
+ SLANG_ASSERT(func->getParamCount() == 2);
+ const auto ptrType = as<IRPtrTypeBase>(func->getParamType(0));
+ SLANG_ASSERT(ptrType);
+ const auto structParamType = ptrType->getValueType();
+ const auto structType = as<IRStructType>(maybeUnwrapSpecialize(structParamType));
+ SLANG_ASSERT(structType);
+ const auto bitFieldType = func->getParamType(1);
+ SLANG_ASSERT(isIntegralType(bitFieldType));
+
+ const auto backingMember = findStructField(structType, dec->getBackingMemberKey());
+ const auto backingType = backingMember->getFieldType();
+ SLANG_ASSERT(isIntegralType(backingType));
+
+ IRBuilder builder{func};
+
+ builder.setInsertInto(func);
+ builder.emitBlock();
+ const auto s = builder.emitParam(ptrType);
+ const auto v = builder.emitParam(bitFieldType);
+
+ // Construct the equivalent of this:
+ // let fooMask = 0x00000FF0;
+ // let bottomOfFoo = 4;
+ // _backing = int((_backing & ~fooMask) | ((int(x) << bottomOfFoo) & fooMask));
+
+ const auto fieldWidth = dec->getFieldWidth();
+ const auto bottomOfField = dec->getFieldOffset();
+ const auto maskBits = setLowBits(fieldWidth) << bottomOfField;
+ const auto mask = builder.getIntValue(backingType, maskBits);
+ const auto notMask = builder.getIntValue(backingType, ~maskBits);
+ const auto memberAddr = builder.emitFieldAddress(builder.getPtrType(backingType), s, dec->getBackingMemberKey());
+ const auto backingValue = builder.emitLoad(memberAddr);
+ const auto maskedOut = builder.emitBitAnd(backingType, backingValue, notMask);
+ const auto castValue = builder.emitCast(backingType, v);
+ const auto shiftedLeft = shl(builder, castValue, bottomOfField);
+ const auto maskedValue = builder.emitBitAnd(backingType, shiftedLeft, mask);
+ const auto combined = builder.emitBitOr(backingType, maskedOut, maskedValue);
+ builder.emitStore(memberAddr, combined);
+ builder.emitReturn();
+
+ builder.addSimpleDecoration<IRForceInlineDecoration>(func);
+}
+
+void synthesizeBitFieldAccessors(IRModule* module)
+{
+ for(const auto inst : module->getModuleInst()->getGlobalInsts())
+ {
+ const auto func = as<IRFunc>(maybeUnwrapGeneric(inst));
+ if(!func)
+ continue;
+ const auto bfd = func->findDecoration<IRBitFieldAccessorDecoration>();
+ if(!bfd)
+ continue;
+ if(func->getParamCount() == 1)
+ synthesizeBitFieldGetter(func, bfd);
+ else
+ synthesizeBitFieldSetter(func, bfd);
+ }
+}
+}
diff --git a/source/slang/slang-ir-bit-field-accessors.h b/source/slang/slang-ir-bit-field-accessors.h
new file mode 100644
index 000000000..f97eb8748
--- /dev/null
+++ b/source/slang/slang-ir-bit-field-accessors.h
@@ -0,0 +1,7 @@
+#pragma once
+
+namespace Slang
+{
+ struct IRModule;
+ void synthesizeBitFieldAccessors(IRModule* module);
+}
diff --git a/source/slang/slang-ir-inst-defs.h b/source/slang/slang-ir-inst-defs.h
index 5439a8d5b..656b3d320 100644
--- a/source/slang/slang-ir-inst-defs.h
+++ b/source/slang/slang-ir-inst-defs.h
@@ -970,7 +970,11 @@ INST(HighLevelDeclDecoration, highLevelDecl, 1, 0)
/// Recognized by SPIRV-emit pass so we can emit a SPIRV `Block` decoration.
INST(SPIRVBlockDecoration, spvBlock, 0, 0)
- INST_RANGE(Decoration, HighLevelDeclDecoration, SPIRVBlockDecoration)
+ /// Marks a function as one which access a bitfield with the specified
+ /// backing value key, width and offset
+ INST(BitFieldAccessorDecoration, BitFieldAccessorDecoration, 3, 0)
+
+ INST_RANGE(Decoration, HighLevelDeclDecoration, BitFieldAccessorDecoration)
//
diff --git a/source/slang/slang-ir-insts.h b/source/slang/slang-ir-insts.h
index 114250bae..620695d46 100644
--- a/source/slang/slang-ir-insts.h
+++ b/source/slang/slang-ir-insts.h
@@ -1240,6 +1240,14 @@ struct IRUnpackAnyValue : IRInst
IRInst* getValue() { return getOperand(0); }
};
+struct IRBitFieldAccessorDecoration : IRDecoration
+{
+ IR_LEAF_ISA(BitFieldAccessorDecoration);
+ IRStructKey* getBackingMemberKey() { return cast<IRStructKey>(getOperand(0)); }
+ IRIntegerValue getFieldWidth() { return as<IRIntLit>(getOperand(1))->getValue(); }
+ IRIntegerValue getFieldOffset() { return as<IRIntLit>(getOperand(2))->getValue(); }
+};
+
// Layout decorations
/// A decoration that marks a field key as having been associated
diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp
index 3f10e3d3e..68b002153 100644
--- a/source/slang/slang-ir.cpp
+++ b/source/slang/slang-ir.cpp
@@ -7277,6 +7277,19 @@ namespace Slang
}
}
+ IROp getIntTypeOpFromInfo(const IntInfo info)
+ {
+ switch(info.width)
+ {
+ case 8: return info.isSigned ? kIROp_Int8Type : kIROp_UInt8Type;
+ case 16: return info.isSigned ? kIROp_Int16Type : kIROp_UInt16Type;
+ case 32: return info.isSigned ? kIROp_IntType : kIROp_UIntType;
+ case 64: return info.isSigned ? kIROp_Int64Type : kIROp_UInt64Type;
+ default:
+ SLANG_UNEXPECTED("Unhandled info passed to getIntTypeOpFromInfo");
+ }
+ }
+
FloatInfo getFloatingTypeInfo(const IRType* floatType)
{
switch(floatType->getOp())
@@ -7303,6 +7316,32 @@ namespace Slang
}
}
+ IRStructField* findStructField(IRInst* type, IRStructKey* key)
+ {
+ if (auto irStructType = as<IRStructType>(type))
+ {
+ for (auto field : irStructType->getFields())
+ {
+ if (field->getKey() == key)
+ {
+ return field;
+ }
+ }
+ }
+ else if (auto irSpecialize = as<IRSpecialize>(type))
+ {
+ if (auto irGeneric = as<IRGeneric>(irSpecialize->getBase()))
+ {
+ if (auto irGenericStructType = as<IRStructType>(findInnerMostGenericReturnVal(irGeneric)))
+ {
+ return findStructField(irGenericStructType, key);
+ }
+ }
+ }
+
+ return nullptr;
+ }
+
void findAllInstsBreadthFirst(IRInst* inst, List<IRInst*>& outInsts)
{
Index index = outInsts.getCount();
diff --git a/source/slang/slang-ir.h b/source/slang/slang-ir.h
index 3a459a501..f1c079cae 100644
--- a/source/slang/slang-ir.h
+++ b/source/slang/slang-ir.h
@@ -35,6 +35,8 @@ struct IRFunc;
struct IRGlobalValueWithCode;
struct IRInst;
struct IRModule;
+struct IRStructField;
+struct IRStructKey;
typedef unsigned int IROpFlags;
enum : IROpFlags
@@ -1036,6 +1038,9 @@ struct IntInfo
IntInfo getIntTypeInfo(const IRType* intType);
+// left-inverse of getIntTypeInfo
+IROp getIntTypeOpFromInfo(const IntInfo info);
+
struct FloatInfo
{
Int width;
@@ -1046,6 +1051,8 @@ FloatInfo getFloatingTypeInfo(const IRType* floatType);
bool isIntegralScalarOrCompositeType(IRType* t);
+IRStructField* findStructField(IRInst* type, IRStructKey* key);
+
void findAllInstsBreadthFirst(IRInst* inst, List<IRInst*>& outInsts);
// Constant Instructions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp
index cb9c8fc40..e4e324def 100644
--- a/source/slang/slang-lower-to-ir.cpp
+++ b/source/slang/slang-lower-to-ir.cpp
@@ -9,6 +9,7 @@
#include "../core/slang-performance-profiler.h"
#include "slang-check.h"
+#include "slang-ir-bit-field-accessors.h"
#include "slang-ir-loop-inversion.h"
#include "slang-ir.h"
#include "slang-ir-constexpr.h"
@@ -8872,6 +8873,25 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo>
}
}
+ void addBitFieldAccessorDecorations(IRInst* irFunc, Decl* decl)
+ {
+ // If this is an accessor under a property we can move the bitfield
+ // modifiers on the property to the accessor function.
+ if(as<AccessorDecl>(decl) && as<PropertyDecl>(decl->parentDecl))
+ {
+ if(const auto bfm = decl->parentDecl->findModifier<BitFieldModifier>())
+ {
+ getBuilder()->addDecoration(
+ irFunc,
+ kIROp_BitFieldAccessorDecoration,
+ getSimpleVal(context, ensureDecl(context, bfm->backingDeclRef.getDecl())),
+ getBuilder()->getIntValue(getBuilder()->getIntType(), bfm->width),
+ getBuilder()->getIntValue(getBuilder()->getIntType(), bfm->offset)
+ );
+ }
+ }
+ }
+
/// Is `decl` a member function (or effectively a member function) when considered as a stdlib declaration?
bool isStdLibMemberFuncDecl(
Decl* inDecl)
@@ -9345,6 +9365,8 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo>
bool isInline = false;
+ addBitFieldAccessorDecorations(irFunc, decl);
+
for (auto modifier : decl->modifiers)
{
if (as<RequiresNVAPIAttribute>(modifier))
@@ -10360,6 +10382,9 @@ RefPtr<IRModule> generateIRForTranslationUnit(
// normal `call` + `ifElse`, etc.
lowerErrorHandling(module, compileRequest->getSink());
+ // Synthesize some code we want to make sure is inlined and simplified
+ synthesizeBitFieldAccessors(module);
+
// Generate DebugValue insts to store values into debug variables,
// if debug symbols are enabled.
if (compileRequest->getLinkage()->m_optionSet.getEnumOption<DebugInfoLevel>(CompilerOptionName::DebugInformation) != DebugInfoLevel::None)
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index 5555647f4..3f1ed3f76 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -2970,6 +2970,15 @@ namespace Slang
semantic->name = parser->ReadToken(TokenType::Identifier);
return semantic;
}
+ else if (parser->LookAheadToken(TokenType::IntegerLiteral))
+ {
+ BitFieldModifier* bitWidthMod = parser->astBuilder->create<BitFieldModifier>();
+ parser->FillPosition(bitWidthMod);
+ const auto token = parser->tokenReader.advanceToken();
+ UnownedStringSlice suffix;
+ bitWidthMod->width = getIntegerLiteralValue(token, &suffix);
+ return bitWidthMod;
+ }
else if (parser->LookAheadToken(TokenType::CompletionRequest))
{
HLSLSimpleSemantic* semantic = parser->astBuilder->create<HLSLSimpleSemantic>();
diff --git a/tests/language-feature/bitfield/generic.slang b/tests/language-feature/bitfield/generic.slang
new file mode 100644
index 000000000..f1789a04c
--- /dev/null
+++ b/tests/language-feature/bitfield/generic.slang
@@ -0,0 +1,29 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -output-using-type
+
+// CHECK: 123
+// CHECK-NEXT: 4567
+// CHECK-NEXT: 0
+// CHECK-NEXT: 0
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<uint> outputBuffer;
+
+struct S<T> {
+ int foo : 8;
+ uint bar : 24;
+ T baz;
+};
+
+[numthreads(1, 1, 1)]
+void computeMain()
+{
+ S<int> s;
+ s.foo = 123;
+ s.bar = 4567;
+ outputBuffer[0] = s.foo;
+ outputBuffer[1] = s.bar;
+ s.foo = 0;
+ s.bar = 0;
+ outputBuffer[2] = s.foo;
+ outputBuffer[3] = s.bar;
+}
diff --git a/tests/language-feature/bitfield/non-integral.slang b/tests/language-feature/bitfield/non-integral.slang
new file mode 100644
index 000000000..9d477c1f8
--- /dev/null
+++ b/tests/language-feature/bitfield/non-integral.slang
@@ -0,0 +1,14 @@
+//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK):
+
+struct S
+{
+ float foo : 10;
+ // CHECK: non-integral.slang([[#@LINE-1]]): error 31301: bit-field type (float) must be an integral type
+ S bar : 10;
+ // CHECK: non-integral.slang([[#@LINE-1]]): error 31301: bit-field type (S) must be an integral type
+};
+
+[numthreads(1, 1, 1)]
+void computeMain()
+{
+}
diff --git a/tests/language-feature/bitfield/overflow.slang b/tests/language-feature/bitfield/overflow.slang
new file mode 100644
index 000000000..cd217e92a
--- /dev/null
+++ b/tests/language-feature/bitfield/overflow.slang
@@ -0,0 +1,29 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -output-using-type
+
+// CHECK: 123
+// CHECK-NEXT: 4567
+// CHECK-NEXT: -10
+// CHECK-NEXT: 16772649
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<int> outputBuffer;
+
+struct S {
+ int foo : 8;
+ uint bar : 24;
+};
+
+[numthreads(1, 1, 1)]
+void computeMain()
+{
+ S s;
+ s.foo = 123;
+ s.bar = 4567;
+ outputBuffer[0] = s.foo;
+ outputBuffer[1] = s.bar;
+
+ s.foo *= 2;
+ s.bar *= 0xffffff;
+ outputBuffer[2] = s.foo;
+ outputBuffer[3] = s.bar;
+}
diff --git a/tests/language-feature/bitfield/simple.slang b/tests/language-feature/bitfield/simple.slang
new file mode 100644
index 000000000..dee654259
--- /dev/null
+++ b/tests/language-feature/bitfield/simple.slang
@@ -0,0 +1,74 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -output-using-type
+
+// CHECK: 123
+// CHECK-NEXT: 4567
+// CHECK-NEXT: 0
+// CHECK-NEXT: 0
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<uint> outputBuffer;
+
+struct S {
+ int foo : 8;
+ uint bar : 24;
+};
+
+// Generates the equivalent of this:
+/*
+struct S {
+ int _backing;
+
+ property foo : int
+ {
+ // int foo : 8;
+ get
+ {
+ let backingWidth = 32;
+ let fooWidth = 8;
+ let topOfFoo = 8;
+ // Shift left and then right to sign-extend foo properly
+ return (int(_backing) << (backingWidth-topOfFoo)) >> (backingWidth-fooWidth);
+ }
+ [mutating] set(int x)
+ {
+ let fooMask = 0x000000FF;
+ let bottomOfFoo = 0;
+ _backing = int((_backing & ~fooMask) | ((int(x) << bottomOfFoo) & fooMask));
+ }
+ }
+
+ // int bar : 24;
+ property bar : int
+ {
+ get
+ {
+ let backingWidth = 32;
+ let barWidth = 24;
+ let topOfBar = 32;
+ // Shift left and then right to sign-extend bar properly
+ return (uint(_backing) << (backingWidth-topOfBar)) >> (backingWidth-barWidth);
+ }
+ [mutating] set(int x)
+ {
+ let barMask = 0xFFFFFF00;
+ let bottomOfBar = 8;
+ _backing = int((_backing & ~barMask) | ((int(x) << bottomOfBar) & barMask));
+ }
+ }
+};
+*/
+
+[numthreads(1, 1, 1)]
+void computeMain()
+{
+ S s;
+ s.foo = 123;
+ s.bar = 4567;
+ outputBuffer[0] = s.foo;
+ outputBuffer[1] = s.bar;
+
+ s.foo = 0;
+ s.bar = 0;
+ outputBuffer[2] = s.foo;
+ outputBuffer[3] = s.bar;
+}
diff --git a/tests/language-feature/bitfield/sizeof.slang b/tests/language-feature/bitfield/sizeof.slang
new file mode 100644
index 000000000..57056d1b2
--- /dev/null
+++ b/tests/language-feature/bitfield/sizeof.slang
@@ -0,0 +1,42 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -output-using-type
+
+// CHECK: 1
+// CHECK-NEXT: 1
+// CHECK-NEXT: 1
+// CHECK-NEXT: 1
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<uint> outputBuffer;
+
+struct S {
+ int foo : 8;
+ int bar : 24;
+};
+
+// This packs the smaller int into the int64
+struct T {
+ int64_t foo : 33;
+ int bar : 24;
+};
+
+// This takes two ints to store all the bits
+struct P {
+ int foo : 24;
+ int bar : 24;
+};
+
+// Even though the smaller field comes first, it's still packed with the larger
+// one
+struct Q {
+ int8_t foo : 1;
+ int64_t bar : 63;
+};
+
+[numthreads(1, 1, 1)]
+void computeMain()
+{
+ outputBuffer[0] = sizeof(S) == sizeof(int);
+ outputBuffer[1] = sizeof(T) == sizeof(int64_t);
+ outputBuffer[2] = sizeof(P) == sizeof(int) * 2;
+ outputBuffer[3] = sizeof(Q) == sizeof(int64_t);
+}
diff --git a/tests/language-feature/bitfield/too-large.slang b/tests/language-feature/bitfield/too-large.slang
new file mode 100644
index 000000000..0780b8206
--- /dev/null
+++ b/tests/language-feature/bitfield/too-large.slang
@@ -0,0 +1,14 @@
+//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK):
+
+struct S
+{
+ int foo : 33;
+ // CHECK: too-large.slang([[#@LINE-1]]): error 31300: bit-field size (33) exceeds the width of its type int (32)
+ int64_t bar : 999;
+ // CHECK: too-large.slang([[#@LINE-1]]): error 31300: bit-field size (999) exceeds the width of its type int64_t (64)
+};
+
+[numthreads(1, 1, 1)]
+void computeMain()
+{
+}
diff --git a/tests/language-feature/bitfield/type-alias.slang b/tests/language-feature/bitfield/type-alias.slang
new file mode 100644
index 000000000..7a33e2c50
--- /dev/null
+++ b/tests/language-feature/bitfield/type-alias.slang
@@ -0,0 +1,32 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -output-using-type
+
+// CHECK: 123
+// CHECK-NEXT: 4567
+// CHECK-NEXT: 0
+// CHECK-NEXT: 0
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<uint> outputBuffer;
+
+typedef uint MyUInt;
+
+struct S {
+ MyInt foo : 8;
+ MyUInt bar : 24;
+};
+
+typealias MyInt = int;
+
+[numthreads(1, 1, 1)]
+void computeMain()
+{
+ S s;
+ s.foo = 123;
+ s.bar = 4567;
+ outputBuffer[0] = s.foo;
+ outputBuffer[1] = s.bar;
+ s.foo = 0;
+ s.bar = 0;
+ outputBuffer[2] = s.foo;
+ outputBuffer[3] = s.bar;
+}
diff --git a/tests/language-feature/bitfield/zero-width.slang b/tests/language-feature/bitfield/zero-width.slang
new file mode 100644
index 000000000..457b31456
--- /dev/null
+++ b/tests/language-feature/bitfield/zero-width.slang
@@ -0,0 +1,28 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -output-using-type
+
+// CHECK: 123
+// CHECK-NEXT: 4567
+// CHECK-NEXT: 1
+// CHECK-NEXT: 0
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<uint> outputBuffer;
+
+struct S {
+ int foo : 8;
+ int breaker : 0;
+ int bar : 24;
+};
+
+[numthreads(1, 1, 1)]
+void computeMain()
+{
+ S s;
+ s.foo = 123;
+ s.bar = 4567;
+ s.breaker = 9999;
+ outputBuffer[0] = s.foo;
+ outputBuffer[1] = s.bar;
+ outputBuffer[2] = sizeof(S) == sizeof(int) * 2;
+ outputBuffer[3] = s.breaker;
+}