From 567aa7c1122cebc4f244b5cd16930c346e36fa39 Mon Sep 17 00:00:00 2001 From: U2A5F Date: Fri, 11 Apr 2025 16:13:45 +0800 Subject: [PATCH 01/22] save --- Assets/pattern.png | Bin 0 -> 685906 bytes .../Coplt.Graphics.Core.csproj | 2 +- Coplt.Graphics.Core/Core/GpuIsolate.cs | 8 +- Coplt.Graphics.Core/Core/GraphicsFormat.cs | 2 + Coplt.Graphics.Core/Core/View.cs | 127 ++++++++- Coplt.Graphics.Core/Native/Native.cs | 188 ++++++++++++- Coplt.Graphics.Native/Api/FFI/View.h | 48 +++- Coplt.Graphics.Native/D3d12/Include/View.h | 1 + Coplt.Graphics.Native/D3d12/Src/Record.cc | 10 +- Coplt.Graphics.Native/D3d12/Src/View.cc | 263 +++++++++++++----- 10 files changed, 563 insertions(+), 86 deletions(-) create mode 100644 Assets/pattern.png diff --git a/Assets/pattern.png b/Assets/pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..8caa13f072066c694e785efe92505e4fe1d8193f GIT binary patch literal 685906 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 z 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 z

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%0Ah%ZXEk^WUnj6v*)UWe_lQyn4` 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 d{_#mdz6HFd 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

^!Zg+ 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

= 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≪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 - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Coplt.Graphics.Core/Core/GpuIsolate.cs b/Coplt.Graphics.Core/Core/GpuIsolate.cs index 626ab00..a0c035d 100644 --- a/Coplt.Graphics.Core/Core/GpuIsolate.cs +++ b/Coplt.Graphics.Core/Core/GpuIsolate.cs @@ -421,6 +421,12 @@ public GpuImage CreateImage( fixed (char* p_name = Name) fixed (byte* p_name8 = Name8) { + var DepthOrLength = Math.Max(options.DepthOrLength, 1); + if (options.Dimension == ImageDimension.Cube) + { + if (options.DepthOrLength == 0) DepthOrLength = 6; + if (options.DepthOrLength % 6 != 0) throw new ArgumentException("The number of cube texture arrays must be a multiple of 6"); + } FGpuImageCreateOptions f_options = new() { Base = @@ -432,7 +438,7 @@ public GpuImage CreateImage( Format = options.Format.ToFFI(), Width = Math.Max(options.Width, 1), Height = Math.Max(options.Height, 1), - DepthOrLength = Math.Max(options.DepthOrLength, 1), + DepthOrLength = DepthOrLength, MipLevels = (ushort)Math.Max(options.MipLevels, 1), MultisampleCount = (byte)Math.Max(options.MultisampleCount, 1), Dimension = options.Dimension.ToFFI(), diff --git a/Coplt.Graphics.Core/Core/GraphicsFormat.cs b/Coplt.Graphics.Core/Core/GraphicsFormat.cs index 67432c2..0561e79 100644 --- a/Coplt.Graphics.Core/Core/GraphicsFormat.cs +++ b/Coplt.Graphics.Core/Core/GraphicsFormat.cs @@ -1,4 +1,6 @@ using Coplt.Graphics.Native; +using Coplt.Union; +using Coplt.Union.Misc; namespace Coplt.Graphics { diff --git a/Coplt.Graphics.Core/Core/View.cs b/Coplt.Graphics.Core/Core/View.cs index 782db61..06c9315 100644 --- a/Coplt.Graphics.Core/Core/View.cs +++ b/Coplt.Graphics.Core/Core/View.cs @@ -10,23 +10,132 @@ public unsafe partial struct View private interface Template { void None(); - GpuBuffer Buffer(); - GpuImage Image(); Sampler Sampler(); + void Buffer(GpuBuffer Buffer, ulong Offset = 0, int Size = -1, int Stride = -1, GraphicsFormat Format = 0); + /// Uav 忽略 NumMips + void Image1D(GpuImage Image, byte Mip = 0, sbyte NumMips = -1, GraphicsFormat Format = 0); + /// Uav 忽略 NumMips + void Image1DArray(GpuImage Image, uint Index = 0, int Size = -1, byte Mip = 0, sbyte NumMips = -1, GraphicsFormat Format = 0); + /// Uav 忽略 NumMips + void Image2D(GpuImage Image, byte Mip = 0, sbyte NumMips = -1, byte Plane = 0, GraphicsFormat Format = 0); + /// Uav 忽略 NumMips + void Image2DArray(GpuImage Image, uint Index = 0, int Size = -1, byte Mip = 0, sbyte NumMips = -1, byte Plane = 0, GraphicsFormat Format = 0); + void Image2DMs(GpuImage Image, GraphicsFormat Format = 0); + void Image2DMsArray(GpuImage Image, uint Index = 0, int Size = -1, GraphicsFormat Format = 0); + /// Uav 忽略 NumMips + void Image3D(GpuImage Image, uint Z = 0, int Depth = -1, byte Mip = 0, sbyte NumMips = -1, GraphicsFormat Format = 0); + /// Uav 忽略 NumMips + void ImageCube(GpuImage Image, byte Mip = 0, sbyte NumMips = -1, GraphicsFormat Format = 0); + /// Uav 忽略 NumMips + void ImageCubeArray(GpuImage Image, uint Index = 0, int Size = -1, byte Mip = 0, sbyte NumMips = -1, GraphicsFormat Format = 0); } public static View None => default; public static implicit operator View(GpuBuffer buffer) => MakeBuffer(buffer); - public static implicit operator View(GpuImage image) => MakeImage(image); + public static implicit operator View(GpuImage image) => image.Dimension switch + { + ImageDimension.One => image.DepthOrLength > 1 ? MakeImage1DArray(image) : MakeImage1D(image), + ImageDimension.Two => image.DepthOrLength > 1 ? MakeImage2DArray(image) : MakeImage2D(image), + ImageDimension.Three => MakeImage3D(image), + ImageDimension.Cube => image.DepthOrLength > 1 ? MakeImageCubeArray(image) : MakeImageCube(image), + _ => throw new ArgumentOutOfRangeException() + }; public static implicit operator View(Sampler sampler) => MakeSampler(sampler); - public FView ToFFI() => Tag switch + public FView ToFFI() => this switch { - Tags.None => new FView { Type = FViewType.None }, - Tags.Buffer => new FView { Type = FViewType.Buffer, Viewable = ((GpuViewable)Buffer).Ptr }, - Tags.Image => new FView { Type = FViewType.Image, Viewable = ((GpuViewable)Image).Ptr }, - Tags.Sampler => new FView { Type = FViewType.Sampler, Viewable = ((GpuViewable)Sampler).Ptr }, - _ => throw new ArgumentOutOfRangeException() + { Tag: Tags.None } => + new() { Type = FViewType.None }, + { Tag: Tags.Buffer, Buffer: var (Buffer, Offset, Size, Stride, Format) } => + new() + { + Type = FViewType.Buffer, Viewable = ((GpuViewable)Buffer).Ptr, + Data = + { + Offset = Offset, Size = Size < 0 + ? (Stride < 0 && Buffer.Stride > 0) || Stride > 0 ? Buffer.Count : (uint)Buffer.Size + : (uint)Size, + Stride = Stride < 0 ? Buffer.Stride : (uint)Stride, + Format = Format.ToFFI(), + }, + }, + { Tag: Tags.Sampler, Sampler: var Sampler } => + new() { Type = FViewType.Sampler, Viewable = ((GpuViewable)Sampler).Ptr }, + { Tag: Tags.Image1D, Image1D: var (Image, Mip, NumMips, Format) } => + new() + { + Type = FViewType.Image1D, Viewable = ((GpuViewable)Image).Ptr, + Data = { Mip = Mip, NumMips = NumMips < 0 ? (byte)Image.MipLevels : (byte)NumMips, Format = Format.ToFFI() }, + }, + { Tag: Tags.Image1DArray, Image1DArray: var (Image, Index, Size, Mip, NumMips, Format) } => + new() + { + Type = FViewType.Image1DArray, Viewable = ((GpuViewable)Image).Ptr, + Data = + { + Index = Index, Size = Size < 0 ? Image.DepthOrLength : (uint)Size, + Mip = Mip, NumMips = NumMips < 0 ? (byte)Image.MipLevels : (byte)NumMips, + Format = Format.ToFFI() + }, + }, + { Tag: Tags.Image2D, Image2D: var (Image, Mip, NumMips, Plane, Format) } => + new() + { + Type = FViewType.Image2D, Viewable = ((GpuViewable)Image).Ptr, + Data = { Mip = Mip, NumMips = NumMips < 0 ? (byte)Image.MipLevels : (byte)NumMips, Plane = Plane, Format = Format.ToFFI() }, + }, + { Tag: Tags.Image2DArray, Image2DArray: var (Image, Index, Size, Mip, NumMips, Plane, Format) } => + new() + { + Type = FViewType.Image2DArray, Viewable = ((GpuViewable)Image).Ptr, + Data = + { + Index = Index, Size = Size < 0 ? Image.DepthOrLength : (uint)Size, + Mip = Mip, NumMips = NumMips < 0 ? (byte)Image.MipLevels : (byte)NumMips, + Plane = Plane, Format = Format.ToFFI() + }, + }, + { Tag: Tags.Image2DMs, Image2DMs: var (Image, Format) } => + new() + { + Type = FViewType.Image2DMs, Viewable = ((GpuViewable)Image).Ptr, + Data = { Format = Format.ToFFI() }, + }, + { Tag: Tags.Image2DMsArray, Image2DMsArray: var (Image, Index, Size, Format) } => + new() + { + Type = FViewType.Image2DMsArray, Viewable = ((GpuViewable)Image).Ptr, + Data = { Index = Index, Size = Size < 0 ? Image.DepthOrLength : (uint)Size, Format = Format.ToFFI() }, + }, + { Tag: Tags.Image3D, Image3D : var (Image, Z, Depth, Mip, NumMips, Format) } => + new() + { + Type = FViewType.Image3D, Viewable = ((GpuViewable)Image).Ptr, + Data = + { + Z = Z, Depth = Depth < 0 ? Image.DepthOrLength : (uint)Depth, + Mip = Mip, NumMips = NumMips < 0 ? (byte)Image.MipLevels : (byte)NumMips, + Format = Format.ToFFI() + }, + }, + { Tag: Tags.ImageCube, ImageCube: var (Image, Mip, NumMips, Format) } => + new() + { + Type = FViewType.ImageCube, Viewable = ((GpuViewable)Image).Ptr, + Data = { Mip = Mip, NumMips = NumMips < 0 ? (byte)Image.MipLevels : (byte)NumMips, Format = Format.ToFFI() }, + }, + { Tag: Tags.ImageCubeArray, ImageCubeArray: var (Image, Index, Size, Mip, NumMips, Format) } => + new() + { + Type = FViewType.ImageCubeArray, Viewable = ((GpuViewable)Image).Ptr, + Data = + { + Index = Index, Size = Size < 0 ? (Image.DepthOrLength + 5) / 6 : (uint)Size, + Mip = Mip, NumMips = NumMips < 0 ? (byte)Image.MipLevels : (byte)NumMips, + Format = Format.ToFFI() + }, + }, + _ => throw new ArgumentOutOfRangeException() }; } diff --git a/Coplt.Graphics.Core/Native/Native.cs b/Coplt.Graphics.Core/Native/Native.cs index c0f2f20..9ea183d 100644 --- a/Coplt.Graphics.Core/Native/Native.cs +++ b/Coplt.Graphics.Core/Native/Native.cs @@ -3549,9 +3549,188 @@ public interface Interface : FGpuObject.Interface public enum FViewType : byte { None = 0, - Buffer = 1, - Image = 2, - Sampler = 3, + Sampler = 1, + Buffer = 2, + Image1D = 3, + Image1DArray = 4, + Image2D = 5, + Image2DArray = 6, + Image2DMs = 7, + Image2DMsArray = 8, + Image3D = 9, + ImageCube = 10, + ImageCubeArray = 11, + } + + public partial struct FViewData + { + [NativeTypeName("__AnonymousRecord_View_L30_C9")] + public _Anonymous1_e__Union Anonymous1; + + [NativeTypeName("__AnonymousRecord_View_L52_C9")] + public _Anonymous2_e__Union Anonymous2; + + [NativeTypeName("Coplt::FGraphicsFormat")] + public FGraphicsFormat Format; + + [UnscopedRef] + public ref ulong Offset + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return ref Anonymous1.Offset; + } + } + + [UnscopedRef] + public ref uint Index + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return ref Anonymous1.Anonymous.Anonymous1.Index; + } + } + + [UnscopedRef] + public ref uint Z + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return ref Anonymous1.Anonymous.Anonymous1.Z; + } + } + + [UnscopedRef] + public ref byte Mip + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return ref Anonymous1.Anonymous.Anonymous2.Anonymous.Mip; + } + } + + [UnscopedRef] + public ref byte NumMips + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return ref Anonymous1.Anonymous.Anonymous2.Anonymous.NumMips; + } + } + + [UnscopedRef] + public ref byte Plane + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return ref Anonymous1.Anonymous.Anonymous2.Anonymous.Plane; + } + } + + [UnscopedRef] + public ref uint Stride + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return ref Anonymous1.Anonymous.Anonymous2.Stride; + } + } + + [UnscopedRef] + public ref uint Size + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return ref Anonymous2.Size; + } + } + + [UnscopedRef] + public ref uint Depth + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return ref Anonymous2.Depth; + } + } + + [StructLayout(LayoutKind.Explicit)] + public partial struct _Anonymous1_e__Union + { + [FieldOffset(0)] + [NativeTypeName("Coplt::u64")] + public ulong Offset; + + [FieldOffset(0)] + [NativeTypeName("__AnonymousRecord_View_L33_C13")] + public _Anonymous_e__Struct Anonymous; + + public partial struct _Anonymous_e__Struct + { + [NativeTypeName("__AnonymousRecord_View_L35_C17")] + public _Anonymous1_e__Union Anonymous1; + + [NativeTypeName("__AnonymousRecord_View_L40_C17")] + public _Anonymous2_e__Union Anonymous2; + + [StructLayout(LayoutKind.Explicit)] + public partial struct _Anonymous1_e__Union + { + [FieldOffset(0)] + [NativeTypeName("Coplt::u32")] + public uint Index; + + [FieldOffset(0)] + [NativeTypeName("Coplt::u32")] + public uint Z; + } + + [StructLayout(LayoutKind.Explicit)] + public partial struct _Anonymous2_e__Union + { + [FieldOffset(0)] + [NativeTypeName("__AnonymousRecord_View_L42_C21")] + public _Anonymous_e__Struct Anonymous; + + [FieldOffset(0)] + [NativeTypeName("Coplt::u32")] + public uint Stride; + + public partial struct _Anonymous_e__Struct + { + [NativeTypeName("Coplt::u8")] + public byte Mip; + + [NativeTypeName("Coplt::u8")] + public byte NumMips; + + [NativeTypeName("Coplt::u8")] + public byte Plane; + } + } + } + } + + [StructLayout(LayoutKind.Explicit)] + public partial struct _Anonymous2_e__Union + { + [FieldOffset(0)] + [NativeTypeName("Coplt::u32")] + public uint Size; + + [FieldOffset(0)] + [NativeTypeName("Coplt::u32")] + public uint Depth; + } } public unsafe partial struct FView @@ -3559,6 +3738,9 @@ public unsafe partial struct FView [NativeTypeName("Coplt::FGpuViewable *")] public FGpuViewable* Viewable; + [NativeTypeName("Coplt::FViewData")] + public FViewData Data; + [NativeTypeName("Coplt::FViewType")] public FViewType Type; } diff --git a/Coplt.Graphics.Native/Api/FFI/View.h b/Coplt.Graphics.Native/Api/FFI/View.h index ee9ddbc..de92695 100644 --- a/Coplt.Graphics.Native/Api/FFI/View.h +++ b/Coplt.Graphics.Native/Api/FFI/View.h @@ -1,6 +1,7 @@ #pragma once #include "GpuObject.h" +#include "GraphicsFormat.h" namespace Coplt { @@ -11,14 +12,55 @@ namespace Coplt enum class FViewType : u8 { None = 0, - Buffer = 1, - Image = 2, - Sampler = 3, + Sampler = 1, + Buffer = 2, + Image1D = 3, + Image1DArray = 4, + Image2D = 5, + Image2DArray = 6, + Image2DMs = 7, + Image2DMsArray = 8, + Image3D = 9, + ImageCube = 10, + ImageCubeArray = 11, + }; + + struct FViewData + { + union + { + u64 Offset{}; + struct + { + union + { + u32 Index; + u32 Z; + }; + union + { + struct + { + u8 Mip; + u8 NumMips; + u8 Plane; + }; + u32 Stride; + }; + }; + }; + union + { + u32 Size{}; + u32 Depth; + }; + FGraphicsFormat Format{}; }; struct FView { FGpuViewable* Viewable{}; + FViewData Data{}; FViewType Type{}; }; } diff --git a/Coplt.Graphics.Native/D3d12/Include/View.h b/Coplt.Graphics.Native/D3d12/Include/View.h index e8be9c8..e869c89 100644 --- a/Coplt.Graphics.Native/D3d12/Include/View.h +++ b/Coplt.Graphics.Native/D3d12/Include/View.h @@ -22,6 +22,7 @@ namespace Coplt struct View final { Rc m_viewable{}; + FViewData m_data{}; FViewType m_type{}; View() = default; diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.cc b/Coplt.Graphics.Native/D3d12/Src/Record.cc index 3e194b0..0e2e773 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Record.cc @@ -57,7 +57,15 @@ ResourceInfo::ResourceInfo(Rc&& resource, const View& view, u32 inde Type = FCmdResType::Buffer; Buffer = NonNull(view.TryGetBuffer()); return; - case FViewType::Image: + case FViewType::Image1D: + case FViewType::Image1DArray: + case FViewType::Image2D: + case FViewType::Image2DArray: + case FViewType::Image2DMs: + case FViewType::Image2DMsArray: + case FViewType::Image3D: + case FViewType::ImageCube: + case FViewType::ImageCubeArray: Type = FCmdResType::Image; Image = NonNull(view.TryGetImage()); return; diff --git a/Coplt.Graphics.Native/D3d12/Src/View.cc b/Coplt.Graphics.Native/D3d12/Src/View.cc index 72892fe..1c7246e 100644 --- a/Coplt.Graphics.Native/D3d12/Src/View.cc +++ b/Coplt.Graphics.Native/D3d12/Src/View.cc @@ -9,6 +9,7 @@ using namespace Coplt; View& View::swap(View& other) noexcept { std::swap(m_viewable, other.m_viewable); + std::swap(m_data, other.m_data); std::swap(m_type, other.m_type); return *this; } @@ -21,13 +22,15 @@ View::View(const FView& view) if (!viewable) COPLT_THROW("Viewable from different backends"); m_viewable = Rc::UnsafeClone(viewable); + m_data = view.Data; m_type = view.Type; } } View& View::operator=(const FView& view) { - return View(view).swap(*this); + View(view).swap(*this); + return *this; } View::operator bool() const @@ -37,16 +40,53 @@ View::operator bool() const bool View::IsCompatible(const FBindGroupItem& def) const { + if (!*this) return true; switch (m_type) { case FViewType::None: - break; - case FViewType::Buffer: - case FViewType::Image: + return true; case FViewType::Sampler: - return m_viewable->IsCompatible(def); + return def.Type == FShaderLayoutItemType::Sampler; + case FViewType::Buffer: + switch (def.Type) + { + case FShaderLayoutItemType::ConstantBuffer: + case FShaderLayoutItemType::Buffer: + case FShaderLayoutItemType::RawBuffer: + case FShaderLayoutItemType::StructureBuffer: + case FShaderLayoutItemType::StructureBufferWithCounter: + case FShaderLayoutItemType::RayTracingAccelerationStructure: + return m_viewable->IsCompatible(def); + default: + return false; + } + case FViewType::Image2DMs: + case FViewType::Image2DMsArray: + if (def.Type == FShaderLayoutItemType::Texture2DMultisample) break; + if (def.Type == FShaderLayoutItemType::Texture2DArrayMultisample) break; + return false; + case FViewType::Image1D: + case FViewType::Image1DArray: + case FViewType::Image2D: + case FViewType::Image2DArray: + case FViewType::Image3D: + case FViewType::ImageCube: + case FViewType::ImageCubeArray: + switch (def.Type) + { + case FShaderLayoutItemType::Texture1D: + case FShaderLayoutItemType::Texture1DArray: + case FShaderLayoutItemType::Texture2D: + case FShaderLayoutItemType::Texture2DArray: + case FShaderLayoutItemType::Texture3D: + case FShaderLayoutItemType::TextureCube: + case FShaderLayoutItemType::TextureCubeArray: + return m_viewable->IsCompatible(def); + default: + return false; + } } - return true; + return m_viewable->IsCompatible(def); } bool View::IsBuffer() const @@ -56,7 +96,24 @@ bool View::IsBuffer() const bool View::IsImage() const { - return m_type == FViewType::Image; + switch (m_type) + { + case FViewType::None: + case FViewType::Sampler: + case FViewType::Buffer: + break; + case FViewType::Image1D: + case FViewType::Image1DArray: + case FViewType::Image2D: + case FViewType::Image2DArray: + case FViewType::Image2DMs: + case FViewType::Image2DMsArray: + case FViewType::Image3D: + case FViewType::ImageCube: + case FViewType::ImageCubeArray: + return true; + } + return false; } bool View::IsSampler() const @@ -94,7 +151,15 @@ void View::CreateDescriptor(NonNull device, const FBindGroupItem& case FViewType::Buffer: CreateBufferDescriptor(device, def, handle); break; - case FViewType::Image: + case FViewType::Image1D: + case FViewType::Image1DArray: + case FViewType::Image2D: + case FViewType::Image2DArray: + case FViewType::Image2DMs: + case FViewType::Image2DMsArray: + case FViewType::Image3D: + case FViewType::ImageCube: + case FViewType::ImageCubeArray: CreateImageDescriptor(device, def, handle); break; case FViewType::Sampler: @@ -302,15 +367,15 @@ void View::CreateBufferDescriptor(NonNull device, const FBindGrou case FShaderLayoutItemView::Cbv: { D3D12_CONSTANT_BUFFER_VIEW_DESC desc{}; - desc.BufferLocation = resource->GetGPUVirtualAddress(); - desc.SizeInBytes = data->m_size; + desc.BufferLocation = resource->GetGPUVirtualAddress() + m_data.Offset; + desc.SizeInBytes = m_data.Size; device->CreateConstantBufferView(&desc, handle); break; } case FShaderLayoutItemView::Srv: { D3D12_SHADER_RESOURCE_VIEW_DESC desc{}; - desc.Format = ToDx(def.Format); + desc.Format = ToDx(m_data.Format == FGraphicsFormat::Unknown ? def.Format : m_data.Format); desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; switch (def.Type) { @@ -318,23 +383,54 @@ void View::CreateBufferDescriptor(NonNull device, const FBindGrou COPLT_THROW("Srv does not support ConstantBuffer"); case FShaderLayoutItemType::Buffer: desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + desc.Buffer.StructureByteStride = 0; + if (m_data.Stride != 0) + { + desc.Buffer.FirstElement = 0; + desc.Buffer.NumElements = data->m_size; + } + else + { + desc.Buffer.FirstElement = m_data.Offset; + desc.Buffer.NumElements = m_data.Size; + } break; case FShaderLayoutItemType::RawBuffer: - if (data->m_usage != FBufferUsage::Raw) - COPLT_THROW("Buffer not a Raw Buffer"); desc.Format = DXGI_FORMAT_R32_TYPELESS; desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + desc.Buffer.StructureByteStride = 0; + if (m_data.Stride != 0) + { + if (data->m_usage != FBufferUsage::Raw) + COPLT_THROW("Buffer not a Raw Buffer"); + desc.Buffer.FirstElement = 0; + desc.Buffer.NumElements = data->m_size; + } + else + { + desc.Buffer.FirstElement = m_data.Offset; + desc.Buffer.NumElements = m_data.Size; + } desc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; break; case FShaderLayoutItemType::StructureBuffer: case FShaderLayoutItemType::StructureBufferWithCounter: - if (data->m_usage != FBufferUsage::Structured) - COPLT_THROW("Buffer not a Structured Buffer"); desc.Format = DXGI_FORMAT_UNKNOWN; desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; - desc.Buffer.FirstElement = 0; - desc.Buffer.NumElements = data->m_count; - desc.Buffer.StructureByteStride = data->m_stride; + if (m_data.Stride == 0) + { + if (data->m_usage != FBufferUsage::Structured) + COPLT_THROW("Buffer not a Structured Buffer"); + desc.Buffer.FirstElement = 0; + desc.Buffer.NumElements = data->m_count; + desc.Buffer.StructureByteStride = data->m_stride; + } + else + { + desc.Buffer.FirstElement = m_data.Offset; + desc.Buffer.NumElements = m_data.Size; + desc.Buffer.StructureByteStride = m_data.Stride; + } break; case FShaderLayoutItemType::Texture1D: case FShaderLayoutItemType::Texture1DArray: @@ -350,7 +446,7 @@ void View::CreateBufferDescriptor(NonNull device, const FBindGrou COPLT_THROW("Buffer Srv does not support Sampler"); case FShaderLayoutItemType::RayTracingAccelerationStructure: desc.ViewDimension = D3D12_SRV_DIMENSION_RAYTRACING_ACCELERATION_STRUCTURE; - desc.RaytracingAccelerationStructure.Location = resource->GetGPUVirtualAddress(); + desc.RaytracingAccelerationStructure.Location = resource->GetGPUVirtualAddress() + m_data.Offset; break; } device->CreateShaderResourceView(resource, &desc, handle); @@ -359,30 +455,61 @@ void View::CreateBufferDescriptor(NonNull device, const FBindGrou case FShaderLayoutItemView::Uav: { D3D12_UNORDERED_ACCESS_VIEW_DESC desc{}; - desc.Format = ToDx(def.Format); + desc.Format = ToDx(m_data.Format == FGraphicsFormat::Unknown ? def.Format : m_data.Format); switch (def.Type) { case FShaderLayoutItemType::ConstantBuffer: COPLT_THROW("Uav does not support ConstantBuffer"); case FShaderLayoutItemType::Buffer: desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + desc.Buffer.StructureByteStride = 0; + if (m_data.Stride != 0) + { + desc.Buffer.FirstElement = 0; + desc.Buffer.NumElements = data->m_size; + } + else + { + desc.Buffer.FirstElement = m_data.Offset; + desc.Buffer.NumElements = m_data.Size; + } break; case FShaderLayoutItemType::RawBuffer: - if (data->m_usage != FBufferUsage::Raw) - COPLT_THROW("Buffer not a Raw Buffer"); desc.Format = DXGI_FORMAT_R32_TYPELESS; desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + desc.Buffer.StructureByteStride = 0; + if (m_data.Stride != 0) + { + if (data->m_usage != FBufferUsage::Raw) + COPLT_THROW("Buffer not a Raw Buffer"); + desc.Buffer.FirstElement = 0; + desc.Buffer.NumElements = data->m_size; + } + else + { + desc.Buffer.FirstElement = m_data.Offset; + desc.Buffer.NumElements = m_data.Size; + } desc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_RAW; break; case FShaderLayoutItemType::StructureBuffer: case FShaderLayoutItemType::StructureBufferWithCounter: - if (data->m_usage != FBufferUsage::Structured) - COPLT_THROW("Buffer not a Structured Buffer"); desc.Format = DXGI_FORMAT_UNKNOWN; desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; - desc.Buffer.FirstElement = 0; - desc.Buffer.NumElements = data->m_count; - desc.Buffer.StructureByteStride = data->m_stride; + if (m_data.Stride == 0) + { + if (data->m_usage != FBufferUsage::Structured) + COPLT_THROW("Buffer not a Structured Buffer"); + desc.Buffer.FirstElement = 0; + desc.Buffer.NumElements = data->m_count; + desc.Buffer.StructureByteStride = data->m_stride; + } + else + { + desc.Buffer.FirstElement = m_data.Offset; + desc.Buffer.NumElements = m_data.Size; + desc.Buffer.StructureByteStride = m_data.Stride; + } desc.Buffer.CounterOffsetInBytes = 0; break; case FShaderLayoutItemType::Texture1D: @@ -422,7 +549,7 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup case FShaderLayoutItemView::Srv: { D3D12_SHADER_RESOURCE_VIEW_DESC desc{}; - desc.Format = ToDx(data->m_format); + desc.Format = ToDx(m_data.Format == FGraphicsFormat::Unknown ? data->m_format : m_data.Format); desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; switch (def.Type) { @@ -438,8 +565,8 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup if (data->m_dimension != FImageDimension::One) COPLT_THROW("Bind required Texture1D, but the actual resources provided are not"); desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D; - desc.Texture1D.MostDetailedMip = 0; - desc.Texture1D.MipLevels = data->m_mip_levels; + desc.Texture1D.MostDetailedMip = m_data.Mip; + desc.Texture1D.MipLevels = m_data.NumMips; desc.Texture1D.ResourceMinLODClamp = 0; break; } @@ -448,10 +575,10 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup if (data->m_dimension != FImageDimension::One) COPLT_THROW("Bind required Texture1DArray, but the actual resources provided are not"); desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1DARRAY; - desc.Texture1DArray.MostDetailedMip = 0; - desc.Texture1DArray.MipLevels = data->m_mip_levels; - desc.Texture1DArray.FirstArraySlice = 0; - desc.Texture1DArray.ArraySize = data->m_depth_or_length; + desc.Texture1DArray.MostDetailedMip = m_data.Mip; + desc.Texture1DArray.MipLevels = m_data.NumMips; + desc.Texture1DArray.FirstArraySlice = m_data.Index; + desc.Texture1DArray.ArraySize = m_data.Size; desc.Texture1DArray.ResourceMinLODClamp = 0; break; } @@ -460,9 +587,9 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup if (data->m_dimension != FImageDimension::Two) COPLT_THROW("Bind required Texture2D, but the actual resources provided are not"); desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; - desc.Texture2D.MostDetailedMip = 0; - desc.Texture2D.MipLevels = data->m_mip_levels; - desc.Texture2D.PlaneSlice = 0; + desc.Texture2D.MostDetailedMip = m_data.Mip; + desc.Texture2D.MipLevels = m_data.NumMips; + desc.Texture2D.PlaneSlice = m_data.Plane; desc.Texture2D.ResourceMinLODClamp = 0; break; } @@ -471,11 +598,11 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup if (data->m_dimension != FImageDimension::Two) COPLT_THROW("Bind required Texture2DArray, but the actual resources provided are not"); desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; - desc.Texture2DArray.MostDetailedMip = 0; - desc.Texture2DArray.MipLevels = data->m_mip_levels; - desc.Texture2DArray.FirstArraySlice = 0; - desc.Texture2DArray.ArraySize = data->m_depth_or_length; - desc.Texture2DArray.PlaneSlice = 0; + desc.Texture2DArray.MostDetailedMip = m_data.Mip; + desc.Texture2DArray.MipLevels = m_data.NumMips; + desc.Texture2DArray.FirstArraySlice = m_data.Index; + desc.Texture2DArray.ArraySize = m_data.Size; + desc.Texture2DArray.PlaneSlice = m_data.Plane; desc.Texture2DArray.ResourceMinLODClamp = 0; break; } @@ -491,8 +618,8 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup if (data->m_dimension != FImageDimension::Two) COPLT_THROW("Bind required Texture2DArrayMultisample, but the actual resources provided are not"); desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY; - desc.Texture2DMSArray.FirstArraySlice = 0; - desc.Texture2DMSArray.ArraySize = data->m_depth_or_length; + desc.Texture2DMSArray.FirstArraySlice = m_data.Index; + desc.Texture2DMSArray.ArraySize = m_data.Size; break; } case FShaderLayoutItemType::Texture3D: @@ -500,8 +627,8 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup if (data->m_dimension != FImageDimension::Three) COPLT_THROW("Bind required Texture3D, but the actual resources provided are not"); desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; - desc.Texture3D.MostDetailedMip = 0; - desc.Texture3D.MipLevels = data->m_mip_levels; + desc.Texture3D.MostDetailedMip = m_data.Mip; + desc.Texture3D.MipLevels = m_data.NumMips; desc.Texture3D.ResourceMinLODClamp = 0; break; } @@ -510,8 +637,8 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup if (data->m_dimension != FImageDimension::Cube) COPLT_THROW("Bind required TextureCube, but the actual resources provided are not"); desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; - desc.TextureCube.MostDetailedMip = 0; - desc.TextureCube.MipLevels = data->m_mip_levels; + desc.TextureCube.MostDetailedMip = m_data.Mip; + desc.TextureCube.MipLevels = m_data.NumMips; desc.TextureCube.ResourceMinLODClamp = 0; break; } @@ -520,10 +647,10 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup if (data->m_dimension != FImageDimension::Cube) COPLT_THROW("Bind required TextureCubeArray, but the actual resources provided are not"); desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY; - desc.TextureCubeArray.MostDetailedMip = 0; - desc.TextureCubeArray.MipLevels = data->m_mip_levels; - desc.TextureCubeArray.First2DArrayFace = 0; - desc.TextureCubeArray.NumCubes = (data->m_depth_or_length + 5) / 6; + desc.TextureCubeArray.MostDetailedMip = m_data.Mip; + desc.TextureCubeArray.MipLevels = m_data.NumMips; + desc.TextureCubeArray.First2DArrayFace = m_data.Index; + desc.TextureCubeArray.NumCubes = m_data.Size; desc.TextureCubeArray.ResourceMinLODClamp = 0; break; } @@ -538,7 +665,7 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup case FShaderLayoutItemView::Uav: { D3D12_UNORDERED_ACCESS_VIEW_DESC desc{}; - desc.Format = ToDx(data->m_format); + desc.Format = ToDx(m_data.Format == FGraphicsFormat::Unknown ? data->m_format : m_data.Format); switch (def.Type) { case FShaderLayoutItemType::ConstantBuffer: @@ -554,7 +681,7 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup if (data->m_dimension != FImageDimension::One) COPLT_THROW("Bind required Texture1D, but the actual resources provided are not"); desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE1D; - desc.Texture1D.MipSlice = 0; + desc.Texture1D.MipSlice = m_data.Mip; break; } case FShaderLayoutItemType::Texture1DArray: @@ -562,9 +689,9 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup if (data->m_dimension != FImageDimension::One) COPLT_THROW("Bind required Texture1DArray, but the actual resources provided are not"); desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE1DARRAY; - desc.Texture1DArray.MipSlice = 0; - desc.Texture1DArray.FirstArraySlice = 0; - desc.Texture1DArray.ArraySize = data->m_depth_or_length; + desc.Texture1DArray.MipSlice = m_data.Mip; + desc.Texture1DArray.FirstArraySlice = m_data.Index; + desc.Texture1DArray.ArraySize = m_data.Size; break; } case FShaderLayoutItemType::Texture2D: @@ -572,8 +699,8 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup if (data->m_dimension != FImageDimension::Two) COPLT_THROW("Bind required Texture2D, but the actual resources provided are not"); desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; - desc.Texture2D.MipSlice = 0; - desc.Texture2D.PlaneSlice = 0; + desc.Texture2D.MipSlice = m_data.Mip; + desc.Texture2D.PlaneSlice = m_data.Plane; break; } case FShaderLayoutItemType::Texture2DArray: @@ -581,10 +708,10 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup if (data->m_dimension != FImageDimension::Two) COPLT_THROW("Bind required Texture2DArray, but the actual resources provided are not"); desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; - desc.Texture2DArray.MipSlice = 0; - desc.Texture2DArray.FirstArraySlice = 0; - desc.Texture2DArray.ArraySize = data->m_depth_or_length; - desc.Texture2DArray.PlaneSlice = 0; + desc.Texture2DArray.MipSlice = m_data.Mip; + desc.Texture2DArray.FirstArraySlice = m_data.Index; + desc.Texture2DArray.ArraySize = m_data.Size; + desc.Texture2DArray.PlaneSlice = m_data.Plane; break; } case FShaderLayoutItemType::Texture2DMultisample: @@ -599,17 +726,17 @@ void View::CreateImageDescriptor(NonNull device, const FBindGroup if (data->m_dimension != FImageDimension::Two) COPLT_THROW("Bind required Texture2DArrayMultisample, but the actual resources provided are not"); desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY; - desc.Texture2DMSArray.FirstArraySlice = 0; - desc.Texture2DMSArray.ArraySize = data->m_depth_or_length; + desc.Texture2DMSArray.FirstArraySlice = m_data.Index; + desc.Texture2DMSArray.ArraySize = m_data.Size; break; } case FShaderLayoutItemType::Texture3D: { if (data->m_dimension != FImageDimension::Three) COPLT_THROW("Bind required Texture3D, but the actual resources provided are not"); - desc.Texture3D.MipSlice = 0; - desc.Texture3D.FirstWSlice = 0; - desc.Texture3D.WSize = data->m_depth_or_length; + desc.Texture3D.MipSlice = m_data.Mip; + desc.Texture3D.FirstWSlice = m_data.Z; + desc.Texture3D.WSize = m_data.Depth; break; } case FShaderLayoutItemType::TextureCube: From 59a61f61fd21ec5fc687035b62a35e189d8b8647 Mon Sep 17 00:00:00 2001 From: U2A5F Date: Fri, 11 Apr 2025 19:54:44 +0800 Subject: [PATCH 02/22] compute --- .../Core/ComputeShaderPipeline.cs | 22 +++ Coplt.Graphics.Core/Core/GpuDevice.cs | 28 ++++ Coplt.Graphics.Core/Core/GpuRecord.cs | 130 ++++++++++++++---- Coplt.Graphics.Core/Native/Native.cs | 17 ++- Coplt.Graphics.Native/Api/FFI/Device.h | 1 + Coplt.Graphics.Native/D3d12/CMakeLists.txt | 2 + .../D3d12/Src/ComputePipeline.cc | 96 +++++++++++++ .../D3d12/Src/ComputePipeline.h | 30 ++++ Coplt.Graphics.Native/D3d12/Src/Device.cc | 9 ++ Coplt.Graphics.Native/D3d12/Src/Device.h | 1 + .../D3d12/Src/GraphicsPipeline.cc | 3 +- .../D3d12/Src/GraphicsPipeline.h | 1 - Coplt.Graphics.Native/D3d12/Src/Layout.cc | 10 ++ Coplt.Graphics.Native/D3d12/Src/Pipeline.h | 6 +- Coplt.Graphics.Native/D3d12/Src/Record.cc | 9 ++ Coplt.Graphics.Native/D3d12/Src/Record.h | 3 + 16 files changed, 333 insertions(+), 35 deletions(-) create mode 100644 Coplt.Graphics.Core/Core/ComputeShaderPipeline.cs create mode 100644 Coplt.Graphics.Native/D3d12/Src/ComputePipeline.cc create mode 100644 Coplt.Graphics.Native/D3d12/Src/ComputePipeline.h diff --git a/Coplt.Graphics.Core/Core/ComputeShaderPipeline.cs b/Coplt.Graphics.Core/Core/ComputeShaderPipeline.cs new file mode 100644 index 0000000..514772a --- /dev/null +++ b/Coplt.Graphics.Core/Core/ComputeShaderPipeline.cs @@ -0,0 +1,22 @@ +using Coplt.Graphics.Native; +using Coplt.Graphics.States; + +namespace Coplt.Graphics.Core; + +public sealed unsafe class ComputeShaderPipeline : ShaderPipeline +{ + #region Props + + public new FComputeShaderPipeline* Ptr => (FComputeShaderPipeline*)m_ptr; + + #endregion + + #region Ctor + + internal ComputeShaderPipeline( + FComputeShaderPipeline* ptr, string? name, + Shader shader, ShaderBindingLayout binding_layout + ) : base((FShaderPipeline*)ptr, name, shader, binding_layout) { } + + #endregion +} diff --git a/Coplt.Graphics.Core/Core/GpuDevice.cs b/Coplt.Graphics.Core/Core/GpuDevice.cs index 4802036..57efd96 100644 --- a/Coplt.Graphics.Core/Core/GpuDevice.cs +++ b/Coplt.Graphics.Core/Core/GpuDevice.cs @@ -382,6 +382,34 @@ public GraphicsShaderPipeline CreateGraphicsShaderPipeline( #endregion + #region CreateComputeShaderPipeline + + public ComputeShaderPipeline CreateComputeShaderPipeline( + Shader Shader, string? Name = null, ReadOnlySpan Name8 = default + ) => CreateComputeShaderPipeline(Shader, Shader.Layout.GetEmptyBindingLayout(), Name, Name8); + + public ComputeShaderPipeline CreateComputeShaderPipeline( + Shader Shader, ShaderBindingLayout BindingLayout, + string? Name = null, ReadOnlySpan Name8 = default + ) + { + fixed (char* p_name = Name) + fixed (byte* p_name8 = Name8) + { + FShaderPipelineCreateOptions f_options = new() + { + Name = new(Name, Name8, p_name, p_name8), + Shader = Shader.Ptr, + Layout = BindingLayout.Ptr, + }; + FComputeShaderPipeline* ptr; + Ptr->CreateComputePipeline(&f_options, &ptr).TryThrow(); + return new(ptr, Name, Shader, BindingLayout); + } + } + + #endregion + #region CreateSampler public Sampler CreateSampler( diff --git a/Coplt.Graphics.Core/Core/GpuRecord.cs b/Coplt.Graphics.Core/Core/GpuRecord.cs index 8baaefa..a6324f9 100644 --- a/Coplt.Graphics.Core/Core/GpuRecord.cs +++ b/Coplt.Graphics.Core/Core/GpuRecord.cs @@ -289,7 +289,7 @@ public void Label(ReadOnlySpan Label, Color? Color = null) #region Scope - public DebugScope2 Scope(string Name, Color? Color = null) + public DebugScope Scope(string Name, Color? Color = null) { AssertNotEnded(); if (!DebugEnabled) return new(this); @@ -313,7 +313,7 @@ public DebugScope2 Scope(string Name, Color? Color = null) return new(this); } - public DebugScope2 Scope(ReadOnlySpan Name, Color? Color = null) + public DebugScope Scope(ReadOnlySpan Name, Color? Color = null) { AssertNotEnded(); if (!DebugEnabled) return new(this); @@ -421,6 +421,80 @@ public void Copy( #endregion + #region BufferImageCopy + + public void Copy( + GpuImage Image, + GpuBuffer Buffer, + uint BytesPerRow, + uint RowsPerImage, + uint MipLevel = 0, + uint ImageIndex = 0, + uint ImageCount = 1, + ImagePlane Plane = ImagePlane.All, + ulong BufferOffset = 0, + bool ImageToBuffer = false + ) => Copy( + Image, Buffer, + 0, 0, 0, + Image.Width, Image.Height, Image.DepthOrLength, + BytesPerRow, RowsPerImage, + MipLevel, ImageIndex, ImageCount, Plane, BufferOffset + ); + + public void Copy( + GpuImage Image, + GpuBuffer Buffer, + uint ImageX, + uint ImageY, + uint ImageZ, + uint ImageWidth, + uint ImageHeight, + uint ImageDepth, + uint BytesPerRow, + uint RowsPerImage, + uint MipLevel = 0, + uint ImageIndex = 0, + uint ImageCount = 1, + ImagePlane Plane = ImagePlane.All, + ulong BufferOffset = 0, + bool ImageToBuffer = false + ) + { + AssertNotEnded(); + Image.AssertSameIsolate(Isolate); + Buffer.AssertSameIsolate(Isolate); + var cmd = new FCmdBufferImageCopy + { + Base = { Type = FCmdType.BufferImageCopy }, + RangeIndex = (uint)Data.PayloadBufferImageCopyRange.LongLength, + Image = AddResource(Image), + Buffer = { Buffer = AddResource(Buffer) }, + BufferType = FBufferRefType2.Buffer, + ImageToBuffer = ImageToBuffer, + }; + var range = new FBufferImageCopyRange + { + BufferOffset = BufferOffset, + BytesPerRow = BytesPerRow, + RowsPerImage = RowsPerImage, + ImageIndex = ImageIndex, + ImageCount = ImageCount, + MipLevel = (ushort)MipLevel, + Plane = Plane.ToFFI(), + }; + range.ImageOffset[0] = ImageX; + range.ImageOffset[1] = ImageY; + range.ImageOffset[2] = ImageZ; + range.ImageExtent[0] = ImageWidth; + range.ImageExtent[1] = ImageHeight; + range.ImageExtent[2] = ImageDepth; + Data.PayloadBufferImageCopyRange.Add(range); + Data.Commands.Add(new() { BufferImageCopy = cmd }); + } + + #endregion + #region BufferUpload public void Upload( @@ -494,7 +568,7 @@ public void Upload( } #endregion - + #region ImageUpload public void Upload( @@ -581,17 +655,17 @@ public void Upload( #region Render - public RenderScope2 Render( + public RenderScope Render( ReadOnlySpan Rtvs, RenderInfo.DsvInfo? Dsv = null, bool AutoViewportScissor = true, string? Name = null, ReadOnlySpan Name8 = default ) => Render(new(Rtvs, Dsv), AutoViewportScissor, Name, Name8); - public RenderScope2 Render( + public RenderScope Render( RenderInfo.DsvInfo Dsv, ReadOnlySpan Rtvs = default, bool AutoViewportScissor = true, string? Name = null, ReadOnlySpan Name8 = default ) => Render(new(Rtvs, Dsv), AutoViewportScissor, Name, Name8); - public RenderScope2 Render( + public RenderScope Render( in RenderInfo Info, bool AutoViewportScissor = true, string? Name = null, ReadOnlySpan Name8 = default @@ -756,7 +830,7 @@ public RenderScope2 Render( #region Scope - RenderScope2 scope = new(this, info_index, cmd_index, debug_scope, m_debug_scope_count); + RenderScope scope = new(this, info_index, cmd_index, debug_scope, m_debug_scope_count); #endregion @@ -779,7 +853,7 @@ public RenderScope2 Render( #region Compute - public ComputeScope2 Compute(string? Name = null, ReadOnlySpan Name8 = default) + public ComputeScope Compute(string? Name = null, ReadOnlySpan Name8 = default) { AssertNotEnded(); @@ -824,7 +898,7 @@ public ComputeScope2 Compute(string? Name = null, ReadOnlySpan Name8 = def #region Scope - ComputeScope2 scope = new(this, cmd_index, debug_scope, m_debug_scope_count); + ComputeScope scope = new(this, cmd_index, debug_scope, m_debug_scope_count); #endregion @@ -836,12 +910,12 @@ public ComputeScope2 Compute(string? Name = null, ReadOnlySpan Name8 = def #region DebugScope -public struct DebugScope2(GpuRecord self) : IDisposable +public struct DebugScope(GpuRecord self) : IDisposable { private bool m_disposed; public void Dispose() { - if (m_disposed) throw new ObjectDisposedException(nameof(DebugScope2)); + if (m_disposed) throw new ObjectDisposedException(nameof(DebugScope)); m_disposed = true; if (!self.DebugEnabled) return; var cmd = new FCmdEndScope @@ -914,7 +988,7 @@ public void SetBinding(GpuRecord self, ShaderBinding Binding) #region RenderScope -public unsafe struct RenderScope2( +public unsafe struct RenderScope( GpuRecord self, uint info_index, uint cmd_index, @@ -940,7 +1014,7 @@ uint debug_scope_count public void Dispose() { - if (m_disposed) throw new ObjectDisposedException(nameof(RenderScope2)); + if (m_disposed) throw new ObjectDisposedException(nameof(RenderScope)); m_disposed = true; if (self.m_debug_scope_count > debug_scope_count) throw new InvalidOperationException( @@ -949,7 +1023,7 @@ public void Dispose() Cmd.CommandCount = (uint)self.m_data->Commands.LongLength - cmd_index; self.m_in_render_or_compute_scope = false; self.Data.Commands.Add(new() { Type = FCmdType.End }); - if (debug_scope) new DebugScope2(self).Dispose(); + if (debug_scope) new DebugScope(self).Dispose(); } #endregion @@ -966,9 +1040,9 @@ public void Dispose() #region Scope - public DebugScope2 Scope(string Name, Color? Color = null) => self.Scope(Name, Color); + public DebugScope Scope(string Name, Color? Color = null) => self.Scope(Name, Color); - public DebugScope2 Scope(ReadOnlySpan Name, Color? Color = null) => self.Scope(Name, Color); + public DebugScope Scope(ReadOnlySpan Name, Color? Color = null) => self.Scope(Name, Color); #endregion @@ -976,7 +1050,7 @@ public void Dispose() #region SetPipeline - public void SetPipeline(ShaderPipeline Pipeline) + public void SetPipeline(GraphicsShaderPipeline Pipeline) { self.AssertNotEnded(); if (m_pipeline_context.m_current_pipeline == Pipeline) return; @@ -1106,7 +1180,7 @@ public void Draw( ) => Draw(null, false, VertexCount, InstanceCount, FirstVertex, FirstInstance, 0, Binding); public void Draw( - ShaderPipeline? Pipeline, + GraphicsShaderPipeline? Pipeline, uint VertexCount, uint InstanceCount = 1, uint FirstVertex = 0, uint FirstInstance = 0, ShaderBinding? Binding = null @@ -1119,14 +1193,14 @@ public void DrawIndexed( ) => Draw(null, true, IndexCount, InstanceCount, FirstIndex, FirstInstance, VertexOffset, Binding); public void DrawIndexed( - ShaderPipeline? Pipeline, + GraphicsShaderPipeline? Pipeline, uint IndexCount, uint InstanceCount = 1, uint FirstIndex = 0, uint FirstInstance = 0, uint VertexOffset = 0, ShaderBinding? Binding = null ) => Draw(Pipeline, true, IndexCount, InstanceCount, FirstIndex, FirstInstance, VertexOffset, Binding); public void Draw( - ShaderPipeline? Pipeline, bool Indexed, + GraphicsShaderPipeline? Pipeline, bool Indexed, uint VertexOrIndexCount, uint InstanceCount = 1, uint FirstVertexOrIndex = 0, uint FirstInstance = 0, uint VertexOffset = 0, ShaderBinding? Binding = null @@ -1169,7 +1243,7 @@ public void DispatchMesh( ) => DispatchMesh(null, GroupCountX, GroupCountY, GroupCountZ, Binding); public void DispatchMesh( - ShaderPipeline? Pipeline, + GraphicsShaderPipeline? Pipeline, uint GroupCountX = 1, uint GroupCountY = 1, uint GroupCountZ = 1, ShaderBinding? Binding = null ) @@ -1206,7 +1280,7 @@ public void DispatchMesh( #region ComputeScope -public unsafe struct ComputeScope2( +public unsafe struct ComputeScope( GpuRecord self, uint cmd_index, bool debug_scope, @@ -1230,7 +1304,7 @@ uint debug_scope_count public void Dispose() { - if (m_disposed) throw new ObjectDisposedException(nameof(ComputeScope2)); + if (m_disposed) throw new ObjectDisposedException(nameof(ComputeScope)); m_disposed = true; if (self.m_debug_scope_count > debug_scope_count) throw new InvalidOperationException( @@ -1239,7 +1313,7 @@ public void Dispose() Cmd.CommandCount = (uint)self.m_data->Commands.LongLength - cmd_index; self.m_in_render_or_compute_scope = false; self.Data.Commands.Add(new() { Type = FCmdType.End }); - if (debug_scope) new DebugScope2(self).Dispose(); + if (debug_scope) new DebugScope(self).Dispose(); } #endregion @@ -1256,9 +1330,9 @@ public void Dispose() #region Scope - public DebugScope2 Scope(string Name, Color? Color = null) => self.Scope(Name, Color); + public DebugScope Scope(string Name, Color? Color = null) => self.Scope(Name, Color); - public DebugScope2 Scope(ReadOnlySpan Name, Color? Color = null) => self.Scope(Name, Color); + public DebugScope Scope(ReadOnlySpan Name, Color? Color = null) => self.Scope(Name, Color); #endregion @@ -1266,7 +1340,7 @@ public void Dispose() #region SetPipeline - public void SetPipeline(ShaderPipeline Pipeline) + public void SetPipeline(ComputeShaderPipeline Pipeline) { self.AssertNotEnded(); if (m_pipeline_context.m_current_pipeline == Pipeline) return; @@ -1295,7 +1369,7 @@ public void Dispatch( ) => Dispatch(null, GroupCountX, GroupCountY, GroupCountZ, Binding); public void Dispatch( - ShaderPipeline? Pipeline, + ComputeShaderPipeline? Pipeline, uint GroupCountX = 1, uint GroupCountY = 1, uint GroupCountZ = 1, ShaderBinding? Binding = null ) diff --git a/Coplt.Graphics.Core/Native/Native.cs b/Coplt.Graphics.Core/Native/Native.cs index 9ea183d..778585c 100644 --- a/Coplt.Graphics.Core/Native/Native.cs +++ b/Coplt.Graphics.Core/Native/Native.cs @@ -1347,12 +1347,20 @@ public FResult CreateGraphicsPipeline([NativeTypeName("const FGraphicsShaderPipe return *((delegate* unmanaged[Thiscall])(lpVtbl[21]))((FGpuDevice*)Unsafe.AsPointer(ref this), &result, options, @out); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + [return: NativeTypeName("Coplt::FResult")] + public FResult CreateComputePipeline([NativeTypeName("const FShaderPipelineCreateOptions &")] FShaderPipelineCreateOptions* options, FComputeShaderPipeline** @out) + { + FResult result; + return *((delegate* unmanaged[Thiscall])(lpVtbl[22]))((FGpuDevice*)Unsafe.AsPointer(ref this), &result, options, @out); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] [return: NativeTypeName("Coplt::FResult")] public FResult CreateBuffer([NativeTypeName("const FGpuBufferCreateOptions &")] FGpuBufferCreateOptions* options, FGpuBuffer** @out) { FResult result; - return *((delegate* unmanaged[Thiscall])(lpVtbl[22]))((FGpuDevice*)Unsafe.AsPointer(ref this), &result, options, @out); + return *((delegate* unmanaged[Thiscall])(lpVtbl[23]))((FGpuDevice*)Unsafe.AsPointer(ref this), &result, options, @out); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -1360,7 +1368,7 @@ public FResult CreateBuffer([NativeTypeName("const FGpuBufferCreateOptions &")] public FResult CreateImage([NativeTypeName("const FGpuImageCreateOptions &")] FGpuImageCreateOptions* options, FGpuImage** @out) { FResult result; - return *((delegate* unmanaged[Thiscall])(lpVtbl[23]))((FGpuDevice*)Unsafe.AsPointer(ref this), &result, options, @out); + return *((delegate* unmanaged[Thiscall])(lpVtbl[24]))((FGpuDevice*)Unsafe.AsPointer(ref this), &result, options, @out); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -1368,7 +1376,7 @@ public FResult CreateImage([NativeTypeName("const FGpuImageCreateOptions &")] FG public FResult CreateSampler([NativeTypeName("const FGpuSamplerCreateOptions &")] FGpuSamplerCreateOptions* options, FGpuSampler** @out) { FResult result; - return *((delegate* unmanaged[Thiscall])(lpVtbl[24]))((FGpuDevice*)Unsafe.AsPointer(ref this), &result, options, @out); + return *((delegate* unmanaged[Thiscall])(lpVtbl[25]))((FGpuDevice*)Unsafe.AsPointer(ref this), &result, options, @out); } public interface Interface : FGpuObject.Interface @@ -1420,6 +1428,9 @@ public interface Interface : FGpuObject.Interface [return: NativeTypeName("Coplt::FResult")] FResult CreateGraphicsPipeline([NativeTypeName("const FGraphicsShaderPipelineCreateOptions &")] FGraphicsShaderPipelineCreateOptions* options, FGraphicsShaderPipeline** @out); + [return: NativeTypeName("Coplt::FResult")] + FResult CreateComputePipeline([NativeTypeName("const FShaderPipelineCreateOptions &")] FShaderPipelineCreateOptions* options, FComputeShaderPipeline** @out); + [return: NativeTypeName("Coplt::FResult")] FResult CreateBuffer([NativeTypeName("const FGpuBufferCreateOptions &")] FGpuBufferCreateOptions* options, FGpuBuffer** @out); diff --git a/Coplt.Graphics.Native/Api/FFI/Device.h b/Coplt.Graphics.Native/Api/FFI/Device.h index 4da9b41..14faaae 100644 --- a/Coplt.Graphics.Native/Api/FFI/Device.h +++ b/Coplt.Graphics.Native/Api/FFI/Device.h @@ -95,6 +95,7 @@ namespace Coplt virtual FResult CreateShaderBinding(const FShaderBindingCreateOptions& options, FShaderBindingCreateResult* out) noexcept = 0; virtual FResult CreateGraphicsPipeline(const FGraphicsShaderPipelineCreateOptions& options, FGraphicsShaderPipeline** out) noexcept = 0; + virtual FResult CreateComputePipeline(const FShaderPipelineCreateOptions& options, FComputeShaderPipeline** out) noexcept = 0; virtual FResult CreateBuffer(const FGpuBufferCreateOptions& options, FGpuBuffer** out) noexcept = 0; virtual FResult CreateImage(const FGpuImageCreateOptions& options, FGpuImage** out) noexcept = 0; diff --git a/Coplt.Graphics.Native/D3d12/CMakeLists.txt b/Coplt.Graphics.Native/D3d12/CMakeLists.txt index aea41f4..c947db5 100644 --- a/Coplt.Graphics.Native/D3d12/CMakeLists.txt +++ b/Coplt.Graphics.Native/D3d12/CMakeLists.txt @@ -58,6 +58,8 @@ add_library(${target_name} SHARED Src/DescriptorManager.h Src/DescriptorManager.cc Src/Pipeline.h + Src/ComputePipeline.h + Src/ComputePipeline.cc ) set_target_properties(${target_name} PROPERTIES LINKER_LANGUAGE CXX) set_target_properties(${target_name} PROPERTIES OUTPUT_NAME "Coplt.Graphics.Native.D3d12") diff --git a/Coplt.Graphics.Native/D3d12/Src/ComputePipeline.cc b/Coplt.Graphics.Native/D3d12/Src/ComputePipeline.cc new file mode 100644 index 0000000..d987375 --- /dev/null +++ b/Coplt.Graphics.Native/D3d12/Src/ComputePipeline.cc @@ -0,0 +1,96 @@ +#include "ComputePipeline.h" + +using namespace Coplt; + +D3d12ComputeShaderPipeline::D3d12ComputeShaderPipeline(Rc&& device, const FShaderPipelineCreateOptions& options) + : m_device(std::move(device)) +{ + if (options.Shader == nullptr) + COPLT_THROW("Shader is null"); + m_shader = Rc::UnsafeClone(options.Shader); + if (!HasAnyFlags(m_shader->Stages(), FShaderStageFlags::Compute)) // | FShaderStageFlags::Mesh + COPLT_THROW("The shader is not compute"); + + if (m_shader->Layout()) + { + auto layout = NonNull(options.Layout)->QueryInterface(); + if (layout == nullptr) + COPLT_THROW("Shader layout from different backends"); + m_layout = Rc::UnsafeClone(layout); + if (m_layout->ShaderLayout()->ObjectId() != m_shader->Layout()->ObjectId()) + COPLT_THROW("Differences between binding layout and shader layout"); + } + else + { + m_layout = m_device->GetEmptyBindingLayout(FShaderLayoutFlags::None); + } + + auto root_signature = m_layout->RootSignature().Get(); + + CD3DX12_PIPELINE_STATE_STREAM2 stream{}; + if (HasFlags(m_shader->Stages(), FShaderStageFlags::Compute)) + { + D3D12_COMPUTE_PIPELINE_STATE_DESC desc{}; + desc.pRootSignature = root_signature; + NonNull cs = m_shader->Compute(); + desc.CS = D3D12_SHADER_BYTECODE{cs->Data().Data, cs->Data().Size}; + stream = CD3DX12_PIPELINE_STATE_STREAM2(desc); + } + // else if (HasFlags(m_shader->Stages(), FShaderStageFlags::Mesh)) // 当前不确定是否应该在计算中支持 Mesh Shader + // { + // D3DX12_MESH_SHADER_PIPELINE_STATE_DESC desc{}; + // desc.pRootSignature = root_signature; + // NonNull ms = m_shader->Mesh(); + // auto ts = m_shader->Task(); + // desc.MS = D3D12_SHADER_BYTECODE{ms->Data().Data, ms->Data().Size}; + // if (ts != nullptr) + // desc.AS = D3D12_SHADER_BYTECODE{ts->Data().Data, ts->Data().Size}; + // stream = CD3DX12_PIPELINE_STATE_STREAM2(desc); + // } + else + COPLT_THROW("Unknown shader stage combination"); + + D3D12_PIPELINE_STATE_STREAM_DESC stream_desc{}; + stream_desc.SizeInBytes = sizeof(stream); + stream_desc.pPipelineStateSubobjectStream = &stream; + chr | m_device->m_device->CreatePipelineState(&stream_desc, IID_PPV_ARGS(&m_pipeline)); + + if (m_device->Debug()) + { + chr | m_pipeline >> SetNameEx(options.Name); + } +} + +FResult D3d12ComputeShaderPipeline::SetName(const FStr8or16& name) noexcept +{ + return feb([&] + { + if (!m_device->Debug()) return; + chr | m_pipeline >> SetNameEx(name); + }); +} + +const Rc& D3d12ComputeShaderPipeline::Layout() const noexcept +{ + return m_layout; +} + +const ComPtr& D3d12ComputeShaderPipeline::GetPipelineState() const noexcept +{ + return m_pipeline; +} + +FShader* D3d12ComputeShaderPipeline::GetShader() noexcept +{ + return m_shader.get(); +} + +FBindingLayout* D3d12ComputeShaderPipeline::GetLayout() noexcept +{ + return m_layout.get(); +} + +FShaderStageFlags D3d12ComputeShaderPipeline::GetStages() noexcept +{ + return m_shader->Stages(); +} diff --git a/Coplt.Graphics.Native/D3d12/Src/ComputePipeline.h b/Coplt.Graphics.Native/D3d12/Src/ComputePipeline.h new file mode 100644 index 0000000..1d22360 --- /dev/null +++ b/Coplt.Graphics.Native/D3d12/Src/ComputePipeline.h @@ -0,0 +1,30 @@ +#pragma once + +#include + +#include "../../Api/Include/Object.h" +#include "Device.h" +#include "Layout.h" +#include "Pipeline.h" + +namespace Coplt +{ + struct D3d12ComputeShaderPipeline final : GpuObject + { + Rc m_device{}; + Rc m_shader{}; + Rc m_layout{}; + ComPtr m_pipeline{}; + + explicit D3d12ComputeShaderPipeline(Rc&& device, const FShaderPipelineCreateOptions& options); + + FResult SetName(const FStr8or16& name) noexcept override; + + const Rc& Layout() const noexcept override; + const ComPtr& GetPipelineState() const noexcept override; + + FShader* GetShader() noexcept override; + FBindingLayout* GetLayout() noexcept override; + FShaderStageFlags GetStages() noexcept override; + }; +} diff --git a/Coplt.Graphics.Native/D3d12/Src/Device.cc b/Coplt.Graphics.Native/D3d12/Src/Device.cc index 1cdcccd..eb545b3 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Device.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Device.cc @@ -5,6 +5,7 @@ #include "../../Api/Src/Shader.h" #include "Adapter.h" #include "Buffer.h" +#include "ComputePipeline.h" #include "GraphicsPipeline.h" #include "Image.h" #include "Isolate.h" @@ -328,6 +329,14 @@ FResult D3d12GpuDevice::CreateGraphicsPipeline(const FGraphicsShaderPipelineCrea }); } +FResult D3d12GpuDevice::CreateComputePipeline(const FShaderPipelineCreateOptions& options, FComputeShaderPipeline** out) noexcept +{ + return feb([&] + { + *out = new D3d12ComputeShaderPipeline(this->CloneThis(), options); + }); +} + FResult D3d12GpuDevice::CreateBuffer(const FGpuBufferCreateOptions& options, FGpuBuffer** out) noexcept { return feb([&] diff --git a/Coplt.Graphics.Native/D3d12/Src/Device.h b/Coplt.Graphics.Native/D3d12/Src/Device.h index 4d3e0ee..e27e4de 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Device.h +++ b/Coplt.Graphics.Native/D3d12/Src/Device.h @@ -74,6 +74,7 @@ namespace Coplt FResult CreateShaderBinding(const FShaderBindingCreateOptions& options, FShaderBindingCreateResult* out) noexcept override; FResult CreateGraphicsPipeline(const FGraphicsShaderPipelineCreateOptions& options, FGraphicsShaderPipeline** out) noexcept override; + FResult CreateComputePipeline(const FShaderPipelineCreateOptions& options, FComputeShaderPipeline** out) noexcept override; FResult CreateBuffer(const FGpuBufferCreateOptions& options, FGpuBuffer** out) noexcept override; FResult CreateImage(const FGpuImageCreateOptions& options, FGpuImage** out) noexcept override; diff --git a/Coplt.Graphics.Native/D3d12/Src/GraphicsPipeline.cc b/Coplt.Graphics.Native/D3d12/Src/GraphicsPipeline.cc index 67f6131..6f2b9e8 100644 --- a/Coplt.Graphics.Native/D3d12/Src/GraphicsPipeline.cc +++ b/Coplt.Graphics.Native/D3d12/Src/GraphicsPipeline.cc @@ -131,7 +131,6 @@ D3d12GraphicsShaderPipeline::D3d12GraphicsShaderPipeline( Rc&& device, const FGraphicsShaderPipelineCreateOptions& options ) : m_device(std::move(device)), m_graphics_state(options.GraphicsState) { - m_dx_device = m_device->m_device; if (options.Shader == nullptr) COPLT_THROW("Shader is null"); m_shader = Rc::UnsafeClone(options.Shader); @@ -212,7 +211,7 @@ D3d12GraphicsShaderPipeline::D3d12GraphicsShaderPipeline( D3D12_PIPELINE_STATE_STREAM_DESC stream_desc{}; stream_desc.SizeInBytes = sizeof(stream); stream_desc.pPipelineStateSubobjectStream = &stream; - chr | m_dx_device->CreatePipelineState(&stream_desc, IID_PPV_ARGS(&m_pipeline)); + chr | m_device->m_device->CreatePipelineState(&stream_desc, IID_PPV_ARGS(&m_pipeline)); if (m_device->Debug()) { diff --git a/Coplt.Graphics.Native/D3d12/Src/GraphicsPipeline.h b/Coplt.Graphics.Native/D3d12/Src/GraphicsPipeline.h index 56d7d58..da69a79 100644 --- a/Coplt.Graphics.Native/D3d12/Src/GraphicsPipeline.h +++ b/Coplt.Graphics.Native/D3d12/Src/GraphicsPipeline.h @@ -18,7 +18,6 @@ namespace Coplt Rc m_input_layout{}; // 可选 Rc m_mesh_layout{}; - ComPtr m_dx_device{}; ComPtr m_pipeline{}; std::vector m_input_slots{}; FGraphicsPipelineState m_graphics_state{}; diff --git a/Coplt.Graphics.Native/D3d12/Src/Layout.cc b/Coplt.Graphics.Native/D3d12/Src/Layout.cc index febe186..d7de649 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Layout.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Layout.cc @@ -81,6 +81,16 @@ D3d12BindGroupLayout::D3d12BindGroupLayout(const FBindGroupLayoutCreateOptions& BindSlotInfo info{}; const auto& item = m_items[i]; const auto count = std::max(1u, item.Count); + if (count == COPLT_U32_MAX) + { + if (i + 1 != m_items.size()) + { + COPLT_THROW_FMT( + "Invalid binding define {{ Id = {}, Scope = {}, Stages = {} }} at [{}]; Dynamic length array must be the last item in the group", + item.Id, item.Scope, static_cast(item.Stages), i + ); + } + } switch (item.View) { case FShaderLayoutItemView::Cbv: diff --git a/Coplt.Graphics.Native/D3d12/Src/Pipeline.h b/Coplt.Graphics.Native/D3d12/Src/Pipeline.h index b2b2c70..ab1c3ee 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Pipeline.h +++ b/Coplt.Graphics.Native/D3d12/Src/Pipeline.h @@ -13,7 +13,11 @@ namespace Coplt virtual const ComPtr& GetPipelineState() const noexcept = 0; }; - COPLT_INTERFACE_DEFINE(ID3d12GraphicsShaderPipeline, "345aeb23-3dc9-4365-babc-dfc7badf4ff8", FGraphicsShaderPipeline) + COPLT_INTERFACE_DEFINE(ID3d12ComputeShaderPipeline, "85989313-9f53-4d01-8ea9-5a2d3decd508", FComputeShaderPipeline) + { + }; + + COPLT_INTERFACE_DEFINE(ID3d12GraphicsShaderPipeline, "b27e1754-365f-4f44-ac9d-50a44b877226", FGraphicsShaderPipeline) { }; } diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.cc b/Coplt.Graphics.Native/D3d12/Src/Record.cc index 0e2e773..6ef31b8 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Record.cc @@ -237,6 +237,15 @@ void D3d12GpuRecord::PipelineContext::SetPipeline(NonNull pipel } GPipeline = g_pipeline; } + else if (HasFlags(stages, FShaderStageFlags::Compute)) + { + const Ptr c_pipeline = pipeline->QueryInterface(); + if (!c_pipeline) + { + COPLT_THROW_FMT("[{}] Invalid pipeline: pipeline is not a compute pipeline, but there is a compute shader in the stages.", i); + } + CPipeline = c_pipeline; + } PipelineChanged = true; if (Binding && Binding->Layout()->ObjectId() != Layout->ObjectId()) { diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.h b/Coplt.Graphics.Native/D3d12/Src/Record.h index ca8ae87..a37a3b3 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.h +++ b/Coplt.Graphics.Native/D3d12/Src/Record.h @@ -13,6 +13,7 @@ #include "Isolate.h" #include "Layout.h" #include "Output.h" +#include "Pipeline.h" namespace Coplt { @@ -103,6 +104,8 @@ namespace Coplt Ptr Layout{}; // 如果不是图形管线将不会设置 Ptr GPipeline{}; + // 如果不是计算管线将不会设置 + Ptr CPipeline{}; Ptr Binding{}; u32 SetBindingIndex{}; From 0c59ad05be080ab51077c78828cf22acb5df5bd4 Mon Sep 17 00:00:00 2001 From: U2A5F Date: Fri, 11 Apr 2025 19:56:41 +0800 Subject: [PATCH 03/22] save --- Coplt.Graphics.Core/Core/GpuQueue.cs | 36 ---------------------------- Coplt.Graphics.Core/Core/SubmitId.cs | 3 --- 2 files changed, 39 deletions(-) delete mode 100644 Coplt.Graphics.Core/Core/GpuQueue.cs delete mode 100644 Coplt.Graphics.Core/Core/SubmitId.cs diff --git a/Coplt.Graphics.Core/Core/GpuQueue.cs b/Coplt.Graphics.Core/Core/GpuQueue.cs deleted file mode 100644 index be24a80..0000000 --- a/Coplt.Graphics.Core/Core/GpuQueue.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Collections.Concurrent; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Coplt.Dropping; -using Coplt.Graphics.Native; -using Coplt.Graphics.Utilities; - -namespace Coplt.Graphics.Core; - -public enum GpuQueueType : byte -{ - Direct, - Compute, - Copy, - VideoEncode, - VideoDecode, - VideoProcess, -} - -public static partial class GraphicsExtensions -{ - public static FGpuQueueType ToFFI(this GpuQueueType value) => (FGpuQueueType)value; - - public static GpuQueueType FromFFI(this FGpuQueueType value) => (GpuQueueType)value; - - public static ReadOnlySpan ToUtf8String(this GpuQueueType value) => value switch - { - GpuQueueType.Direct => "Direct"u8, - GpuQueueType.Compute => "Compute"u8, - GpuQueueType.Copy => "Copy"u8, - GpuQueueType.VideoEncode => "VideoEncode"u8, - GpuQueueType.VideoDecode => "VideoDecode"u8, - GpuQueueType.VideoProcess => "VideoProcess"u8, - _ => throw new ArgumentOutOfRangeException(nameof(value), value, null) - }; -} diff --git a/Coplt.Graphics.Core/Core/SubmitId.cs b/Coplt.Graphics.Core/Core/SubmitId.cs deleted file mode 100644 index c60717e..0000000 --- a/Coplt.Graphics.Core/Core/SubmitId.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace Coplt.Graphics.Core; - -public record struct SubmitId(ulong Value); From 5ffde741ba05245acae80829b65b343096ce61ef Mon Sep 17 00:00:00 2001 From: U2A5F Date: Sat, 12 Apr 2025 12:28:22 +0800 Subject: [PATCH 04/22] save --- Coplt.Graphics.Native/D3d12/Src/Record.cc | 10 ++- Coplt.Graphics.sln | 7 ++ Examples/Mipmap/App.xaml | 9 ++ Examples/Mipmap/App.xaml.cs | 62 +++++++++++++ Examples/Mipmap/AssemblyInfo.cs | 10 +++ Examples/Mipmap/Example.cs | 87 +++++++++++++++++++ Examples/Mipmap/MainWindow.xaml | 11 +++ Examples/Mipmap/MainWindow.xaml.cs | 40 +++++++++ Examples/Mipmap/Mipmap.csproj | 78 +++++++++++++++++ .../Mipmap/Properties/launchSettings.json | 9 ++ Examples/Mipmap/Shaders/Shader.hlsl | 7 ++ 11 files changed, 328 insertions(+), 2 deletions(-) create mode 100644 Examples/Mipmap/App.xaml create mode 100644 Examples/Mipmap/App.xaml.cs create mode 100644 Examples/Mipmap/AssemblyInfo.cs create mode 100644 Examples/Mipmap/Example.cs create mode 100644 Examples/Mipmap/MainWindow.xaml create mode 100644 Examples/Mipmap/MainWindow.xaml.cs create mode 100644 Examples/Mipmap/Mipmap.csproj create mode 100644 Examples/Mipmap/Properties/launchSettings.json create mode 100644 Examples/Mipmap/Shaders/Shader.hlsl diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.cc b/Coplt.Graphics.Native/D3d12/Src/Record.cc index 6ef31b8..278d5dc 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Record.cc @@ -497,6 +497,8 @@ void D3d12GpuRecord::Analyze() case FCmdType::End: if (m_state == RecordState::Render) Analyze_RenderEnd(i, m_cur_render.Cmd); + else if (m_state == RecordState::Compute) + Analyze_ComputeEnd(i, m_cur_compute.Cmd); else COPLT_THROW("Cannot use End in main scope"); break; @@ -519,7 +521,8 @@ void D3d12GpuRecord::Analyze() Analyze_Render(i, command.Render); break; case FCmdType::Compute: - COPLT_THROW("TODO"); + Analyze_Compute(i, command.Compute); + break; case FCmdType::SetPipeline: Analyze_SetPipeline(i, command.SetPipeline); break; @@ -825,6 +828,8 @@ void D3d12GpuRecord::Interpret(const D3d12RentedCommandList& list, const u32 off case FCmdType::End: if (m_state == RecordState::Render) Interpret_RenderEnd(list, i, m_cur_render.Cmd); + else if (m_state == RecordState::Compute) + Interpret_ComputeEnd(list, i, m_cur_compute.Cmd); else COPLT_THROW("Cannot use End in main scope"); break; @@ -853,7 +858,8 @@ void D3d12GpuRecord::Interpret(const D3d12RentedCommandList& list, const u32 off Interpret_Render(list, i, command.Render); break; case FCmdType::Compute: - COPLT_THROW("TODO"); + Interpret_Compute(list, i, command.Compute); + break; case FCmdType::SetPipeline: Interpret_SetPipeline(list, i, command.SetPipeline); break; diff --git a/Coplt.Graphics.sln b/Coplt.Graphics.sln index fa52178..913aeee 100644 --- a/Coplt.Graphics.sln +++ b/Coplt.Graphics.sln @@ -18,6 +18,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Image", "Examples\Image\Ima EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SwapChain", "Examples\SwapChain\SwapChain.csproj", "{B2648CB7-DF8C-43CE-A814-46FFBEF9F12A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mipmap", "Examples\Mipmap\Mipmap.csproj", "{BD5E37C4-DB40-430A-A136-46850F83F1AE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -56,6 +58,10 @@ Global {B2648CB7-DF8C-43CE-A814-46FFBEF9F12A}.Debug|Any CPU.Build.0 = Debug|Any CPU {B2648CB7-DF8C-43CE-A814-46FFBEF9F12A}.Release|Any CPU.ActiveCfg = Release|Any CPU {B2648CB7-DF8C-43CE-A814-46FFBEF9F12A}.Release|Any CPU.Build.0 = Release|Any CPU + {BD5E37C4-DB40-430A-A136-46850F83F1AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BD5E37C4-DB40-430A-A136-46850F83F1AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD5E37C4-DB40-430A-A136-46850F83F1AE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BD5E37C4-DB40-430A-A136-46850F83F1AE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {2ABF3CFF-8E44-4992-A633-491B2AAA5BFB} = {DBD91642-35A7-4287-9856-CA8E09605928} @@ -64,5 +70,6 @@ Global {C4C82737-D197-447B-B663-2DEFE3CE6679} = {DBD91642-35A7-4287-9856-CA8E09605928} {DB8B374C-102E-4825-B51E-F2A9805847C5} = {DBD91642-35A7-4287-9856-CA8E09605928} {B2648CB7-DF8C-43CE-A814-46FFBEF9F12A} = {DBD91642-35A7-4287-9856-CA8E09605928} + {BD5E37C4-DB40-430A-A136-46850F83F1AE} = {DBD91642-35A7-4287-9856-CA8E09605928} EndGlobalSection EndGlobal diff --git a/Examples/Mipmap/App.xaml b/Examples/Mipmap/App.xaml new file mode 100644 index 0000000..76b7b05 --- /dev/null +++ b/Examples/Mipmap/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/Examples/Mipmap/App.xaml.cs b/Examples/Mipmap/App.xaml.cs new file mode 100644 index 0000000..2b631ed --- /dev/null +++ b/Examples/Mipmap/App.xaml.cs @@ -0,0 +1,62 @@ +using System.Configuration; +using System.Data; +using System.IO; +using System.Text; +using System.Windows; +using Serilog; +using Serilog.Exceptions; + +namespace Examples; + +/// +/// Interaction logic for App.xaml +/// +public partial class App : Application +{ + protected override void OnStartup(StartupEventArgs e) + { + Console.OutputEncoding = Encoding.UTF8; + + base.OnStartup(e); + + InitLogger(); + } + + private static void InitLogger() + { + if (File.Exists("./logs/latest.log")) + { + try + { + var time = File.GetCreationTime("./logs/latest.log"); + var time_name = $"{time:yyyy-MM-dd}"; + var max_count = Directory.GetFiles("./logs/") + .Where(static n => Path.GetExtension(n) == ".log") + .Select(static n => Path.GetFileName(n)) + .Where(n => n.StartsWith(time_name)) + .Select(n => n.Substring(time_name.Length)) + .Select(static n => (n, i: n.IndexOf('.'))) + .Where(static a => a.i > 1) + .Select(static a => (s: uint.TryParse(a.n.Substring(1, a.i - 1), out var n), n)) + .Where(static a => a.s) + .OrderByDescending(static a => a.n) + .Select(static a => a.n) + .FirstOrDefault(); + var count = max_count + 1; + File.Move("./logs/latest.log", $"./logs/{time_name}_{count}.log"); + } + catch (Exception e) + { + Log.Error(e, ""); + } + } + Log.Logger = new LoggerConfiguration() + .Enrich.WithThreadId() + .Enrich.WithThreadName() + .Enrich.WithExceptionDetails() + .WriteTo.Console() + .WriteTo.Debug() + .WriteTo.Async(c => c.File("./logs/latest.log")) + .CreateLogger(); + } +} diff --git a/Examples/Mipmap/AssemblyInfo.cs b/Examples/Mipmap/AssemblyInfo.cs new file mode 100644 index 0000000..b9d746b --- /dev/null +++ b/Examples/Mipmap/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Windows; + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/Examples/Mipmap/Example.cs b/Examples/Mipmap/Example.cs new file mode 100644 index 0000000..24d77e8 --- /dev/null +++ b/Examples/Mipmap/Example.cs @@ -0,0 +1,87 @@ +using System.Runtime.InteropServices; +using Coplt.Graphics; +using Coplt.Graphics.Core; +using Coplt.Graphics.States; + +namespace Examples; + +public class Example(IntPtr Handle, uint Width, uint Height) : ExampleBase(Handle, Width, Height) +{ + private ShaderLayout ShaderLayout = null!; + private ShaderBindGroupLayout BindGroupLayout = null!; + private ShaderBindingLayout BindingLayout = null!; + private Shader Shader = null!; + private ComputeShaderPipeline Pipeline = null!; + private GpuBuffer ArgBuffer = null!; + private ShaderBindGroup BindGroup = null!; + private ShaderBinding Binding = null!; + + public override string Name => "Mipmap"; + protected override async Task LoadResources(GpuRecord cmd) + { + var modules = await LoadShaderModules("Shader", [ShaderStage.Compute]); + ShaderLayout = Device.CreateShaderLayout( + [ + // new() + // { + // Id = 0, + // Slot = 0, + // Stage = ShaderStage.Pixel, + // View = ShaderLayoutItemView.Cbv, + // Type = ShaderLayoutItemType.ConstantBuffer, + // } + ] + ); + BindingLayout = Device.CreateBindingLayout( + ShaderLayout, [ + BindGroupLayout = Device.CreateBindGroupLayout( + [ + // new() + // { + // Id = 0, + // Stages = ShaderStageFlags.Pixel, + // View = ShaderLayoutItemView.Cbv, + // Type = ShaderLayoutItemType.ConstantBuffer, + // } + ] + ) + ], Name: Name + ); + Shader = Device.CreateShader(modules, ShaderLayout); + Pipeline = Device.CreateComputeShaderPipeline( + Shader, BindingLayout, Name: Name + ); + + using var image_data = await LoadImage("./pattern.png"); + var upload_memory = cmd.AllocImageUploadMemory2D(4, (uint)image_data.Width, (uint)image_data.Height); + for (var row = 0u; row < upload_memory.RowCount; row++) + { + var row_span = image_data.Frames[0].PixelBuffer.DangerousGetRowSpan((int)row); + MemoryMarshal.AsBytes(row_span).CopyTo(upload_memory[row]); + } + var test_image = Isolate.CreateImage( + new() + { + Purpose = ResourcePurpose.ShaderResource, + Format = GraphicsFormat.R8G8B8A8_UNorm, + Width = (uint)image_data.Width, + Height = (uint)image_data.Height, + }, + Name: "Test Image" + ); + cmd.Upload(test_image, upload_memory); + + GenMipmaps(cmd); + } + + private void GenMipmaps(GpuRecord cmd) + { + using var compute = cmd.Compute(); + compute.Dispatch(Pipeline, 1, 1, 1); + } + + protected override void Render(GpuRecord cmd, Time time) + { + cmd.ClearColor(Output, new Color(0.83f, 0.8f, 0.97f)); + } +} diff --git a/Examples/Mipmap/MainWindow.xaml b/Examples/Mipmap/MainWindow.xaml new file mode 100644 index 0000000..8c3fd8b --- /dev/null +++ b/Examples/Mipmap/MainWindow.xaml @@ -0,0 +1,11 @@ + + \ No newline at end of file diff --git a/Examples/Mipmap/MainWindow.xaml.cs b/Examples/Mipmap/MainWindow.xaml.cs new file mode 100644 index 0000000..b86e3dd --- /dev/null +++ b/Examples/Mipmap/MainWindow.xaml.cs @@ -0,0 +1,40 @@ +using System.Windows; +using System.Windows.Interop; +using Serilog; + +namespace Examples; + +/// +/// Interaction logic for MainWindow.xaml +/// +public partial class MainWindow : Window +{ + public readonly Example Example; + + #region Ctor + + public MainWindow() + { + InitializeComponent(); + Example = new(new WindowInteropHelper(this).EnsureHandle(), (uint)Width, (uint)Height); + Title = Example.Name; + Example.DoInitGraphics(); + } + + #endregion + + #region Misc + + protected override void OnClosed(EventArgs e) + { + Example.IsClosed = true; + } + + protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo) + { + Log.Information("OnRenderSizeChanged {NewSize}", sizeInfo.NewSize); + Example.Output.Resize((uint)sizeInfo.NewSize.Width, (uint)sizeInfo.NewSize.Height); + } + + #endregion +} diff --git a/Examples/Mipmap/Mipmap.csproj b/Examples/Mipmap/Mipmap.csproj new file mode 100644 index 0000000..972e2d1 --- /dev/null +++ b/Examples/Mipmap/Mipmap.csproj @@ -0,0 +1,78 @@ + + + + WinExe + net9.0-windows + enable + enable + true + Examples + + + + 715 + D3D12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/Mipmap/Properties/launchSettings.json b/Examples/Mipmap/Properties/launchSettings.json new file mode 100644 index 0000000..673c307 --- /dev/null +++ b/Examples/Mipmap/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Launch": { + "commandName": "Project", + "nativeDebugging": true, + "commandLineArgs": "-D" + } + } +} \ No newline at end of file diff --git a/Examples/Mipmap/Shaders/Shader.hlsl b/Examples/Mipmap/Shaders/Shader.hlsl new file mode 100644 index 0000000..6eeea16 --- /dev/null +++ b/Examples/Mipmap/Shaders/Shader.hlsl @@ -0,0 +1,7 @@ + +[shader("compute")] +[numthreads(32, 32, 1)] +void Compute() +{ + +} From 2188eb1a97dff36bd44e59211a8cfcfedaa2e89a Mon Sep 17 00:00:00 2001 From: U2A5F Date: Sat, 12 Apr 2025 13:10:51 +0800 Subject: [PATCH 05/22] save --- Coplt.Graphics.Native/Api/FFI/Layout.h | 6 +- Coplt.Graphics.Native/D3d12/Src/Binding.cc | 64 ++++++++++++++-------- Coplt.Graphics.Native/D3d12/Src/Binding.h | 1 + Coplt.Graphics.Native/D3d12/Src/Layout.cc | 7 +++ Examples/Mipmap/Example.cs | 58 ++++++++++++++------ Examples/Mipmap/Shaders/Shader.hlsl | 10 +++- 6 files changed, 103 insertions(+), 43 deletions(-) diff --git a/Coplt.Graphics.Native/Api/FFI/Layout.h b/Coplt.Graphics.Native/Api/FFI/Layout.h index 8bc2541..72cc03e 100644 --- a/Coplt.Graphics.Native/Api/FFI/Layout.h +++ b/Coplt.Graphics.Native/Api/FFI/Layout.h @@ -199,9 +199,11 @@ namespace Coplt { // 一般组 Common = 0, - // 提示组的使用是频繁更改的,d3d12 将会尽可能使用根描述符 - // 只有缓冲区可以使用根描述符,且建议小缓冲区(几个 32 位值)尽量使用根常量 + // 动态组不保留绑定状态,每帧都需要在 cmd 上设置 + // d3d12 将会尽可能使用根描述符,但只有缓冲区可以使用根描述符,且建议小缓冲区(几个 32 位值)尽量使用根常量 Dynamic = 1, + // 冻结组中的资源状态将被冻结,不允许改变,可以节省屏障检测开销, 建议将静态资源归与冻结组中 // todo 未实现 + Freeze = 2, }; struct FBindGroupLayoutCreateOptions diff --git a/Coplt.Graphics.Native/D3d12/Src/Binding.cc b/Coplt.Graphics.Native/D3d12/Src/Binding.cc index 6788291..8eb042e 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Binding.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Binding.cc @@ -14,50 +14,66 @@ D3d12ShaderBindGroup::D3d12ShaderBindGroup(Rc&& device, const FS if (layout == nullptr) COPLT_THROW("Layout from different backends"); m_layout = Rc::UnsafeClone(layout); + const auto& layout_data = m_layout->Data(); + m_resource_heap_inc = m_device->m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + m_sampler_heap_inc = m_device->m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER); const auto items = m_layout->GetItems(); usize sum_count = 0; for (const auto& item : items) { - sum_count += std::max(1u, item.Count); + if (item.Count == COPLT_U32_MAX) sum_count += 1; + else sum_count += std::max(1u, item.Count); } CountSlots = sum_count; - m_views = std::vector(sum_count, View{}); - m_changed_marks = std::vector(sum_count, false); m_item_indexes.reserve(items.size()); m_define_indexes.reserve(sum_count); for (u32 i = 0, off = 0; i < items.size(); ++i) { m_item_indexes.push_back(off); const auto count = std::max(1u, items[i].Count); + if (count == COPLT_U32_MAX) + { + m_define_indexes.push_back(i); + break; + } off += count; for (int j = 0; j < count; ++j) { m_define_indexes.push_back(i); } } - const auto& layout_data = m_layout->Data(); - m_resource_heap_inc = m_device->m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); - m_sampler_heap_inc = m_device->m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER); - if (layout_data.ResourceTableSize > 0) - { - D3D12_DESCRIPTOR_HEAP_DESC desc{}; - desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; - desc.NumDescriptors = layout_data.ResourceTableSize; - chr | m_device->m_device->CreateDescriptorHeap(&desc, IID_PPV_ARGS(&m_resource_heap)); - } - if (layout_data.SamplerTableSize > 0) + if (layout_data.Usage == FBindGroupUsage::Dynamic) { - D3D12_DESCRIPTOR_HEAP_DESC desc{}; - desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER; - desc.NumDescriptors = layout_data.SamplerTableSize; - chr | m_device->m_device->CreateDescriptorHeap(&desc, IID_PPV_ARGS(&m_sampler_heap)); + if (options.NumBindings > 0) + { + COPLT_THROW("Dynamic groups are not allowed to set items"); + } } - if (!options.Name.is_null()) + else { - m_name = options.Name.ToString(); - DoSetName(m_name->GetStr()); + m_views = std::vector(sum_count, View{}); + m_changed_marks = std::vector(sum_count, false); + if (layout_data.ResourceTableSize > 0) + { + D3D12_DESCRIPTOR_HEAP_DESC desc{}; + desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; + desc.NumDescriptors = layout_data.ResourceTableSize; + chr | m_device->m_device->CreateDescriptorHeap(&desc, IID_PPV_ARGS(&m_resource_heap)); + } + if (layout_data.SamplerTableSize > 0) + { + D3D12_DESCRIPTOR_HEAP_DESC desc{}; + desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER; + desc.NumDescriptors = layout_data.SamplerTableSize; + chr | m_device->m_device->CreateDescriptorHeap(&desc, IID_PPV_ARGS(&m_sampler_heap)); + } + if (!options.Name.is_null()) + { + m_name = options.Name.ToString(); + DoSetName(m_name->GetStr()); + } + Set(std::span(options.Bindings, options.Bindings + options.NumBindings)); } - Set(std::span(options.Bindings, options.Bindings + options.NumBindings)); } FResult D3d12ShaderBindGroup::SetName(const FStr8or16& name) noexcept @@ -143,6 +159,10 @@ RwLock& D3d12ShaderBindGroup::SelfLock() noexcept void D3d12ShaderBindGroup::Set(const std::span items) { + if (m_layout->Data().Usage == FBindGroupUsage::Dynamic) + { + COPLT_THROW("Dynamic groups are not allowed to set items"); + } if (items.empty()) return; const auto defs = m_layout->GetItems(); const auto slots = m_layout->Slots(); diff --git a/Coplt.Graphics.Native/D3d12/Src/Binding.h b/Coplt.Graphics.Native/D3d12/Src/Binding.h index 0c58245..08e74b2 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Binding.h +++ b/Coplt.Graphics.Native/D3d12/Src/Binding.h @@ -36,6 +36,7 @@ namespace Coplt Rc m_name{}; Rc m_device{}; Rc m_layout{}; + // 动态组永远不会创建描述符暂存堆 ComPtr m_resource_heap{}; ComPtr m_sampler_heap{}; u32 m_resource_heap_inc{}; diff --git a/Coplt.Graphics.Native/D3d12/Src/Layout.cc b/Coplt.Graphics.Native/D3d12/Src/Layout.cc index d7de649..ccbe17e 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Layout.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Layout.cc @@ -83,6 +83,13 @@ D3d12BindGroupLayout::D3d12BindGroupLayout(const FBindGroupLayoutCreateOptions& const auto count = std::max(1u, item.Count); if (count == COPLT_U32_MAX) { + if (Usage != FBindGroupUsage::Dynamic) + { + COPLT_THROW_FMT( + "Invalid binding define {{ Id = {}, Scope = {}, Stages = {} }} at [{}]; Only dynamic usage groups support unlimited length arrays", + item.Id, item.Scope, static_cast(item.Stages), i + ); + } if (i + 1 != m_items.size()) { COPLT_THROW_FMT( diff --git a/Examples/Mipmap/Example.cs b/Examples/Mipmap/Example.cs index 24d77e8..38fe81f 100644 --- a/Examples/Mipmap/Example.cs +++ b/Examples/Mipmap/Example.cs @@ -2,6 +2,7 @@ using Coplt.Graphics; using Coplt.Graphics.Core; using Coplt.Graphics.States; +using Coplt.Mathematics; namespace Examples; @@ -22,28 +23,47 @@ protected override async Task LoadResources(GpuRecord cmd) var modules = await LoadShaderModules("Shader", [ShaderStage.Compute]); ShaderLayout = Device.CreateShaderLayout( [ - // new() - // { - // Id = 0, - // Slot = 0, - // Stage = ShaderStage.Pixel, - // View = ShaderLayoutItemView.Cbv, - // Type = ShaderLayoutItemType.ConstantBuffer, - // } + new() + { + Id = 0, + Slot = 0, + Stage = ShaderStage.Compute, + View = ShaderLayoutItemView.Cbv, + Type = ShaderLayoutItemType.ConstantBuffer, + }, + new() + { + Id = 1, + Slot = 0, + Count = uint.MaxValue, + Stage = ShaderStage.Compute, + View = ShaderLayoutItemView.Uav, + Type = ShaderLayoutItemType.Texture2D, + UavAccess = ResourceAccess.ReadWrite, + } ] ); BindingLayout = Device.CreateBindingLayout( ShaderLayout, [ BindGroupLayout = Device.CreateBindGroupLayout( [ - // new() - // { - // Id = 0, - // Stages = ShaderStageFlags.Pixel, - // View = ShaderLayoutItemView.Cbv, - // Type = ShaderLayoutItemType.ConstantBuffer, - // } - ] + new() + { + Id = 0, + Stages = ShaderStageFlags.Compute, + View = ShaderLayoutItemView.Cbv, + Type = ShaderLayoutItemType.ConstantBuffer, + }, + new() + { + Id = 1, + Count = uint.MaxValue, + Stages = ShaderStageFlags.Compute, + View = ShaderLayoutItemView.Uav, + Type = ShaderLayoutItemType.Texture2D, + } + ], + Usage: BindGroupUsage.Dynamic ) ], Name: Name ); @@ -51,7 +71,9 @@ protected override async Task LoadResources(GpuRecord cmd) Pipeline = Device.CreateComputeShaderPipeline( Shader, BindingLayout, Name: Name ); - + BindGroup = Isolate.CreateBindGroup(BindGroupLayout, []); + Binding = Isolate.CreateBinding(BindingLayout, [new(0, BindGroup)]); + using var image_data = await LoadImage("./pattern.png"); var upload_memory = cmd.AllocImageUploadMemory2D(4, (uint)image_data.Width, (uint)image_data.Height); for (var row = 0u; row < upload_memory.RowCount; row++) @@ -59,6 +81,7 @@ protected override async Task LoadResources(GpuRecord cmd) var row_span = image_data.Frames[0].PixelBuffer.DangerousGetRowSpan((int)row); MemoryMarshal.AsBytes(row_span).CopyTo(upload_memory[row]); } + var mip_levels = 1 + (uint)math.log2((double)math.max(image_data.Width, image_data.Height)); var test_image = Isolate.CreateImage( new() { @@ -66,6 +89,7 @@ protected override async Task LoadResources(GpuRecord cmd) Format = GraphicsFormat.R8G8B8A8_UNorm, Width = (uint)image_data.Width, Height = (uint)image_data.Height, + MipLevels = mip_levels, }, Name: "Test Image" ); diff --git a/Examples/Mipmap/Shaders/Shader.hlsl b/Examples/Mipmap/Shaders/Shader.hlsl index 6eeea16..4c560dc 100644 --- a/Examples/Mipmap/Shaders/Shader.hlsl +++ b/Examples/Mipmap/Shaders/Shader.hlsl @@ -1,7 +1,13 @@ +cbuffer Args : register(b0) +{ + float2 image_size; + uint mip_levels; +} + +RWTexture2D images[] : register(u0); [shader("compute")] [numthreads(32, 32, 1)] -void Compute() +void Compute(uint2 gtid : SV_GroupThreadID, uint2 gid: SV_GroupID) { - } From f7195e31eeffd40048b1693280431a0ab7d25cf7 Mon Sep 17 00:00:00 2001 From: U2A5F Date: Mon, 14 Apr 2025 18:28:01 +0800 Subject: [PATCH 06/22] save --- Coplt.Graphics.Core/Core/GpuRecord.cs | 24 +++ Coplt.Graphics.Core/Native/Native.cs | 32 +++- Coplt.Graphics.Native/Api/FFI/Cmd.h | 10 ++ Coplt.Graphics.Native/D3d12/Src/Record.cc | 25 ++- Examples/Mipmap/Example.cs | 10 +- Examples/Mipmap/Shaders/Shader.hlsl | 183 +++++++++++++++++++++- 6 files changed, 266 insertions(+), 18 deletions(-) diff --git a/Coplt.Graphics.Core/Core/GpuRecord.cs b/Coplt.Graphics.Core/Core/GpuRecord.cs index a6324f9..cd615ea 100644 --- a/Coplt.Graphics.Core/Core/GpuRecord.cs +++ b/Coplt.Graphics.Core/Core/GpuRecord.cs @@ -981,6 +981,18 @@ public void SetBinding(GpuRecord self, ShaderBinding Binding) self.Data.Commands.Add(new() { SetBinding = cmd }); } + public void DynamicNew(GpuRecord self, uint GroupIndex, uint DynArraySize) + { + if (m_current_binding == null) throw new InvalidOperationException("Binding not set"); + var cmd = new FCmdDynamicNew + { + Base = { Type = FCmdType.DynamicNew }, + GroupIndex = GroupIndex, + DynArraySize = DynArraySize, + }; + self.Data.Commands.Add(new() { DynamicNew = cmd }); + } + #endregion } @@ -1069,6 +1081,12 @@ public void SetBinding(ShaderBinding Binding) m_pipeline_context.SetBinding(self, Binding); } + public void DynamicNew(uint GroupIndex, uint DynArraySize = 0) + { + self.AssertNotEnded(); + m_pipeline_context.DynamicNew(self, GroupIndex, DynArraySize); + } + #endregion #region SetViewportScissor @@ -1359,6 +1377,12 @@ public void SetBinding(ShaderBinding Binding) m_pipeline_context.SetBinding(self, Binding); } + public void DynamicNew(uint GroupIndex, uint DynArraySize = 0) + { + self.AssertNotEnded(); + m_pipeline_context.DynamicNew(self, GroupIndex, DynArraySize); + } + #endregion #region Dispatch diff --git a/Coplt.Graphics.Core/Native/Native.cs b/Coplt.Graphics.Core/Native/Native.cs index 778585c..e6ad437 100644 --- a/Coplt.Graphics.Core/Native/Native.cs +++ b/Coplt.Graphics.Core/Native/Native.cs @@ -1803,6 +1803,7 @@ public enum FCmdType : uint Compute, SetPipeline, SetBinding, + DynamicNew, SetViewportScissor, SetMeshBuffers, Draw, @@ -1819,7 +1820,7 @@ public enum FCmdResType : byte public unsafe partial struct FCmdRes { - [NativeTypeName("__AnonymousRecord_Cmd_L71_C9")] + [NativeTypeName("__AnonymousRecord_Cmd_L72_C9")] public _Anonymous_e__Union Anonymous; [NativeTypeName("Coplt::FCmdResType")] @@ -2233,6 +2234,18 @@ public partial struct FCmdSetBinding public uint Index; } + [NativeTypeName("struct FCmdDynamicNew : Coplt::FCmdBase")] + public partial struct FCmdDynamicNew + { + public FCmdBase Base; + + [NativeTypeName("Coplt::u32")] + public uint GroupIndex; + + [NativeTypeName("Coplt::u32")] + public uint DynArraySize; + } + [NativeTypeName("struct FCmdSetViewportScissor : Coplt::FCmdBase")] public partial struct FCmdSetViewportScissor { @@ -2346,7 +2359,7 @@ public partial struct FCmdDispatch public partial struct FCmdItem { - [NativeTypeName("__AnonymousRecord_Cmd_L360_C9")] + [NativeTypeName("__AnonymousRecord_Cmd_L369_C9")] public _Anonymous_e__Union Anonymous; [UnscopedRef] @@ -2479,6 +2492,16 @@ public ref FCmdSetBinding SetBinding } } + [UnscopedRef] + public ref FCmdDynamicNew DynamicNew + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return ref Anonymous.DynamicNew; + } + } + [UnscopedRef] public ref FCmdSetViewportScissor SetViewportScissor { @@ -2584,6 +2607,10 @@ public partial struct _Anonymous_e__Union [NativeTypeName("Coplt::FCmdSetBinding")] public FCmdSetBinding SetBinding; + [FieldOffset(0)] + [NativeTypeName("Coplt::FCmdDynamicNew")] + public FCmdDynamicNew DynamicNew; + [FieldOffset(0)] [NativeTypeName("Coplt::FCmdSetViewportScissor")] public FCmdSetViewportScissor SetViewportScissor; @@ -4939,6 +4966,7 @@ public enum FBindGroupUsage : byte { Common = 0, Dynamic = 1, + Freeze = 2, } public unsafe partial struct FBindGroupLayoutCreateOptions diff --git a/Coplt.Graphics.Native/Api/FFI/Cmd.h b/Coplt.Graphics.Native/Api/FFI/Cmd.h index 267dea8..325b357 100644 --- a/Coplt.Graphics.Native/Api/FFI/Cmd.h +++ b/Coplt.Graphics.Native/Api/FFI/Cmd.h @@ -31,6 +31,7 @@ namespace Coplt // Render / Compute SetPipeline, SetBinding, + DynamicNew, // Render SetViewportScissor, @@ -286,6 +287,14 @@ namespace Coplt u32 Index{}; }; + struct FCmdDynamicNew : FCmdBase + { + // 绑定中的第几个组 + u32 GroupIndex{}; + // 如果组中有动态大小数组,则需要填写 + u32 DynArraySize{}; + }; + //////////////////////////////////////////////////////////////////////////////////////////////////// struct FCmdSetViewportScissor : FCmdBase @@ -378,6 +387,7 @@ namespace Coplt FCmdSetPipeline SetPipeline; FCmdSetBinding SetBinding; + FCmdDynamicNew DynamicNew; FCmdSetViewportScissor SetViewportScissor; FCmdSetMeshBuffers SetMeshBuffers; diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.cc b/Coplt.Graphics.Native/D3d12/Src/Record.cc index 278d5dc..da80c91 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Record.cc @@ -734,25 +734,34 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) DescriptorAllocation sampler_allocation{}; // todo 确定是最后一次修改 const auto f = [&]( - const bool last, const u32 size, const Rc& heap, + const bool dyn, const u32 size, const Rc& heap, const ComPtr& dh, DescriptorAllocation& allocation ) { if (size == 0) return; - if (data.Usage == FBindGroupUsage::Dynamic && !last) + if (data.Usage == FBindGroupUsage::Dynamic) { allocation = heap->AllocateTmp(size); } else { - bool exists = false; - allocation = heap->Allocate(object_id, size, exists); - if (exists) return; + if (dyn) + { + allocation = heap->AllocateTmp(size); + } + else + { + bool exists = false; + allocation = heap->Allocate(object_id, size, exists); + if (exists) return; + } + m_device->m_device->CopyDescriptorsSimple( + size, allocation.GetCpuHandle(), dh->GetCPUDescriptorHandleForHeapStart(), heap->m_type + ); } - m_device->m_device->CopyDescriptorsSimple(size, allocation.GetCpuHandle(), dh->GetCPUDescriptorHandleForHeapStart(), heap->m_type); }; - f(true, data.ResourceTableSize, m_context->m_descriptor_manager.m_res, group->ResourceHeap(), resource_allocation); - f(true, data.SamplerTableSize, m_context->m_descriptor_manager.m_smp, group->SamplerHeap(), sampler_allocation); + f(false, data.ResourceTableSize, m_context->m_descriptor_manager.m_res, group->ResourceHeap(), resource_allocation); + f(false, data.SamplerTableSize, m_context->m_descriptor_manager.m_smp, group->SamplerHeap(), sampler_allocation); m_allocations.push_back({resource_allocation, sampler_allocation}); } for (const auto& bind_item_info : bind_item_infos) diff --git a/Examples/Mipmap/Example.cs b/Examples/Mipmap/Example.cs index 38fe81f..858e4dc 100644 --- a/Examples/Mipmap/Example.cs +++ b/Examples/Mipmap/Example.cs @@ -28,7 +28,8 @@ protected override async Task LoadResources(GpuRecord cmd) Id = 0, Slot = 0, Stage = ShaderStage.Compute, - View = ShaderLayoutItemView.Cbv, + View = ShaderLayoutItemView.Constants, + Count = 4, Type = ShaderLayoutItemType.ConstantBuffer, }, new() @@ -51,7 +52,8 @@ protected override async Task LoadResources(GpuRecord cmd) { Id = 0, Stages = ShaderStageFlags.Compute, - View = ShaderLayoutItemView.Cbv, + View = ShaderLayoutItemView.Constants, + Count = 4, Type = ShaderLayoutItemType.ConstantBuffer, }, new() @@ -101,7 +103,9 @@ protected override async Task LoadResources(GpuRecord cmd) private void GenMipmaps(GpuRecord cmd) { using var compute = cmd.Compute(); - compute.Dispatch(Pipeline, 1, 1, 1); + // compute.SetBinding(Binding); + // compute.DynamicNew(0, 4); + compute.Dispatch(Pipeline, 1, 1); } protected override void Render(GpuRecord cmd, Time time) diff --git a/Examples/Mipmap/Shaders/Shader.hlsl b/Examples/Mipmap/Shaders/Shader.hlsl index 4c560dc..f13c098 100644 --- a/Examples/Mipmap/Shaders/Shader.hlsl +++ b/Examples/Mipmap/Shaders/Shader.hlsl @@ -1,13 +1,186 @@ +enum class Mode : uint +{ + Common, + L4, +}; + cbuffer Args : register(b0) { - float2 image_size; - uint mip_levels; + Mode mode; + uint mip_levels; // 0 .. 4 + uint2 size; +} + +RWTexture2D images[] : register(u0); + +groupshared float tmp_r[8][8]; +groupshared float tmp_g[8][8]; +groupshared float tmp_b[8][8]; +groupshared float tmp_a[8][8]; + +void StoreColor(uint2 pos, float4 color) +{ + tmp_r[pos.y][pos.x] = color.r; + tmp_g[pos.y][pos.x] = color.g; + tmp_b[pos.y][pos.x] = color.b; + tmp_a[pos.y][pos.x] = color.a; +} + +float4 LoadColor(uint2 pos) +{ + return float4( + tmp_r[pos.y][pos.x], + tmp_g[pos.y][pos.x], + tmp_b[pos.y][pos.x], + tmp_a[pos.y][pos.x] + ); } -RWTexture2D images[] : register(u0); +void X8_8(uint2 gtid, uint2 gid, inout uint index, inout float4 color); +void X4_4(uint2 gtid, uint2 gid, inout uint index, inout float4 color); +void X2_2(uint2 gid, inout uint index, inout float4 color); [shader("compute")] -[numthreads(32, 32, 1)] -void Compute(uint2 gtid : SV_GroupThreadID, uint2 gid: SV_GroupID) +[numthreads(8, 8, 1)] +void Compute(uint2 tid : SV_DispatchThreadID, uint2 gtid : SV_GroupThreadID, uint2 gid: SV_GroupID) +{ + uint index = 1; + + float4 color; // cur pixel color + switch (mip_levels) + { + case 4: + { + uint2 pos = 2 * tid; + RWTexture2D src = images[0]; // 16x16 + RWTexture2D dst = images[1]; // 8x8 + color = ( + src.Load(pos + uint2(0, 0)) + + src.Load(pos + uint2(0, 1)) + + src.Load(pos + uint2(1, 0)) + + src.Load(pos + uint2(1, 1)) + ) * 0.25; + dst[gtid] = color; + index = 2; + X8_8(gtid, gid, index, color); + return; + } + case 3: + { + uint2 base = gid * 8; + uint2 pos = base + gtid; + RWTexture2D src = images[0]; // 8x8 + color = src.Load(pos); + X8_8(gtid, gid, index, color); + return; + } + case 2: + { + if (any(gtid >= 4)) return; + uint2 base = gid * 4; + uint2 pos = base + gtid; + RWTexture2D src = images[0]; // 4x4 + color = src.Load(pos); + X4_4(gtid, gid, index, color); + return; + } + case 1: + { + if (any(gtid >= 2)) return; + uint2 base = gid * 2; + uint2 pos = base + gtid; + RWTexture2D src = images[0]; // 2x2 + color = src.Load(pos); + X2_2(gid, index, color); + } + default: + return; + } +} + +bool QuadIsFirst() +{ + return WaveGetLaneIndex() % 4 == 0; +} + +void X8_8(uint2 gtid, uint2 gid, inout uint index, inout float4 color) +{ + RWTexture2D dst = images[index]; // 4x4 + // color from 8x8 + float4 c1 = QuadReadAcrossX(color); + float4 c2 = QuadReadAcrossY(color); + float4 c3 = QuadReadAcrossDiagonal(color); + float4 dst_color = (color + c1 + c2 + c3) * 0.25; + bool can_wave = WaveGetLaneCount() >= 64; + if (QuadIsFirst()) + { + uint2 base = gid * 4; + uint2 pos = gtid / 2; + dst[base + pos] = dst_color; + if (!can_wave) StoreColor(pos, dst_color); + } + if (!can_wave) + { + GroupMemoryBarrierWithGroupSync(); + if (any(gtid >= 4)) return; + color = LoadColor(gtid); + } + else + { + if (all(gtid < 4)) + { + color = WaveReadLaneAt(dst_color, WaveGetLaneIndex() * 4); + } + if (any(gtid >= 4)) return; + } + index++; + X4_4(gtid, gid, index, color); +} + +void X4_4(uint2 gtid, uint2 gid, inout uint index, inout float4 color) +{ + RWTexture2D dst = images[index]; // 2x2 + // color from 4x4 + float4 c1 = QuadReadAcrossX(color); + float4 c2 = QuadReadAcrossY(color); + float4 c3 = QuadReadAcrossDiagonal(color); + float4 dst_color = (color + c1 + c2 + c3) * 0.25; + bool can_wave = WaveGetLaneCount() >= 32; + if (QuadIsFirst()) + { + uint2 base = gid * 2; + uint2 pos = gtid / 2; + dst[base + pos] = dst_color; + if (!can_wave) StoreColor(pos, dst_color); + } + if (!can_wave) + { + GroupMemoryBarrierWithGroupSync(); + if (any(gtid >= 2)) return; + color = LoadColor(gtid); + } + else + { + if (all(gtid < 2)) + { + color = WaveReadLaneAt(dst_color, WaveGetLaneIndex() * 2); + } + if (any(gtid >= 2)) return; + } + index++; + X2_2(gid, index, color); +} + +void X2_2(uint2 gid, inout uint index, inout float4 color) { + RWTexture2D dst = images[index]; // 1x1 + // color from 2x2 + float4 c1 = QuadReadAcrossX(color); + float4 c2 = QuadReadAcrossY(color); + float4 c3 = QuadReadAcrossDiagonal(color); + float4 dst_color = (color + c1 + c2 + c3) * 0.25; + if (QuadIsFirst()) + { + dst[gid] = dst_color; + } } From f18c4102ceba89c9499bf7e7a035d079c2d71621 Mon Sep 17 00:00:00 2001 From: U2A5F Date: Mon, 14 Apr 2025 22:54:53 +0800 Subject: [PATCH 07/22] save --- Coplt.Graphics.Core/Core/GpuBuffer.cs | 9 +- Coplt.Graphics.Core/Core/GpuImage.cs | 32 ++++- Coplt.Graphics.Core/Core/GpuIsolate.cs | 4 +- Coplt.Graphics.Core/Core/GpuRecord.cs | 122 ++++++++++++++++++-- Coplt.Graphics.Core/Core/ShaderBindGroup.cs | 16 +-- Coplt.Graphics.Core/Native/Native.cs | 93 +++++++++++++-- Coplt.Graphics.Native/Api/FFI/Cmd.h | 37 +++++- Coplt.Graphics.Native/Api/FFI/Record.h | 7 +- Examples/Mipmap/Example.cs | 17 ++- Examples/Mipmap/Shaders/Shader.hlsl | 9 +- 10 files changed, 294 insertions(+), 52 deletions(-) diff --git a/Coplt.Graphics.Core/Core/GpuBuffer.cs b/Coplt.Graphics.Core/Core/GpuBuffer.cs index c2d7ae2..61d5681 100644 --- a/Coplt.Graphics.Core/Core/GpuBuffer.cs +++ b/Coplt.Graphics.Core/Core/GpuBuffer.cs @@ -69,7 +69,7 @@ m_name is null #endregion - #region View + #region Try View public bool TryVbv() => Purpose.HasFlags(ResourcePurpose.VertexBuffer); public bool TryIbv() => Purpose.HasFlags(ResourcePurpose.IndexBuffer); @@ -80,6 +80,13 @@ m_name is null #endregion + #region Create View + + public View View(ulong Offset = 0, int Size = -1, int Stride = -1, GraphicsFormat Format = 0) => + Core.View.MakeBuffer(this, Offset, Size, Stride, Format); + + #endregion + #region Map UnMap public void* Map() => Map(CpuAccess != CpuAccess.Read); diff --git a/Coplt.Graphics.Core/Core/GpuImage.cs b/Coplt.Graphics.Core/Core/GpuImage.cs index fd2406e..f1ef2f5 100644 --- a/Coplt.Graphics.Core/Core/GpuImage.cs +++ b/Coplt.Graphics.Core/Core/GpuImage.cs @@ -136,7 +136,7 @@ m_name is null #endregion - #region View + #region Try View public bool TryRtv() => Purpose.HasFlags(ResourcePurpose.RenderTarget); public bool TryDsv() => Purpose.HasFlags(ResourcePurpose.DepthStencil); @@ -144,4 +144,34 @@ m_name is null public bool TrySrv() => Purpose.HasFlags(ResourcePurpose.ShaderResource); #endregion + + #region Create View + + /// Uav 忽略 NumMips + public View View1D(byte Mip = 0, sbyte NumMips = -1, GraphicsFormat Format = 0) + => View.MakeImage1D(this, Mip, NumMips, Format); + /// Uav 忽略 NumMips + public View View1DArray(uint Index = 0, int Size = -1, byte Mip = 0, sbyte NumMips = -1, GraphicsFormat Format = 0) + => View.MakeImage1DArray(this, Index, Size, Mip, NumMips, Format); + /// Uav 忽略 NumMips + public View View2D(byte Mip = 0, sbyte NumMips = -1, byte Plane = 0, GraphicsFormat Format = 0) + => View.MakeImage2D(this, Mip, NumMips, Plane, Format); + /// Uav 忽略 NumMips + public View View2DArray(uint Index = 0, int Size = -1, byte Mip = 0, sbyte NumMips = -1, byte Plane = 0, GraphicsFormat Format = 0) + => View.MakeImage2DArray(this, Index, Size, Mip, NumMips, Plane, Format); + public View View2DMs(GraphicsFormat Format = 0) + => View.MakeImage2DMs(this, Format); + public View View2DMsArray(uint Index = 0, int Size = -1, GraphicsFormat Format = 0) + => View.MakeImage2DMsArray(this, Index, Size, Format); + /// Uav 忽略 NumMips + public View View3D(uint Z = 0, int Depth = -1, byte Mip = 0, sbyte NumMips = -1, GraphicsFormat Format = 0) + => View.MakeImage3D(this, Z, Depth, Mip, NumMips, Format); + /// Uav 忽略 NumMips + public View ViewCube(byte Mip = 0, sbyte NumMips = -1, GraphicsFormat Format = 0) + => View.MakeImageCube(this, Mip, NumMips, Format); + /// Uav 忽略 NumMips + public View ViewCubeArray(uint Index = 0, int Size = -1, byte Mip = 0, sbyte NumMips = -1, GraphicsFormat Format = 0) + => View.MakeImageCubeArray(this, Index, Size, Mip, NumMips, Format); + + #endregion } diff --git a/Coplt.Graphics.Core/Core/GpuIsolate.cs b/Coplt.Graphics.Core/Core/GpuIsolate.cs index a0c035d..514de8e 100644 --- a/Coplt.Graphics.Core/Core/GpuIsolate.cs +++ b/Coplt.Graphics.Core/Core/GpuIsolate.cs @@ -304,8 +304,8 @@ public ShaderBindGroup CreateBindGroup( f_items[i] = new() { View = item.View.ToFFI(), - Slot = item.Slot, - Index = item.Index, + Slot = item.BindIndex, + Index = item.ArrayIndex, }; } fixed (char* p_name = Name) diff --git a/Coplt.Graphics.Core/Core/GpuRecord.cs b/Coplt.Graphics.Core/Core/GpuRecord.cs index cd615ea..85b5e84 100644 --- a/Coplt.Graphics.Core/Core/GpuRecord.cs +++ b/Coplt.Graphics.Core/Core/GpuRecord.cs @@ -981,16 +981,58 @@ public void SetBinding(GpuRecord self, ShaderBinding Binding) self.Data.Commands.Add(new() { SetBinding = cmd }); } - public void DynamicNew(GpuRecord self, uint GroupIndex, uint DynArraySize) + public void SetDynSize(GpuRecord self, uint GroupIndex, uint Size) { if (m_current_binding == null) throw new InvalidOperationException("Binding not set"); - var cmd = new FCmdDynamicNew + var cmd = new FCmdSetDynSize { - Base = { Type = FCmdType.DynamicNew }, - GroupIndex = GroupIndex, - DynArraySize = DynArraySize, + Base = { Type = FCmdType.SetDynSize }, + Group = GroupIndex, + Size = Size, }; - self.Data.Commands.Add(new() { DynamicNew = cmd }); + self.Data.Commands.Add(new() { SetDynSize = cmd }); + } + + public void SetConstants(GpuRecord self, uint GroupIndex, uint BindIndex, ReadOnlySpan Constants, uint Offset) + { + if (m_current_binding == null) throw new InvalidOperationException("Binding not set"); + if (Constants.Length == 0) return; + var cmd = new FCmdSetConsts + { + Base = { Type = FCmdType.SetConsts }, + Group = GroupIndex, + Slot = BindIndex, + ValueIndex = (uint)self.Data.Payload32Bits.LongLength, + Count = (uint)Constants.Length, + Offset = Offset, + }; + self.Data.Payload32Bits.AddRange(Constants); + self.Data.Commands.Add(new() { SetConsts = cmd }); + } + + public void SetDynItem(GpuRecord self, uint GroupIndex, ReadOnlySpan Items) + { + if (m_current_binding == null) throw new InvalidOperationException("Binding not set"); + if (Items.Length == 0) return; + var cmd = new FCmdSetDynItem + { + Base = { Type = FCmdType.SetDynItem }, + Group = GroupIndex, + ItemIndex = (uint)self.Data.PayloadSetBindItem.LongLength, + Count = (uint)Items.Length, + }; + var dst = self.Data.PayloadSetBindItem.UnsafeAddRange(Items.Length); + for (var i = 0; i < Items.Length; i++) + { + ref readonly var item = ref Items[i]; + dst[i] = new() + { + View = item.View.ToFFI(), + Slot = item.BindIndex, + Index = item.ArrayIndex, + }; + } + self.Data.Commands.Add(new() { SetDynItem = cmd }); } #endregion @@ -1081,10 +1123,40 @@ public void SetBinding(ShaderBinding Binding) m_pipeline_context.SetBinding(self, Binding); } - public void DynamicNew(uint GroupIndex, uint DynArraySize = 0) + /// + /// 设置动态绑定的动态数组大小,调用后之前的动态数组内容将被丢弃 + /// + public void SetDynSize(uint GroupIndex, uint Size) + { + self.AssertNotEnded(); + m_pipeline_context.SetDynSize(self, GroupIndex, Size); + } + + [OverloadResolutionPriority(1)] + public void SetConstants(uint GroupIndex, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) + { + self.AssertNotEnded(); + m_pipeline_context.SetConstants(self, GroupIndex, BindIndex, Constants, Offset); + } + + public void SetConstants(uint GroupIndex, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) where T : unmanaged { + if ((sizeof(T) & 3) != 0) throw new ArgumentException("Constant size must be a multiple of 4"); self.AssertNotEnded(); - m_pipeline_context.DynamicNew(self, GroupIndex, DynArraySize); + m_pipeline_context.SetConstants(self, GroupIndex, BindIndex, MemoryMarshal.Cast(Constants), Offset); + } + + public void SetConstants(uint GroupIndex, uint BindIndex, in T Constant, uint Offset = 0) where T : unmanaged + { + if ((sizeof(T) & 3) != 0) throw new ArgumentException("Constant size must be a multiple of 4"); + self.AssertNotEnded(); + m_pipeline_context.SetConstants(self, GroupIndex, BindIndex, MemoryMarshal.Cast(new ReadOnlySpan(in Constant)), Offset); + } + + public void SetDynItem(uint GroupIndex, ReadOnlySpan Items) + { + self.AssertNotEnded(); + m_pipeline_context.SetDynItem(self, GroupIndex, Items); } #endregion @@ -1377,10 +1449,40 @@ public void SetBinding(ShaderBinding Binding) m_pipeline_context.SetBinding(self, Binding); } - public void DynamicNew(uint GroupIndex, uint DynArraySize = 0) + /// + /// 设置动态绑定的动态数组大小,调用后之前的动态数组内容将被丢弃 + /// + public void SetDynSize(uint GroupIndex, uint Size) + { + self.AssertNotEnded(); + m_pipeline_context.SetDynSize(self, GroupIndex, Size); + } + + [OverloadResolutionPriority(1)] + public void SetConstants(uint GroupIndex, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) + { + self.AssertNotEnded(); + m_pipeline_context.SetConstants(self, GroupIndex, BindIndex, Constants, Offset); + } + + public void SetConstants(uint GroupIndex, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) where T : unmanaged + { + if ((sizeof(T) & 3) != 0) throw new ArgumentException("Constant size must be a multiple of 4"); + self.AssertNotEnded(); + m_pipeline_context.SetConstants(self, GroupIndex, BindIndex, MemoryMarshal.Cast(Constants), Offset); + } + + public void SetConstants(uint GroupIndex, uint BindIndex, in T Constant, uint Offset = 0) where T : unmanaged + { + if ((sizeof(T) & 3) != 0) throw new ArgumentException("Constant size must be a multiple of 4"); + self.AssertNotEnded(); + m_pipeline_context.SetConstants(self, GroupIndex, BindIndex, MemoryMarshal.Cast(new ReadOnlySpan(in Constant)), Offset); + } + + public void SetDynItem(uint GroupIndex, ReadOnlySpan Items) { self.AssertNotEnded(); - m_pipeline_context.DynamicNew(self, GroupIndex, DynArraySize); + m_pipeline_context.SetDynItem(self, GroupIndex, Items); } #endregion diff --git a/Coplt.Graphics.Core/Core/ShaderBindGroup.cs b/Coplt.Graphics.Core/Core/ShaderBindGroup.cs index 98c9f69..b82dcbf 100644 --- a/Coplt.Graphics.Core/Core/ShaderBindGroup.cs +++ b/Coplt.Graphics.Core/Core/ShaderBindGroup.cs @@ -3,14 +3,14 @@ namespace Coplt.Graphics.Core; -/// 绑定槽的索引 -/// 如果绑定是数组的话,数组中的索引 +/// 绑定槽的索引 +/// 如果绑定是数组的话,数组中的索引 /// 绑定内容 -public record struct SetShaderBindItem(uint Slot, uint Index, View View) +public record struct SetShaderBindItem(uint BindIndex, uint ArrayIndex, View View) { - /// 绑定槽的索引 + /// 绑定槽的索引 /// 绑定内容 - public SetShaderBindItem(uint Slot, View View) : this(Slot, 0, View) { } + public SetShaderBindItem(uint BindIndex, View View) : this(BindIndex, 0, View) { } } [Dropping(Unmanaged = true)] @@ -60,9 +60,9 @@ internal static void CheckSet(ShaderBindGroupLayout layout, ReadOnlySpan= defs.Length) throw new IndexOutOfRangeException(); - ref readonly var def = ref defs[(int)item.Slot]; - if (item.Index >= def.Count) throw new IndexOutOfRangeException(); + if (item.BindIndex >= defs.Length) throw new IndexOutOfRangeException(); + ref readonly var def = ref defs[(int)item.BindIndex]; + if (item.ArrayIndex >= def.Count) throw new IndexOutOfRangeException(); } } diff --git a/Coplt.Graphics.Core/Native/Native.cs b/Coplt.Graphics.Core/Native/Native.cs index e6ad437..b16adf2 100644 --- a/Coplt.Graphics.Core/Native/Native.cs +++ b/Coplt.Graphics.Core/Native/Native.cs @@ -1773,6 +1773,11 @@ public unsafe partial struct FGpuRecordData public FList PayloadVertexBufferRange; + [NativeTypeName("FList")] + public FList Payload32Bits; + + public FList PayloadSetBindItem; + [NativeTypeName("FList")] public FList Blob; @@ -1803,7 +1808,9 @@ public enum FCmdType : uint Compute, SetPipeline, SetBinding, - DynamicNew, + SetConsts, + SetDynSize, + SetDynItem, SetViewportScissor, SetMeshBuffers, Draw, @@ -1820,7 +1827,7 @@ public enum FCmdResType : byte public unsafe partial struct FCmdRes { - [NativeTypeName("__AnonymousRecord_Cmd_L72_C9")] + [NativeTypeName("__AnonymousRecord_Cmd_L74_C9")] public _Anonymous_e__Union Anonymous; [NativeTypeName("Coplt::FCmdResType")] @@ -2234,16 +2241,52 @@ public partial struct FCmdSetBinding public uint Index; } - [NativeTypeName("struct FCmdDynamicNew : Coplt::FCmdBase")] - public partial struct FCmdDynamicNew + [NativeTypeName("struct FCmdSetConsts : Coplt::FCmdBase")] + public partial struct FCmdSetConsts + { + public FCmdBase Base; + + [NativeTypeName("Coplt::u32")] + public uint Group; + + [NativeTypeName("Coplt::u32")] + public uint Slot; + + [NativeTypeName("Coplt::u32")] + public uint ValueIndex; + + [NativeTypeName("Coplt::u32")] + public uint Count; + + [NativeTypeName("Coplt::u32")] + public uint Offset; + } + + [NativeTypeName("struct FCmdSetDynSize : Coplt::FCmdBase")] + public partial struct FCmdSetDynSize { public FCmdBase Base; [NativeTypeName("Coplt::u32")] - public uint GroupIndex; + public uint Group; [NativeTypeName("Coplt::u32")] - public uint DynArraySize; + public uint Size; + } + + [NativeTypeName("struct FCmdSetDynItem : Coplt::FCmdBase")] + public partial struct FCmdSetDynItem + { + public FCmdBase Base; + + [NativeTypeName("Coplt::u32")] + public uint Group; + + [NativeTypeName("Coplt::u32")] + public uint ItemIndex; + + [NativeTypeName("Coplt::u32")] + public uint Count; } [NativeTypeName("struct FCmdSetViewportScissor : Coplt::FCmdBase")] @@ -2359,7 +2402,7 @@ public partial struct FCmdDispatch public partial struct FCmdItem { - [NativeTypeName("__AnonymousRecord_Cmd_L369_C9")] + [NativeTypeName("__AnonymousRecord_Cmd_L392_C9")] public _Anonymous_e__Union Anonymous; [UnscopedRef] @@ -2493,12 +2536,32 @@ public ref FCmdSetBinding SetBinding } [UnscopedRef] - public ref FCmdDynamicNew DynamicNew + public ref FCmdSetConsts SetConsts + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return ref Anonymous.SetConsts; + } + } + + [UnscopedRef] + public ref FCmdSetDynSize SetDynSize { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { - return ref Anonymous.DynamicNew; + return ref Anonymous.SetDynSize; + } + } + + [UnscopedRef] + public ref FCmdSetDynItem SetDynItem + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return ref Anonymous.SetDynItem; } } @@ -2608,8 +2671,16 @@ public partial struct _Anonymous_e__Union public FCmdSetBinding SetBinding; [FieldOffset(0)] - [NativeTypeName("Coplt::FCmdDynamicNew")] - public FCmdDynamicNew DynamicNew; + [NativeTypeName("Coplt::FCmdSetConsts")] + public FCmdSetConsts SetConsts; + + [FieldOffset(0)] + [NativeTypeName("Coplt::FCmdSetDynSize")] + public FCmdSetDynSize SetDynSize; + + [FieldOffset(0)] + [NativeTypeName("Coplt::FCmdSetDynItem")] + public FCmdSetDynItem SetDynItem; [FieldOffset(0)] [NativeTypeName("Coplt::FCmdSetViewportScissor")] diff --git a/Coplt.Graphics.Native/Api/FFI/Cmd.h b/Coplt.Graphics.Native/Api/FFI/Cmd.h index 325b357..c9fce9f 100644 --- a/Coplt.Graphics.Native/Api/FFI/Cmd.h +++ b/Coplt.Graphics.Native/Api/FFI/Cmd.h @@ -31,7 +31,9 @@ namespace Coplt // Render / Compute SetPipeline, SetBinding, - DynamicNew, + SetConsts, + SetDynSize, + SetDynItem, // Render SetViewportScissor, @@ -287,12 +289,33 @@ namespace Coplt u32 Index{}; }; - struct FCmdDynamicNew : FCmdBase + struct FCmdSetConsts : FCmdBase { // 绑定中的第几个组 - u32 GroupIndex{}; - // 如果组中有动态大小数组,则需要填写 - u32 DynArraySize{}; + u32 Group{}; + u32 Slot{}; + // Payload 中的索引,类型为 u32 + u32 ValueIndex{}; + u32 Count{}; + u32 Offset{}; + }; + + // 设置动态绑定的动态数组大小,调用后之前的动态数组内容将被丢弃 + struct FCmdSetDynSize : FCmdBase + { + // 绑定中的第几个组 + u32 Group{}; + // 动态数组大小 + u32 Size{}; + }; + + struct FCmdSetDynItem : FCmdBase + { + // 绑定中的第几个组 + u32 Group{}; + // Payload 中的索引,类型为 FSetBindItem + u32 ItemIndex{}; + u32 Count{}; }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -387,7 +410,9 @@ namespace Coplt FCmdSetPipeline SetPipeline; FCmdSetBinding SetBinding; - FCmdDynamicNew DynamicNew; + FCmdSetConsts SetConsts; + FCmdSetDynSize SetDynSize; + FCmdSetDynItem SetDynItem; FCmdSetViewportScissor SetViewportScissor; FCmdSetMeshBuffers SetMeshBuffers; diff --git a/Coplt.Graphics.Native/Api/FFI/Record.h b/Coplt.Graphics.Native/Api/FFI/Record.h index 1d7f9ba..885faef 100644 --- a/Coplt.Graphics.Native/Api/FFI/Record.h +++ b/Coplt.Graphics.Native/Api/FFI/Record.h @@ -41,6 +41,8 @@ namespace Coplt FList PayloadBufferImageCopyRange; FList PayloadMeshBuffers; FList PayloadVertexBufferRange; + FList Payload32Bits; + FList PayloadSetBindItem; FList Blob; u32 NumSetBindings{}; b8 Ended{}; @@ -50,7 +52,8 @@ namespace Coplt explicit FGpuRecordData(FAllocator* allocator) : Commands(allocator), Resources(allocator), Bindings(allocator), BindingChange(allocator), PayloadRect(allocator), PayloadViewport(allocator), PayloadRenderInfo(allocator), PayloadResolveInfo(allocator), PayloadBufferCopyRange(allocator), - PayloadBufferImageCopyRange(allocator), PayloadMeshBuffers(allocator), PayloadVertexBufferRange(allocator), Blob(allocator) + PayloadBufferImageCopyRange(allocator), PayloadMeshBuffers(allocator), PayloadVertexBufferRange(allocator), + Payload32Bits(allocator), PayloadSetBindItem(allocator), Blob(allocator) { } @@ -68,6 +71,8 @@ namespace Coplt PayloadBufferImageCopyRange.Clear(); PayloadMeshBuffers.Clear(); PayloadVertexBufferRange.Clear(); + Payload32Bits.Clear(); + PayloadSetBindItem.Clear(); Blob.Clear(); NumSetBindings = 0; } diff --git a/Examples/Mipmap/Example.cs b/Examples/Mipmap/Example.cs index 858e4dc..b68be91 100644 --- a/Examples/Mipmap/Example.cs +++ b/Examples/Mipmap/Example.cs @@ -97,14 +97,23 @@ protected override async Task LoadResources(GpuRecord cmd) ); cmd.Upload(test_image, upload_memory); - GenMipmaps(cmd); + GenMipmaps(cmd, test_image); } - private void GenMipmaps(GpuRecord cmd) + private void GenMipmaps(GpuRecord cmd, GpuImage image) { using var compute = cmd.Compute(); - // compute.SetBinding(Binding); - // compute.DynamicNew(0, 4); + compute.SetBinding(Binding); + compute.SetDynSize(0, 4); + compute.SetConstants(0, 0, [image.Width, image.Height, 4]); + compute.SetDynItem( + 0, [ + new(1, 0, image.View2D(0, 1)), + new(1, 1, image.View2D(1, 1)), + new(1, 2, image.View2D(2, 1)), + new(1, 3, image.View2D(3, 1)), + ] + ); compute.Dispatch(Pipeline, 1, 1); } diff --git a/Examples/Mipmap/Shaders/Shader.hlsl b/Examples/Mipmap/Shaders/Shader.hlsl index f13c098..2e2098c 100644 --- a/Examples/Mipmap/Shaders/Shader.hlsl +++ b/Examples/Mipmap/Shaders/Shader.hlsl @@ -1,14 +1,7 @@ -enum class Mode : uint -{ - Common, - L4, -}; - cbuffer Args : register(b0) { - Mode mode; - uint mip_levels; // 0 .. 4 uint2 size; + uint mip_levels; // 0 .. 4 } RWTexture2D images[] : register(u0); From c76d2fca20cd56657d3fbe4214c6886ccd4a5e2e Mon Sep 17 00:00:00 2001 From: U2A5F Date: Wed, 16 Apr 2025 14:28:43 +0800 Subject: [PATCH 08/22] save --- Coplt.Graphics.Core/Core/GpuRecord.cs | 229 ++++++++++--------- Coplt.Graphics.Core/Core/GraphicsInstance.cs | 1 + Coplt.Graphics.Core/Native/Native.cs | 73 +++--- Coplt.Graphics.Native/Api/FFI/Cmd.h | 36 +-- Coplt.Graphics.Native/Api/FFI/Record.h | 4 +- Coplt.Graphics.Native/D3d12/Src/Barrier.cc | 64 ++---- Coplt.Graphics.Native/D3d12/Src/Layout.cc | 10 + Coplt.Graphics.Native/D3d12/Src/Layout.h | 5 + Coplt.Graphics.Native/D3d12/Src/Record.cc | 149 +++++++----- Coplt.Graphics.Native/D3d12/Src/Record.h | 46 +++- Examples/Mipmap/Example.cs | 10 +- 11 files changed, 343 insertions(+), 284 deletions(-) diff --git a/Coplt.Graphics.Core/Core/GpuRecord.cs b/Coplt.Graphics.Core/Core/GpuRecord.cs index 85b5e84..ace5c2d 100644 --- a/Coplt.Graphics.Core/Core/GpuRecord.cs +++ b/Coplt.Graphics.Core/Core/GpuRecord.cs @@ -906,6 +906,84 @@ public ComputeScope Compute(string? Name = null, ReadOnlySpan Name8 = defa } #endregion + + #region Binding + + internal void SetDynArraySize(ShaderBindGroup Group, uint Size) + { + AssertNotEnded(); + if (Group.Layout.Data.Usage != FBindGroupUsage.Dynamic) + throw new ArgumentException("Dynamic array size can only be set for dynamic groups"); + AddObject(Group); + var cmd = new FCmdSetDynArraySize + { + Base = { Type = FCmdType.SetDynArraySize }, + Group = Group.Ptr, + Size = Size, + }; + Data.Commands.Add(new() { SetDynArraySize = cmd }); + } + + internal void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) where T : unmanaged + { + if ((sizeof(T) & 3) != 0) throw new ArgumentException("Constant size must be a multiple of 4"); + SetConstants(Group, BindIndex, MemoryMarshal.Cast(Constants), Offset); + } + + internal void SetConstants(ShaderBindGroup Group, uint BindIndex, in T Constant, uint Offset = 0) where T : unmanaged + { + if ((sizeof(T) & 3) != 0) throw new ArgumentException("Constant size must be a multiple of 4"); + SetConstants(Group, BindIndex, MemoryMarshal.Cast(new ReadOnlySpan(in Constant)), Offset); + } + + [OverloadResolutionPriority(1)] + internal void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) + { + AssertNotEnded(); + if (Constants.Length == 0) return; + AddObject(Group); + var cmd = new FCmdSetConstants + { + Base = { Type = FCmdType.SetConstants }, + Group = Group.Ptr, + Slot = BindIndex, + ValueIndex = (uint)Data.Payload32Bits.LongLength, + Count = (uint)Constants.Length, + Offset = Offset, + }; + Data.Payload32Bits.AddRange(Constants); + Data.Commands.Add(new() { SetConstants = cmd }); + } + + internal void SetBindItem(ShaderBindGroup Group, ReadOnlySpan Items) + { + AssertNotEnded(); + if (Group.Layout.Data.Usage != FBindGroupUsage.Dynamic) + throw new ArgumentException("Only items in a dynamic group can be set dynamically"); + if (Items.Length == 0) return; + AddObject(Group); + var cmd = new FCmdSetBindItem + { + Base = { Type = FCmdType.SetBindItem }, + Group = Group.Ptr, + ItemIndex = (uint)Data.PayloadSetBindItem.LongLength, + Count = (uint)Items.Length, + }; + var dst = Data.PayloadSetBindItem.UnsafeAddRange(Items.Length); + for (var i = 0; i < Items.Length; i++) + { + ref readonly var item = ref Items[i]; + dst[i] = new() + { + View = item.View.ToFFI(), + Slot = item.BindIndex, + Index = item.ArrayIndex, + }; + } + Data.Commands.Add(new() { SetBindItem = cmd }); + } + + #endregion } #region DebugScope @@ -976,65 +1054,11 @@ public void SetBinding(GpuRecord self, ShaderBinding Binding) { Base = { Type = FCmdType.SetBinding }, Binding = binding_index, - Index = self.Data.NumSetBindings++, + // Index = self.Data.NumSetBindings++, }; self.Data.Commands.Add(new() { SetBinding = cmd }); } - public void SetDynSize(GpuRecord self, uint GroupIndex, uint Size) - { - if (m_current_binding == null) throw new InvalidOperationException("Binding not set"); - var cmd = new FCmdSetDynSize - { - Base = { Type = FCmdType.SetDynSize }, - Group = GroupIndex, - Size = Size, - }; - self.Data.Commands.Add(new() { SetDynSize = cmd }); - } - - public void SetConstants(GpuRecord self, uint GroupIndex, uint BindIndex, ReadOnlySpan Constants, uint Offset) - { - if (m_current_binding == null) throw new InvalidOperationException("Binding not set"); - if (Constants.Length == 0) return; - var cmd = new FCmdSetConsts - { - Base = { Type = FCmdType.SetConsts }, - Group = GroupIndex, - Slot = BindIndex, - ValueIndex = (uint)self.Data.Payload32Bits.LongLength, - Count = (uint)Constants.Length, - Offset = Offset, - }; - self.Data.Payload32Bits.AddRange(Constants); - self.Data.Commands.Add(new() { SetConsts = cmd }); - } - - public void SetDynItem(GpuRecord self, uint GroupIndex, ReadOnlySpan Items) - { - if (m_current_binding == null) throw new InvalidOperationException("Binding not set"); - if (Items.Length == 0) return; - var cmd = new FCmdSetDynItem - { - Base = { Type = FCmdType.SetDynItem }, - Group = GroupIndex, - ItemIndex = (uint)self.Data.PayloadSetBindItem.LongLength, - Count = (uint)Items.Length, - }; - var dst = self.Data.PayloadSetBindItem.UnsafeAddRange(Items.Length); - for (var i = 0; i < Items.Length; i++) - { - ref readonly var item = ref Items[i]; - dst[i] = new() - { - View = item.View.ToFFI(), - Slot = item.BindIndex, - Index = item.ArrayIndex, - }; - } - self.Data.Commands.Add(new() { SetDynItem = cmd }); - } - #endregion } @@ -1126,38 +1150,21 @@ public void SetBinding(ShaderBinding Binding) /// /// 设置动态绑定的动态数组大小,调用后之前的动态数组内容将被丢弃 /// - public void SetDynSize(uint GroupIndex, uint Size) - { - self.AssertNotEnded(); - m_pipeline_context.SetDynSize(self, GroupIndex, Size); - } + public void SetDynArraySize(ShaderBindGroup Group, uint Size) => + self.SetDynArraySize(Group, Size); [OverloadResolutionPriority(1)] - public void SetConstants(uint GroupIndex, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) - { - self.AssertNotEnded(); - m_pipeline_context.SetConstants(self, GroupIndex, BindIndex, Constants, Offset); - } + public void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) => + self.SetConstants(Group, BindIndex, Constants, Offset); - public void SetConstants(uint GroupIndex, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) where T : unmanaged - { - if ((sizeof(T) & 3) != 0) throw new ArgumentException("Constant size must be a multiple of 4"); - self.AssertNotEnded(); - m_pipeline_context.SetConstants(self, GroupIndex, BindIndex, MemoryMarshal.Cast(Constants), Offset); - } + public void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) where T : unmanaged => + self.SetConstants(Group, BindIndex, Constants, Offset); - public void SetConstants(uint GroupIndex, uint BindIndex, in T Constant, uint Offset = 0) where T : unmanaged - { - if ((sizeof(T) & 3) != 0) throw new ArgumentException("Constant size must be a multiple of 4"); - self.AssertNotEnded(); - m_pipeline_context.SetConstants(self, GroupIndex, BindIndex, MemoryMarshal.Cast(new ReadOnlySpan(in Constant)), Offset); - } + public void SetConstants(ShaderBindGroup Group, uint BindIndex, in T Constant, uint Offset = 0) where T : unmanaged => + self.SetConstants(Group, BindIndex, Constant, Offset); - public void SetDynItem(uint GroupIndex, ReadOnlySpan Items) - { - self.AssertNotEnded(); - m_pipeline_context.SetDynItem(self, GroupIndex, Items); - } + public void SetBindItem(ShaderBindGroup Group, ReadOnlySpan Items) => + self.SetBindItem(Group, Items); #endregion @@ -1312,7 +1319,11 @@ public void Draw( if (Binding != null) SetBinding(Binding); var cmd = new FCmdDraw { - Base = { Type = FCmdType.Draw }, + Base = + { + Base = { Type = FCmdType.Draw }, + SyncBindingIndex = self.Data.NumSyncBindings++, + }, VertexOrIndexCount = VertexOrIndexCount, InstanceCount = InstanceCount, FirstVertexOrIndex = FirstVertexOrIndex, @@ -1338,6 +1349,8 @@ public void DispatchMesh( ShaderBinding? Binding = null ) { + if (GroupCountX == 0 || GroupCountY == 0 || GroupCountZ == 0) + throw new ArgumentException("GroupCountX and GroupCountY and GroupCountZ must not be 0"); self.AssertNotEnded(); if (Pipeline != null) { @@ -1354,7 +1367,11 @@ public void DispatchMesh( if (Binding != null) SetBinding(Binding); var cmd = new FCmdDispatch { - Base = { Type = FCmdType.Dispatch }, + Base = + { + Base = { Type = FCmdType.Dispatch }, + SyncBindingIndex = self.Data.NumSyncBindings++, + }, GroupCountX = GroupCountX, GroupCountY = GroupCountY, GroupCountZ = GroupCountZ, @@ -1452,38 +1469,20 @@ public void SetBinding(ShaderBinding Binding) /// /// 设置动态绑定的动态数组大小,调用后之前的动态数组内容将被丢弃 /// - public void SetDynSize(uint GroupIndex, uint Size) - { - self.AssertNotEnded(); - m_pipeline_context.SetDynSize(self, GroupIndex, Size); - } + public void SetDynArraySize(ShaderBindGroup Group, uint Size) => self.SetDynArraySize(Group, Size); [OverloadResolutionPriority(1)] - public void SetConstants(uint GroupIndex, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) - { - self.AssertNotEnded(); - m_pipeline_context.SetConstants(self, GroupIndex, BindIndex, Constants, Offset); - } + public void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) => + self.SetConstants(Group, BindIndex, Constants, Offset); - public void SetConstants(uint GroupIndex, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) where T : unmanaged - { - if ((sizeof(T) & 3) != 0) throw new ArgumentException("Constant size must be a multiple of 4"); - self.AssertNotEnded(); - m_pipeline_context.SetConstants(self, GroupIndex, BindIndex, MemoryMarshal.Cast(Constants), Offset); - } + public void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) where T : unmanaged => + self.SetConstants(Group, BindIndex, Constants, Offset); - public void SetConstants(uint GroupIndex, uint BindIndex, in T Constant, uint Offset = 0) where T : unmanaged - { - if ((sizeof(T) & 3) != 0) throw new ArgumentException("Constant size must be a multiple of 4"); - self.AssertNotEnded(); - m_pipeline_context.SetConstants(self, GroupIndex, BindIndex, MemoryMarshal.Cast(new ReadOnlySpan(in Constant)), Offset); - } + public void SetConstants(ShaderBindGroup Group, uint BindIndex, in T Constant, uint Offset = 0) where T : unmanaged => + self.SetConstants(Group, BindIndex, Constant, Offset); - public void SetDynItem(uint GroupIndex, ReadOnlySpan Items) - { - self.AssertNotEnded(); - m_pipeline_context.SetDynItem(self, GroupIndex, Items); - } + public void SetBindItem(ShaderBindGroup Group, ReadOnlySpan Items) => + self.SetBindItem(Group, Items); #endregion @@ -1500,6 +1499,8 @@ public void Dispatch( ShaderBinding? Binding = null ) { + if (GroupCountX == 0 || GroupCountY == 0 || GroupCountZ == 0) + throw new ArgumentException("GroupCountX and GroupCountY and GroupCountZ must not be 0"); self.AssertNotEnded(); if (Pipeline != null) { @@ -1516,7 +1517,11 @@ public void Dispatch( if (Binding != null) SetBinding(Binding); var cmd = new FCmdDispatch { - Base = { Type = FCmdType.Dispatch }, + Base = + { + Base = { Type = FCmdType.Dispatch }, + SyncBindingIndex = self.Data.NumSyncBindings++, + }, GroupCountX = GroupCountX, GroupCountY = GroupCountY, GroupCountZ = GroupCountZ, diff --git a/Coplt.Graphics.Core/Core/GraphicsInstance.cs b/Coplt.Graphics.Core/Core/GraphicsInstance.cs index c02b28a..86653bc 100644 --- a/Coplt.Graphics.Core/Core/GraphicsInstance.cs +++ b/Coplt.Graphics.Core/Core/GraphicsInstance.cs @@ -301,6 +301,7 @@ private SlotId AllocSlotId(string name) return id; } private Func? m_cache_AllocSlotId; + /// 不区分大小写 // todo 改进 SlotId,保留区分大小写的字符串 public SlotId GetSlotId(string name) => m_slot_id_cache.GetOrAdd(name, m_cache_AllocSlotId ??= AllocSlotId); public string? TryGetSlotName(SlotId SlotId) => m_slot_id_name.GetValueOrDefault(SlotId); public String8? TryGetSlotName8(SlotId SlotId) => m_slot_id_name8.GetValueOrDefault(SlotId); diff --git a/Coplt.Graphics.Core/Native/Native.cs b/Coplt.Graphics.Core/Native/Native.cs index b16adf2..639a086 100644 --- a/Coplt.Graphics.Core/Native/Native.cs +++ b/Coplt.Graphics.Core/Native/Native.cs @@ -1782,7 +1782,7 @@ public unsafe partial struct FGpuRecordData public FList Blob; [NativeTypeName("Coplt::u32")] - public uint NumSetBindings; + public uint NumSyncBindings; [NativeTypeName("Coplt::b8")] public B8 Ended; @@ -1808,9 +1808,9 @@ public enum FCmdType : uint Compute, SetPipeline, SetBinding, - SetConsts, - SetDynSize, - SetDynItem, + SetConstants, + SetDynArraySize, + SetBindItem, SetViewportScissor, SetMeshBuffers, Draw, @@ -2241,13 +2241,22 @@ public partial struct FCmdSetBinding public uint Index; } - [NativeTypeName("struct FCmdSetConsts : Coplt::FCmdBase")] - public partial struct FCmdSetConsts + [NativeTypeName("struct FCmdSyncBinding : Coplt::FCmdBase")] + public partial struct FCmdSyncBinding { public FCmdBase Base; [NativeTypeName("Coplt::u32")] - public uint Group; + public uint SyncBindingIndex; + } + + [NativeTypeName("struct FCmdSetConstants : Coplt::FCmdBase")] + public unsafe partial struct FCmdSetConstants + { + public FCmdBase Base; + + [NativeTypeName("Coplt::FShaderBindGroup *")] + public FShaderBindGroup* Group; [NativeTypeName("Coplt::u32")] public uint Slot; @@ -2262,25 +2271,25 @@ public partial struct FCmdSetConsts public uint Offset; } - [NativeTypeName("struct FCmdSetDynSize : Coplt::FCmdBase")] - public partial struct FCmdSetDynSize + [NativeTypeName("struct FCmdSetDynArraySize : Coplt::FCmdBase")] + public unsafe partial struct FCmdSetDynArraySize { public FCmdBase Base; - [NativeTypeName("Coplt::u32")] - public uint Group; + [NativeTypeName("Coplt::FShaderBindGroup *")] + public FShaderBindGroup* Group; [NativeTypeName("Coplt::u32")] public uint Size; } - [NativeTypeName("struct FCmdSetDynItem : Coplt::FCmdBase")] - public partial struct FCmdSetDynItem + [NativeTypeName("struct FCmdSetBindItem : Coplt::FCmdBase")] + public unsafe partial struct FCmdSetBindItem { public FCmdBase Base; - [NativeTypeName("Coplt::u32")] - public uint Group; + [NativeTypeName("Coplt::FShaderBindGroup *")] + public FShaderBindGroup* Group; [NativeTypeName("Coplt::u32")] public uint ItemIndex; @@ -2358,10 +2367,10 @@ public partial struct FCmdSetMeshBuffers public uint PayloadIndex; } - [NativeTypeName("struct FCmdDraw : Coplt::FCmdBase")] + [NativeTypeName("struct FCmdDraw : Coplt::FCmdSyncBinding")] public partial struct FCmdDraw { - public FCmdBase Base; + public FCmdSyncBinding Base; [NativeTypeName("Coplt::u32")] public uint VertexOrIndexCount; @@ -2382,10 +2391,10 @@ public partial struct FCmdDraw public B8 Indexed; } - [NativeTypeName("struct FCmdDispatch : Coplt::FCmdBase")] + [NativeTypeName("struct FCmdDispatch : Coplt::FCmdSyncBinding")] public partial struct FCmdDispatch { - public FCmdBase Base; + public FCmdSyncBinding Base; [NativeTypeName("Coplt::u32")] public uint GroupCountX; @@ -2402,7 +2411,7 @@ public partial struct FCmdDispatch public partial struct FCmdItem { - [NativeTypeName("__AnonymousRecord_Cmd_L392_C9")] + [NativeTypeName("__AnonymousRecord_Cmd_L394_C9")] public _Anonymous_e__Union Anonymous; [UnscopedRef] @@ -2536,32 +2545,32 @@ public ref FCmdSetBinding SetBinding } [UnscopedRef] - public ref FCmdSetConsts SetConsts + public ref FCmdSetConstants SetConstants { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { - return ref Anonymous.SetConsts; + return ref Anonymous.SetConstants; } } [UnscopedRef] - public ref FCmdSetDynSize SetDynSize + public ref FCmdSetDynArraySize SetDynArraySize { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { - return ref Anonymous.SetDynSize; + return ref Anonymous.SetDynArraySize; } } [UnscopedRef] - public ref FCmdSetDynItem SetDynItem + public ref FCmdSetBindItem SetBindItem { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { - return ref Anonymous.SetDynItem; + return ref Anonymous.SetBindItem; } } @@ -2671,16 +2680,16 @@ public partial struct _Anonymous_e__Union public FCmdSetBinding SetBinding; [FieldOffset(0)] - [NativeTypeName("Coplt::FCmdSetConsts")] - public FCmdSetConsts SetConsts; + [NativeTypeName("Coplt::FCmdSetConstants")] + public FCmdSetConstants SetConstants; [FieldOffset(0)] - [NativeTypeName("Coplt::FCmdSetDynSize")] - public FCmdSetDynSize SetDynSize; + [NativeTypeName("Coplt::FCmdSetDynArraySize")] + public FCmdSetDynArraySize SetDynArraySize; [FieldOffset(0)] - [NativeTypeName("Coplt::FCmdSetDynItem")] - public FCmdSetDynItem SetDynItem; + [NativeTypeName("Coplt::FCmdSetBindItem")] + public FCmdSetBindItem SetBindItem; [FieldOffset(0)] [NativeTypeName("Coplt::FCmdSetViewportScissor")] diff --git a/Coplt.Graphics.Native/Api/FFI/Cmd.h b/Coplt.Graphics.Native/Api/FFI/Cmd.h index c9fce9f..0e33468 100644 --- a/Coplt.Graphics.Native/Api/FFI/Cmd.h +++ b/Coplt.Graphics.Native/Api/FFI/Cmd.h @@ -31,9 +31,9 @@ namespace Coplt // Render / Compute SetPipeline, SetBinding, - SetConsts, - SetDynSize, - SetDynItem, + SetConstants, + SetDynArraySize, + SetBindItem, // Render SetViewportScissor, @@ -289,10 +289,14 @@ namespace Coplt u32 Index{}; }; - struct FCmdSetConsts : FCmdBase + struct FCmdSyncBinding : FCmdBase { - // 绑定中的第几个组 - u32 Group{}; + u32 SyncBindingIndex{}; + }; + + struct FCmdSetConstants : FCmdBase + { + FShaderBindGroup* Group{}; u32 Slot{}; // Payload 中的索引,类型为 u32 u32 ValueIndex{}; @@ -301,18 +305,16 @@ namespace Coplt }; // 设置动态绑定的动态数组大小,调用后之前的动态数组内容将被丢弃 - struct FCmdSetDynSize : FCmdBase + struct FCmdSetDynArraySize : FCmdBase { - // 绑定中的第几个组 - u32 Group{}; + FShaderBindGroup* Group{}; // 动态数组大小 u32 Size{}; }; - struct FCmdSetDynItem : FCmdBase + struct FCmdSetBindItem : FCmdBase { - // 绑定中的第几个组 - u32 Group{}; + FShaderBindGroup* Group{}; // Payload 中的索引,类型为 FSetBindItem u32 ItemIndex{}; u32 Count{}; @@ -364,7 +366,7 @@ namespace Coplt u32 PayloadIndex{}; }; - struct FCmdDraw : FCmdBase + struct FCmdDraw : FCmdSyncBinding { u32 VertexOrIndexCount{}; u32 InstanceCount{}; @@ -377,7 +379,7 @@ namespace Coplt //////////////////////////////////////////////////////////////////////////////////////////////////// - struct FCmdDispatch : FCmdBase + struct FCmdDispatch : FCmdSyncBinding { u32 GroupCountX{}; u32 GroupCountY{}; @@ -410,9 +412,9 @@ namespace Coplt FCmdSetPipeline SetPipeline; FCmdSetBinding SetBinding; - FCmdSetConsts SetConsts; - FCmdSetDynSize SetDynSize; - FCmdSetDynItem SetDynItem; + FCmdSetConstants SetConstants; + FCmdSetDynArraySize SetDynArraySize; + FCmdSetBindItem SetBindItem; FCmdSetViewportScissor SetViewportScissor; FCmdSetMeshBuffers SetMeshBuffers; diff --git a/Coplt.Graphics.Native/Api/FFI/Record.h b/Coplt.Graphics.Native/Api/FFI/Record.h index 885faef..88d530a 100644 --- a/Coplt.Graphics.Native/Api/FFI/Record.h +++ b/Coplt.Graphics.Native/Api/FFI/Record.h @@ -44,7 +44,7 @@ namespace Coplt FList Payload32Bits; FList PayloadSetBindItem; FList Blob; - u32 NumSetBindings{}; + u32 NumSyncBindings{}; b8 Ended{}; FGpuRecordMode Mode{}; @@ -74,7 +74,7 @@ namespace Coplt Payload32Bits.Clear(); PayloadSetBindItem.Clear(); Blob.Clear(); - NumSetBindings = 0; + NumSyncBindings = 0; } #endif }; diff --git a/Coplt.Graphics.Native/D3d12/Src/Barrier.cc b/Coplt.Graphics.Native/D3d12/Src/Barrier.cc index bba3d8a..8751ca5 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Barrier.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Barrier.cc @@ -399,49 +399,29 @@ namespace Coplt::Enhanced }); if (!exist) { - if (sr.State->Layout != input.State.Layout) + if (res.IsImage() && sr.State->Layout != input.State.Layout) { auto& group = result_list ? m_tmp_group : barrier_analyzer->Groups()[0]; - if (res.IsImage()) - { - const auto img_data = res.GetImageData(); - const auto SyncAfter = GetBarrierSync(input.State.Access, input.State.Usage); - D3D12_TEXTURE_BARRIER barrier{ - .SyncBefore = D3D12_BARRIER_SYNC_NONE, - .SyncAfter = SyncAfter, - .AccessBefore = D3D12_BARRIER_ACCESS_NO_ACCESS, - .AccessAfter = GetBarrierAccess(input.State.Access), - .LayoutBefore = GetBarrierLayout(sr.State->Layout), - .LayoutAfter = GetBarrierLayout(input.State.Layout), - .pResource = res.GetResource(), - .Subresources = { - .IndexOrFirstMipLevel = 0, - .NumMipLevels = img_data->m_mip_levels, - .FirstArraySlice = 0, - .NumArraySlices = img_data->m_depth_or_length, - .FirstPlane = 0, - .NumPlanes = img_data->m_planes, - }, - .Flags = D3D12_TEXTURE_BARRIER_FLAG_NONE, - }; - group.Push(barrier); - } - else - { - const auto buffer_data = res.GetBufferData(); - const auto SyncAfter = GetBarrierSync(input.State.Access, input.State.Usage); - D3D12_BUFFER_BARRIER barrier{ - .SyncBefore = D3D12_BARRIER_SYNC_NONE, - .SyncAfter = D3D12_BARRIER_SYNC_SPLIT, - .AccessBefore = D3D12_BARRIER_ACCESS_NO_ACCESS, - .AccessAfter = GetBarrierAccess(input.State.Access), - .pResource = res.GetResource(), - .Offset = 0, - .Size = buffer_data->m_size, - }; - barrier.SyncAfter = SyncAfter; - group.Push(barrier); - } + const auto img_data = res.GetImageData(); + D3D12_TEXTURE_BARRIER barrier{ + .SyncBefore = D3D12_BARRIER_SYNC_NONE, + .SyncAfter = GetBarrierSync(input.State.Access, input.State.Usage), + .AccessBefore = D3D12_BARRIER_ACCESS_NO_ACCESS, + .AccessAfter = GetBarrierAccess(input.State.Access), + .LayoutBefore = GetBarrierLayout(sr.State->Layout), + .LayoutAfter = GetBarrierLayout(input.State.Layout), + .pResource = res.GetResource(), + .Subresources = { + .IndexOrFirstMipLevel = 0, + .NumMipLevels = img_data->m_mip_levels, + .FirstArraySlice = 0, + .NumArraySlices = img_data->m_depth_or_length, + .FirstPlane = 0, + .NumPlanes = img_data->m_planes, + }, + .Flags = D3D12_TEXTURE_BARRIER_FLAG_NONE, + }; + group.Push(barrier); } } // todo @@ -529,7 +509,7 @@ bool AD3d12BarrierCombiner::Submit(NonNull isolate, std::span 0; + const auto has_submit = !m_list_node.empty(); if (has_submit) { const auto& main_queue = isolate->m_main_queue; diff --git a/Coplt.Graphics.Native/D3d12/Src/Layout.cc b/Coplt.Graphics.Native/D3d12/Src/Layout.cc index ccbe17e..472a29a 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Layout.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Layout.cc @@ -262,6 +262,8 @@ D3d12BindingLayout::D3d12BindingLayout(Rc&& device, const FBindi std::vector> tables{}; tables.reserve(m_groups.size()); for (u32 i = 0; i < m_groups.size(); i++) tables.push_back({}); + m_group_bind_item_infos.reserve(m_groups.size()); + for (u32 i = 0; i < m_groups.size(); i++) m_group_bind_item_infos.push_back({}); for (auto& info : m_slot_infos) { @@ -289,6 +291,7 @@ D3d12BindingLayout::D3d12BindingLayout(Rc&& device, const FBindi item_info.Place = BindItemPlace::Const; item_info.Type = BindItemType::Resource; m_bind_item_infos.push_back(item_info); + m_group_bind_item_infos[info.Group].push_back(item_info); continue; } @@ -376,6 +379,7 @@ D3d12BindingLayout::D3d12BindingLayout(Rc&& device, const FBindi item_info.Place = BindItemPlace::Direct; item_info.Type = BindItemType::Resource; m_bind_item_infos.push_back(item_info); + m_group_bind_item_infos[info.Group].push_back(item_info); continue; } DefineStaticSampler: @@ -420,6 +424,7 @@ D3d12BindingLayout::D3d12BindingLayout(Rc&& device, const FBindi item_info.Place = BindItemPlace::Table; item_info.Type = Info.Type == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER ? BindItemType::Sampler : BindItemType::Resource; m_bind_item_infos.push_back(item_info); + m_group_bind_item_infos[Info.Group].push_back(item_info); } m_tables.push_back(std::move(infos)); } @@ -502,6 +507,11 @@ std::span D3d12BindingLayout::BindItemInfos() const noexcept return m_bind_item_infos; } +std::span> D3d12BindingLayout::GroupBindItemInfos() const noexcept +{ + return m_group_bind_item_infos; +} + std::span> D3d12BindingLayout::TableInfos() const noexcept { return m_tables; diff --git a/Coplt.Graphics.Native/D3d12/Src/Layout.h b/Coplt.Graphics.Native/D3d12/Src/Layout.h index abf58e1..56fc013 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Layout.h +++ b/Coplt.Graphics.Native/D3d12/Src/Layout.h @@ -214,6 +214,8 @@ namespace Coplt virtual std::span SlotInfos() const noexcept = 0; virtual std::span BindItemInfos() const noexcept = 0; // 第一层索引是 Group index + virtual std::span> GroupBindItemInfos() const noexcept = 0; + // 第一层索引是 Group index virtual std::span> TableInfos() const noexcept = 0; // 第一层索引是 Group index virtual std::span> GroupItemInfos() const noexcept = 0; @@ -231,6 +233,8 @@ namespace Coplt std::vector m_bind_item_infos{}; HashMap m_slot_to_info{}; // 第一层索引是 Group index + std::vector> m_group_bind_item_infos{}; + // 第一层索引是 Group index std::vector> m_tables{}; // 第一层索引是 Group index std::vector> m_group_item_infos{}; @@ -245,6 +249,7 @@ namespace Coplt const ComPtr& RootSignature() const noexcept override; std::span SlotInfos() const noexcept override; std::span BindItemInfos() const noexcept override; + std::span> GroupBindItemInfos() const noexcept override; std::span> TableInfos() const noexcept override; std::span> GroupItemInfos() const noexcept override; }; diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.cc b/Coplt.Graphics.Native/D3d12/Src/Record.cc index da80c91..d1adbed 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Record.cc @@ -269,7 +269,7 @@ void D3d12GpuRecord::PipelineContext::SetBinding(NonNull binding COPLT_THROW_FMT("[{}] The binding layout is not compatible with the currently set pipeline", i); } Binding = dx_binding; - SetBindingIndex = cmd.Index; + BindingIndex = cmd.Binding; } D3d12GpuRecord::D3d12GpuRecord(const NonNull isolate) @@ -345,7 +345,7 @@ void D3d12GpuRecord::Recycle() m_resource_map.Clear(); m_resource_infos.clear(); m_binding_infos.clear(); - m_set_binding_infos.clear(); + m_sync_binding_infos.clear(); m_allocations.clear(); m_bind_items.clear(); m_pipeline_context.Reset(); @@ -463,11 +463,11 @@ void D3d12GpuRecord::ReadyBindings(u32& MinResHeapSize, u32& MinSmpHeapSize) { m_binding_infos.push_back({}); } - m_set_binding_infos.clear(); - m_set_binding_infos.reserve(NumSetBindings); - for (u32 i = 0; i < NumSetBindings; ++i) + m_sync_binding_infos.clear(); + m_sync_binding_infos.reserve(NumSyncBindings); + for (u32 i = 0; i < NumSyncBindings; ++i) { - m_set_binding_infos.push_back(SetBindingInfo()); + m_sync_binding_infos.push_back(SyncBindingInfo()); } for (u32 i = 0; i < BindingChange.size(); ++i) { @@ -529,6 +529,15 @@ void D3d12GpuRecord::Analyze() case FCmdType::SetBinding: Analyze_SetBinding(i, command.SetBinding); break; + case FCmdType::SetConstants: + // todo + break; + case FCmdType::SetDynArraySize: + // todo + break; + case FCmdType::SetBindItem: + // todo + break; case FCmdType::SetMeshBuffers: Analyze_SetMeshBuffers(i, command.SetMeshBuffers); break; @@ -537,8 +546,7 @@ void D3d12GpuRecord::Analyze() COPLT_THROW_FMT("[{}] Can only SetViewportScissor on the direct mode", i); break; case FCmdType::Draw: - if (Mode != FGpuRecordMode::Direct) - COPLT_THROW_FMT("[{}] Can only Draw on the direct mode", i); + Analyze_Draw(i, command.Draw); break; case FCmdType::Dispatch: Analyze_Dispatch(i, command.Dispatch); @@ -682,7 +690,7 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) { if (m_state != RecordState::Render && m_state != RecordState::Compute) COPLT_THROW_FMT("[{}] Cannot use SetBinding in main scope", i); - if (!SetBinding(Bindings[cmd.Binding].Binding, i, cmd)) return; + if (!SetBinding(i, cmd)) return; const NonNull binding = m_pipeline_context.Binding; ReadGuard binding_guard(binding->SelfLock()); Finally clear_lock([&] { m_tmp_locks.clear(); }); @@ -695,12 +703,14 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) } const auto& binding_layout = binding->Layout(); const auto group_item_infos = binding_layout->GroupItemInfos(); - const auto bind_item_infos = binding_layout->BindItemInfos(); + const auto group_bind_item_infos = binding_layout->GroupBindItemInfos(); bool any_changed = false; for (u32 g = 0; g < groups.size(); ++g) { const auto& group = groups[g]; if (!group) continue; + const auto& data = group->Layout()->Data(); + if (data.Usage == FBindGroupUsage::Dynamic) continue; const auto views = group->Views(); for (u32 v = 0; v < views.size(); ++v) { @@ -712,69 +722,70 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) } if (group->EnsureAvailable()) any_changed = true; } - auto& binding_info = m_binding_infos[cmd.Binding]; - auto& set_binding_info = m_set_binding_infos[cmd.Index]; + auto& binding_info = m_binding_infos[m_pipeline_context.BindingIndex]; + binding_info.Layout = binding_layout.get(); const auto binding_version = binding->Version(); - if (binding_info.AllocationIndex == COPLT_U32_MAX || binding_info.BindingVersion != binding_version || any_changed) + if (binding_info.BindItemIndex == COPLT_U32_MAX || binding_info.BindingVersion != binding_version || any_changed) { binding_info.BindingVersion = binding_version; - binding_info.AllocationIndex = m_allocations.size(); binding_info.BindItemIndex = m_bind_items.size(); for (u32 g = 0; g < groups.size(); ++g) { const auto& group = groups[g]; - if (!group) - { - m_allocations.push_back({}); - continue; - } + if (!group) continue; const auto object_id = group->ObjectId(); const auto& data = group->Layout()->Data(); + const auto& bind_item_infos = group_bind_item_infos[g]; + if (data.Usage == FBindGroupUsage::Dynamic) continue; DescriptorAllocation resource_allocation{}; DescriptorAllocation sampler_allocation{}; // todo 确定是最后一次修改 const auto f = [&]( - const bool dyn, const u32 size, const Rc& heap, + const bool last, const u32 size, const Rc& heap, const ComPtr& dh, DescriptorAllocation& allocation ) { if (size == 0) return; - if (data.Usage == FBindGroupUsage::Dynamic) + if (!last) { allocation = heap->AllocateTmp(size); } else { - if (dyn) - { - allocation = heap->AllocateTmp(size); - } - else - { - bool exists = false; - allocation = heap->Allocate(object_id, size, exists); - if (exists) return; - } - m_device->m_device->CopyDescriptorsSimple( - size, allocation.GetCpuHandle(), dh->GetCPUDescriptorHandleForHeapStart(), heap->m_type - ); + bool exists = false; + allocation = heap->Allocate(object_id, size, exists); + if (exists) return; } + m_device->m_device->CopyDescriptorsSimple( + size, allocation.GetCpuHandle(), dh->GetCPUDescriptorHandleForHeapStart(), heap->m_type + ); }; - f(false, data.ResourceTableSize, m_context->m_descriptor_manager.m_res, group->ResourceHeap(), resource_allocation); - f(false, data.SamplerTableSize, m_context->m_descriptor_manager.m_smp, group->SamplerHeap(), sampler_allocation); - m_allocations.push_back({resource_allocation, sampler_allocation}); - } - for (const auto& bind_item_info : bind_item_infos) - { - BindItem item{}; + f(true, data.ResourceTableSize, m_context->m_descriptor_manager.m_res, group->ResourceHeap(), resource_allocation); + f(true, data.SamplerTableSize, m_context->m_descriptor_manager.m_smp, group->SamplerHeap(), sampler_allocation); + const auto AllocationIndex = m_allocations.size(); + m_allocations.push_back({g, resource_allocation, sampler_allocation}); + for (const auto& bind_item_info : bind_item_infos) + { + BindItem item{ + .Info = &bind_item_info, + .AllocationIndex = AllocationIndex, + }; + m_bind_items.push_back(item); + } // todo 直接资源和常量 - m_bind_items.push_back(item); } + binding_info.BindItemCount = m_bind_items.size() - binding_info.BindItemCount; } - set_binding_info.Layout = binding_layout.get(); - set_binding_info.AllocationIndex = binding_info.AllocationIndex; - set_binding_info.BindItemIndex = binding_info.BindItemIndex; - m_barrier_analyzer->OnCmd(); +} + +void D3d12GpuRecord::Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd) +{ + if (m_pipeline_context.Binding == nullptr) return; + auto& binding_info = m_binding_infos[m_pipeline_context.BindingIndex]; + auto& sync_binding_info = m_sync_binding_infos[cmd.SyncBindingIndex]; + sync_binding_info.Layout = binding_info.Layout; + sync_binding_info.BindItemIndex = binding_info.BindItemIndex; + sync_binding_info.BindItemCount = binding_info.BindItemCount; } void D3d12GpuRecord::Analyze_SetMeshBuffers(u32 i, const FCmdSetMeshBuffers& cmd) @@ -794,7 +805,16 @@ void D3d12GpuRecord::Analyze_SetMeshBuffers(u32 i, const FCmdSetMeshBuffers& cmd m_barrier_analyzer->OnCmd(); } -void D3d12GpuRecord::Analyze_Dispatch(u32 i, const FCmdDispatch& cmd) const +void D3d12GpuRecord::Analyze_Draw(u32 i, const FCmdDraw& cmd) +{ + if (Mode != FGpuRecordMode::Direct) + COPLT_THROW_FMT("[{}] Can only Draw on the direct mode", i); + if (m_state != RecordState::Render) + COPLT_THROW_FMT("[{}] Can only use Draw in render scope", i); + Analyze_SyncBinding(i, cmd); +} + +void D3d12GpuRecord::Analyze_Dispatch(u32 i, const FCmdDispatch& cmd) { switch (cmd.Type) { @@ -807,6 +827,7 @@ void D3d12GpuRecord::Analyze_Dispatch(u32 i, const FCmdDispatch& cmd) const COPLT_THROW_FMT("[{}] Can only use Dispatch (Mesh) in render scope", i); break; } + Analyze_SyncBinding(i, cmd); } void D3d12GpuRecord::BeforeInterpret(const D3d12RentedCommandList& list) @@ -833,6 +854,10 @@ void D3d12GpuRecord::Interpret(const D3d12RentedCommandList& list, const u32 off { case FCmdType::None: case FCmdType::PreparePresent: + case FCmdType::SetBinding: + case FCmdType::SetDynArraySize: + case FCmdType::SetBindItem: + case FCmdType::SetConstants: break; case FCmdType::End: if (m_state == RecordState::Render) @@ -872,9 +897,6 @@ void D3d12GpuRecord::Interpret(const D3d12RentedCommandList& list, const u32 off case FCmdType::SetPipeline: Interpret_SetPipeline(list, i, command.SetPipeline); break; - case FCmdType::SetBinding: - Interpret_SetBinding(list, i, command.SetBinding); - break; case FCmdType::SetViewportScissor: Interpret_SetViewportScissor(list, i, command.SetViewportScissor); break; @@ -1242,23 +1264,20 @@ void D3d12GpuRecord::Interpret_SetPipeline(const CmdList& list, const u32 i, con SetPipeline(list, cmd.Pipeline, i); } -void D3d12GpuRecord::Interpret_SetBinding(const CmdList& list, u32 i, const FCmdSetBinding& cmd) +void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCmdSyncBinding& cmd) { - if (m_state != RecordState::Render && m_state != RecordState::Compute) - COPLT_THROW_FMT("[{}] Cannot use SetBinding in main scope", i); - if (!SetBinding(Bindings[cmd.Binding].Binding, i, cmd)) return; - const auto& set_binding_info = m_set_binding_infos[m_pipeline_context.SetBindingIndex]; - const auto bind_item_infos = set_binding_info.Layout->BindItemInfos(); - for (usize n = 0; n < bind_item_infos.size(); ++n) + const auto& set_binding_info = m_sync_binding_infos[cmd.SyncBindingIndex]; + if (!set_binding_info) return; + const auto bind_items = std::span(m_bind_items).subspan(set_binding_info.BindItemIndex, set_binding_info.BindItemCount); + for (const auto& bind_item : bind_items) { - const auto& bind_item_info = bind_item_infos[n]; - const auto& bind_item = m_bind_items[set_binding_info.BindItemIndex + n]; + const auto& bind_item_info = *bind_item.Info; // todo 直接资源和常量 switch (bind_item_info.Place) { case Layout::BindItemPlace::Table: { - const auto& allocation = m_allocations[set_binding_info.AllocationIndex + bind_item_info.Group]; + const auto& allocation = m_allocations[bind_item.AllocationIndex]; const auto& al = bind_item_info.Type == Layout::BindItemType::Resource ? allocation.Resource : allocation.Sampler; if (m_state == RecordState::Render) { @@ -1319,10 +1338,11 @@ void D3d12GpuRecord::Interpret_SetMeshBuffers(const CmdList& list, u32 i, const list->g0->IASetVertexBuffers(cmd.VertexStartSlot, buffers.VertexBufferCount, views); } -void D3d12GpuRecord::Interpret_Draw(const CmdList& list, u32 i, const FCmdDraw& cmd) const +void D3d12GpuRecord::Interpret_Draw(const CmdList& list, u32 i, const FCmdDraw& cmd) { if (m_state != RecordState::Render) COPLT_THROW_FMT("[{}] Can only use Draw in render scope", i); + Interpret_SyncBinding(list, i, cmd); if (cmd.Indexed) { list->g0->DrawIndexedInstanced(cmd.VertexOrIndexCount, cmd.InstanceCount, cmd.FirstVertexOrIndex, cmd.VertexOffset, cmd.FirstInstance); @@ -1333,13 +1353,14 @@ void D3d12GpuRecord::Interpret_Draw(const CmdList& list, u32 i, const FCmdDraw& } } -void D3d12GpuRecord::Interpret_Dispatch(const CmdList& list, u32 i, const FCmdDispatch& cmd) const +void D3d12GpuRecord::Interpret_Dispatch(const CmdList& list, u32 i, const FCmdDispatch& cmd) { switch (cmd.Type) { case FDispatchType::Compute: if (m_state != RecordState::Compute) COPLT_THROW_FMT("[{}] Can only use Dispatch (Compute) in compute scope", i); + Interpret_SyncBinding(list, i, cmd); list->g0->Dispatch(cmd.GroupCountX, cmd.GroupCountY, cmd.GroupCountZ); break; case FDispatchType::Mesh: @@ -1347,6 +1368,7 @@ void D3d12GpuRecord::Interpret_Dispatch(const CmdList& list, u32 i, const FCmdDi COPLT_THROW_FMT("[{}] Can only use Dispatch (Mesh) in render scope", i); if (!list->g6) COPLT_THROW_FMT("[{}] The device does not support mesh shaders", i); + Interpret_SyncBinding(list, i, cmd); list->g6->DispatchMesh(cmd.GroupCountX, cmd.GroupCountY, cmd.GroupCountZ); break; } @@ -1358,8 +1380,9 @@ void D3d12GpuRecord::SetPipeline(NonNull pipeline, u32 i) m_pipeline_context.SetPipeline(pipeline, i); } -bool D3d12GpuRecord::SetBinding(NonNull binding, u32 i, const FCmdSetBinding& cmd) +bool D3d12GpuRecord::SetBinding(u32 i, const FCmdSetBinding& cmd) { + const NonNull binding = Bindings[cmd.Binding].Binding; if (m_pipeline_context.Binding && binding->ObjectId() == m_pipeline_context.Binding->ObjectId()) return false; m_pipeline_context.SetBinding(binding, i, cmd); return true; diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.h b/Coplt.Graphics.Native/D3d12/Src/Record.h index a37a3b3..37e3ce8 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.h +++ b/Coplt.Graphics.Native/D3d12/Src/Record.h @@ -108,7 +108,7 @@ namespace Coplt Ptr CPipeline{}; Ptr Binding{}; - u32 SetBindingIndex{}; + u32 BindingIndex{}; bool PipelineChanged{}; bool BindingChanged{}; @@ -120,28 +120,50 @@ namespace Coplt struct BindingInfo { + Ptr Layout{}; u64 BindingVersion{}; - u32 AllocationIndex{COPLT_U32_MAX}; u32 BindItemIndex{COPLT_U32_MAX}; + u32 BindItemCount{0}; + u32 BindGroupInfoIndex{COPLT_U32_MAX}; + bool Changed{}; + + explicit operator bool() const noexcept + { + return Layout; + } }; - struct SetBindingInfo + struct BindGroupInfo { - ID3d12BindingLayout* Layout{}; - u32 AllocationIndex{COPLT_U32_MAX}; + u32 DynArraySize{}; + bool Changed{}; + }; + + struct SyncBindingInfo + { + Ptr Layout{}; u32 BindItemIndex{COPLT_U32_MAX}; + u32 BindItemCount{0}; + + explicit operator bool() const noexcept + { + return Layout; + } }; struct BindItem { + Ptr Info{}; union { + u32 AllocationIndex{}; // todo 直接资源和常量 }; }; struct AllocationPoint { + u32 GroupIndex{}; DescriptorAllocation Resource{}; DescriptorAllocation Sampler{}; }; @@ -155,7 +177,7 @@ namespace Coplt HashMap m_resource_map{}; // id -> index std::vector m_resource_infos{}; std::vector m_binding_infos{}; - std::vector m_set_binding_infos{}; + std::vector m_sync_binding_infos{}; std::vector m_allocations{}; std::vector m_bind_items{}; std::vector m_queue_wait_points{}; @@ -211,8 +233,10 @@ namespace Coplt void Analyze_ComputeEnd(u32 i, const FCmdCompute& cmd); void Analyze_SetPipeline(u32 i, const FCmdSetPipeline& cmd); void Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd); + void Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd); void Analyze_SetMeshBuffers(u32 i, const FCmdSetMeshBuffers& cmd); - void Analyze_Dispatch(u32 i, const FCmdDispatch& cmd) const; + void Analyze_Draw(u32 i, const FCmdDraw& cmd); + void Analyze_Dispatch(u32 i, const FCmdDispatch& cmd); void BeforeInterpret(const D3d12RentedCommandList& list) override; void AfterInterpret(const D3d12RentedCommandList& list) override; @@ -229,15 +253,15 @@ namespace Coplt void Interpret_Compute(const CmdList& list, u32 i, const FCmdCompute& cmd); void Interpret_ComputeEnd(const CmdList& list, u32 i, const FCmdCompute& cmd); void Interpret_SetPipeline(const CmdList& list, u32 i, const FCmdSetPipeline& cmd); - void Interpret_SetBinding(const CmdList& list, u32 i, const FCmdSetBinding& cmd); + void Interpret_SyncBinding(const CmdList& list, u32 i, const FCmdSyncBinding& cmd); void Interpret_SetViewportScissor(const CmdList& list, u32 i, const FCmdSetViewportScissor& cmd) const; void Interpret_SetMeshBuffers(const CmdList& list, u32 i, const FCmdSetMeshBuffers& cmd) const; - void Interpret_Draw(const CmdList& list, u32 i, const FCmdDraw& cmd) const; - void Interpret_Dispatch(const CmdList& list, u32 i, const FCmdDispatch& cmd) const; + void Interpret_Draw(const CmdList& list, u32 i, const FCmdDraw& cmd); + void Interpret_Dispatch(const CmdList& list, u32 i, const FCmdDispatch& cmd); void SetPipeline(NonNull pipeline, u32 i); // 返回是否改变 - bool SetBinding(NonNull binding, u32 i, const FCmdSetBinding& cmd); + bool SetBinding(u32 i, const FCmdSetBinding& cmd); void SetPipeline(const CmdList& list, NonNull pipeline, u32 i); }; diff --git a/Examples/Mipmap/Example.cs b/Examples/Mipmap/Example.cs index b68be91..99187c2 100644 --- a/Examples/Mipmap/Example.cs +++ b/Examples/Mipmap/Example.cs @@ -102,12 +102,12 @@ protected override async Task LoadResources(GpuRecord cmd) private void GenMipmaps(GpuRecord cmd, GpuImage image) { - using var compute = cmd.Compute(); + using var compute = cmd.Compute(Name: "GenMipmaps"); compute.SetBinding(Binding); - compute.SetDynSize(0, 4); - compute.SetConstants(0, 0, [image.Width, image.Height, 4]); - compute.SetDynItem( - 0, [ + compute.SetDynArraySize(BindGroup, 4); + compute.SetConstants(BindGroup, 0, [image.Width, image.Height, 4]); + compute.SetBindItem( + BindGroup, [ new(1, 0, image.View2D(0, 1)), new(1, 1, image.View2D(1, 1)), new(1, 2, image.View2D(2, 1)), From ea298ab86566b7c75d74cb6decb57c1dba9b9010 Mon Sep 17 00:00:00 2001 From: U2A5F Date: Wed, 16 Apr 2025 23:54:09 +0800 Subject: [PATCH 09/22] save --- Coplt.Graphics.Core/Core/GpuRecord.cs | 22 +-- Coplt.Graphics.Core/Native/Native.cs | 11 +- Coplt.Graphics.Native/Api/FFI/Cmd.h | 5 + Coplt.Graphics.Native/Api/FFI/Layout.h | 7 +- Coplt.Graphics.Native/Api/FFI/Record.h | 9 +- Coplt.Graphics.Native/Api/Include/HashMap.h | 22 +++ Coplt.Graphics.Native/Api/Include/Uninit.h | 10 +- Coplt.Graphics.Native/D3d12/Src/Layout.cc | 24 ++- Coplt.Graphics.Native/D3d12/Src/Record.cc | 175 +++++++++++++++++--- Coplt.Graphics.Native/D3d12/Src/Record.h | 50 +++++- 10 files changed, 277 insertions(+), 58 deletions(-) diff --git a/Coplt.Graphics.Core/Core/GpuRecord.cs b/Coplt.Graphics.Core/Core/GpuRecord.cs index ace5c2d..a0967a9 100644 --- a/Coplt.Graphics.Core/Core/GpuRecord.cs +++ b/Coplt.Graphics.Core/Core/GpuRecord.cs @@ -14,7 +14,7 @@ public sealed unsafe class GpuRecord : IsolateChild #region Fields internal FGpuRecordData* m_data; - internal readonly Dictionary m_resources = new(); + internal readonly Dictionary m_resources = new(); internal readonly HashSet m_objects = new(); internal uint m_debug_scope_count; internal bool m_in_render_or_compute_scope; @@ -912,7 +912,7 @@ public ComputeScope Compute(string? Name = null, ReadOnlySpan Name8 = defa internal void SetDynArraySize(ShaderBindGroup Group, uint Size) { AssertNotEnded(); - if (Group.Layout.Data.Usage != FBindGroupUsage.Dynamic) + if (Group.Layout.Data.Usage != FBindGroupUsage.Dynamic) throw new ArgumentException("Dynamic array size can only be set for dynamic groups"); AddObject(Group); var cmd = new FCmdSetDynArraySize @@ -958,7 +958,7 @@ internal void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Items) { AssertNotEnded(); - if (Group.Layout.Data.Usage != FBindGroupUsage.Dynamic) + if (Group.Layout.Data.Usage != FBindGroupUsage.Dynamic) throw new ArgumentException("Only items in a dynamic group can be set dynamically"); if (Items.Length == 0) return; AddObject(Group); @@ -1150,20 +1150,20 @@ public void SetBinding(ShaderBinding Binding) /// /// 设置动态绑定的动态数组大小,调用后之前的动态数组内容将被丢弃 /// - public void SetDynArraySize(ShaderBindGroup Group, uint Size) => + public void SetDynArraySize(ShaderBindGroup Group, uint Size) => self.SetDynArraySize(Group, Size); [OverloadResolutionPriority(1)] - public void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) => + public void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) => self.SetConstants(Group, BindIndex, Constants, Offset); - public void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) where T : unmanaged => + public void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) where T : unmanaged => self.SetConstants(Group, BindIndex, Constants, Offset); - public void SetConstants(ShaderBindGroup Group, uint BindIndex, in T Constant, uint Offset = 0) where T : unmanaged => + public void SetConstants(ShaderBindGroup Group, uint BindIndex, in T Constant, uint Offset = 0) where T : unmanaged => self.SetConstants(Group, BindIndex, Constant, Offset); - public void SetBindItem(ShaderBindGroup Group, ReadOnlySpan Items) => + public void SetBindItem(ShaderBindGroup Group, ReadOnlySpan Items) => self.SetBindItem(Group, Items); #endregion @@ -1475,13 +1475,13 @@ public void SetBinding(ShaderBinding Binding) public void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) => self.SetConstants(Group, BindIndex, Constants, Offset); - public void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) where T : unmanaged => + public void SetConstants(ShaderBindGroup Group, uint BindIndex, ReadOnlySpan Constants, uint Offset = 0) where T : unmanaged => self.SetConstants(Group, BindIndex, Constants, Offset); - public void SetConstants(ShaderBindGroup Group, uint BindIndex, in T Constant, uint Offset = 0) where T : unmanaged => + public void SetConstants(ShaderBindGroup Group, uint BindIndex, in T Constant, uint Offset = 0) where T : unmanaged => self.SetConstants(Group, BindIndex, Constant, Offset); - public void SetBindItem(ShaderBindGroup Group, ReadOnlySpan Items) => + public void SetBindItem(ShaderBindGroup Group, ReadOnlySpan Items) => self.SetBindItem(Group, Items); #endregion diff --git a/Coplt.Graphics.Core/Native/Native.cs b/Coplt.Graphics.Core/Native/Native.cs index 639a086..55e1203 100644 --- a/Coplt.Graphics.Core/Native/Native.cs +++ b/Coplt.Graphics.Core/Native/Native.cs @@ -1784,6 +1784,9 @@ public unsafe partial struct FGpuRecordData [NativeTypeName("Coplt::u32")] public uint NumSyncBindings; + [NativeTypeName("Coplt::u32")] + public uint SumDynArraySize; + [NativeTypeName("Coplt::b8")] public B8 Ended; @@ -2258,6 +2261,9 @@ public unsafe partial struct FCmdSetConstants [NativeTypeName("Coplt::FShaderBindGroup *")] public FShaderBindGroup* Group; + [NativeTypeName("Coplt::u32")] + public uint SetConstantsIndex; + [NativeTypeName("Coplt::u32")] public uint Slot; @@ -2411,7 +2417,7 @@ public partial struct FCmdDispatch public partial struct FCmdItem { - [NativeTypeName("__AnonymousRecord_Cmd_L394_C9")] + [NativeTypeName("__AnonymousRecord_Cmd_L399_C9")] public _Anonymous_e__Union Anonymous; [UnscopedRef] @@ -5084,6 +5090,9 @@ public unsafe partial struct FBindGroupLayoutData [NativeTypeName("Coplt::u32")] public uint NumStaticSamplers; + [NativeTypeName("Coplt::u32")] + public uint DynamicArrayIndex; + [NativeTypeName("Coplt::FBindGroupUsage")] public FBindGroupUsage Usage; } diff --git a/Coplt.Graphics.Native/Api/FFI/Cmd.h b/Coplt.Graphics.Native/Api/FFI/Cmd.h index 0e33468..aa15364 100644 --- a/Coplt.Graphics.Native/Api/FFI/Cmd.h +++ b/Coplt.Graphics.Native/Api/FFI/Cmd.h @@ -296,7 +296,10 @@ namespace Coplt struct FCmdSetConstants : FCmdBase { + // Payload 中的索引,类型为 FCmdBindGroup FShaderBindGroup* Group{}; + // 第几个 SetConstants + u32 SetConstantsIndex{}; u32 Slot{}; // Payload 中的索引,类型为 u32 u32 ValueIndex{}; @@ -307,6 +310,7 @@ namespace Coplt // 设置动态绑定的动态数组大小,调用后之前的动态数组内容将被丢弃 struct FCmdSetDynArraySize : FCmdBase { + // Payload 中的索引,类型为 FCmdBindGroup FShaderBindGroup* Group{}; // 动态数组大小 u32 Size{}; @@ -314,6 +318,7 @@ namespace Coplt struct FCmdSetBindItem : FCmdBase { + // Payload 中的索引,类型为 FCmdBindGroup FShaderBindGroup* Group{}; // Payload 中的索引,类型为 FSetBindItem u32 ItemIndex{}; diff --git a/Coplt.Graphics.Native/Api/FFI/Layout.h b/Coplt.Graphics.Native/Api/FFI/Layout.h index 72cc03e..2a8104a 100644 --- a/Coplt.Graphics.Native/Api/FFI/Layout.h +++ b/Coplt.Graphics.Native/Api/FFI/Layout.h @@ -79,7 +79,9 @@ namespace Coplt u32 Slot{}; // dx 的 space,vk 的 set,vk 建议尽可能多的拆分 set,dx 的 space 写不写都一样 // todo 引入 spv 修改器运行时修改 vk 的 set u32 Space{}; - // 数量,View 是 StaticSampler 时必须是 1,其他必须最少是 1, View 是 Constants 是 32 位值的数量,而不是 byte 的数量 + // 数量,View 是 StaticSampler 时必须是 1,其他必须最少是 1, View 是 Constants 时是 32 位值的数量,而不是 byte 的数量 + // u32::max 表示是动态数组,只有 Cbv|Srv|Uav View 支持动态数组 + // 采样器不支持动态数组,因为一般采样器没几个,也不会动态使用 u32 Count{}; FGraphicsFormat Format{}; FShaderStage Stage{}; @@ -185,6 +187,8 @@ namespace Coplt // 绑定点所属范围,和 Id 共同组成唯一定位 u64 Scope{}; // 数量 + // u32::max 表示是动态数组,只有 Dynamic Usage 且 Cbv|Srv|Uav View 支持动态数组,每个组只能有 Cbv|Srv|Uav 中的一个 + // 采样器不支持动态数组,因为一般采样器没几个,也不会动态使用; u32 Count{}; // StaticSamplers 中的 Index u32 StaticSamplerIndex{}; @@ -222,6 +226,7 @@ namespace Coplt const FStaticSamplerInfo* StaticSamplers{}; u32 NumItems{}; u32 NumStaticSamplers{}; + u32 DynamicArrayIndex{COPLT_U32_MAX}; FBindGroupUsage Usage{}; }; diff --git a/Coplt.Graphics.Native/Api/FFI/Record.h b/Coplt.Graphics.Native/Api/FFI/Record.h index 88d530a..0b73344 100644 --- a/Coplt.Graphics.Native/Api/FFI/Record.h +++ b/Coplt.Graphics.Native/Api/FFI/Record.h @@ -45,15 +45,16 @@ namespace Coplt FList PayloadSetBindItem; FList Blob; u32 NumSyncBindings{}; + u32 SumDynArraySize{}; b8 Ended{}; FGpuRecordMode Mode{}; #ifdef FFI_SRC explicit FGpuRecordData(FAllocator* allocator) - : Commands(allocator), Resources(allocator), Bindings(allocator), BindingChange(allocator), PayloadRect(allocator), - PayloadViewport(allocator), PayloadRenderInfo(allocator), PayloadResolveInfo(allocator), PayloadBufferCopyRange(allocator), - PayloadBufferImageCopyRange(allocator), PayloadMeshBuffers(allocator), PayloadVertexBufferRange(allocator), - Payload32Bits(allocator), PayloadSetBindItem(allocator), Blob(allocator) + : Commands(allocator), Resources(allocator), Bindings(allocator), BindingChange(allocator), + PayloadRect(allocator), PayloadViewport(allocator), PayloadRenderInfo(allocator), PayloadResolveInfo(allocator), + PayloadBufferCopyRange(allocator), PayloadBufferImageCopyRange(allocator), PayloadMeshBuffers(allocator), + PayloadVertexBufferRange(allocator), Payload32Bits(allocator), PayloadSetBindItem(allocator), Blob(allocator) { } diff --git a/Coplt.Graphics.Native/Api/Include/HashMap.h b/Coplt.Graphics.Native/Api/Include/HashMap.h index 887306a..b78e232 100644 --- a/Coplt.Graphics.Native/Api/Include/HashMap.h +++ b/Coplt.Graphics.Native/Api/Include/HashMap.h @@ -700,6 +700,28 @@ namespace Coplt return GetOrAddEntry(key, already_exist, fove(create_value)).second; } + Value& GetOrAdd(const Key& key, Value&& value, bool& already_exist) + { + return GetOrAddEntry(key, already_exist, [&](UP p) { new(p.unsafe_put()) Value(std::forward(value)); }).second; + } + + Value& GetOrAdd(const Key& key, Value&& value) + { + bool already_exist{}; + return GetOrAdd(key, std::forward(value), already_exist); + } + + Value& GetOrAdd(const Key& key, const Value& value, bool& already_exist) + { + return GetOrAddEntry(key, already_exist, [&](UP p) { new(p.unsafe_put()) Value(value); }).second; + } + + Value& GetOrAdd(const Key& key, const Value& value) + { + bool already_exist{}; + return GetOrAdd(key, value, already_exist); + } + Value& GetOrAddDefault(Key&& key, bool& already_exist) { return GetOrAdd(std::forward(key), already_exist, [&](UP p) { new(p.unsafe_put()) Value(); }); diff --git a/Coplt.Graphics.Native/Api/Include/Uninit.h b/Coplt.Graphics.Native/Api/Include/Uninit.h index 253d1c4..73501f1 100644 --- a/Coplt.Graphics.Native/Api/Include/Uninit.h +++ b/Coplt.Graphics.Native/Api/Include/Uninit.h @@ -45,7 +45,7 @@ namespace Coplt } } - template requires std::convertible_to + template requires std::convertible_to void put(U&& value) { if (m_initialized) *m_ptr = std::forward(value); @@ -67,7 +67,7 @@ namespace Coplt return *m_ptr; } - template requires std::convertible_to + template requires std::convertible_to T& operator=(U&& p) noexcept(std::is_nothrow_move_constructible_v) { if (m_initialized) *m_ptr = std::forward(p); @@ -90,7 +90,7 @@ namespace Coplt return *m_ptr; } - template requires std::convertible_to + template requires std::convertible_to T& operator=(const U& p) noexcept(std::is_nothrow_copy_constructible_v) { if (m_initialized) *m_ptr = p; @@ -107,7 +107,7 @@ namespace Coplt return operator=(std::forward(p)); } - template requires std::convertible_to + template requires std::convertible_to T& operator<<(U&& p) noexcept(std::is_nothrow_move_constructible_v) { return operator=(std::forward(p)); @@ -118,7 +118,7 @@ namespace Coplt return operator=(p); } - template requires std::convertible_to + template requires std::convertible_to T& operator<<(const U& p) noexcept(std::is_nothrow_copy_constructible_v) { return operator=(p); diff --git a/Coplt.Graphics.Native/D3d12/Src/Layout.cc b/Coplt.Graphics.Native/D3d12/Src/Layout.cc index 472a29a..7f0e5a2 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Layout.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Layout.cc @@ -90,10 +90,25 @@ D3d12BindGroupLayout::D3d12BindGroupLayout(const FBindGroupLayoutCreateOptions& item.Id, item.Scope, static_cast(item.Stages), i ); } - if (i + 1 != m_items.size()) + switch (item.View) { + case FShaderLayoutItemView::Cbv: + case FShaderLayoutItemView::Srv: + case FShaderLayoutItemView::Uav: + if (i + 1 != m_items.size()) + { + COPLT_THROW_FMT( + "Invalid binding define {{ Id = {}, Scope = {}, Stages = {} }} at [{}]; Dynamic length array must be the last item in the group", + item.Id, item.Scope, static_cast(item.Stages), i + ); + } + DynamicArrayIndex = i; + break; + case FShaderLayoutItemView::Sampler: + case FShaderLayoutItemView::Constants: + case FShaderLayoutItemView::StaticSampler: COPLT_THROW_FMT( - "Invalid binding define {{ Id = {}, Scope = {}, Stages = {} }} at [{}]; Dynamic length array must be the last item in the group", + "Invalid binding define {{ Id = {}, Scope = {}, Stages = {} }} at [{}]; Only Cbv|Srv|Uav View support unlimited length arrays", item.Id, item.Scope, static_cast(item.Stages), i ); } @@ -110,7 +125,10 @@ D3d12BindGroupLayout::D3d12BindGroupLayout(const FBindGroupLayoutCreateOptions& } info.OffsetInTable = ResourceTableSize; info.Place = BindSlotPlace::ResourceTable; - ResourceTableSize += count; + if (count != COPLT_U32_MAX) + { + ResourceTableSize += count; + } break; case FShaderLayoutItemView::Sampler: info.OffsetInTable = SamplerTableSize; diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.cc b/Coplt.Graphics.Native/D3d12/Src/Record.cc index d1adbed..5cabe55 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Record.cc @@ -343,8 +343,13 @@ void D3d12GpuRecord::Recycle() m_barrier_analyzer->Clear(); m_context->Recycle(); m_resource_map.Clear(); + m_dynamic_bind_group_map.Clear(); m_resource_infos.clear(); m_binding_infos.clear(); + m_dynamic_bind_group_infos.clear(); + m_dynamic_bind_group_info_indexes.clear(); + m_dynamic_bind_group_info_sync_indexes.clear(); + m_set_constants_chunks.clear(); m_sync_binding_infos.clear(); m_allocations.clear(); m_bind_items.clear(); @@ -375,9 +380,10 @@ void D3d12GpuRecord::DoEnd() COPLT_THROW("Too many resources"); m_barrier_analyzer->StartAnalyze(this); ReadyResource(); - u32 MinResHeapSize{}, MinSmpHeapSize{}; - ReadyBindings(MinResHeapSize, MinSmpHeapSize); - m_context->m_descriptor_manager.ReadyFrame(MinResHeapSize, MinSmpHeapSize); + u32 MaxResHeapSize{}, MaxSmpHeapSize{}; + ReadyBindings(MaxResHeapSize, MaxSmpHeapSize); + // todo 改成分析时所有描述符堆更改都暂存在 cpu 上,分析结束统一上传 + m_context->m_descriptor_manager.ReadyFrame(MaxResHeapSize, MaxSmpHeapSize); Analyze(); m_barrier_analyzer->EndAnalyze(); if (m_isolate_config->MultiThreadRecord) @@ -453,10 +459,10 @@ void D3d12GpuRecord::ReadyResource() } } -void D3d12GpuRecord::ReadyBindings(u32& MinResHeapSize, u32& MinSmpHeapSize) +void D3d12GpuRecord::ReadyBindings(u32& MaxResHeapSize, u32& MaxSmpHeapSize) { - MinResHeapSize = 0; - MinSmpHeapSize = 0; + MaxResHeapSize = 0; + MaxSmpHeapSize = 0; m_binding_infos.clear(); m_binding_infos.reserve(Bindings.size()); for (u32 i = 0; i < Bindings.size(); ++i) @@ -476,11 +482,50 @@ void D3d12GpuRecord::ReadyBindings(u32& MinResHeapSize, u32& MinSmpHeapSize) if (binding == nullptr) COPLT_THROW_FMT("Binding [{}] comes from different backends", item.Binding); const auto& data = binding->Layout()->Data(); - MinResHeapSize += data.SumTableResourceSlots; - MinSmpHeapSize += data.SumTableSamplerSlots; + MaxResHeapSize += data.SumTableResourceSlots; + MaxSmpHeapSize += data.SumTableSamplerSlots; } } +D3d12GpuRecord::BindGroupInfo& D3d12GpuRecord::QueryBindGroupInfo(ID3d12ShaderBindGroup& group, bool mut) +{ + const auto id = group.ObjectId(); + bool exists = false; + const auto new_index = m_dynamic_bind_group_infos.size(); + auto& index = m_dynamic_bind_group_map.GetOrAdd(id, new_index, exists); + if (!exists) goto Create; + auto& info = m_dynamic_bind_group_infos[index]; + if (!mut || !info.Frozen) return info; + index = new_index; +Create: + m_dynamic_bind_group_infos.push_back(BindGroupInfo{ + .BindGroup = Rc::UnsafeClone(std::addressof(group)), + .Index = new_index, + }); + return m_dynamic_bind_group_infos.back(); +} + +D3d12GpuRecord::BindGroupInfo& D3d12GpuRecord::QueryBindGroupInfo(NonNull group, u32 i, bool mut) +{ + const auto id = group->ObjectId(); + bool exists = false; + const auto new_index = m_dynamic_bind_group_infos.size(); + auto& index = m_dynamic_bind_group_map.GetOrAdd(id, new_index, exists); + if (!exists) goto Create; + auto& info = m_dynamic_bind_group_infos[index]; + if (!mut || !info.Frozen) return info; + index = new_index; +Create: + const auto Group = group->QueryInterface(); + if (Group == nullptr) + COPLT_THROW_FMT("[{}] BindGroup From different backends", i); + m_dynamic_bind_group_infos.push_back(BindGroupInfo{ + .BindGroup = Rc::UnsafeClone(Group), + .Index = new_index, + }); + return m_dynamic_bind_group_infos.back(); +} + void D3d12GpuRecord::Analyze() { const auto commands = Commands.AsSpan(); @@ -530,7 +575,7 @@ void D3d12GpuRecord::Analyze() Analyze_SetBinding(i, command.SetBinding); break; case FCmdType::SetConstants: - // todo + Analyze_SetConstants(i, command.SetConstants); break; case FCmdType::SetDynArraySize: // todo @@ -725,10 +770,11 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) auto& binding_info = m_binding_infos[m_pipeline_context.BindingIndex]; binding_info.Layout = binding_layout.get(); const auto binding_version = binding->Version(); - if (binding_info.BindItemIndex == COPLT_U32_MAX || binding_info.BindingVersion != binding_version || any_changed) + if (binding_info.PersistentBindItemIndex == COPLT_U32_MAX || binding_info.BindingVersion != binding_version || any_changed) { binding_info.BindingVersion = binding_version; - binding_info.BindItemIndex = m_bind_items.size(); + binding_info.PersistentBindItemIndex = m_bind_items.size(); + binding_info.DynamicBindGroupInfoIndIndex = m_dynamic_bind_group_infos.size(); for (u32 g = 0; g < groups.size(); ++g) { const auto& group = groups[g]; @@ -736,7 +782,15 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) const auto object_id = group->ObjectId(); const auto& data = group->Layout()->Data(); const auto& bind_item_infos = group_bind_item_infos[g]; - if (data.Usage == FBindGroupUsage::Dynamic) continue; + if (data.Usage == FBindGroupUsage::Dynamic) + { + // 对于动态资源,只记录动态组信息索引, SyncBinding 时再处理 + m_dynamic_bind_group_info_indexes.push_back(BindGroupInd{ + .GroupIndex = g, + .InfoIndex = QueryBindGroupInfo(*group, false).Index, + }); + continue; + } DescriptorAllocation resource_allocation{}; DescriptorAllocation sampler_allocation{}; // todo 确定是最后一次修改 @@ -766,16 +820,41 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) m_allocations.push_back({g, resource_allocation, sampler_allocation}); for (const auto& bind_item_info : bind_item_infos) { + // 持久绑定只有描述符表 + COPLT_DEBUG_ASSERT(bind_item_info.Place == Layout::BindItemPlace::Table); BindItem item{ .Info = &bind_item_info, .AllocationIndex = AllocationIndex, }; m_bind_items.push_back(item); } - // todo 直接资源和常量 } - binding_info.BindItemCount = m_bind_items.size() - binding_info.BindItemCount; + binding_info.PersistentBindItemCount = m_bind_items.size() - binding_info.PersistentBindItemCount; + binding_info.DynamicBindGroupInfoIndCount = m_dynamic_bind_group_infos.size() - binding_info.DynamicBindGroupInfoIndIndex; + } +} + +void D3d12GpuRecord::Analyze_SetConstants(u32 i, const FCmdSetConstants& cmd) +{ + auto& info = QueryBindGroupInfo(NonNull(cmd.Group), true, i); + if (info.SetConstantsHead != COPLT_U32_MAX) + { + auto& chunk = m_set_constants_chunks[info.SetConstantsTail]; + for (u8 n = 0; n < 7; ++n) + { + if (chunk.CmdIndex[n] != COPLT_U32_MAX) continue; + chunk.CmdIndex[n] = i; + return; + } + info.SetConstantsTail = chunk.Next = m_set_constants_chunks.size(); + } + else + { + info.SetConstantsTail = info.SetConstantsHead = m_set_constants_chunks.size(); } + SetConstantsChunk chunk{}; + chunk.CmdIndex[0] = i; + m_set_constants_chunks.push_back(chunk); } void D3d12GpuRecord::Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd) @@ -784,8 +863,54 @@ void D3d12GpuRecord::Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd) auto& binding_info = m_binding_infos[m_pipeline_context.BindingIndex]; auto& sync_binding_info = m_sync_binding_infos[cmd.SyncBindingIndex]; sync_binding_info.Layout = binding_info.Layout; - sync_binding_info.BindItemIndex = binding_info.BindItemIndex; - sync_binding_info.BindItemCount = binding_info.BindItemCount; + const NonNull binding_layout = sync_binding_info.Layout; + const auto group_item_infos = binding_layout->GroupItemInfos(); + const auto group_bind_item_infos = binding_layout->GroupBindItemInfos(); + sync_binding_info.PersistentBindItemIndex = binding_info.PersistentBindItemIndex; + sync_binding_info.PersistentBindItemCount = binding_info.PersistentBindItemCount; + sync_binding_info.DynamicBindGroupInfoIndIndex = m_dynamic_bind_group_info_sync_indexes.size(); + const auto bi_ind = std::span(m_dynamic_bind_group_info_indexes) + .subspan(binding_info.DynamicBindGroupInfoIndIndex, binding_info.DynamicBindGroupInfoIndCount); + for (auto& ind : bi_ind) + { + const auto& old_bind_group_info = m_dynamic_bind_group_infos[ind.InfoIndex]; + auto& info = QueryBindGroupInfo(*old_bind_group_info.BindGroup, false); + m_dynamic_bind_group_info_sync_indexes.push_back({.GroupIndex = ind.GroupIndex, .InfoIndex = info.Index}); + if (!info.Frozen) + { + info.Frozen = true; + info.DynamicBindItemIndex = m_bind_items.size(); + const auto& group = info.BindGroup; + const auto& bind_item_infos = group_bind_item_infos[ind.GroupIndex]; + const auto& data = group->Layout()->Data(); + DescriptorAllocation resource_allocation{}; + DescriptorAllocation sampler_allocation{}; + const auto f = [&]( + const u32 size, const Rc& heap, DescriptorAllocation& allocation + ) + { + if (size == 0) return; + allocation = heap->AllocateTmp(size); + }; + const auto dyn_size = data.DynamicArrayIndex == COPLT_U32_MAX ? 0 : info.DynArraySize; + f(data.ResourceTableSize + dyn_size, m_context->m_descriptor_manager.m_res, resource_allocation); + f(data.SamplerTableSize, m_context->m_descriptor_manager.m_smp, sampler_allocation); + const auto AllocationIndex = m_allocations.size(); + m_allocations.push_back({ind.GroupIndex, resource_allocation, sampler_allocation}); + for (const auto& bind_item_info : bind_item_infos) + { + // 常量和直接不在这里处理 + if (bind_item_info.Place != Layout::BindItemPlace::Table) continue; + BindItem item{ + .Info = &bind_item_info, + .AllocationIndex = AllocationIndex, + }; + m_bind_items.push_back(item); + } + info.DynamicBindItemCount = m_bind_items.size() - info.DynamicBindItemIndex; + } + } + sync_binding_info.DynamicBindGroupInfoIndCount = m_dynamic_bind_group_info_sync_indexes.size() - sync_binding_info.DynamicBindGroupInfoIndIndex; } void D3d12GpuRecord::Analyze_SetMeshBuffers(u32 i, const FCmdSetMeshBuffers& cmd) @@ -812,6 +937,7 @@ void D3d12GpuRecord::Analyze_Draw(u32 i, const FCmdDraw& cmd) if (m_state != RecordState::Render) COPLT_THROW_FMT("[{}] Can only use Draw in render scope", i); Analyze_SyncBinding(i, cmd); + m_barrier_analyzer->OnCmd(); } void D3d12GpuRecord::Analyze_Dispatch(u32 i, const FCmdDispatch& cmd) @@ -828,6 +954,7 @@ void D3d12GpuRecord::Analyze_Dispatch(u32 i, const FCmdDispatch& cmd) break; } Analyze_SyncBinding(i, cmd); + m_barrier_analyzer->OnCmd(); } void D3d12GpuRecord::BeforeInterpret(const D3d12RentedCommandList& list) @@ -1266,13 +1393,13 @@ void D3d12GpuRecord::Interpret_SetPipeline(const CmdList& list, const u32 i, con void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCmdSyncBinding& cmd) { - const auto& set_binding_info = m_sync_binding_infos[cmd.SyncBindingIndex]; - if (!set_binding_info) return; - const auto bind_items = std::span(m_bind_items).subspan(set_binding_info.BindItemIndex, set_binding_info.BindItemCount); - for (const auto& bind_item : bind_items) + const auto& sync_binding_info = m_sync_binding_infos[cmd.SyncBindingIndex]; + if (!sync_binding_info) return; + const auto persistent_bind_items = std::span(m_bind_items) + .subspan(sync_binding_info.PersistentBindItemIndex, sync_binding_info.PersistentBindItemCount); + for (const auto& bind_item : persistent_bind_items) { const auto& bind_item_info = *bind_item.Info; - // todo 直接资源和常量 switch (bind_item_info.Place) { case Layout::BindItemPlace::Table: @@ -1290,11 +1417,9 @@ void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCm break; } case Layout::BindItemPlace::Direct: - // todo - break; case Layout::BindItemPlace::Const: - // todo - break; + // 持久绑定只有描述符表,不会存在直接资源和常量 + COPLT_THROW("Unreachable"); } } } diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.h b/Coplt.Graphics.Native/D3d12/Src/Record.h index 37e3ce8..5f859d4 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.h +++ b/Coplt.Graphics.Native/D3d12/Src/Record.h @@ -122,10 +122,10 @@ namespace Coplt { Ptr Layout{}; u64 BindingVersion{}; - u32 BindItemIndex{COPLT_U32_MAX}; - u32 BindItemCount{0}; - u32 BindGroupInfoIndex{COPLT_U32_MAX}; - bool Changed{}; + u32 PersistentBindItemIndex{COPLT_U32_MAX}; + u32 PersistentBindItemCount{0}; + u32 DynamicBindGroupInfoIndIndex{COPLT_U32_MAX}; + u32 DynamicBindGroupInfoIndCount{0}; explicit operator bool() const noexcept { @@ -135,15 +135,33 @@ namespace Coplt struct BindGroupInfo { + Rc BindGroup{}; + u32 Index{}; u32 DynArraySize{}; - bool Changed{}; + // 类型为 SetConstantsChunk + u32 SetConstantsHead{COPLT_U32_MAX}; + // 类型为 SetConstantsChunk + u32 SetConstantsTail{COPLT_U32_MAX}; + // 只有再 Frozen 变为 true 后才会设置 + u32 DynamicBindItemIndex{COPLT_U32_MAX}; + u32 DynamicBindItemCount{0}; + // 冻结后不可再修改 + bool Frozen{false}; + }; + + struct SetConstantsChunk + { + u32 Next{COPLT_U32_MAX}; + u32 CmdIndex[7]{COPLT_U32_MAX}; }; struct SyncBindingInfo { Ptr Layout{}; - u32 BindItemIndex{COPLT_U32_MAX}; - u32 BindItemCount{0}; + u32 PersistentBindItemIndex{COPLT_U32_MAX}; + u32 PersistentBindItemCount{0}; + u32 DynamicBindGroupInfoIndIndex{COPLT_U32_MAX}; + u32 DynamicBindGroupInfoIndCount{0}; explicit operator bool() const noexcept { @@ -154,6 +172,7 @@ namespace Coplt struct BindItem { Ptr Info{}; + union { u32 AllocationIndex{}; @@ -168,6 +187,12 @@ namespace Coplt DescriptorAllocation Sampler{}; }; + struct BindGroupInd + { + u32 GroupIndex{}; + u32 InfoIndex{}; + }; + u64 m_isolate_id{}; u64 m_record_id{}; SRc m_isolate_config{}; @@ -177,8 +202,13 @@ namespace Coplt HashMap m_resource_map{}; // id -> index std::vector m_resource_infos{}; std::vector m_binding_infos{}; + std::vector m_dynamic_bind_group_infos{}; + HashMap m_dynamic_bind_group_map{}; // id -> index std::vector m_sync_binding_infos{}; std::vector m_allocations{}; + std::vector m_dynamic_bind_group_info_indexes{}; + std::vector m_dynamic_bind_group_info_sync_indexes{}; + std::vector m_set_constants_chunks{}; std::vector m_bind_items{}; std::vector m_queue_wait_points{}; std::vector m_tmp_locks{}; @@ -219,7 +249,10 @@ namespace Coplt FResIndex AddResource(const View& view); void ReadyResource(); // 返回帧所需的最小描述符堆大小 - void ReadyBindings(u32& MinResHeapSize, u32& MinSmpHeapSize); + void ReadyBindings(u32& MaxResHeapSize, u32& MaxSmpHeapSize); + + BindGroupInfo& QueryBindGroupInfo(ID3d12ShaderBindGroup& group, bool mut); + BindGroupInfo& QueryBindGroupInfo(NonNull group, u32 i, bool mut); void Analyze(); void Analyze_PreparePresent(u32 i, const FCmdPreparePresent& cmd) const; @@ -233,6 +266,7 @@ namespace Coplt void Analyze_ComputeEnd(u32 i, const FCmdCompute& cmd); void Analyze_SetPipeline(u32 i, const FCmdSetPipeline& cmd); void Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd); + void Analyze_SetConstants(u32 i, const FCmdSetConstants& cmd); void Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd); void Analyze_SetMeshBuffers(u32 i, const FCmdSetMeshBuffers& cmd); void Analyze_Draw(u32 i, const FCmdDraw& cmd); From d2fc25aee8b6ddfbcb999e5df69b745d278db61a Mon Sep 17 00:00:00 2001 From: U2A5F Date: Thu, 17 Apr 2025 14:50:24 +0800 Subject: [PATCH 10/22] SetConstants --- Coplt.Graphics.Native/D3d12/Src/Record.cc | 54 ++++++++++++++++++++--- Coplt.Graphics.Native/D3d12/Src/Record.h | 6 ++- 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.cc b/Coplt.Graphics.Native/D3d12/Src/Record.cc index 5cabe55..639f8cb 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Record.cc @@ -347,8 +347,8 @@ void D3d12GpuRecord::Recycle() m_resource_infos.clear(); m_binding_infos.clear(); m_dynamic_bind_group_infos.clear(); - m_dynamic_bind_group_info_indexes.clear(); - m_dynamic_bind_group_info_sync_indexes.clear(); + m_dynamic_bind_group_info_inds.clear(); + m_dynamic_bind_group_info_sync_inds.clear(); m_set_constants_chunks.clear(); m_sync_binding_infos.clear(); m_allocations.clear(); @@ -785,7 +785,7 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) if (data.Usage == FBindGroupUsage::Dynamic) { // 对于动态资源,只记录动态组信息索引, SyncBinding 时再处理 - m_dynamic_bind_group_info_indexes.push_back(BindGroupInd{ + m_dynamic_bind_group_info_inds.push_back(BindGroupInd{ .GroupIndex = g, .InfoIndex = QueryBindGroupInfo(*group, false).Index, }); @@ -868,14 +868,14 @@ void D3d12GpuRecord::Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd) const auto group_bind_item_infos = binding_layout->GroupBindItemInfos(); sync_binding_info.PersistentBindItemIndex = binding_info.PersistentBindItemIndex; sync_binding_info.PersistentBindItemCount = binding_info.PersistentBindItemCount; - sync_binding_info.DynamicBindGroupInfoIndIndex = m_dynamic_bind_group_info_sync_indexes.size(); - const auto bi_ind = std::span(m_dynamic_bind_group_info_indexes) + sync_binding_info.DynamicBindGroupInfoIndIndex = m_dynamic_bind_group_info_sync_inds.size(); + const auto bi_ind = std::span(m_dynamic_bind_group_info_inds) .subspan(binding_info.DynamicBindGroupInfoIndIndex, binding_info.DynamicBindGroupInfoIndCount); for (auto& ind : bi_ind) { const auto& old_bind_group_info = m_dynamic_bind_group_infos[ind.InfoIndex]; auto& info = QueryBindGroupInfo(*old_bind_group_info.BindGroup, false); - m_dynamic_bind_group_info_sync_indexes.push_back({.GroupIndex = ind.GroupIndex, .InfoIndex = info.Index}); + m_dynamic_bind_group_info_sync_inds.push_back({.GroupIndex = ind.GroupIndex, .InfoIndex = info.Index}); if (!info.Frozen) { info.Frozen = true; @@ -910,7 +910,7 @@ void D3d12GpuRecord::Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd) info.DynamicBindItemCount = m_bind_items.size() - info.DynamicBindItemIndex; } } - sync_binding_info.DynamicBindGroupInfoIndCount = m_dynamic_bind_group_info_sync_indexes.size() - sync_binding_info.DynamicBindGroupInfoIndIndex; + sync_binding_info.DynamicBindGroupInfoIndCount = m_dynamic_bind_group_info_sync_inds.size() - sync_binding_info.DynamicBindGroupInfoIndIndex; } void D3d12GpuRecord::Analyze_SetMeshBuffers(u32 i, const FCmdSetMeshBuffers& cmd) @@ -1395,6 +1395,7 @@ void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCm { const auto& sync_binding_info = m_sync_binding_infos[cmd.SyncBindingIndex]; if (!sync_binding_info) return; + const NonNull layout = sync_binding_info.Layout; const auto persistent_bind_items = std::span(m_bind_items) .subspan(sync_binding_info.PersistentBindItemIndex, sync_binding_info.PersistentBindItemCount); for (const auto& bind_item : persistent_bind_items) @@ -1422,6 +1423,45 @@ void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCm COPLT_THROW("Unreachable"); } } + const auto dyn_bind_group_info_inds = std::span(m_dynamic_bind_group_info_sync_inds) + .subspan(sync_binding_info.DynamicBindGroupInfoIndIndex, sync_binding_info.DynamicBindGroupInfoIndCount); + for (const auto& dyn_bind_group_info_ind : dyn_bind_group_info_inds) + { + const auto& info = m_dynamic_bind_group_infos[dyn_bind_group_info_ind.InfoIndex]; + if (!info.BindGroup) continue; + const auto& group_bind_item_info = layout->GroupBindItemInfos()[dyn_bind_group_info_ind.GroupIndex]; + auto set_constants_chunk_index = info.SetConstantsHead; + while (set_constants_chunk_index != COPLT_U32_MAX) + { + const auto& set_constants_chunk = m_set_constants_chunks[set_constants_chunk_index]; + for (auto& set_constants_cmd_index : set_constants_chunk.CmdIndex) + { + if (set_constants_cmd_index == COPLT_U32_MAX) break; + const auto& set_constants_cmd = Commands[set_constants_cmd_index].SetConstants; + if (set_constants_cmd.Slot > group_bind_item_info.size()) + COPLT_THROW_FMT("[{}] Invalid set constant slot index, out of range", i); + const auto& bind_item_info = group_bind_item_info[set_constants_cmd.Slot]; + COPLT_DEBUG_ASSERT(bind_item_info.Place == Layout::BindItemPlace::Const); + const auto root_index = bind_item_info.RootIndex; + if (set_constants_cmd.Count == 0) continue; + if (m_state == RecordState::Render) + { + list->g0->SetGraphicsRoot32BitConstants( + root_index, set_constants_cmd.Count, + &Payload32Bits[set_constants_cmd.ValueIndex], set_constants_cmd.Offset + ); + } + else + { + list->g0->SetComputeRoot32BitConstants( + root_index, set_constants_cmd.Count, + &Payload32Bits[set_constants_cmd.ValueIndex], set_constants_cmd.Offset + ); + } + } + set_constants_chunk_index = set_constants_chunk.Next; + } + } } void D3d12GpuRecord::Interpret_SetViewportScissor(const CmdList& list, u32 i, const FCmdSetViewportScissor& cmd) const diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.h b/Coplt.Graphics.Native/D3d12/Src/Record.h index 5f859d4..485e3b7 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.h +++ b/Coplt.Graphics.Native/D3d12/Src/Record.h @@ -160,6 +160,7 @@ namespace Coplt Ptr Layout{}; u32 PersistentBindItemIndex{COPLT_U32_MAX}; u32 PersistentBindItemCount{0}; + // 类型为 BindGroupInd u32 DynamicBindGroupInfoIndIndex{COPLT_U32_MAX}; u32 DynamicBindGroupInfoIndCount{0}; @@ -190,6 +191,7 @@ namespace Coplt struct BindGroupInd { u32 GroupIndex{}; + // 类型是 BindGroupInfo u32 InfoIndex{}; }; @@ -206,8 +208,8 @@ namespace Coplt HashMap m_dynamic_bind_group_map{}; // id -> index std::vector m_sync_binding_infos{}; std::vector m_allocations{}; - std::vector m_dynamic_bind_group_info_indexes{}; - std::vector m_dynamic_bind_group_info_sync_indexes{}; + std::vector m_dynamic_bind_group_info_inds{}; + std::vector m_dynamic_bind_group_info_sync_inds{}; std::vector m_set_constants_chunks{}; std::vector m_bind_items{}; std::vector m_queue_wait_points{}; From fc4a8979fe78e9273849b7514ca2884941d05bda Mon Sep 17 00:00:00 2001 From: U2A5F Date: Thu, 17 Apr 2025 15:09:03 +0800 Subject: [PATCH 11/22] save --- Coplt.Graphics.Native/D3d12/Src/Layout.cc | 10 ++++++++++ Coplt.Graphics.Native/D3d12/Src/Record.cc | 23 +++++++++++++++++++++-- Coplt.Graphics.Native/D3d12/Src/Record.h | 2 ++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/Coplt.Graphics.Native/D3d12/Src/Layout.cc b/Coplt.Graphics.Native/D3d12/Src/Layout.cc index 7f0e5a2..b0f1edc 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Layout.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Layout.cc @@ -81,6 +81,16 @@ D3d12BindGroupLayout::D3d12BindGroupLayout(const FBindGroupLayoutCreateOptions& BindSlotInfo info{}; const auto& item = m_items[i]; const auto count = std::max(1u, item.Count); + if (item.View == FShaderLayoutItemView::Constants) + { + if (Usage != FBindGroupUsage::Dynamic) + { + COPLT_THROW_FMT( + "Invalid binding define {{ Id = {}, Scope = {}, Stages = {} }} at [{}]; Only dynamic usage groups support constants", + item.Id, item.Scope, static_cast(item.Stages), i + ); + } + } if (count == COPLT_U32_MAX) { if (Usage != FBindGroupUsage::Dynamic) diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.cc b/Coplt.Graphics.Native/D3d12/Src/Record.cc index 639f8cb..592d45c 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Record.cc @@ -831,6 +831,7 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) } binding_info.PersistentBindItemCount = m_bind_items.size() - binding_info.PersistentBindItemCount; binding_info.DynamicBindGroupInfoIndCount = m_dynamic_bind_group_infos.size() - binding_info.DynamicBindGroupInfoIndIndex; + binding_info.Changed = true; } } @@ -863,8 +864,9 @@ void D3d12GpuRecord::Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd) auto& binding_info = m_binding_infos[m_pipeline_context.BindingIndex]; auto& sync_binding_info = m_sync_binding_infos[cmd.SyncBindingIndex]; sync_binding_info.Layout = binding_info.Layout; + auto changed = binding_info.Changed; + binding_info.Changed = false; const NonNull binding_layout = sync_binding_info.Layout; - const auto group_item_infos = binding_layout->GroupItemInfos(); const auto group_bind_item_infos = binding_layout->GroupBindItemInfos(); sync_binding_info.PersistentBindItemIndex = binding_info.PersistentBindItemIndex; sync_binding_info.PersistentBindItemCount = binding_info.PersistentBindItemCount; @@ -879,6 +881,7 @@ void D3d12GpuRecord::Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd) if (!info.Frozen) { info.Frozen = true; + changed = true; info.DynamicBindItemIndex = m_bind_items.size(); const auto& group = info.BindGroup; const auto& bind_item_infos = group_bind_item_infos[ind.GroupIndex]; @@ -911,6 +914,7 @@ void D3d12GpuRecord::Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd) } } sync_binding_info.DynamicBindGroupInfoIndCount = m_dynamic_bind_group_info_sync_inds.size() - sync_binding_info.DynamicBindGroupInfoIndIndex; + if (!changed) sync_binding_info.Skip = true; } void D3d12GpuRecord::Analyze_SetMeshBuffers(u32 i, const FCmdSetMeshBuffers& cmd) @@ -1394,8 +1398,11 @@ void D3d12GpuRecord::Interpret_SetPipeline(const CmdList& list, const u32 i, con void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCmdSyncBinding& cmd) { const auto& sync_binding_info = m_sync_binding_infos[cmd.SyncBindingIndex]; - if (!sync_binding_info) return; + if (!sync_binding_info || sync_binding_info.Skip) return; const NonNull layout = sync_binding_info.Layout; + + #pragma region 持久分配的描述符表 + const auto persistent_bind_items = std::span(m_bind_items) .subspan(sync_binding_info.PersistentBindItemIndex, sync_binding_info.PersistentBindItemCount); for (const auto& bind_item : persistent_bind_items) @@ -1423,6 +1430,11 @@ void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCm COPLT_THROW("Unreachable"); } } + + #pragma endregion + + #pragma region 动态组 + const auto dyn_bind_group_info_inds = std::span(m_dynamic_bind_group_info_sync_inds) .subspan(sync_binding_info.DynamicBindGroupInfoIndIndex, sync_binding_info.DynamicBindGroupInfoIndCount); for (const auto& dyn_bind_group_info_ind : dyn_bind_group_info_inds) @@ -1431,6 +1443,9 @@ void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCm if (!info.BindGroup) continue; const auto& group_bind_item_info = layout->GroupBindItemInfos()[dyn_bind_group_info_ind.GroupIndex]; auto set_constants_chunk_index = info.SetConstantsHead; + + #pragma region 常量 + while (set_constants_chunk_index != COPLT_U32_MAX) { const auto& set_constants_chunk = m_set_constants_chunks[set_constants_chunk_index]; @@ -1461,7 +1476,11 @@ void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCm } set_constants_chunk_index = set_constants_chunk.Next; } + + #pragma endregion } + + #pragma endregion } void D3d12GpuRecord::Interpret_SetViewportScissor(const CmdList& list, u32 i, const FCmdSetViewportScissor& cmd) const diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.h b/Coplt.Graphics.Native/D3d12/Src/Record.h index 485e3b7..b29aa43 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.h +++ b/Coplt.Graphics.Native/D3d12/Src/Record.h @@ -126,6 +126,7 @@ namespace Coplt u32 PersistentBindItemCount{0}; u32 DynamicBindGroupInfoIndIndex{COPLT_U32_MAX}; u32 DynamicBindGroupInfoIndCount{0}; + bool Changed{}; explicit operator bool() const noexcept { @@ -163,6 +164,7 @@ namespace Coplt // 类型为 BindGroupInd u32 DynamicBindGroupInfoIndIndex{COPLT_U32_MAX}; u32 DynamicBindGroupInfoIndCount{0}; + bool Skip{}; explicit operator bool() const noexcept { From 97ee6e0169e15c28bc48684ca68596e10c78903e Mon Sep 17 00:00:00 2001 From: U2A5F Date: Fri, 18 Apr 2025 18:13:52 +0800 Subject: [PATCH 12/22] save --- .idea/.idea.Coplt.Graphics/.idea/vcs.xml | 8 + .idea/editor.xml | 668 ++++++------------ Coplt.Graphics.Native/Api/FFI/Record.h | 2 +- Coplt.Graphics.Native/D3d12/Src/Binding.cc | 108 ++- Coplt.Graphics.Native/D3d12/Src/Binding.h | 19 +- Coplt.Graphics.Native/D3d12/Src/Context.cc | 12 +- Coplt.Graphics.Native/D3d12/Src/Context.h | 4 +- .../D3d12/Src/DescriptorManager.cc | 30 +- .../D3d12/Src/DescriptorManager.h | 8 +- Coplt.Graphics.Native/D3d12/Src/Record.cc | 251 ++++--- Coplt.Graphics.Native/D3d12/Src/Record.h | 73 +- 11 files changed, 616 insertions(+), 567 deletions(-) diff --git a/.idea/.idea.Coplt.Graphics/.idea/vcs.xml b/.idea/.idea.Coplt.Graphics/.idea/vcs.xml index 94a25f7..dd3e634 100644 --- a/.idea/.idea.Coplt.Graphics/.idea/vcs.xml +++ b/.idea/.idea.Coplt.Graphics/.idea/vcs.xml @@ -2,5 +2,13 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/editor.xml b/.idea/editor.xml index 25fcf2b..faedd0b 100644 --- a/.idea/editor.xml +++ b/.idea/editor.xml @@ -1,486 +1,250 @@ - \ No newline at end of file diff --git a/Coplt.Graphics.Native/Api/FFI/Record.h b/Coplt.Graphics.Native/Api/FFI/Record.h index 0b73344..b851d7b 100644 --- a/Coplt.Graphics.Native/Api/FFI/Record.h +++ b/Coplt.Graphics.Native/Api/FFI/Record.h @@ -32,7 +32,7 @@ namespace Coplt FList Commands; FList Resources; FList Bindings; - FList BindingChange; + FList BindingChange; // todo remove FList PayloadRect; FList PayloadViewport; FList PayloadRenderInfo; diff --git a/Coplt.Graphics.Native/D3d12/Src/Binding.cc b/Coplt.Graphics.Native/D3d12/Src/Binding.cc index 8eb042e..c256324 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Binding.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Binding.cc @@ -8,6 +8,11 @@ using namespace Coplt; +DescriptorHeapPair::operator bool() const +{ + return ResourceHeap || SamplerHeap; +} + D3d12ShaderBindGroup::D3d12ShaderBindGroup(Rc&& device, const FShaderBindGroupCreateOptions& options) : m_device(std::move(device)) { const auto layout = NonNull(options.Layout)->QueryInterface(); @@ -67,7 +72,7 @@ D3d12ShaderBindGroup::D3d12ShaderBindGroup(Rc&& device, const FS desc.NumDescriptors = layout_data.SamplerTableSize; chr | m_device->m_device->CreateDescriptorHeap(&desc, IID_PPV_ARGS(&m_sampler_heap)); } - if (!options.Name.is_null()) + if (m_device->Debug() && !options.Name.is_null()) { m_name = options.Name.ToString(); DoSetName(m_name->GetStr()); @@ -80,6 +85,7 @@ FResult D3d12ShaderBindGroup::SetName(const FStr8or16& name) noexcept { return feb([&] { + if (!m_device->Debug()) return; m_name = name.ToString(); DoSetName(name); }); @@ -122,6 +128,43 @@ void D3d12ShaderBindGroup::DoSetName(const FStr8or16& name) const } } +void D3d12ShaderBindGroup::DoSetName(const FStr8or16& name, const DescriptorHeapPair& pair) +{ + if (name.is_null()) return; + if (pair.ResourceHeap) + { + if (name.is8()) + { + const auto str = fmt::format("[{}]::ResourceDescriptorHeap", name.str8); + chr | pair.ResourceHeap >> SetNameEx(FStr8or16(str)); + } + else + { + const auto str = fmt::format( + L"[{}]::ResourceDescriptorHeap", + reinterpret_cast(name.str16) + ); + chr | pair.ResourceHeap >> SetNameEx(FStr8or16(str)); + } + } + if (pair.SamplerHeap) + { + if (name.is8()) + { + const auto str = fmt::format("[{}]::SamplerDescriptorHeap", name.str8); + chr | pair.SamplerHeap >> SetNameEx(FStr8or16(str)); + } + else + { + const auto str = fmt::format( + L"[{}]::SamplerDescriptorHeap", + reinterpret_cast(name.str16) + ); + chr | pair.SamplerHeap >> SetNameEx(FStr8or16(str)); + } + } +} + FShaderBindGroupData* D3d12ShaderBindGroup::ShaderBindGroupData() noexcept { return this; @@ -208,13 +251,63 @@ void D3d12ShaderBindGroup::Set(const std::span items) m_version++; } -bool D3d12ShaderBindGroup::EnsureAvailable() +DescriptorHeapPair D3d12ShaderBindGroup::Cow() const { - if (!m_changed) return false; + DescriptorHeapPair out{}; + const auto& layout_data = m_layout->Data(); + if (layout_data.ResourceTableSize > 0) + { + D3D12_DESCRIPTOR_HEAP_DESC desc{}; + desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; + desc.NumDescriptors = layout_data.ResourceTableSize; + chr | m_device->m_device->CreateDescriptorHeap(&desc, IID_PPV_ARGS(&out.ResourceHeap)); + m_device->m_device->CopyDescriptorsSimple( + layout_data.ResourceTableSize, + out.ResourceHeap->GetCPUDescriptorHandleForHeapStart(), + m_resource_heap->GetCPUDescriptorHandleForHeapStart(), + desc.Type + ); + out.ResourceVersion = m_resource_version + 1; + } + if (layout_data.SamplerTableSize > 0) + { + D3D12_DESCRIPTOR_HEAP_DESC desc{}; + desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER; + desc.NumDescriptors = layout_data.SamplerTableSize; + chr | m_device->m_device->CreateDescriptorHeap(&desc, IID_PPV_ARGS(&out.SamplerHeap)); + m_device->m_device->CopyDescriptorsSimple( + layout_data.SamplerTableSize, + out.SamplerHeap->GetCPUDescriptorHandleForHeapStart(), + m_sampler_heap->GetCPUDescriptorHandleForHeapStart(), + desc.Type + ); + out.SamplerVersion = m_sampler_version + 1; + } + if (m_device->Debug() && m_name) + { + DoSetName(m_name->GetStr(), out); + } + return out; +} + +bool D3d12ShaderBindGroup::EnsureAvailable(DescriptorHeapPair& out) +{ + if (!m_changed) + { + out.ResourceHeap = m_resource_heap; + out.SamplerHeap = m_sampler_heap; + return false; + } std::lock_guard guard(m_desc_lock); - if (!m_changed) return false; + if (!m_changed) + { + out.ResourceHeap = m_resource_heap; + out.SamplerHeap = m_sampler_heap; + return false; + } const auto defs = m_layout->GetItems(); const auto slots = m_layout->Slots(); + auto new_heap = Cow(); for (usize i = 0; i < m_views.size(); ++i) { const auto def_index = m_define_indexes[i]; @@ -224,12 +317,17 @@ bool D3d12ShaderBindGroup::EnsureAvailable() else continue; const auto& view = m_views[i]; const auto& def = defs[def_index]; - const auto& heap = slot.Place == Layout::BindSlotPlace::ResourceTable ? m_resource_heap : m_sampler_heap; + const auto& heap = slot.Place == Layout::BindSlotPlace::ResourceTable ? new_heap.ResourceHeap : new_heap.SamplerHeap; COPLT_DEBUG_ASSERT(heap != nullptr); CD3DX12_CPU_DESCRIPTOR_HANDLE handle(heap->GetCPUDescriptorHandleForHeapStart(), slot.OffsetInTable, m_resource_heap_inc); view.CreateDescriptor(m_device->m_device.Get(), def, handle); } m_changed = false; + m_resource_heap = new_heap.ResourceHeap; + m_sampler_heap = new_heap.SamplerHeap; + m_resource_version = std::max(m_resource_version, new_heap.ResourceVersion); + m_sampler_version = std::max(m_sampler_version, new_heap.SamplerVersion); + out = std::move(new_heap); return true; } diff --git a/Coplt.Graphics.Native/D3d12/Src/Binding.h b/Coplt.Graphics.Native/D3d12/Src/Binding.h index 08e74b2..103f36d 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Binding.h +++ b/Coplt.Graphics.Native/D3d12/Src/Binding.h @@ -15,6 +15,16 @@ namespace Coplt struct ID3d12ShaderBinding; struct DescriptorAllocation; + struct DescriptorHeapPair + { + u64 ResourceVersion{}; + u64 SamplerVersion{}; + ComPtr ResourceHeap{}; + ComPtr SamplerHeap{}; + + explicit operator bool() const; + }; + COPLT_INTERFACE_DEFINE(ID3d12ShaderBindGroup, "5bb948b9-ad31-4eb8-b881-98017e048259", FShaderBindGroup) { virtual u64 Version() const noexcept = 0; @@ -24,7 +34,7 @@ namespace Coplt virtual std::span DefineIndexes() const noexcept = 0; virtual RwLock& SelfLock() noexcept = 0; // 返回是否有改变 - virtual bool EnsureAvailable() = 0; + virtual bool EnsureAvailable(DescriptorHeapPair& out) = 0; virtual const ComPtr& ResourceHeap() noexcept = 0; virtual const ComPtr& SamplerHeap() noexcept = 0; @@ -39,6 +49,8 @@ namespace Coplt // 动态组永远不会创建描述符暂存堆 ComPtr m_resource_heap{}; ComPtr m_sampler_heap{}; + u64 m_resource_version{}; + u64 m_sampler_version{}; u32 m_resource_heap_inc{}; u32 m_sampler_heap_inc{}; std::vector m_views{}; @@ -57,6 +69,7 @@ namespace Coplt explicit D3d12ShaderBindGroup(Rc&& device, const FShaderBindGroupCreateOptions& options); FResult SetName(const FStr8or16& name) noexcept override; void DoSetName(const FStr8or16& name) const; + static void DoSetName(const FStr8or16& name, const DescriptorHeapPair& pair); FShaderBindGroupData* ShaderBindGroupData() noexcept override; @@ -70,8 +83,10 @@ namespace Coplt // 需要外部锁 m_self_lock 必须是 Write 锁定状态 void Set(std::span items); + DescriptorHeapPair Cow() const; + // 需要外部锁 m_self_lock 必须是 Read 锁定状态 - bool EnsureAvailable() override; + bool EnsureAvailable(DescriptorHeapPair& out) override; const ComPtr& ResourceHeap() noexcept override; const ComPtr& SamplerHeap() noexcept override; diff --git a/Coplt.Graphics.Native/D3d12/Src/Context.cc b/Coplt.Graphics.Native/D3d12/Src/Context.cc index abb11df..df7e7f0 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Context.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Context.cc @@ -329,9 +329,11 @@ D3d12RentedCommandList::D3d12RentedCommandList(const Rc& pool, { } -D3d12RentedCommandList::~D3d12RentedCommandList() +D3d12RentedCommandList::~D3d12RentedCommandList() noexcept(false) { - if (!m_pool) return; + if (!m_pool || !m_list) return; + if (std::uncaught_exceptions()) + return; m_pool->ReturnCommandList(std::move(m_list)); } @@ -369,9 +371,11 @@ D3d12RentedCommandAllocator::D3d12RentedCommandAllocator(const RcReturnCommandAllocator(std::move(m_allocator)); } diff --git a/Coplt.Graphics.Native/D3d12/Src/Context.h b/Coplt.Graphics.Native/D3d12/Src/Context.h index f02ea63..db1fcf1 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Context.h +++ b/Coplt.Graphics.Native/D3d12/Src/Context.h @@ -122,7 +122,7 @@ namespace Coplt D3d12RentedCommandList() = default; explicit D3d12RentedCommandList(const Rc& pool, Rc&& list); - ~D3d12RentedCommandList(); + ~D3d12RentedCommandList() noexcept(false); D3d12RentedCommandList(D3d12RentedCommandList&&) = default; D3d12RentedCommandList& operator=(D3d12RentedCommandList&&) = default; @@ -146,7 +146,7 @@ namespace Coplt D3d12RentedCommandAllocator() = default; explicit D3d12RentedCommandAllocator(const Rc& pool, ComPtr&& allocator); - ~D3d12RentedCommandAllocator(); + ~D3d12RentedCommandAllocator() noexcept(false); D3d12RentedCommandAllocator(D3d12RentedCommandAllocator&& other) = default; D3d12RentedCommandAllocator& operator=(D3d12RentedCommandAllocator&& other) = default; diff --git a/Coplt.Graphics.Native/D3d12/Src/DescriptorManager.cc b/Coplt.Graphics.Native/D3d12/Src/DescriptorManager.cc index c44d2ef..de06004 100644 --- a/Coplt.Graphics.Native/D3d12/Src/DescriptorManager.cc +++ b/Coplt.Graphics.Native/D3d12/Src/DescriptorManager.cc @@ -26,8 +26,8 @@ DescriptorAllocation::operator bool() const return m_heap != nullptr; } -DescriptorHeap::DescriptorHeap(NonNull device, D3D12_DESCRIPTOR_HEAP_TYPE type, u32 init_size) - : m_device(device->m_device), m_half_size(init_size), m_type(type) +DescriptorHeap::DescriptorHeap(NonNull device, D3D12_DESCRIPTOR_HEAP_TYPE type, u32 init_size, u32 max_size) + : m_device(device->m_device), m_half_size(init_size), m_type(type), m_max_size(max_size) { { D3D12_DESCRIPTOR_HEAP_DESC desc{}; @@ -58,8 +58,11 @@ void DescriptorHeap::ReadyFrame(const u32 cap) void DescriptorHeap::EnsureCapacity(u32 cap) { - cap = std::bit_ceil(cap); - if (m_need_grow) cap = std::max(cap, m_half_size * 2); + const auto new_cap = std::min(std::bit_ceil(cap), m_max_size); + if (cap > new_cap) + COPLT_THROW_FMT("Out of memory; The required descriptor heap capacity is {}, but the maximum allowed is {}", cap, m_max_size); + cap = new_cap; + if (m_need_grow) cap = std::max(cap, std::min(m_half_size * 2, m_max_size)); else if (cap <= m_half_size) return; m_half_size = cap; @@ -86,9 +89,10 @@ void DescriptorHeap::EnsureCapacity(u32 cap) } } -DescriptorAllocation DescriptorHeap::Allocate(const u64 ObjectId, const u32 Size, bool& IsOld) +DescriptorAllocation DescriptorHeap::Allocate(const u64 ObjectId, const u64 Version, const u32 Size, bool& NeedUpload) { - const auto& allocation = m_allocations.GetOrAdd(ObjectId, IsOld, [this, Size](auto& p) + bool exists = false; + auto& allocation = m_allocations.GetOrAdd(ObjectId, exists, [this, Version, Size](auto& p) { D3D12MA::VIRTUAL_ALLOCATION_DESC desc{}; desc.Alignment = 1; @@ -100,14 +104,20 @@ DescriptorAllocation DescriptorHeap::Allocate(const u64 ObjectId, const u32 Size { const auto a = AllocateTmp(Size); m_need_grow = true; - p.put(Allocation{{}, a.m_offset}); + p.put(Allocation{{}, a.m_offset, Version}); } else { chr | r; - p.put(Allocation{allocation, offset}); + p.put(Allocation{allocation, offset, Version}); } }); + if (!exists) NeedUpload = true; + if (allocation.m_version < Version) + { + allocation.m_version = Version; + NeedUpload = true; + } return DescriptorAllocation(this, allocation.m_offset); } @@ -123,8 +133,8 @@ DescriptorAllocation DescriptorHeap::AllocateTmp(const u32 Size) DescriptorManager::DescriptorManager(NonNull device) { - m_res = new DescriptorHeap(device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, InitResHeapSize); - m_smp = new DescriptorHeap(device, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, InitSmpHeapSize); + m_res = new DescriptorHeap(device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, InitResHeapSize, MaxResHeapSize); + m_smp = new DescriptorHeap(device, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, InitSmpHeapSize, MaxSmpHeapSize); } void DescriptorManager::ReadyFrame(const u32 res_cap, const u32 smp_cap) const diff --git a/Coplt.Graphics.Native/D3d12/Src/DescriptorManager.h b/Coplt.Graphics.Native/D3d12/Src/DescriptorManager.h index 7074cb3..22b51a7 100644 --- a/Coplt.Graphics.Native/D3d12/Src/DescriptorManager.h +++ b/Coplt.Graphics.Native/D3d12/Src/DescriptorManager.h @@ -35,6 +35,7 @@ namespace Coplt { D3D12MA::VirtualAllocation m_allocation{}; u64 m_offset{}; + u64 m_version{}; }; // 堆版本,每次扩容增加版本,每次扩容所有持久分配都会失效 @@ -45,6 +46,7 @@ namespace Coplt HashMap m_allocations{}; // todo 释放绑组时排队到隔离,释放分配 // 描述符半容量,永远保证一半容量可以完整容纳每帧需求 u32 m_half_size{}; + u32 m_max_size{}; // 临时分配的偏移 u32 m_tmp_offset{}; // heap 类型的描述符增量 @@ -53,12 +55,12 @@ namespace Coplt // 下帧是否需要扩容,即使半容量足够 bool m_need_grow{}; - explicit DescriptorHeap(NonNull device, D3D12_DESCRIPTOR_HEAP_TYPE type, u32 init_size); + explicit DescriptorHeap(NonNull device, D3D12_DESCRIPTOR_HEAP_TYPE type, u32 init_size, u32 max_size); void ReadyFrame(u32 cap); void EnsureCapacity(u32 cap); - DescriptorAllocation Allocate(u64 ObjectId, u32 Size, bool& IsOld); + DescriptorAllocation Allocate(u64 ObjectId, u64 Version, u32 Size, bool& NeedUpload); DescriptorAllocation AllocateTmp(u32 Size); }; @@ -66,6 +68,8 @@ namespace Coplt { constexpr static u32 InitResHeapSize = 1024; constexpr static u32 InitSmpHeapSize = 64; + constexpr static u32 MaxResHeapSize = COPLT_U32_MAX; + constexpr static u32 MaxSmpHeapSize = 4096; Rc m_res{}; Rc m_smp{}; diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.cc b/Coplt.Graphics.Native/D3d12/Src/Record.cc index 592d45c..11c47d7 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Record.cc @@ -272,9 +272,66 @@ void D3d12GpuRecord::PipelineContext::SetBinding(NonNull binding BindingIndex = cmd.Binding; } +D3d12GpuRecord::TmpDescHeap::TmpDescHeap(const ComPtr& device, const D3D12_DESCRIPTOR_HEAP_TYPE type, const u32 size) + : m_size(size) +{ + D3D12_DESCRIPTOR_HEAP_DESC desc{}; + desc.Type = type; + desc.NumDescriptors = size; + chr | device->CreateDescriptorHeap(&desc, IID_PPV_ARGS(&m_heap)); +} + +D3d12GpuRecord::TmpDescHeaps::TmpDescHeaps(NonNull isolate, const D3D12_DESCRIPTOR_HEAP_TYPE type) + : m_device(isolate->m_device->m_device), m_type(type) +{ +} + +void D3d12GpuRecord::TmpDescHeaps::Recycle() +{ + m_sum_size = 0; + if (!m_heaps.empty()) + { + TmpDescHeap last = std::move(m_heaps.back()); + last.m_offset = 0; + m_heaps.clear(); + m_heaps.push_back(std::move(last)); + } +} + +D3d12GpuRecord::TmpDescAllocation D3d12GpuRecord::TmpDescHeaps::Alloc(const u32 Size) +{ + if (m_heaps.empty()) goto Grow; + for (u32 i = 0; i < m_heaps.size(); ++i) + { + auto& heap = m_heaps[i]; + if (heap.m_size - heap.m_offset < Size) continue; + const auto offset = heap.m_offset; + heap.m_offset += Size; + m_sum_size += Size; + return TmpDescAllocation{i, offset}; + } +Grow: + Grow(Size); + { + auto& heap = m_heaps.back(); + const auto offset = heap.m_offset; + heap.m_offset += Size; + m_sum_size += Size; + return TmpDescAllocation{m_heaps.size() - 1, offset}; + } +} + +void D3d12GpuRecord::TmpDescHeaps::Grow(const u32 MinSize) +{ + const auto size = std::max(m_heaps.empty() ? InitSize : m_heaps.back().m_size * 2, std::bit_ceil(MinSize)); + m_heaps.push_back(TmpDescHeap(m_device, m_type, size)); +} + D3d12GpuRecord::D3d12GpuRecord(const NonNull isolate) : FGpuRecordData(isolate->m_device->m_instance->m_allocator.get()), - m_isolate_config(isolate->m_config), m_device(isolate->m_device) + m_isolate_config(isolate->m_config), m_device(isolate->m_device), + m_tmp_res_heaps(isolate, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV), + m_tmp_smp_heaps(isolate, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER) { Id = m_isolate_id = isolate->m_object_id; m_record_id = isolate->m_record_inc++; @@ -342,6 +399,8 @@ void D3d12GpuRecord::Recycle() m_queue_wait_points.clear(); m_barrier_analyzer->Clear(); m_context->Recycle(); + m_object_handles.clear(); + m_persistent_allocation_infos.clear(); m_resource_map.Clear(); m_dynamic_bind_group_map.Clear(); m_resource_infos.clear(); @@ -354,6 +413,8 @@ void D3d12GpuRecord::Recycle() m_allocations.clear(); m_bind_items.clear(); m_pipeline_context.Reset(); + m_tmp_res_heaps.Recycle(); + m_tmp_smp_heaps.Recycle(); ClearData(); Ended = false; } @@ -380,11 +441,9 @@ void D3d12GpuRecord::DoEnd() COPLT_THROW("Too many resources"); m_barrier_analyzer->StartAnalyze(this); ReadyResource(); - u32 MaxResHeapSize{}, MaxSmpHeapSize{}; - ReadyBindings(MaxResHeapSize, MaxSmpHeapSize); - // todo 改成分析时所有描述符堆更改都暂存在 cpu 上,分析结束统一上传 - m_context->m_descriptor_manager.ReadyFrame(MaxResHeapSize, MaxSmpHeapSize); + ReadyBindings(); Analyze(); + UploadDescriptors(); m_barrier_analyzer->EndAnalyze(); if (m_isolate_config->MultiThreadRecord) { @@ -459,10 +518,8 @@ void D3d12GpuRecord::ReadyResource() } } -void D3d12GpuRecord::ReadyBindings(u32& MaxResHeapSize, u32& MaxSmpHeapSize) +void D3d12GpuRecord::ReadyBindings() { - MaxResHeapSize = 0; - MaxSmpHeapSize = 0; m_binding_infos.clear(); m_binding_infos.reserve(Bindings.size()); for (u32 i = 0; i < Bindings.size(); ++i) @@ -475,15 +532,46 @@ void D3d12GpuRecord::ReadyBindings(u32& MaxResHeapSize, u32& MaxSmpHeapSize) { m_sync_binding_infos.push_back(SyncBindingInfo()); } - for (u32 i = 0; i < BindingChange.size(); ++i) +} + +void D3d12GpuRecord::UploadDescriptors() +{ + m_context->m_descriptor_manager.ReadyFrame(m_tmp_res_heaps.m_sum_size, m_tmp_smp_heaps.m_sum_size); + for (auto& allocation : m_allocations) { - const auto& item = BindingChange[i]; - const auto binding = NonNull(Bindings[item.Binding].Binding)->QueryInterface(); - if (binding == nullptr) - COPLT_THROW_FMT("Binding [{}] comes from different backends", item.Binding); - const auto& data = binding->Layout()->Data(); - MaxResHeapSize += data.SumTableResourceSlots; - MaxSmpHeapSize += data.SumTableSamplerSlots; + if (allocation.PersistentInfoIndex == COPLT_U32_MAX) + { + // todo + } + else + { + const auto& info = m_persistent_allocation_infos[allocation.PersistentInfoIndex]; + const auto f = [this, &info]( + DescriptorAllocation& allocation, const Rc& heap, const u64 ver, const ComPtr& cpu_heap + ) + { + if (cpu_heap == nullptr) return; + const auto size = cpu_heap->GetDesc().NumDescriptors; + if (info.Last) + { + bool need_upload = false; + allocation = heap->Allocate(info.ObjectId, ver, size, need_upload); + if (!need_upload) return; + } + else + { + allocation = heap->AllocateTmp(size); + } + m_device->m_device->CopyDescriptorsSimple( + size, + allocation.GetCpuHandle(), + cpu_heap->GetCPUDescriptorHandleForHeapStart(), + heap->m_type + ); + }; + f(allocation.Resource, m_context->m_descriptor_manager.m_res, info.Heap.ResourceVersion, info.Heap.ResourceHeap); + f(allocation.Sampler, m_context->m_descriptor_manager.m_smp, info.Heap.SamplerVersion, info.Heap.SamplerHeap); + } } } @@ -750,12 +838,21 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) const auto group_item_infos = binding_layout->GroupItemInfos(); const auto group_bind_item_infos = binding_layout->GroupBindItemInfos(); bool any_changed = false; + m_tmp_gdhs.clear(); for (u32 g = 0; g < groups.size(); ++g) { const auto& group = groups[g]; if (!group) continue; const auto& data = group->Layout()->Data(); - if (data.Usage == FBindGroupUsage::Dynamic) continue; + if (data.Usage == FBindGroupUsage::Dynamic) + { + // 对于动态资源,只记录动态组信息索引, SyncBinding 时再处理 + m_dynamic_bind_group_info_inds.push_back(BindGroupInd{ + .GroupIndex = g, + .InfoIndex = QueryBindGroupInfo(*group, false).Index, + }); + continue; + } const auto views = group->Views(); for (u32 v = 0; v < views.size(); ++v) { @@ -765,59 +862,44 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) const auto& info = group_item_infos[g][v]; m_barrier_analyzer->OnUse(res_index, view, info); } - if (group->EnsureAvailable()) any_changed = true; + TmpGroupDescriptorHeap group_descriptor_heap{}; + group_descriptor_heap.GroupIndex = g; + if (group->EnsureAvailable(group_descriptor_heap.Heap)) any_changed = group_descriptor_heap.Changed = true; + m_tmp_gdhs.push_back(std::move(group_descriptor_heap)); } auto& binding_info = m_binding_infos[m_pipeline_context.BindingIndex]; binding_info.Layout = binding_layout.get(); const auto binding_version = binding->Version(); - if (binding_info.PersistentBindItemIndex == COPLT_U32_MAX || binding_info.BindingVersion != binding_version || any_changed) + const auto first = binding_info.PersistentBindItemIndex == COPLT_U32_MAX; + if (first || binding_info.BindingVersion != binding_version || any_changed) { binding_info.BindingVersion = binding_version; binding_info.PersistentBindItemIndex = m_bind_items.size(); binding_info.DynamicBindGroupInfoIndIndex = m_dynamic_bind_group_infos.size(); - for (u32 g = 0; g < groups.size(); ++g) + + for (auto& tmp_gdh : m_tmp_gdhs) { - const auto& group = groups[g]; - if (!group) continue; + const auto& group = groups[tmp_gdh.GroupIndex]; const auto object_id = group->ObjectId(); const auto& data = group->Layout()->Data(); - const auto& bind_item_infos = group_bind_item_infos[g]; - if (data.Usage == FBindGroupUsage::Dynamic) + const auto& bind_item_infos = group_bind_item_infos[tmp_gdh.GroupIndex]; + if (first || tmp_gdh.Changed) { - // 对于动态资源,只记录动态组信息索引, SyncBinding 时再处理 - m_dynamic_bind_group_info_inds.push_back(BindGroupInd{ - .GroupIndex = g, - .InfoIndex = QueryBindGroupInfo(*group, false).Index, - }); - continue; + m_tmp_res_heaps.m_sum_size += data.ResourceTableSize; + m_tmp_smp_heaps.m_sum_size += data.SamplerTableSize; } - DescriptorAllocation resource_allocation{}; - DescriptorAllocation sampler_allocation{}; - // todo 确定是最后一次修改 - const auto f = [&]( - const bool last, const u32 size, const Rc& heap, - const ComPtr& dh, DescriptorAllocation& allocation - ) - { - if (size == 0) return; - if (!last) - { - allocation = heap->AllocateTmp(size); - } - else - { - bool exists = false; - allocation = heap->Allocate(object_id, size, exists); - if (exists) return; - } - m_device->m_device->CopyDescriptorsSimple( - size, allocation.GetCpuHandle(), dh->GetCPUDescriptorHandleForHeapStart(), heap->m_type - ); - }; - f(true, data.ResourceTableSize, m_context->m_descriptor_manager.m_res, group->ResourceHeap(), resource_allocation); - f(true, data.SamplerTableSize, m_context->m_descriptor_manager.m_smp, group->SamplerHeap(), sampler_allocation); const auto AllocationIndex = m_allocations.size(); - m_allocations.push_back({g, resource_allocation, sampler_allocation}); + const auto PersistentInfoIndex = m_persistent_allocation_infos.size(); + m_persistent_allocation_infos.push_back(PersistentAllocationPointInfo{ + .ObjectId = object_id, + .Heap = std::move(tmp_gdh.Heap), + .Changed = tmp_gdh.Changed, + .Last = true, // todo 确定是最后一次修改 + }); + m_allocations.push_back(AllocationPoint{ + .GroupIndex = tmp_gdh.GroupIndex, + .PersistentInfoIndex = PersistentInfoIndex, + }); for (const auto& bind_item_info : bind_item_infos) { // 持久绑定只有描述符表 @@ -829,6 +911,8 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) m_bind_items.push_back(item); } } + m_tmp_gdhs.clear(); + binding_info.PersistentBindItemCount = m_bind_items.size() - binding_info.PersistentBindItemCount; binding_info.DynamicBindGroupInfoIndCount = m_dynamic_bind_group_infos.size() - binding_info.DynamicBindGroupInfoIndIndex; binding_info.Changed = true; @@ -883,33 +967,33 @@ void D3d12GpuRecord::Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd) info.Frozen = true; changed = true; info.DynamicBindItemIndex = m_bind_items.size(); - const auto& group = info.BindGroup; - const auto& bind_item_infos = group_bind_item_infos[ind.GroupIndex]; - const auto& data = group->Layout()->Data(); - DescriptorAllocation resource_allocation{}; - DescriptorAllocation sampler_allocation{}; - const auto f = [&]( - const u32 size, const Rc& heap, DescriptorAllocation& allocation - ) - { - if (size == 0) return; - allocation = heap->AllocateTmp(size); - }; - const auto dyn_size = data.DynamicArrayIndex == COPLT_U32_MAX ? 0 : info.DynArraySize; - f(data.ResourceTableSize + dyn_size, m_context->m_descriptor_manager.m_res, resource_allocation); - f(data.SamplerTableSize, m_context->m_descriptor_manager.m_smp, sampler_allocation); - const auto AllocationIndex = m_allocations.size(); - m_allocations.push_back({ind.GroupIndex, resource_allocation, sampler_allocation}); - for (const auto& bind_item_info : bind_item_infos) - { - // 常量和直接不在这里处理 - if (bind_item_info.Place != Layout::BindItemPlace::Table) continue; - BindItem item{ - .Info = &bind_item_info, - .AllocationIndex = AllocationIndex, - }; - m_bind_items.push_back(item); - } + // const auto& group = info.BindGroup; + // const auto& bind_item_infos = group_bind_item_infos[ind.GroupIndex]; + // const auto& data = group->Layout()->Data(); + // DescriptorAllocation resource_allocation{}; + // DescriptorAllocation sampler_allocation{}; + // const auto f = [&]( + // const u32 size, const Rc& heap, DescriptorAllocation& allocation + // ) + // { + // if (size == 0) return; + // allocation = heap->AllocateTmp(size); + // }; + // const auto dyn_size = data.DynamicArrayIndex == COPLT_U32_MAX ? 0 : info.DynArraySize; + // f(data.ResourceTableSize + dyn_size, m_context->m_descriptor_manager.m_res, resource_allocation); + // f(data.SamplerTableSize, m_context->m_descriptor_manager.m_smp, sampler_allocation); + // const auto AllocationIndex = m_allocations.size(); + // m_allocations.push_back({ind.GroupIndex, resource_allocation, sampler_allocation}); + // for (const auto& bind_item_info : bind_item_infos) + // { + // // 常量和直接不在这里处理 + // if (bind_item_info.Place != Layout::BindItemPlace::Table) continue; + // BindItem item{ + // .Info = &bind_item_info, + // .AllocationIndex = AllocationIndex, + // }; + // m_bind_items.push_back(item); + // } info.DynamicBindItemCount = m_bind_items.size() - info.DynamicBindItemIndex; } } @@ -1414,6 +1498,7 @@ void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCm { const auto& allocation = m_allocations[bind_item.AllocationIndex]; const auto& al = bind_item_info.Type == Layout::BindItemType::Resource ? allocation.Resource : allocation.Sampler; + COPLT_DEBUG_ASSERT(al.m_heap != nullptr); if (m_state == RecordState::Render) { list->g0->SetGraphicsRootDescriptorTable(bind_item_info.RootIndex, al.GetGpuHandle()); diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.h b/Coplt.Graphics.Native/D3d12/Src/Record.h index b29aa43..0fdd94b 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.h +++ b/Coplt.Graphics.Native/D3d12/Src/Record.h @@ -183,18 +183,74 @@ namespace Coplt }; }; + struct BindGroupInd + { + u32 GroupIndex{}; + // 类型是 BindGroupInfo + u32 InfoIndex{}; + }; + + struct TmpDescHeap + { + ComPtr m_heap{}; + u32 m_size{}; + u32 m_offset{}; + + TmpDescHeap() = default; + + explicit TmpDescHeap(const ComPtr& device, D3D12_DESCRIPTOR_HEAP_TYPE type, u32 size); + }; + + struct TmpDescAllocation + { + u32 HeapIndex{}; + u32 OffsetInHeap{}; + }; + + struct TmpDescHeaps + { + constexpr static u32 InitSize = 1024; + + ComPtr m_device{}; + std::vector m_heaps{}; + D3D12_DESCRIPTOR_HEAP_TYPE m_type{}; + // 只记录,实际值可能超过分配量,可以记录但是不分配 + u32 m_sum_size{}; + + TmpDescHeaps() = default; + + explicit TmpDescHeaps(NonNull isolate, D3D12_DESCRIPTOR_HEAP_TYPE type); + + void Recycle(); + + TmpDescAllocation Alloc(u32 Size); + void Grow(u32 MinSize); + }; + + struct TmpGroupDescriptorHeap + { + u32 GroupIndex{}; + DescriptorHeapPair Heap{}; + bool Changed{}; + }; + struct AllocationPoint { u32 GroupIndex{}; + // 类型为 PersistentAllocationPointInfo;u32::Max 表示是临时动态分配,其他表示是持久分配 + u32 PersistentInfoIndex{COPLT_U32_MAX}; DescriptorAllocation Resource{}; DescriptorAllocation Sampler{}; + TmpDescAllocation TmpResource{}; + TmpDescAllocation TmpSampler{}; }; - struct BindGroupInd + struct PersistentAllocationPointInfo { - u32 GroupIndex{}; - // 类型是 BindGroupInfo - u32 InfoIndex{}; + u64 ObjectId{}; + DescriptorHeapPair Heap{}; + bool Changed{}; + bool Last{}; }; u64 m_isolate_id{}; @@ -204,18 +260,23 @@ namespace Coplt Rc m_context{}; Rc m_barrier_analyzer{}; HashMap m_resource_map{}; // id -> index + std::vector> m_object_handles{}; std::vector m_resource_infos{}; std::vector m_binding_infos{}; std::vector m_dynamic_bind_group_infos{}; HashMap m_dynamic_bind_group_map{}; // id -> index std::vector m_sync_binding_infos{}; std::vector m_allocations{}; + std::vector m_persistent_allocation_infos{}; std::vector m_dynamic_bind_group_info_inds{}; std::vector m_dynamic_bind_group_info_sync_inds{}; std::vector m_set_constants_chunks{}; std::vector m_bind_items{}; + TmpDescHeaps m_tmp_res_heaps{}; + TmpDescHeaps m_tmp_smp_heaps{}; std::vector m_queue_wait_points{}; std::vector m_tmp_locks{}; + std::vector m_tmp_gdhs{}; RenderState m_cur_render{}; ComputeState m_cur_compute{}; PipelineContext m_pipeline_context{}; @@ -252,8 +313,8 @@ namespace Coplt FResIndex AddResource(const FCmdRes& res); FResIndex AddResource(const View& view); void ReadyResource(); - // 返回帧所需的最小描述符堆大小 - void ReadyBindings(u32& MaxResHeapSize, u32& MaxSmpHeapSize); + void ReadyBindings(); + void UploadDescriptors(); BindGroupInfo& QueryBindGroupInfo(ID3d12ShaderBindGroup& group, bool mut); BindGroupInfo& QueryBindGroupInfo(NonNull group, u32 i, bool mut); From 8be3d4d24c8086fc2dd9dddde6c4965ca75a7f81 Mon Sep 17 00:00:00 2001 From: U2A5F Date: Fri, 18 Apr 2025 23:10:49 +0800 Subject: [PATCH 13/22] save --- Coplt.Graphics.Native/Api/FFI/Cmd.h | 2 +- .../D3d12/Src/DescriptorManager.cc | 4 +- Coplt.Graphics.Native/D3d12/Src/Layout.cc | 22 +- Coplt.Graphics.Native/D3d12/Src/Layout.h | 24 +- Coplt.Graphics.Native/D3d12/Src/Record.cc | 347 +++++++++++++----- Coplt.Graphics.Native/D3d12/Src/Record.h | 43 ++- Examples/Mipmap/Example.cs | 2 +- 7 files changed, 302 insertions(+), 142 deletions(-) diff --git a/Coplt.Graphics.Native/Api/FFI/Cmd.h b/Coplt.Graphics.Native/Api/FFI/Cmd.h index aa15364..1e55cd3 100644 --- a/Coplt.Graphics.Native/Api/FFI/Cmd.h +++ b/Coplt.Graphics.Native/Api/FFI/Cmd.h @@ -307,7 +307,7 @@ namespace Coplt u32 Offset{}; }; - // 设置动态绑定的动态数组大小,调用后之前的动态数组内容将被丢弃 + // 设置动态绑定的动态数组大小 struct FCmdSetDynArraySize : FCmdBase { // Payload 中的索引,类型为 FCmdBindGroup diff --git a/Coplt.Graphics.Native/D3d12/Src/DescriptorManager.cc b/Coplt.Graphics.Native/D3d12/Src/DescriptorManager.cc index de06004..4312ed6 100644 --- a/Coplt.Graphics.Native/D3d12/Src/DescriptorManager.cc +++ b/Coplt.Graphics.Native/D3d12/Src/DescriptorManager.cc @@ -27,7 +27,7 @@ DescriptorAllocation::operator bool() const } DescriptorHeap::DescriptorHeap(NonNull device, D3D12_DESCRIPTOR_HEAP_TYPE type, u32 init_size, u32 max_size) - : m_device(device->m_device), m_half_size(init_size), m_type(type), m_max_size(max_size) + : m_device(device->m_device), m_half_size(init_size), m_type(type), m_max_size(max_size / 2) { { D3D12_DESCRIPTOR_HEAP_DESC desc{}; @@ -60,7 +60,7 @@ void DescriptorHeap::EnsureCapacity(u32 cap) { const auto new_cap = std::min(std::bit_ceil(cap), m_max_size); if (cap > new_cap) - COPLT_THROW_FMT("Out of memory; The required descriptor heap capacity is {}, but the maximum allowed is {}", cap, m_max_size); + COPLT_THROW_FMT("Out of memory; The required descriptor heap capacity is {}, but the maximum allowed is {}", cap * 2, m_max_size * 2); cap = new_cap; if (m_need_grow) cap = std::max(cap, std::min(m_half_size * 2, m_max_size)); else if (cap <= m_half_size) return; diff --git a/Coplt.Graphics.Native/D3d12/Src/Layout.cc b/Coplt.Graphics.Native/D3d12/Src/Layout.cc index b0f1edc..07bf4d0 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Layout.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Layout.cc @@ -312,12 +312,12 @@ D3d12BindingLayout::D3d12BindingLayout(Rc&& device, const FBindi info.SigPlace = SigPlace::Const; root_parameters.push_back(param); - BindItemInfo item_info{}; + RootItemInfo item_info{}; item_info.Group = info.Group; item_info.IndexInGroup = info.Index; item_info.RootIndex = info.SigIndex; - item_info.Place = BindItemPlace::Const; - item_info.Type = BindItemType::Resource; + item_info.Place = RootItemPlace::Const; + item_info.Type = RootItemType::Resource; m_bind_item_infos.push_back(item_info); m_group_bind_item_infos[info.Group].push_back(item_info); continue; @@ -400,12 +400,12 @@ D3d12BindingLayout::D3d12BindingLayout(Rc&& device, const FBindi info.SigPlace = SigPlace::Direct; root_parameters.push_back(param); - BindItemInfo item_info{}; + RootItemInfo item_info{}; item_info.Group = info.Group; item_info.IndexInGroup = info.Index; item_info.RootIndex = info.SigIndex; - item_info.Place = BindItemPlace::Direct; - item_info.Type = BindItemType::Resource; + item_info.Place = RootItemPlace::Direct; + item_info.Type = RootItemType::Resource; m_bind_item_infos.push_back(item_info); m_group_bind_item_infos[info.Group].push_back(item_info); continue; @@ -445,12 +445,12 @@ D3d12BindingLayout::D3d12BindingLayout(Rc&& device, const FBindi root_parameters.push_back(param); infos.push_back(Info); - BindItemInfo item_info{}; + RootItemInfo item_info{}; item_info.Group = Info.Group; item_info.IndexInGroup = 0; item_info.RootIndex = Info.RootIndex; - item_info.Place = BindItemPlace::Table; - item_info.Type = Info.Type == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER ? BindItemType::Sampler : BindItemType::Resource; + item_info.Place = RootItemPlace::Table; + item_info.Type = Info.Type == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER ? RootItemType::Sampler : RootItemType::Resource; m_bind_item_infos.push_back(item_info); m_group_bind_item_infos[Info.Group].push_back(item_info); } @@ -530,12 +530,12 @@ std::span D3d12BindingLayout::SlotInfos() co return m_slot_infos; } -std::span D3d12BindingLayout::BindItemInfos() const noexcept +std::span D3d12BindingLayout::RootItemInfos() const noexcept { return m_bind_item_infos; } -std::span> D3d12BindingLayout::GroupBindItemInfos() const noexcept +std::span> D3d12BindingLayout::GroupRootItemInfos() const noexcept { return m_group_bind_item_infos; } diff --git a/Coplt.Graphics.Native/D3d12/Src/Layout.h b/Coplt.Graphics.Native/D3d12/Src/Layout.h index 56fc013..67c5e20 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Layout.h +++ b/Coplt.Graphics.Native/D3d12/Src/Layout.h @@ -131,27 +131,27 @@ namespace Coplt FResourceAccess UavAccess{}; }; - enum class BindItemPlace : u8 + enum class RootItemPlace : u8 { Table, Direct, Const, }; - enum class BindItemType : u8 + enum class RootItemType : u8 { Resource, Sampler, }; - struct BindItemInfo + struct RootItemInfo { u32 Group{}; // Place 为 Table 时永远为 0 u32 IndexInGroup{}; u32 RootIndex{}; - BindItemPlace Place{}; - BindItemType Type{}; + RootItemPlace Place{}; + RootItemType Type{}; }; } @@ -205,16 +205,16 @@ namespace Coplt using SlotInfo = Layout::SlotInfo; using GroupItemInfo = Layout::GroupItemInfo; using TableInfo = Layout::TableInfo; - using BindItemInfo = Layout::BindItemInfo; + using RootItemInfo = Layout::RootItemInfo; virtual const D3d12BindingLayoutData& Data() const noexcept = 0; virtual const Rc& ShaderLayout() const noexcept = 0; virtual std::span> Groups() const noexcept = 0; virtual const ComPtr& RootSignature() const noexcept = 0; virtual std::span SlotInfos() const noexcept = 0; - virtual std::span BindItemInfos() const noexcept = 0; + virtual std::span RootItemInfos() const noexcept = 0; // 第一层索引是 Group index - virtual std::span> GroupBindItemInfos() const noexcept = 0; + virtual std::span> GroupRootItemInfos() const noexcept = 0; // 第一层索引是 Group index virtual std::span> TableInfos() const noexcept = 0; // 第一层索引是 Group index @@ -230,10 +230,10 @@ namespace Coplt Rc m_shader_layout{}; std::vector> m_groups{}; std::vector m_slot_infos{}; - std::vector m_bind_item_infos{}; + std::vector m_bind_item_infos{}; HashMap m_slot_to_info{}; // 第一层索引是 Group index - std::vector> m_group_bind_item_infos{}; + std::vector> m_group_bind_item_infos{}; // 第一层索引是 Group index std::vector> m_tables{}; // 第一层索引是 Group index @@ -248,8 +248,8 @@ namespace Coplt std::span> Groups() const noexcept override; const ComPtr& RootSignature() const noexcept override; std::span SlotInfos() const noexcept override; - std::span BindItemInfos() const noexcept override; - std::span> GroupBindItemInfos() const noexcept override; + std::span RootItemInfos() const noexcept override; + std::span> GroupRootItemInfos() const noexcept override; std::span> TableInfos() const noexcept override; std::span> GroupItemInfos() const noexcept override; }; diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.cc b/Coplt.Graphics.Native/D3d12/Src/Record.cc index 11c47d7..6335548 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Record.cc @@ -308,7 +308,7 @@ D3d12GpuRecord::TmpDescAllocation D3d12GpuRecord::TmpDescHeaps::Alloc(const u32 const auto offset = heap.m_offset; heap.m_offset += Size; m_sum_size += Size; - return TmpDescAllocation{i, offset}; + return TmpDescAllocation{i, offset, Size}; } Grow: Grow(Size); @@ -317,7 +317,7 @@ D3d12GpuRecord::TmpDescAllocation D3d12GpuRecord::TmpDescHeaps::Alloc(const u32 const auto offset = heap.m_offset; heap.m_offset += Size; m_sum_size += Size; - return TmpDescAllocation{m_heaps.size() - 1, offset}; + return TmpDescAllocation{m_heaps.size() - 1, offset, Size}; } } @@ -409,9 +409,10 @@ void D3d12GpuRecord::Recycle() m_dynamic_bind_group_info_inds.clear(); m_dynamic_bind_group_info_sync_inds.clear(); m_set_constants_chunks.clear(); + m_set_bind_item_chunks.clear(); m_sync_binding_infos.clear(); m_allocations.clear(); - m_bind_items.clear(); + m_table_bind_items.clear(); m_pipeline_context.Reset(); m_tmp_res_heaps.Recycle(); m_tmp_smp_heaps.Recycle(); @@ -541,7 +542,25 @@ void D3d12GpuRecord::UploadDescriptors() { if (allocation.PersistentInfoIndex == COPLT_U32_MAX) { - // todo + const auto f = [this]( + DescriptorAllocation& allocation, const TmpDescAllocation& tmp, const Rc& heap, const TmpDescHeaps& tmp_heap + ) + { + if (!tmp) return; + allocation = heap->AllocateTmp(tmp.Size); + m_device->m_device->CopyDescriptorsSimple( + tmp.Size, + allocation.GetCpuHandle(), + CD3DX12_CPU_DESCRIPTOR_HANDLE( + tmp_heap.m_heaps[tmp.HeapIndex].m_heap->GetCPUDescriptorHandleForHeapStart(), + tmp.OffsetInHeap, + heap->m_inc + ), + heap->m_type + ); + }; + f(allocation.Resource, allocation.TmpResource, m_context->m_descriptor_manager.m_res, m_tmp_res_heaps); + f(allocation.Sampler, allocation.TmpSampler, m_context->m_descriptor_manager.m_smp, m_tmp_smp_heaps); } else { @@ -666,10 +685,10 @@ void D3d12GpuRecord::Analyze() Analyze_SetConstants(i, command.SetConstants); break; case FCmdType::SetDynArraySize: - // todo + Analyze_SetDynArraySize(i, command.SetDynArraySize); break; case FCmdType::SetBindItem: - // todo + Analyze_SetBindItem(i, command.SetBindItem); break; case FCmdType::SetMeshBuffers: Analyze_SetMeshBuffers(i, command.SetMeshBuffers); @@ -705,7 +724,7 @@ void D3d12GpuRecord::Analyze_ClearColor(u32 i, const FCmdClearColor& cmd) const m_barrier_analyzer->OnCmd(); } -void D3d12GpuRecord::Analyze_ClearDepthStencil(u32 i, const FCmdClearDepthStencil& cmd) const +void D3d12GpuRecord::Analyze_ClearDepthStencil(const u32 i, const FCmdClearDepthStencil& cmd) const { if (m_state != RecordState::Main) COPLT_THROW_FMT("[{}] Cannot use ClearDepthStencil in sub scope", i); @@ -713,7 +732,7 @@ void D3d12GpuRecord::Analyze_ClearDepthStencil(u32 i, const FCmdClearDepthStenci m_barrier_analyzer->OnCmd(); } -void D3d12GpuRecord::Analyze_BufferCopy(u32 i, const FCmdBufferCopy& cmd) const +void D3d12GpuRecord::Analyze_BufferCopy(const u32 i, const FCmdBufferCopy& cmd) const { if (m_state != RecordState::Main) COPLT_THROW_FMT("[{}] Cannot use BufferCopy in sub scope", i); @@ -737,7 +756,7 @@ void D3d12GpuRecord::Analyze_BufferCopy(u32 i, const FCmdBufferCopy& cmd) const } } -void D3d12GpuRecord::Analyze_BufferImageCopy(u32 i, const FCmdBufferImageCopy& cmd) const +void D3d12GpuRecord::Analyze_BufferImageCopy(const u32 i, const FCmdBufferImageCopy& cmd) const { if (m_state != RecordState::Main) COPLT_THROW_FMT("[{}] Cannot use BufferImageCopy in sub scope", i); @@ -760,7 +779,7 @@ void D3d12GpuRecord::Analyze_BufferImageCopy(u32 i, const FCmdBufferImageCopy& c m_barrier_analyzer->OnCmd(); } -void D3d12GpuRecord::Analyze_Render(u32 i, const FCmdRender& cmd) +void D3d12GpuRecord::Analyze_Render(const u32 i, const FCmdRender& cmd) { if (m_state != RecordState::Main) COPLT_THROW_FMT("[{}] Cannot use Render in sub scope", i); @@ -781,7 +800,7 @@ void D3d12GpuRecord::Analyze_Render(u32 i, const FCmdRender& cmd) m_barrier_analyzer->OnCmd(); } -void D3d12GpuRecord::Analyze_RenderEnd(u32 i, const FCmdRender& cmd) +void D3d12GpuRecord::Analyze_RenderEnd(const u32 i, const FCmdRender& cmd) { if (m_state != RecordState::Render) COPLT_THROW_FMT("[{}] Cannot use End in main scope or some end is missing", i); @@ -794,7 +813,7 @@ void D3d12GpuRecord::Analyze_RenderEnd(u32 i, const FCmdRender& cmd) m_pipeline_context.Reset(); } -void D3d12GpuRecord::Analyze_Compute(u32 i, const FCmdCompute& cmd) +void D3d12GpuRecord::Analyze_Compute(const u32 i, const FCmdCompute& cmd) { if (m_state != RecordState::Main) COPLT_THROW_FMT("[{}] Cannot use Compute in sub scope", i); @@ -804,7 +823,7 @@ void D3d12GpuRecord::Analyze_Compute(u32 i, const FCmdCompute& cmd) m_cur_compute = ComputeState{.StartIndex = i, .Cmd = cmd}; } -void D3d12GpuRecord::Analyze_ComputeEnd(u32 i, const FCmdCompute& cmd) +void D3d12GpuRecord::Analyze_ComputeEnd(const u32 i, const FCmdCompute& cmd) { if (m_state != RecordState::Compute) COPLT_THROW_FMT("[{}] Cannot use End in main scope or some end is missing", i); @@ -812,14 +831,14 @@ void D3d12GpuRecord::Analyze_ComputeEnd(u32 i, const FCmdCompute& cmd) m_pipeline_context.Reset(); } -void D3d12GpuRecord::Analyze_SetPipeline(u32 i, const FCmdSetPipeline& cmd) +void D3d12GpuRecord::Analyze_SetPipeline(const u32 i, const FCmdSetPipeline& cmd) { if (m_state != RecordState::Render && m_state != RecordState::Compute) COPLT_THROW_FMT("[{}] Cannot use SetPipeline in main scope", i); SetPipeline(cmd.Pipeline, i); } -void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) +void D3d12GpuRecord::Analyze_SetBinding(const u32 i, const FCmdSetBinding& cmd) { if (m_state != RecordState::Render && m_state != RecordState::Compute) COPLT_THROW_FMT("[{}] Cannot use SetBinding in main scope", i); @@ -836,7 +855,7 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) } const auto& binding_layout = binding->Layout(); const auto group_item_infos = binding_layout->GroupItemInfos(); - const auto group_bind_item_infos = binding_layout->GroupBindItemInfos(); + const auto group_bind_item_infos = binding_layout->GroupRootItemInfos(); bool any_changed = false; m_tmp_gdhs.clear(); for (u32 g = 0; g < groups.size(); ++g) @@ -844,15 +863,7 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) const auto& group = groups[g]; if (!group) continue; const auto& data = group->Layout()->Data(); - if (data.Usage == FBindGroupUsage::Dynamic) - { - // 对于动态资源,只记录动态组信息索引, SyncBinding 时再处理 - m_dynamic_bind_group_info_inds.push_back(BindGroupInd{ - .GroupIndex = g, - .InfoIndex = QueryBindGroupInfo(*group, false).Index, - }); - continue; - } + if (data.Usage == FBindGroupUsage::Dynamic) continue; const auto views = group->Views(); for (u32 v = 0; v < views.size(); ++v) { @@ -870,17 +881,29 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) auto& binding_info = m_binding_infos[m_pipeline_context.BindingIndex]; binding_info.Layout = binding_layout.get(); const auto binding_version = binding->Version(); - const auto first = binding_info.PersistentBindItemIndex == COPLT_U32_MAX; + const auto first = binding_info.PersistentRootItemIndex == COPLT_U32_MAX; if (first || binding_info.BindingVersion != binding_version || any_changed) { binding_info.BindingVersion = binding_version; - binding_info.PersistentBindItemIndex = m_bind_items.size(); + binding_info.PersistentRootItemIndex = m_table_bind_items.size(); binding_info.DynamicBindGroupInfoIndIndex = m_dynamic_bind_group_infos.size(); + for (u32 g = 0; g < groups.size(); ++g) + { + const auto& group = groups[g]; + if (!group) continue; + const auto& data = group->Layout()->Data(); + if (data.Usage != FBindGroupUsage::Dynamic) continue; + // 对于动态资源,只记录动态组信息索引, SyncBinding 时再处理 + m_dynamic_bind_group_info_inds.push_back(BindGroupInd{ + .GroupIndex = g, + .InfoIndex = QueryBindGroupInfo(*group, false).Index, + }); + } + for (auto& tmp_gdh : m_tmp_gdhs) { const auto& group = groups[tmp_gdh.GroupIndex]; - const auto object_id = group->ObjectId(); const auto& data = group->Layout()->Data(); const auto& bind_item_infos = group_bind_item_infos[tmp_gdh.GroupIndex]; if (first || tmp_gdh.Changed) @@ -891,7 +914,7 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) const auto AllocationIndex = m_allocations.size(); const auto PersistentInfoIndex = m_persistent_allocation_infos.size(); m_persistent_allocation_infos.push_back(PersistentAllocationPointInfo{ - .ObjectId = object_id, + .ObjectId = group->ObjectId(), .Heap = std::move(tmp_gdh.Heap), .Changed = tmp_gdh.Changed, .Last = true, // todo 确定是最后一次修改 @@ -903,25 +926,25 @@ void D3d12GpuRecord::Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd) for (const auto& bind_item_info : bind_item_infos) { // 持久绑定只有描述符表 - COPLT_DEBUG_ASSERT(bind_item_info.Place == Layout::BindItemPlace::Table); - BindItem item{ + COPLT_DEBUG_ASSERT(bind_item_info.Place == Layout::RootItemPlace::Table); + TableRootItem item{ .Info = &bind_item_info, .AllocationIndex = AllocationIndex, }; - m_bind_items.push_back(item); + m_table_bind_items.push_back(item); } } m_tmp_gdhs.clear(); - binding_info.PersistentBindItemCount = m_bind_items.size() - binding_info.PersistentBindItemCount; + binding_info.PersistentRootItemCount = m_table_bind_items.size() - binding_info.PersistentRootItemCount; binding_info.DynamicBindGroupInfoIndCount = m_dynamic_bind_group_infos.size() - binding_info.DynamicBindGroupInfoIndIndex; binding_info.Changed = true; } } -void D3d12GpuRecord::Analyze_SetConstants(u32 i, const FCmdSetConstants& cmd) +void D3d12GpuRecord::Analyze_SetConstants(const u32 i, const FCmdSetConstants& cmd) { - auto& info = QueryBindGroupInfo(NonNull(cmd.Group), true, i); + auto& info = QueryBindGroupInfo(NonNull(cmd.Group), i, true); if (info.SetConstantsHead != COPLT_U32_MAX) { auto& chunk = m_set_constants_chunks[info.SetConstantsTail]; @@ -942,7 +965,36 @@ void D3d12GpuRecord::Analyze_SetConstants(u32 i, const FCmdSetConstants& cmd) m_set_constants_chunks.push_back(chunk); } -void D3d12GpuRecord::Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd) +void D3d12GpuRecord::Analyze_SetDynArraySize(const u32 i, const FCmdSetDynArraySize& cmd) +{ + auto& info = QueryBindGroupInfo(NonNull(cmd.Group), i, true); + info.DynArraySize = cmd.Size; +} + +void D3d12GpuRecord::Analyze_SetBindItem(const u32 i, const FCmdSetBindItem& cmd) +{ + auto& info = QueryBindGroupInfo(NonNull(cmd.Group), i, true); + if (info.SetBindItemHead != COPLT_U32_MAX) + { + auto& chunk = m_set_bind_item_chunks[info.SetBindItemTail]; + for (u8 n = 0; n < 7; ++n) + { + if (chunk.CmdIndex[n] != COPLT_U32_MAX) continue; + chunk.CmdIndex[n] = i; + return; + } + info.SetBindItemTail = chunk.Next = m_set_bind_item_chunks.size(); + } + else + { + info.SetBindItemTail = info.SetBindItemHead = m_set_bind_item_chunks.size(); + } + SetBindItemChunk chunk{}; + chunk.CmdIndex[0] = i; + m_set_bind_item_chunks.push_back(chunk); +} + +void D3d12GpuRecord::Analyze_SyncBinding(const u32 i, const FCmdSyncBinding& cmd) { if (m_pipeline_context.Binding == nullptr) return; auto& binding_info = m_binding_infos[m_pipeline_context.BindingIndex]; @@ -951,9 +1003,9 @@ void D3d12GpuRecord::Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd) auto changed = binding_info.Changed; binding_info.Changed = false; const NonNull binding_layout = sync_binding_info.Layout; - const auto group_bind_item_infos = binding_layout->GroupBindItemInfos(); - sync_binding_info.PersistentBindItemIndex = binding_info.PersistentBindItemIndex; - sync_binding_info.PersistentBindItemCount = binding_info.PersistentBindItemCount; + const auto group_root_item_infos = binding_layout->GroupRootItemInfos(); + sync_binding_info.PersistentRootItemIndex = binding_info.PersistentRootItemIndex; + sync_binding_info.PersistentRootItemCount = binding_info.PersistentRootItemCount; sync_binding_info.DynamicBindGroupInfoIndIndex = m_dynamic_bind_group_info_sync_inds.size(); const auto bi_ind = std::span(m_dynamic_bind_group_info_inds) .subspan(binding_info.DynamicBindGroupInfoIndIndex, binding_info.DynamicBindGroupInfoIndCount); @@ -966,42 +1018,124 @@ void D3d12GpuRecord::Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd) { info.Frozen = true; changed = true; - info.DynamicBindItemIndex = m_bind_items.size(); - // const auto& group = info.BindGroup; - // const auto& bind_item_infos = group_bind_item_infos[ind.GroupIndex]; - // const auto& data = group->Layout()->Data(); - // DescriptorAllocation resource_allocation{}; - // DescriptorAllocation sampler_allocation{}; - // const auto f = [&]( - // const u32 size, const Rc& heap, DescriptorAllocation& allocation - // ) - // { - // if (size == 0) return; - // allocation = heap->AllocateTmp(size); - // }; - // const auto dyn_size = data.DynamicArrayIndex == COPLT_U32_MAX ? 0 : info.DynArraySize; - // f(data.ResourceTableSize + dyn_size, m_context->m_descriptor_manager.m_res, resource_allocation); - // f(data.SamplerTableSize, m_context->m_descriptor_manager.m_smp, sampler_allocation); - // const auto AllocationIndex = m_allocations.size(); - // m_allocations.push_back({ind.GroupIndex, resource_allocation, sampler_allocation}); - // for (const auto& bind_item_info : bind_item_infos) - // { - // // 常量和直接不在这里处理 - // if (bind_item_info.Place != Layout::BindItemPlace::Table) continue; - // BindItem item{ - // .Info = &bind_item_info, - // .AllocationIndex = AllocationIndex, - // }; - // m_bind_items.push_back(item); - // } - info.DynamicBindItemCount = m_bind_items.size() - info.DynamicBindItemIndex; + info.DynamicRootItemIndex = m_table_bind_items.size(); + const auto& group = info.BindGroup; + const auto& group_root_item_info = group_root_item_infos[ind.GroupIndex]; + const auto& group_layout = group->Layout(); + const auto& data = group_layout->Data(); + const auto slots = group_layout->Slots(); + const auto defs = group_layout->GetItems(); + + const auto dyn_size = data.DynamicArrayIndex == COPLT_U32_MAX ? 0 : info.DynArraySize; + const auto res_table_size = data.ResourceTableSize + dyn_size; + const auto smp_table_size = data.SamplerTableSize; + TmpDescAllocation TmpResource{}; + TmpDescAllocation TmpSampler{}; + if (res_table_size > 0) TmpResource = m_tmp_res_heaps.Alloc(res_table_size); + if (smp_table_size > 0) TmpSampler = m_tmp_smp_heaps.Alloc(smp_table_size); + const auto AllocationIndex = m_allocations.size(); + m_allocations.push_back(AllocationPoint{ + .GroupIndex = ind.GroupIndex, + .TmpResource = TmpResource, + .TmpSampler = TmpSampler, + }); + for (const auto& root_item_info : group_root_item_info) + { + // 常量和直接不在这里处理 + if (root_item_info.Place != Layout::RootItemPlace::Table) continue; + TableRootItem item{ + .Info = &root_item_info, + .AllocationIndex = AllocationIndex, + }; + m_table_bind_items.push_back(item); + } + info.DynamicRootItemCount = m_table_bind_items.size() - info.DynamicRootItemIndex; + + #pragma region 设置绑定项 + + const auto res_inc = m_context->m_descriptor_manager.m_res->m_inc; + const auto smp_inc = m_context->m_descriptor_manager.m_smp->m_inc; + const Ptr tmp_res_heap = TmpResource ? m_tmp_res_heaps.m_heaps[TmpResource.HeapIndex].m_heap.Get() : nullptr; + const Ptr tmp_smp_heap = TmpSampler ? m_tmp_smp_heaps.m_heaps[TmpSampler.HeapIndex].m_heap.Get() : nullptr; + + auto set_bind_item_chunk_index = info.SetBindItemHead; + while (set_bind_item_chunk_index != COPLT_U32_MAX) + { + const auto& set_bind_item_chunk = m_set_bind_item_chunks[set_bind_item_chunk_index]; + for (auto& set_bind_item_cmd_index : set_bind_item_chunk.CmdIndex) + { + if (set_bind_item_cmd_index == COPLT_U32_MAX) break; + const auto& set_bind_item_cmd = Commands[set_bind_item_cmd_index].SetBindItem; + if (set_bind_item_cmd.Count == 0) continue; + const auto set_bind_items = std::span(PayloadSetBindItem.data() + set_bind_item_cmd.ItemIndex, set_bind_item_cmd.Count); + for (const auto& set_bind_item : set_bind_items) + { + if (set_bind_item.Slot > slots.size()) + COPLT_THROW_FMT("[{}] Invalid set bind item slot index, out of range", i); + const auto& slot = slots[set_bind_item.Slot]; + const auto& def = defs[set_bind_item.Slot]; + const auto array_index = def.Count == 0 ? 0 : set_bind_item.Index; + if (def.Count == COPLT_U32_MAX) + { + if (array_index >= dyn_size) + { + COPLT_THROW_FMT( + "[{}] Invalid set bind item array index, out of range, dyn array size is {} but index is {}", + i, dyn_size, array_index + ); + } + } + else + { + if (array_index >= def.Count) + { + COPLT_THROW_FMT( + "[{}] Invalid set bind item array index, out of range, array size is {} but index is {}", + i, def.Count, array_index + ); + } + } + switch (slot.Place) + { + case Layout::BindSlotPlace::NonTable: + COPLT_THROW("TODO"); + break; + case Layout::BindSlotPlace::ResourceTable: + { + CD3DX12_CPU_DESCRIPTOR_HANDLE handle( + tmp_res_heap->GetCPUDescriptorHandleForHeapStart(), + TmpResource.OffsetInHeap + slot.OffsetInTable + array_index, + res_inc + ); + View view(set_bind_item.View); + view.CreateDescriptor(m_device->m_device.Get(), def, handle); + break; + } + case Layout::BindSlotPlace::SamplerTable: + { + CD3DX12_CPU_DESCRIPTOR_HANDLE handle( + tmp_smp_heap->GetCPUDescriptorHandleForHeapStart(), + TmpSampler.OffsetInHeap + slot.OffsetInTable + array_index, + smp_inc + ); + View view(set_bind_item.View); + view.CreateDescriptor(m_device->m_device.Get(), def, handle); + break; + } + } + } + } + set_bind_item_chunk_index = set_bind_item_chunk.Next; + } + + #pragma endregion } } sync_binding_info.DynamicBindGroupInfoIndCount = m_dynamic_bind_group_info_sync_inds.size() - sync_binding_info.DynamicBindGroupInfoIndIndex; if (!changed) sync_binding_info.Skip = true; } -void D3d12GpuRecord::Analyze_SetMeshBuffers(u32 i, const FCmdSetMeshBuffers& cmd) +void D3d12GpuRecord::Analyze_SetMeshBuffers(const u32 i, const FCmdSetMeshBuffers& cmd) { if (m_state != RecordState::Render) COPLT_THROW_FMT("[{}] Can only use SetMeshBuffers in render scope", i); @@ -1018,7 +1152,7 @@ void D3d12GpuRecord::Analyze_SetMeshBuffers(u32 i, const FCmdSetMeshBuffers& cmd m_barrier_analyzer->OnCmd(); } -void D3d12GpuRecord::Analyze_Draw(u32 i, const FCmdDraw& cmd) +void D3d12GpuRecord::Analyze_Draw(const u32 i, const FCmdDraw& cmd) { if (Mode != FGpuRecordMode::Direct) COPLT_THROW_FMT("[{}] Can only Draw on the direct mode", i); @@ -1028,7 +1162,7 @@ void D3d12GpuRecord::Analyze_Draw(u32 i, const FCmdDraw& cmd) m_barrier_analyzer->OnCmd(); } -void D3d12GpuRecord::Analyze_Dispatch(u32 i, const FCmdDispatch& cmd) +void D3d12GpuRecord::Analyze_Dispatch(const u32 i, const FCmdDispatch& cmd) { switch (cmd.Type) { @@ -1487,33 +1621,24 @@ void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCm #pragma region 持久分配的描述符表 - const auto persistent_bind_items = std::span(m_bind_items) - .subspan(sync_binding_info.PersistentBindItemIndex, sync_binding_info.PersistentBindItemCount); + const auto persistent_bind_items = std::span(m_table_bind_items) + .subspan(sync_binding_info.PersistentRootItemIndex, sync_binding_info.PersistentRootItemCount); for (const auto& bind_item : persistent_bind_items) { const auto& bind_item_info = *bind_item.Info; - switch (bind_item_info.Place) + COPLT_DEBUG_ASSERT(bind_item_info.Place == Layout::RootItemPlace::Table); + const auto& allocation = m_allocations[bind_item.AllocationIndex]; + const auto& al = bind_item_info.Type == Layout::RootItemType::Resource ? allocation.Resource : allocation.Sampler; + COPLT_DEBUG_ASSERT(al.m_heap != nullptr); + if (m_state == RecordState::Render) { - case Layout::BindItemPlace::Table: - { - const auto& allocation = m_allocations[bind_item.AllocationIndex]; - const auto& al = bind_item_info.Type == Layout::BindItemType::Resource ? allocation.Resource : allocation.Sampler; - COPLT_DEBUG_ASSERT(al.m_heap != nullptr); - if (m_state == RecordState::Render) - { - list->g0->SetGraphicsRootDescriptorTable(bind_item_info.RootIndex, al.GetGpuHandle()); - } - else - { - list->g0->SetComputeRootDescriptorTable(bind_item_info.RootIndex, al.GetGpuHandle()); - } - break; - } - case Layout::BindItemPlace::Direct: - case Layout::BindItemPlace::Const: - // 持久绑定只有描述符表,不会存在直接资源和常量 - COPLT_THROW("Unreachable"); + list->g0->SetGraphicsRootDescriptorTable(bind_item_info.RootIndex, al.GetGpuHandle()); } + else + { + list->g0->SetComputeRootDescriptorTable(bind_item_info.RootIndex, al.GetGpuHandle()); + } + break; } #pragma endregion @@ -1526,11 +1651,11 @@ void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCm { const auto& info = m_dynamic_bind_group_infos[dyn_bind_group_info_ind.InfoIndex]; if (!info.BindGroup) continue; - const auto& group_bind_item_info = layout->GroupBindItemInfos()[dyn_bind_group_info_ind.GroupIndex]; - auto set_constants_chunk_index = info.SetConstantsHead; + const auto& group_root_item_info = layout->GroupRootItemInfos()[dyn_bind_group_info_ind.GroupIndex]; #pragma region 常量 + auto set_constants_chunk_index = info.SetConstantsHead; while (set_constants_chunk_index != COPLT_U32_MAX) { const auto& set_constants_chunk = m_set_constants_chunks[set_constants_chunk_index]; @@ -1538,11 +1663,11 @@ void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCm { if (set_constants_cmd_index == COPLT_U32_MAX) break; const auto& set_constants_cmd = Commands[set_constants_cmd_index].SetConstants; - if (set_constants_cmd.Slot > group_bind_item_info.size()) + if (set_constants_cmd.Slot > group_root_item_info.size()) COPLT_THROW_FMT("[{}] Invalid set constant slot index, out of range", i); - const auto& bind_item_info = group_bind_item_info[set_constants_cmd.Slot]; - COPLT_DEBUG_ASSERT(bind_item_info.Place == Layout::BindItemPlace::Const); - const auto root_index = bind_item_info.RootIndex; + const auto& root_item_info = group_root_item_info[set_constants_cmd.Slot]; + COPLT_DEBUG_ASSERT(root_item_info.Place == Layout::RootItemPlace::Const); + const auto root_index = root_item_info.RootIndex; if (set_constants_cmd.Count == 0) continue; if (m_state == RecordState::Render) { @@ -1563,6 +1688,30 @@ void D3d12GpuRecord::Interpret_SyncBinding(const CmdList& list, u32 i, const FCm } #pragma endregion + + #pragma region 描述符表 + + const auto dynamic_bind_items = std::span(m_table_bind_items) + .subspan(info.DynamicRootItemIndex, info.DynamicRootItemCount); + for (const auto& bind_item : dynamic_bind_items) + { + const auto& bind_item_info = *bind_item.Info; + COPLT_DEBUG_ASSERT(bind_item_info.Place == Layout::RootItemPlace::Table); + const auto& allocation = m_allocations[bind_item.AllocationIndex]; + const auto& al = bind_item_info.Type == Layout::RootItemType::Resource ? allocation.Resource : allocation.Sampler; + COPLT_DEBUG_ASSERT(al.m_heap != nullptr); + if (m_state == RecordState::Render) + { + list->g0->SetGraphicsRootDescriptorTable(bind_item_info.RootIndex, al.GetGpuHandle()); + } + else + { + list->g0->SetComputeRootDescriptorTable(bind_item_info.RootIndex, al.GetGpuHandle()); + } + break; + } + + #pragma endregion } #pragma endregion diff --git a/Coplt.Graphics.Native/D3d12/Src/Record.h b/Coplt.Graphics.Native/D3d12/Src/Record.h index 0fdd94b..c1825fd 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Record.h +++ b/Coplt.Graphics.Native/D3d12/Src/Record.h @@ -122,8 +122,8 @@ namespace Coplt { Ptr Layout{}; u64 BindingVersion{}; - u32 PersistentBindItemIndex{COPLT_U32_MAX}; - u32 PersistentBindItemCount{0}; + u32 PersistentRootItemIndex{COPLT_U32_MAX}; + u32 PersistentRootItemCount{0}; u32 DynamicBindGroupInfoIndIndex{COPLT_U32_MAX}; u32 DynamicBindGroupInfoIndCount{0}; bool Changed{}; @@ -143,9 +143,13 @@ namespace Coplt u32 SetConstantsHead{COPLT_U32_MAX}; // 类型为 SetConstantsChunk u32 SetConstantsTail{COPLT_U32_MAX}; + // 类型为 SetBindItemChunk + u32 SetBindItemHead{COPLT_U32_MAX}; + // 类型为 SetBindItemChunk + u32 SetBindItemTail{COPLT_U32_MAX}; // 只有再 Frozen 变为 true 后才会设置 - u32 DynamicBindItemIndex{COPLT_U32_MAX}; - u32 DynamicBindItemCount{0}; + u32 DynamicRootItemIndex{COPLT_U32_MAX}; + u32 DynamicRootItemCount{0}; // 冻结后不可再修改 bool Frozen{false}; }; @@ -156,11 +160,17 @@ namespace Coplt u32 CmdIndex[7]{COPLT_U32_MAX}; }; + struct SetBindItemChunk + { + u32 Next{COPLT_U32_MAX}; + u32 CmdIndex[7]{COPLT_U32_MAX}; + }; + struct SyncBindingInfo { Ptr Layout{}; - u32 PersistentBindItemIndex{COPLT_U32_MAX}; - u32 PersistentBindItemCount{0}; + u32 PersistentRootItemIndex{COPLT_U32_MAX}; + u32 PersistentRootItemCount{0}; // 类型为 BindGroupInd u32 DynamicBindGroupInfoIndIndex{COPLT_U32_MAX}; u32 DynamicBindGroupInfoIndCount{0}; @@ -172,15 +182,10 @@ namespace Coplt } }; - struct BindItem + struct TableRootItem { - Ptr Info{}; - - union - { - u32 AllocationIndex{}; - // todo 直接资源和常量 - }; + Ptr Info{}; + u32 AllocationIndex{}; }; struct BindGroupInd @@ -203,8 +208,11 @@ namespace Coplt struct TmpDescAllocation { - u32 HeapIndex{}; + u32 HeapIndex{COPLT_U32_MAX}; u32 OffsetInHeap{}; + u32 Size{}; + + explicit operator bool() const noexcept { return HeapIndex != COPLT_U32_MAX; } }; struct TmpDescHeaps @@ -271,7 +279,8 @@ namespace Coplt std::vector m_dynamic_bind_group_info_inds{}; std::vector m_dynamic_bind_group_info_sync_inds{}; std::vector m_set_constants_chunks{}; - std::vector m_bind_items{}; + std::vector m_set_bind_item_chunks{}; + std::vector m_table_bind_items{}; TmpDescHeaps m_tmp_res_heaps{}; TmpDescHeaps m_tmp_smp_heaps{}; std::vector m_queue_wait_points{}; @@ -332,6 +341,8 @@ namespace Coplt void Analyze_SetPipeline(u32 i, const FCmdSetPipeline& cmd); void Analyze_SetBinding(u32 i, const FCmdSetBinding& cmd); void Analyze_SetConstants(u32 i, const FCmdSetConstants& cmd); + void Analyze_SetDynArraySize(u32 i, const FCmdSetDynArraySize& cmd); + void Analyze_SetBindItem(u32 i, const FCmdSetBindItem& cmd); void Analyze_SyncBinding(u32 i, const FCmdSyncBinding& cmd); void Analyze_SetMeshBuffers(u32 i, const FCmdSetMeshBuffers& cmd); void Analyze_Draw(u32 i, const FCmdDraw& cmd); diff --git a/Examples/Mipmap/Example.cs b/Examples/Mipmap/Example.cs index 99187c2..ada170a 100644 --- a/Examples/Mipmap/Example.cs +++ b/Examples/Mipmap/Example.cs @@ -87,7 +87,7 @@ protected override async Task LoadResources(GpuRecord cmd) var test_image = Isolate.CreateImage( new() { - Purpose = ResourcePurpose.ShaderResource, + Purpose = ResourcePurpose.ShaderResource | ResourcePurpose.UnorderedAccess, Format = GraphicsFormat.R8G8B8A8_UNorm, Width = (uint)image_data.Width, Height = (uint)image_data.Height, From bd648ecb22babb6fec8fae8cc8c38448ba9fae3a Mon Sep 17 00:00:00 2001 From: U2A5F Date: Fri, 18 Apr 2025 23:21:21 +0800 Subject: [PATCH 14/22] save --- Coplt.Graphics.Native/D3d12/Src/Layout.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Coplt.Graphics.Native/D3d12/Src/Layout.cc b/Coplt.Graphics.Native/D3d12/Src/Layout.cc index 07bf4d0..c4c9a45 100644 --- a/Coplt.Graphics.Native/D3d12/Src/Layout.cc +++ b/Coplt.Graphics.Native/D3d12/Src/Layout.cc @@ -241,7 +241,8 @@ D3d12BindingLayout::D3d12BindingLayout(Rc&& device, const FBindi } const auto& def = defines[info.Index]; if ( - def.View != item.View || (item.View == FShaderLayoutItemView::StaticSampler ? false : def.Count != item.Count) + def.View != item.View || + (item.View == FShaderLayoutItemView::StaticSampler || def.Count == COPLT_U32_MAX ? false : def.Count != item.Count) || def.Type != item.Type || def.Format != item.Format ) { @@ -250,7 +251,7 @@ D3d12BindingLayout::D3d12BindingLayout(Rc&& device, const FBindi slot.Id, slot.Scope, static_cast(slot.Stage), g, i ); } - if (item.Count < def.Count) + if (def.Count != COPLT_U32_MAX && item.Count < def.Count) { COPLT_THROW_FMT( "Incompatible binding slot {{ Id = {}, Scope = {}, Stage = {} }} at Group {} [{}]; The group provides fewer bindings than the shader requires", From 90b3ec0e075ef151d9290c96e6034dd940dea04f Mon Sep 17 00:00:00 2001 From: U2A5F Date: Sun, 20 Apr 2025 15:16:58 +0800 Subject: [PATCH 15/22] save --- Examples/Mipmap/Example.cs | 45 +++++++++++++++++++++-------- Examples/Mipmap/Shaders/Shader.hlsl | 6 +++- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/Examples/Mipmap/Example.cs b/Examples/Mipmap/Example.cs index ada170a..37f51fb 100644 --- a/Examples/Mipmap/Example.cs +++ b/Examples/Mipmap/Example.cs @@ -1,4 +1,5 @@ -using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; using Coplt.Graphics; using Coplt.Graphics.Core; using Coplt.Graphics.States; @@ -100,21 +101,41 @@ protected override async Task LoadResources(GpuRecord cmd) GenMipmaps(cmd, test_image); } + [InlineArray(5)] + private struct SetShaderBindItemArr + { + private SetShaderBindItem _; + } + private void GenMipmaps(GpuRecord cmd, GpuImage image) { + // Not handling non-power-of-2 cases using var compute = cmd.Compute(Name: "GenMipmaps"); compute.SetBinding(Binding); - compute.SetDynArraySize(BindGroup, 4); - compute.SetConstants(BindGroup, 0, [image.Width, image.Height, 4]); - compute.SetBindItem( - BindGroup, [ - new(1, 0, image.View2D(0, 1)), - new(1, 1, image.View2D(1, 1)), - new(1, 2, image.View2D(2, 1)), - new(1, 3, image.View2D(3, 1)), - ] - ); - compute.Dispatch(Pipeline, 1, 1); + var size = new uint2(image.Width, image.Height); + var i = 0u; + var l = (image.MipLevels - 1u) % 4; + if (l == 0) l = 4; + for (; i < image.MipLevels; i += l, size >>= (int)l, l = 4) + { + var mip_levels = math.min(image.MipLevels - i - 1, 4); + var arr = math.min(l, image.MipLevels - i - 1); + if (arr == 0) break; + var half_size = size >> 1; + var groups = (half_size + 7) >> 3; + compute.SetDynArraySize(BindGroup, arr + 1); + compute.SetConstants(BindGroup, 0, [size.x, size.y, mip_levels, arr]); + Span set_items = + [ + new(1, 0, image.View2D((byte)(i + 0))), + new(1, 1, image.View2D((byte)(i + 1))), + new(1, 2, image.View2D((byte)(i + 2))), + new(1, 3, image.View2D((byte)(i + 3))), + new(1, 4, image.View2D((byte)(i + 4))), + ]; + compute.SetBindItem(BindGroup, set_items[..((int)arr + 1)]); + compute.Dispatch(Pipeline, groups.x, groups.y); + } } protected override void Render(GpuRecord cmd, Time time) diff --git a/Examples/Mipmap/Shaders/Shader.hlsl b/Examples/Mipmap/Shaders/Shader.hlsl index 2e2098c..e763179 100644 --- a/Examples/Mipmap/Shaders/Shader.hlsl +++ b/Examples/Mipmap/Shaders/Shader.hlsl @@ -2,6 +2,7 @@ cbuffer Args : register(b0) { uint2 size; uint mip_levels; // 0 .. 4 + uint arr; } RWTexture2D images[] : register(u0); @@ -53,7 +54,7 @@ void Compute(uint2 tid : SV_DispatchThreadID, uint2 gtid : SV_GroupThreadID, uin src.Load(pos + uint2(1, 0)) + src.Load(pos + uint2(1, 1)) ) * 0.25; - dst[gtid] = color; + dst[tid] = color; index = 2; X8_8(gtid, gid, index, color); return; @@ -98,6 +99,7 @@ bool QuadIsFirst() void X8_8(uint2 gtid, uint2 gid, inout uint index, inout float4 color) { + if (index > arr) return; RWTexture2D dst = images[index]; // 4x4 // color from 8x8 float4 c1 = QuadReadAcrossX(color); @@ -132,6 +134,7 @@ void X8_8(uint2 gtid, uint2 gid, inout uint index, inout float4 color) void X4_4(uint2 gtid, uint2 gid, inout uint index, inout float4 color) { + if (index > arr) return; RWTexture2D dst = images[index]; // 2x2 // color from 4x4 float4 c1 = QuadReadAcrossX(color); @@ -166,6 +169,7 @@ void X4_4(uint2 gtid, uint2 gid, inout uint index, inout float4 color) void X2_2(uint2 gid, inout uint index, inout float4 color) { + if (index > arr) return; RWTexture2D dst = images[index]; // 1x1 // color from 2x2 float4 c1 = QuadReadAcrossX(color); From 21ab8778e0d3a5d85e583020c44a4bd4bed357e8 Mon Sep 17 00:00:00 2001 From: U2A5F Date: Sun, 20 Apr 2025 15:25:27 +0800 Subject: [PATCH 16/22] pattern with color --- Assets/pattern.png | Bin 685906 -> 1416902 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Assets/pattern.png b/Assets/pattern.png index 8caa13f072066c694e785efe92505e4fe1d8193f..7c97463f6139e447bcbdcfbcc11a372336d525a4 100644 GIT binary patch literal 1416902 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