Skip to content

Commit

Permalink
Merge pull request #374 from tannergooding/main
Browse files Browse the repository at this point in the history
Cover some d3dx12 types that require manual porting
  • Loading branch information
tannergooding authored Dec 24, 2023
2 parents cba693f + fa8b68a commit af7959d
Show file tree
Hide file tree
Showing 55 changed files with 6,170 additions and 147 deletions.
1 change: 1 addition & 0 deletions generation/DirectX/d3dx12/d3dx12_core/generate.rsp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ CD3DX12_DEPTH_STENCIL_DESC1.CD3DX12_DEPTH_STENCIL_DESC1(CD3DX12_DEFAULT):void
CD3DX12_DEPTH_STENCIL_DESC1.operator D3D12_DEPTH_STENCIL_DESC():D3D12_DEPTH_STENCIL_DESC
CD3DX12_DEPTH_STENCIL_DESC2.Base
CD3DX12_DEPTH_STENCIL_DESC2.CD3DX12_DEPTH_STENCIL_DESC2(CD3DX12_DEFAULT):void
CD3DX12_DEPTH_STENCIL_DESC2.operator D3D12_DEPTH_STENCIL_DESC():D3D12_DEPTH_STENCIL_DESC
CD3DX12_HEAP_DESC.Base
CD3DX12_HEAP_DESC.IsCPUAccessible():bool
CD3DX12_HEAP_PROPERTIES.Base
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT
CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING
CD3DX12_PIPELINE_STATE_STREAM_VS
D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STREAM_DESC &, ID3DX12PipelineParserCallbacks *):HRESULT
ID3DX12PipelineParserCallbacks
--file
d3dx12-d3dx12_pipeline_state_stream.h
--methodClassName
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Copyright © Tanner Gooding and Contributors. Licensed under the MIT License (MIT). See License.md in the repository root for more information.

// Ported from D3D12TokenizedProgramFormat.hpp in microsoft/DirectX-Headers tag v1.611.2
// Original source is Copyright © Microsoft. Licensed under the MIT license

namespace TerraFX.Interop.DirectX;

public static partial class D3D12
{
[NativeTypeName("#define D3D12_SB_OPERAND_NON_UNIFORM_MASK 0x00020000")]
public const int D3D12_SB_OPERAND_NON_UNIFORM_MASK = 0x00020000;

[NativeTypeName("#define D3D12_SB_OPERAND_NON_UNIFORM_SHIFT 17")]
public const int D3D12_SB_OPERAND_NON_UNIFORM_SHIFT = 17;

[NativeTypeName("#define D3D12_SB_GLOBAL_FLAG_ALL_RESOURCES_BOUND (1<<19)")]
public const int D3D12_SB_GLOBAL_FLAG_ALL_RESOURCES_BOUND = (1 << 19);
}
2 changes: 2 additions & 0 deletions sources/Interop/Windows/DirectX/d3d12/d3d12/DirectX.Manual.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ public static D3D12_FILTER D3D12_ENCODE_BASIC_FILTER(D3D12_FILTER_TYPE min, D3D1

public static D3D12_FILTER D3D12_ENCODE_ANISOTROPIC_FILTER(D3D12_FILTER_REDUCTION_TYPE reduction) => (D3D12_FILTER)(D3D12_ANISOTROPIC_FILTERING_BIT | (uint)D3D12_ENCODE_BASIC_FILTER(D3D12_FILTER_TYPE_LINEAR, D3D12_FILTER_TYPE_LINEAR, D3D12_FILTER_TYPE_LINEAR, reduction));

public static D3D12_FILTER D3D12_ENCODE_MIN_MAG_ANISOTROPIC_MIP_POINT_FILTER(D3D12_FILTER_REDUCTION_TYPE reduction) => (D3D12_FILTER)(D3D12_ANISOTROPIC_FILTERING_BIT) | D3D12_ENCODE_BASIC_FILTER(D3D12_FILTER_TYPE_LINEAR, D3D12_FILTER_TYPE_LINEAR, D3D12_FILTER_TYPE_POINT, reduction);

public static D3D12_FILTER_TYPE D3D12_DECODE_MIN_FILTER(D3D12_FILTER D3D12Filter) => (D3D12_FILTER_TYPE)(((uint)D3D12Filter >> unchecked((int)D3D12_MIN_FILTER_SHIFT)) & D3D12_FILTER_TYPE_MASK);

public static D3D12_FILTER_TYPE D3D12_DECODE_MAG_FILTER(D3D12_FILTER D3D12Filter) => (D3D12_FILTER_TYPE)(((uint)D3D12Filter >> unchecked((int)D3D12_MAG_FILTER_SHIFT)) & D3D12_FILTER_TYPE_MASK);
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -58,29 +58,24 @@ public D3D12_DEPTH_STENCIL_DESC1([NativeTypeName("const D3D12_DEPTH_STENCIL_DESC
DepthBoundsTestEnable = 0;
}

public static explicit operator D3D12_DEPTH_STENCIL_DESC(D3D12_DEPTH_STENCIL_DESC1 value)
{
D3D12_DEPTH_STENCIL_DESC D = new D3D12_DEPTH_STENCIL_DESC {
DepthEnable = value.DepthEnable,
DepthWriteMask = value.DepthWriteMask,
DepthFunc = value.DepthFunc,
StencilEnable = value.StencilEnable,
StencilReadMask = value.StencilReadMask,
StencilWriteMask = value.StencilWriteMask,
FrontFace = new D3D12_DEPTH_STENCILOP_DESC {
StencilFailOp = value.FrontFace.StencilFailOp,
StencilDepthFailOp = value.FrontFace.StencilDepthFailOp,
StencilPassOp = value.FrontFace.StencilPassOp,
StencilFunc = value.FrontFace.StencilFunc,
},
BackFace = new D3D12_DEPTH_STENCILOP_DESC {
StencilFailOp = value.BackFace.StencilFailOp,
StencilDepthFailOp = value.BackFace.StencilDepthFailOp,
StencilPassOp = value.BackFace.StencilPassOp,
StencilFunc = value.BackFace.StencilFunc,
},
};

return D;
}
public static explicit operator D3D12_DEPTH_STENCIL_DESC(D3D12_DEPTH_STENCIL_DESC1 value) => new D3D12_DEPTH_STENCIL_DESC {
DepthEnable = value.DepthEnable,
DepthWriteMask = value.DepthWriteMask,
DepthFunc = value.DepthFunc,
StencilEnable = value.StencilEnable,
StencilReadMask = value.StencilReadMask,
StencilWriteMask = value.StencilWriteMask,
FrontFace = new D3D12_DEPTH_STENCILOP_DESC {
StencilFailOp = value.FrontFace.StencilFailOp,
StencilDepthFailOp = value.FrontFace.StencilDepthFailOp,
StencilPassOp = value.FrontFace.StencilPassOp,
StencilFunc = value.FrontFace.StencilFunc,
},
BackFace = new D3D12_DEPTH_STENCILOP_DESC {
StencilFailOp = value.BackFace.StencilFailOp,
StencilDepthFailOp = value.BackFace.StencilDepthFailOp,
StencilPassOp = value.BackFace.StencilPassOp,
StencilFunc = value.BackFace.StencilFunc,
},
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,48 @@ namespace TerraFX.Interop.DirectX;

public unsafe partial struct D3D12_DEPTH_STENCIL_DESC2
{
public D3D12_DEPTH_STENCIL_DESC2([NativeTypeName("const D3D12_DEPTH_STENCIL_DESC1 &")] in D3D12_DEPTH_STENCIL_DESC1 o)
{
DepthEnable = o.DepthEnable;
DepthWriteMask = o.DepthWriteMask;
DepthFunc = o.DepthFunc;
StencilEnable = o.StencilEnable;
FrontFace.StencilFailOp = o.FrontFace.StencilFailOp;
FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp;
FrontFace.StencilPassOp = o.FrontFace.StencilPassOp;
FrontFace.StencilFunc = o.FrontFace.StencilFunc;
FrontFace.StencilReadMask = o.StencilReadMask;
FrontFace.StencilWriteMask = o.StencilWriteMask;
BackFace.StencilFailOp = o.BackFace.StencilFailOp;
BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp;
BackFace.StencilPassOp = o.BackFace.StencilPassOp;
BackFace.StencilFunc = o.BackFace.StencilFunc;
BackFace.StencilReadMask = o.StencilReadMask;
BackFace.StencilWriteMask = o.StencilWriteMask;
DepthBoundsTestEnable = o.DepthBoundsTestEnable;
}

public D3D12_DEPTH_STENCIL_DESC2([NativeTypeName("const D3D12_DEPTH_STENCIL_DESC &")] in D3D12_DEPTH_STENCIL_DESC o)
{
DepthEnable = o.DepthEnable;
DepthWriteMask = o.DepthWriteMask;
DepthFunc = o.DepthFunc;
StencilEnable = o.StencilEnable;
FrontFace.StencilFailOp = o.FrontFace.StencilFailOp;
FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp;
FrontFace.StencilPassOp = o.FrontFace.StencilPassOp;
FrontFace.StencilFunc = o.FrontFace.StencilFunc;
FrontFace.StencilReadMask = o.StencilReadMask;
FrontFace.StencilWriteMask = o.StencilWriteMask;
BackFace.StencilFailOp = o.BackFace.StencilFailOp;
BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp;
BackFace.StencilPassOp = o.BackFace.StencilPassOp;
BackFace.StencilFunc = o.BackFace.StencilFunc;
BackFace.StencilReadMask = o.StencilReadMask;
BackFace.StencilWriteMask = o.StencilWriteMask;
DepthBoundsTestEnable = 0;
}

public static ref readonly D3D12_DEPTH_STENCIL_DESC2 DEFAULT
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
Expand Down Expand Up @@ -39,4 +81,25 @@ public static ref readonly D3D12_DEPTH_STENCIL_DESC2 DEFAULT
return ref Unsafe.As<byte, D3D12_DEPTH_STENCIL_DESC2>(ref MemoryMarshal.GetReference(data));
}
}

public static explicit operator D3D12_DEPTH_STENCIL_DESC(in D3D12_DEPTH_STENCIL_DESC2 value) => new D3D12_DEPTH_STENCIL_DESC {
DepthEnable = value.DepthEnable,
DepthWriteMask = value.DepthWriteMask,
DepthFunc = value.DepthFunc,
StencilEnable = value.StencilEnable,
StencilReadMask = value.FrontFace.StencilReadMask,
StencilWriteMask = value.FrontFace.StencilWriteMask,
FrontFace = new D3D12_DEPTH_STENCILOP_DESC {
StencilFailOp = value.FrontFace.StencilFailOp,
StencilDepthFailOp = value.FrontFace.StencilDepthFailOp,
StencilPassOp = value.FrontFace.StencilPassOp,
StencilFunc = value.FrontFace.StencilFunc,
},
BackFace = new D3D12_DEPTH_STENCILOP_DESC {
StencilFailOp = value.BackFace.StencilFailOp,
StencilDepthFailOp = value.BackFace.StencilDepthFailOp,
StencilPassOp = value.BackFace.StencilPassOp,
StencilFunc = value.BackFace.StencilFunc,
},
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,25 +74,4 @@ public D3D12_DEPTH_STENCIL_DESC2(BOOL depthEnable, D3D12_DEPTH_WRITE_MASK depthW
BackFace.StencilWriteMask = backStencilWriteMask;
DepthBoundsTestEnable = depthBoundsTestEnable;
}

public D3D12_DEPTH_STENCIL_DESC ToD3D12_DEPTH_STENCIL_DESC()
{
D3D12_DEPTH_STENCIL_DESC D = new D3D12_DEPTH_STENCIL_DESC();

D.DepthEnable = DepthEnable;
D.DepthWriteMask = DepthWriteMask;
D.DepthFunc = DepthFunc;
D.StencilEnable = StencilEnable;
D.StencilReadMask = FrontFace.StencilReadMask;
D.StencilWriteMask = FrontFace.StencilWriteMask;
D.FrontFace.StencilFailOp = FrontFace.StencilFailOp;
D.FrontFace.StencilDepthFailOp = FrontFace.StencilDepthFailOp;
D.FrontFace.StencilPassOp = FrontFace.StencilPassOp;
D.FrontFace.StencilFunc = FrontFace.StencilFunc;
D.BackFace.StencilFailOp = BackFace.StencilFailOp;
D.BackFace.StencilDepthFailOp = BackFace.StencilDepthFailOp;
D.BackFace.StencilPassOp = BackFace.StencilPassOp;
D.BackFace.StencilFunc = BackFace.StencilFunc;
return D;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,21 @@ namespace TerraFX.Interop.DirectX;

public unsafe partial struct D3D12_RASTERIZER_DESC1
{
public D3D12_RASTERIZER_DESC1([NativeTypeName("const D3D12_RASTERIZER_DESC &")] in D3D12_RASTERIZER_DESC o)
{
FillMode = o.FillMode;
CullMode = o.CullMode;
FrontCounterClockwise = o.FrontCounterClockwise;
DepthBias = (float)(o.DepthBias);
DepthBiasClamp = o.DepthBiasClamp;
SlopeScaledDepthBias = o.SlopeScaledDepthBias;
DepthClipEnable = o.DepthClipEnable;
MultisampleEnable = o.MultisampleEnable;
AntialiasedLineEnable = o.AntialiasedLineEnable;
ForcedSampleCount = o.ForcedSampleCount;
ConservativeRaster = o.ConservativeRaster;
}

public static ref readonly D3D12_RASTERIZER_DESC1 DEFAULT
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ namespace TerraFX.Interop.DirectX;

public static unsafe partial class DirectX
{
public static ID3D12CommandList** CommandListCast<t_CommandListType>(t_CommandListType** pp)
where t_CommandListType : unmanaged, ID3D12CommandList.Interface
{
return (ID3D12CommandList**)(pp);
}

[return: NativeTypeName("const CD3DX12_RESOURCE_DESC1 *")]
public static ref readonly D3D12_RESOURCE_DESC1 D3DX12ConditionallyExpandAPIDesc([NativeTypeName("CD3DX12_RESOURCE_DESC1 &")] ref D3D12_RESOURCE_DESC1 LclDesc, [NativeTypeName("const CD3DX12_RESOURCE_DESC1 *")] in D3D12_RESOURCE_DESC1 pDesc)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
// Copyright © Tanner Gooding and Contributors. Licensed under the MIT License (MIT). See License.md in the repository root for more information.

// Ported from d3dx12_pipeline_state_stream.h in microsoft/DirectX-Headers tag v1.611.2
// Original source is Copyright © Microsoft. Licensed under the MIT license

using System.Runtime.InteropServices;

namespace TerraFX.Interop.DirectX;

public unsafe struct CD3DX12_PIPELINE_MESH_STATE_STREAM
{
public CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;

public CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;

public CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;

public CD3DX12_PIPELINE_STATE_STREAM_PS PS;

public CD3DX12_PIPELINE_STATE_STREAM_AS AS;

public CD3DX12_PIPELINE_STATE_STREAM_MS MS;

public CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;

public CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState;

public CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;

public CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState;

public CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;

public CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;

public CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;

public CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;

public CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;


public CD3DX12_PIPELINE_MESH_STATE_STREAM([NativeTypeName("const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC &")] in D3DX12_MESH_SHADER_PIPELINE_STATE_DESC Desc)
{
Flags = Desc.Flags;
NodeMask = Desc.NodeMask;
pRootSignature = Desc.pRootSignature;
PS = Desc.PS;
AS = Desc.AS;
MS = Desc.MS;
BlendState = Desc.BlendState;
DepthStencilState = new D3D12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState);
DSVFormat = Desc.DSVFormat;
RasterizerState = Desc.RasterizerState;

fixed (DXGI_FORMAT* pFormats = &Desc.RTVFormats[0])
{
RTVFormats = new D3D12_RT_FORMAT_ARRAY(pFormats, Desc.NumRenderTargets);
}

SampleDesc = Desc.SampleDesc;
SampleMask = Desc.SampleMask;
CachedPSO = Desc.CachedPSO;
ViewInstancingDesc = D3D12_VIEW_INSTANCING_DESC.DEFAULT;
}

public readonly D3DX12_MESH_SHADER_PIPELINE_STATE_DESC MeshShaderDescV0()
{
D3DX12_MESH_SHADER_PIPELINE_STATE_DESC D = new D3DX12_MESH_SHADER_PIPELINE_STATE_DESC {
Flags = Flags,
NodeMask = NodeMask,
pRootSignature = pRootSignature,
PS = PS,
AS = AS,
MS = MS,
BlendState = BlendState,
DepthStencilState = (D3D12_DEPTH_STENCIL_DESC)(DepthStencilState.pssInner),
DSVFormat = DSVFormat,
RasterizerState = RasterizerState,
NumRenderTargets = RTVFormats.pssInner.NumRenderTargets,
SampleDesc = SampleDesc,
SampleMask = SampleMask,
CachedPSO = CachedPSO,
};

fixed (DXGI_FORMAT* pFormat = &RTVFormats.pssInner.RTFormats[0])
{
NativeMemory.Copy(&D.RTVFormats[0], pFormat, 8 * sizeof(DXGI_FORMAT));
}

return D;
}
}
Loading

0 comments on commit af7959d

Please sign in to comment.