Update RenderingContext and D3D12Renderer to use new API.
This commit is contained in:
@@ -3,6 +3,9 @@
|
||||
|
||||
#undef USE_TRADITIONAL_BINDLESS // Just for testing, this should be handled by engine feature level.
|
||||
|
||||
|
||||
// Resource descriptor heap definitions
|
||||
|
||||
#if defined(USE_TRADITIONAL_BINDLESS)
|
||||
#define GLOBAL_TEXTURE2D_HEAP_SIZE 32768
|
||||
#define GLOBAL_TEXTURE3D_HEAP_SIZE 32
|
||||
@@ -27,6 +30,8 @@
|
||||
#endif
|
||||
|
||||
|
||||
// Bindless resource type definitions
|
||||
|
||||
#define TEXTURE2D_BINDLESS uint
|
||||
#define TEXTURE3D_BINDLESS uint
|
||||
#define TEXTURECUBE_BINDLESS uint
|
||||
@@ -38,6 +43,19 @@
|
||||
#define STRUCT_BUFFER_BINDLESS uint
|
||||
#define BYTE_ADDRESS_BUFFER_BINDLESS uint
|
||||
|
||||
#define TEXTURE2D Texture2D<float4>
|
||||
#define TEXTURE3D Texture3D<float4>
|
||||
#define TEXTURECUBE TextureCube<float4>
|
||||
#define TEXTURE2D_ARRAY Texture2DArray<float4>
|
||||
#define TEXTURECUBE_ARRAY TextureCubeArray<float4>
|
||||
|
||||
#define SAMPLER SamplerState
|
||||
|
||||
#define STRUCT_BUFFER(type) StructuredBuffer<type>
|
||||
#define BYTE_ADDRESS_BUFFER ByteAddressBuffer
|
||||
|
||||
|
||||
// Texture and sampler access macros
|
||||
|
||||
#define GET_TEXTURE2D_BINDLESS(id) GLOBAL_TEXTURE2D_HEAP[id]
|
||||
#define GET_TEXTURE2D_ARRAY_BINDLESS(id) GLOBAL_TEXTURE2D_ARRAY_HEAP[id]
|
||||
@@ -47,6 +65,8 @@
|
||||
#define GET_SAMPLER_BINDLESS(id) GLOBAL_SAMPLER_HEAP[id]
|
||||
|
||||
|
||||
// Texture sampling macros
|
||||
|
||||
#define SAMPLE_TEXTURE2D(tex, samp, uv) tex.Sample(samp, uv)
|
||||
#define SAMPLE_TEXTURE2D_LEVEL(tex, samp, uv, level) tex.SampleLevel(samp, uv, level)
|
||||
#define SAMPLE_TEXTURE2D_BINDLESS(texId, sampId, uv) GET_TEXTURE2D_BINDLESS(texId).Sample(GET_BINDLESS_SAMPLER(sampId), uv)
|
||||
@@ -55,4 +75,8 @@
|
||||
#define SAMPLE_TEXTURE2D_ARRAY(tex, samp, uv, index) tex.Sample(samp, uv, index)
|
||||
#define SAMPLE_TEXTURE2D_ARRAY_BINDLESS(texId, sampId, uv, index) GET_TEXTURE2D_ARRAY_BINDLESS(texId).Sample(GET_BINDLESS_SAMPLER(sampId), uv, index)
|
||||
|
||||
#endif // COMMON_HLSL
|
||||
|
||||
|
||||
#define MESH_SHADER_THREADS(x) [NumThreads(x, 1, 1)]
|
||||
|
||||
#endif // COMMON_HLSL
|
||||
|
||||
@@ -73,9 +73,9 @@ internal class PropertiesBlock : IBlockParser<PropertiesSyntax, List<PropertySem
|
||||
ParseBoolValue(syntax[3], errors))),
|
||||
|
||||
// Textures (single identifier argument)
|
||||
[ShaderPropertyType.Texture2D] = new(1, TokenType.Identifier, (syntax, errors) => ParseTextureDefault(syntax[0], errors)),
|
||||
[ShaderPropertyType.Texture3D] = new(1, TokenType.Identifier, (syntax, errors) => ParseTextureDefault(syntax[0], errors)),
|
||||
[ShaderPropertyType.TextureCube] = new(1, TokenType.Identifier, (syntax, errors) => ParseTextureDefault(syntax[0], errors)),
|
||||
[ShaderPropertyType.Texture2DBindless] = new(1, TokenType.Identifier, (syntax, errors) => ParseTextureDefault(syntax[0], errors)),
|
||||
[ShaderPropertyType.Texture3DBindless] = new(1, TokenType.Identifier, (syntax, errors) => ParseTextureDefault(syntax[0], errors)),
|
||||
[ShaderPropertyType.TextureCubeBindless] = new(1, TokenType.Identifier, (syntax, errors) => ParseTextureDefault(syntax[0], errors)),
|
||||
};
|
||||
|
||||
private static float ParseFloatValue(Token token, List<SDLError> errors)
|
||||
@@ -162,25 +162,25 @@ internal class PropertiesBlock : IBlockParser<PropertiesSyntax, List<PropertySem
|
||||
{
|
||||
return type.ToLower() switch
|
||||
{
|
||||
"float" => ShaderPropertyType.Float,
|
||||
"float2" => ShaderPropertyType.Float2,
|
||||
"float3" => ShaderPropertyType.Float3,
|
||||
"float4" => ShaderPropertyType.Float4,
|
||||
"int" => ShaderPropertyType.Int,
|
||||
"int2" => ShaderPropertyType.Int2,
|
||||
"int3" => ShaderPropertyType.Int3,
|
||||
"int4" => ShaderPropertyType.Int4,
|
||||
"uint" => ShaderPropertyType.UInt,
|
||||
"uint2" => ShaderPropertyType.UInt2,
|
||||
"uint3" => ShaderPropertyType.UInt3,
|
||||
"uint4" => ShaderPropertyType.UInt4,
|
||||
"bool" => ShaderPropertyType.Bool,
|
||||
"bool2" => ShaderPropertyType.Bool2,
|
||||
"bool3" => ShaderPropertyType.Bool3,
|
||||
"bool4" => ShaderPropertyType.Bool4,
|
||||
"texture2d" => ShaderPropertyType.Texture2D,
|
||||
"texture3d" => ShaderPropertyType.Texture3D,
|
||||
"texturecube" => ShaderPropertyType.TextureCube,
|
||||
TokenLexicon.KnownTypes.FLOAT => ShaderPropertyType.Float,
|
||||
TokenLexicon.KnownTypes.FLOAT2 => ShaderPropertyType.Float2,
|
||||
TokenLexicon.KnownTypes.FLOAT3 => ShaderPropertyType.Float3,
|
||||
TokenLexicon.KnownTypes.FLOAT4 => ShaderPropertyType.Float4,
|
||||
TokenLexicon.KnownTypes.INT => ShaderPropertyType.Int,
|
||||
TokenLexicon.KnownTypes.INT2 => ShaderPropertyType.Int2,
|
||||
TokenLexicon.KnownTypes.INT3 => ShaderPropertyType.Int3,
|
||||
TokenLexicon.KnownTypes.INT4 => ShaderPropertyType.Int4,
|
||||
TokenLexicon.KnownTypes.UINT => ShaderPropertyType.UInt,
|
||||
TokenLexicon.KnownTypes.UINT2 => ShaderPropertyType.UInt2,
|
||||
TokenLexicon.KnownTypes.UINT3 => ShaderPropertyType.UInt3,
|
||||
TokenLexicon.KnownTypes.UINT4 => ShaderPropertyType.UInt4,
|
||||
TokenLexicon.KnownTypes.BOOL => ShaderPropertyType.Bool,
|
||||
TokenLexicon.KnownTypes.BOOL2 => ShaderPropertyType.Bool2,
|
||||
TokenLexicon.KnownTypes.BOOL3 => ShaderPropertyType.Bool3,
|
||||
TokenLexicon.KnownTypes.BOOL4 => ShaderPropertyType.Bool4,
|
||||
TokenLexicon.KnownTypes.TEXTURE2D_BINDLESS => ShaderPropertyType.Texture2DBindless,
|
||||
TokenLexicon.KnownTypes.TEXTURE3D_BINDLESS => ShaderPropertyType.Texture3DBindless,
|
||||
TokenLexicon.KnownTypes.TEXTURECUBE_BINDLESS => ShaderPropertyType.TextureCubeBindless,
|
||||
_ => ShaderPropertyType.None,
|
||||
};
|
||||
}
|
||||
@@ -464,4 +464,4 @@ internal class PropertiesBlock : IBlockParser<PropertiesSyntax, List<PropertySem
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,11 +22,11 @@ internal static class SDLCompiler
|
||||
private const string _GLOBAL_PROPERTY_FILE_NAME = "GlobalData.g.hlsl";
|
||||
private const string _GENERATED_FILE_HEADER = "// Auto-generated shader file. Please do not edit this file directly.";
|
||||
|
||||
private struct ShaderInheritance
|
||||
{
|
||||
public SDLSemantics? parent;
|
||||
public List<ShaderInheritance>? children;
|
||||
}
|
||||
// private struct ShaderInheritance
|
||||
// {
|
||||
// public SDLSemantics? parent;
|
||||
// public List<ShaderInheritance>? children;
|
||||
// }
|
||||
|
||||
public static List<SDLSyntax> ParseShaders(TokenStream stream)
|
||||
{
|
||||
@@ -289,11 +289,11 @@ internal static class SDLCompiler
|
||||
ShaderPropertyType.Bool3 => "bool3",
|
||||
ShaderPropertyType.Bool4 => "bool4",
|
||||
// NOTE: Textures here are bindless, represented as uint (descriptor index).
|
||||
ShaderPropertyType.Texture2D => "TEXTURE2D_BINDLESS",
|
||||
ShaderPropertyType.Texture3D => "TEXTURE3D_BINDLESS",
|
||||
ShaderPropertyType.TextureCube => "TEXTURECUBE_BINDLESS",
|
||||
ShaderPropertyType.Texture2DArray => "TEXTURE2D_ARRAY_BINDLESS",
|
||||
ShaderPropertyType.TextureCubeArray => "TEXTURECUBE_ARRAY_BINDLESS",
|
||||
ShaderPropertyType.Texture2DBindless => "TEXTURE2D_BINDLESS",
|
||||
ShaderPropertyType.Texture3DBindless => "TEXTURE3D_BINDLESS",
|
||||
ShaderPropertyType.TextureCubeBindless => "TEXTURECUBE_BINDLESS",
|
||||
ShaderPropertyType.Texture2DArrayBindless => "TEXTURE2D_ARRAY_BINDLESS",
|
||||
ShaderPropertyType.TextureCubeArrayBindless => "TEXTURECUBE_ARRAY_BINDLESS",
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(type), $"Unsupported shader property type: {type}")
|
||||
};
|
||||
}
|
||||
@@ -396,4 +396,4 @@ struct GlobalData
|
||||
GeneratePass(pass, targetDirectory);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,11 +170,11 @@ internal static class TokenLexicon
|
||||
public const string BOOL4 = "bool4";
|
||||
|
||||
// Texture types
|
||||
public const string TEXTURE2D = "texture2d";
|
||||
public const string TEXTURE2D_ARRAY = "texture2d_array";
|
||||
public const string TEXTURE3D = "texture3d";
|
||||
public const string TEXTURECUBE = "texturecube";
|
||||
public const string TEXTURECUBE_ARRAY = "texturecube_array";
|
||||
public const string TEXTURE2D_BINDLESS = "tex2d_b";
|
||||
public const string TEXTURE2D_ARRAY_BINDLESS = "tex2d_arr_b";
|
||||
public const string TEXTURE3D_BINDLESS = "tex3d_b";
|
||||
public const string TEXTURECUBE_BINDLESS = "texcube_b";
|
||||
public const string TEXTURECUBE_ARRAY_BINDLESS = "texcube_arr_b";
|
||||
}
|
||||
|
||||
public static class KnownTextureValue
|
||||
@@ -215,8 +215,8 @@ internal static class TokenLexicon
|
||||
KnownTypes.INT, KnownTypes.INT2, KnownTypes.INT3, KnownTypes.INT4,
|
||||
KnownTypes.UINT, KnownTypes.UINT2, KnownTypes.UINT3, KnownTypes.UINT4,
|
||||
KnownTypes.BOOL, KnownTypes.BOOL2, KnownTypes.BOOL3, KnownTypes.BOOL4,
|
||||
KnownTypes.TEXTURE2D, KnownTypes.TEXTURE2D_ARRAY, KnownTypes.TEXTURE3D,
|
||||
KnownTypes.TEXTURECUBE, KnownTypes.TEXTURECUBE_ARRAY,
|
||||
KnownTypes.TEXTURE2D_BINDLESS, KnownTypes.TEXTURE2D_ARRAY_BINDLESS, KnownTypes.TEXTURE3D_BINDLESS,
|
||||
KnownTypes.TEXTURECUBE_BINDLESS, KnownTypes.TEXTURECUBE_ARRAY_BINDLESS,
|
||||
};
|
||||
|
||||
private static readonly HashSet<string> s_textureDefaultValues = new()
|
||||
|
||||
Reference in New Issue
Block a user