Direct3D11: Add some helper methods.

This commit is contained in:
Amer Koleci
2022-09-26 15:38:02 +02:00
parent fa731086e8
commit 5b46d60c9a
12 changed files with 259 additions and 13 deletions

View File

@@ -963,6 +963,11 @@ public static class Program
// D3D11 // D3D11
{ "ID3D11DeviceContext::Map::MapFlags", "D3D11_MAP_FLAG" }, { "ID3D11DeviceContext::Map::MapFlags", "D3D11_MAP_FLAG" },
{ "ID3D11DeviceContext::ClearDepthStencilView::ClearFlags", "D3D11_CLEAR_FLAG" },
{ "ID3D11DeviceContext1::ClearDepthStencilView::ClearFlags", "D3D11_CLEAR_FLAG" },
{ "ID3D11DeviceContext2::ClearDepthStencilView::ClearFlags", "D3D11_CLEAR_FLAG" },
{ "ID3D11DeviceContext3::ClearDepthStencilView::ClearFlags", "D3D11_CLEAR_FLAG" },
{ "ID3D11DeviceContext4::ClearDepthStencilView::ClearFlags", "D3D11_CLEAR_FLAG" },
// D3D12 // D3D12

View File

@@ -473,9 +473,9 @@ public unsafe partial struct ID3D11DeviceContext
/// <include file='../../Direct3D11.xml' path='doc/member[@name="ID3D11DeviceContext::ClearDepthStencilView"]/*' /> /// <include file='../../Direct3D11.xml' path='doc/member[@name="ID3D11DeviceContext::ClearDepthStencilView"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(53)] [VtblIndex(53)]
public void ClearDepthStencilView(ID3D11DepthStencilView* pDepthStencilView, uint ClearFlags, float Depth, byte Stencil) public void ClearDepthStencilView(ID3D11DepthStencilView* pDepthStencilView, ClearFlags ClearFlags, float Depth, byte Stencil)
{ {
((delegate* unmanaged[Stdcall]<ID3D11DeviceContext*, ID3D11DepthStencilView*, uint, float, byte, void>)(lpVtbl[53]))((ID3D11DeviceContext*)Unsafe.AsPointer(ref this), pDepthStencilView, ClearFlags, Depth, Stencil); ((delegate* unmanaged[Stdcall]<ID3D11DeviceContext*, ID3D11DepthStencilView*, ClearFlags, float, byte, void>)(lpVtbl[53]))((ID3D11DeviceContext*)Unsafe.AsPointer(ref this), pDepthStencilView, ClearFlags, Depth, Stencil);
} }
/// <include file='../../Direct3D11.xml' path='doc/member[@name="ID3D11DeviceContext::GenerateMips"]/*' /> /// <include file='../../Direct3D11.xml' path='doc/member[@name="ID3D11DeviceContext::GenerateMips"]/*' />

View File

@@ -473,9 +473,9 @@ public unsafe partial struct ID3D11DeviceContext1
/// <inheritdoc cref="ID3D11DeviceContext.ClearDepthStencilView" /> /// <inheritdoc cref="ID3D11DeviceContext.ClearDepthStencilView" />
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(53)] [VtblIndex(53)]
public void ClearDepthStencilView(ID3D11DepthStencilView* pDepthStencilView, uint ClearFlags, float Depth, byte Stencil) public void ClearDepthStencilView(ID3D11DepthStencilView* pDepthStencilView, ClearFlags ClearFlags, float Depth, byte Stencil)
{ {
((delegate* unmanaged[Stdcall]<ID3D11DeviceContext1*, ID3D11DepthStencilView*, uint, float, byte, void>)(lpVtbl[53]))((ID3D11DeviceContext1*)Unsafe.AsPointer(ref this), pDepthStencilView, ClearFlags, Depth, Stencil); ((delegate* unmanaged[Stdcall]<ID3D11DeviceContext1*, ID3D11DepthStencilView*, ClearFlags, float, byte, void>)(lpVtbl[53]))((ID3D11DeviceContext1*)Unsafe.AsPointer(ref this), pDepthStencilView, ClearFlags, Depth, Stencil);
} }
/// <inheritdoc cref="ID3D11DeviceContext.GenerateMips" /> /// <inheritdoc cref="ID3D11DeviceContext.GenerateMips" />

View File

@@ -473,9 +473,9 @@ public unsafe partial struct ID3D11DeviceContext2
/// <inheritdoc cref="ID3D11DeviceContext.ClearDepthStencilView" /> /// <inheritdoc cref="ID3D11DeviceContext.ClearDepthStencilView" />
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(53)] [VtblIndex(53)]
public void ClearDepthStencilView(ID3D11DepthStencilView* pDepthStencilView, uint ClearFlags, float Depth, byte Stencil) public void ClearDepthStencilView(ID3D11DepthStencilView* pDepthStencilView, ClearFlags ClearFlags, float Depth, byte Stencil)
{ {
((delegate* unmanaged[Stdcall]<ID3D11DeviceContext2*, ID3D11DepthStencilView*, uint, float, byte, void>)(lpVtbl[53]))((ID3D11DeviceContext2*)Unsafe.AsPointer(ref this), pDepthStencilView, ClearFlags, Depth, Stencil); ((delegate* unmanaged[Stdcall]<ID3D11DeviceContext2*, ID3D11DepthStencilView*, ClearFlags, float, byte, void>)(lpVtbl[53]))((ID3D11DeviceContext2*)Unsafe.AsPointer(ref this), pDepthStencilView, ClearFlags, Depth, Stencil);
} }
/// <inheritdoc cref="ID3D11DeviceContext.GenerateMips" /> /// <inheritdoc cref="ID3D11DeviceContext.GenerateMips" />

View File

@@ -473,9 +473,9 @@ public unsafe partial struct ID3D11DeviceContext3
/// <inheritdoc cref="ID3D11DeviceContext.ClearDepthStencilView" /> /// <inheritdoc cref="ID3D11DeviceContext.ClearDepthStencilView" />
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(53)] [VtblIndex(53)]
public void ClearDepthStencilView(ID3D11DepthStencilView* pDepthStencilView, uint ClearFlags, float Depth, byte Stencil) public void ClearDepthStencilView(ID3D11DepthStencilView* pDepthStencilView, ClearFlags ClearFlags, float Depth, byte Stencil)
{ {
((delegate* unmanaged[Stdcall]<ID3D11DeviceContext3*, ID3D11DepthStencilView*, uint, float, byte, void>)(lpVtbl[53]))((ID3D11DeviceContext3*)Unsafe.AsPointer(ref this), pDepthStencilView, ClearFlags, Depth, Stencil); ((delegate* unmanaged[Stdcall]<ID3D11DeviceContext3*, ID3D11DepthStencilView*, ClearFlags, float, byte, void>)(lpVtbl[53]))((ID3D11DeviceContext3*)Unsafe.AsPointer(ref this), pDepthStencilView, ClearFlags, Depth, Stencil);
} }
/// <inheritdoc cref="ID3D11DeviceContext.GenerateMips" /> /// <inheritdoc cref="ID3D11DeviceContext.GenerateMips" />

View File

@@ -473,9 +473,9 @@ public unsafe partial struct ID3D11DeviceContext4
/// <inheritdoc cref="ID3D11DeviceContext.ClearDepthStencilView" /> /// <inheritdoc cref="ID3D11DeviceContext.ClearDepthStencilView" />
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(53)] [VtblIndex(53)]
public void ClearDepthStencilView(ID3D11DepthStencilView* pDepthStencilView, uint ClearFlags, float Depth, byte Stencil) public void ClearDepthStencilView(ID3D11DepthStencilView* pDepthStencilView, ClearFlags ClearFlags, float Depth, byte Stencil)
{ {
((delegate* unmanaged[Stdcall]<ID3D11DeviceContext4*, ID3D11DepthStencilView*, uint, float, byte, void>)(lpVtbl[53]))((ID3D11DeviceContext4*)Unsafe.AsPointer(ref this), pDepthStencilView, ClearFlags, Depth, Stencil); ((delegate* unmanaged[Stdcall]<ID3D11DeviceContext4*, ID3D11DepthStencilView*, ClearFlags, float, byte, void>)(lpVtbl[53]))((ID3D11DeviceContext4*)Unsafe.AsPointer(ref this), pDepthStencilView, ClearFlags, Depth, Stencil);
} }
/// <inheritdoc cref="ID3D11DeviceContext.GenerateMips" /> /// <inheritdoc cref="ID3D11DeviceContext.GenerateMips" />

View File

@@ -5,6 +5,13 @@ namespace Win32.Graphics.Direct3D11;
public unsafe partial struct ID3D11Device public unsafe partial struct ID3D11Device
{ {
public ComPtr<ID3D11Buffer> CreateBuffe(BufferDescription* description, SubresourceData* initialData = default)
{
using ComPtr<ID3D11Buffer> buffer = default;
CreateBuffer(description, initialData, buffer.GetAddressOf()).ThrowIfFailed();
return buffer.Move();
}
public ComPtr<ID3D11Buffer> CreateBuffer<T>( public ComPtr<ID3D11Buffer> CreateBuffer<T>(
in T data, in T data,
BufferDescription description) where T : unmanaged BufferDescription description) where T : unmanaged
@@ -47,7 +54,6 @@ public unsafe partial struct ID3D11Device
/// Creates a new instance of the <see cref="ID3D11Buffer"/> class. /// Creates a new instance of the <see cref="ID3D11Buffer"/> class.
/// </summary> /// </summary>
/// <typeparam name="T">Type of the data to upload</typeparam> /// <typeparam name="T">Type of the data to upload</typeparam>
/// <param name="device">The <see cref="ID3D11Device"/> instance.</param>
/// <param name="bindFlags">Flags specifying how the buffer will be bound to the pipeline.</param> /// <param name="bindFlags">Flags specifying how the buffer will be bound to the pipeline.</param>
/// <param name="data">Initial data used to initialize the buffer.</param> /// <param name="data">Initial data used to initialize the buffer.</param>
/// <param name="sizeInBytes">The size, in bytes, of the buffer. If 0 is specified, sizeof(T) * data.Length is used.</param> /// <param name="sizeInBytes">The size, in bytes, of the buffer. If 0 is specified, sizeof(T) * data.Length is used.</param>
@@ -87,4 +93,156 @@ public unsafe partial struct ID3D11Device
return buffer.Move(); return buffer.Move();
} }
} }
public ComPtr<ID3D11RenderTargetView> CreateRenderTargetView(
ID3D11Resource* resource,
RenderTargetViewDescription* description)
{
using ComPtr<ID3D11RenderTargetView> view = default;
CreateRenderTargetView(resource, description, view.GetAddressOf()).ThrowIfFailed();
return view.Move();
}
public ComPtr<ID3D11DepthStencilView> CreateDepthStencilView(
ID3D11Resource* resource,
DepthStencilViewDescription* description)
{
using ComPtr<ID3D11DepthStencilView> view = default;
CreateDepthStencilView(resource, description, view.GetAddressOf()).ThrowIfFailed();
return view.Move();
}
public ComPtr<ID3D11ShaderResourceView> CreateShaderResourceView(
ID3D11Resource* resource,
ShaderResourceViewDescription* description)
{
using ComPtr<ID3D11ShaderResourceView> view = default;
CreateShaderResourceView(resource, description, view.GetAddressOf()).ThrowIfFailed();
return view.Move();
}
public ComPtr<ID3D11UnorderedAccessView> CreateUnorderedAccessView(
ID3D11Resource* resource,
UnorderedAccessViewDescription* description)
{
using ComPtr<ID3D11UnorderedAccessView> view = default;
CreateUnorderedAccessView(resource, description, view.GetAddressOf()).ThrowIfFailed();
return view.Move();
}
public ComPtr<ID3D11BlendState> CreateBlendState(BlendDescription* description)
{
using ComPtr<ID3D11BlendState> state = default;
CreateBlendState(description, state.GetAddressOf()).ThrowIfFailed();
return state.Move();
}
public ComPtr<ID3D11BlendState> CreateBlendState(BlendDescription description)
{
using ComPtr<ID3D11BlendState> state = default;
CreateBlendState(&description, state.GetAddressOf()).ThrowIfFailed();
return state.Move();
}
public ComPtr<ID3D11DepthStencilState> CreateDepthStencilState(DepthStencilDescription* description)
{
using ComPtr<ID3D11DepthStencilState> state = default;
CreateDepthStencilState(description, state.GetAddressOf()).ThrowIfFailed();
return state.Move();
}
public ComPtr<ID3D11DepthStencilState> CreateDepthStencilState(DepthStencilDescription description)
{
using ComPtr<ID3D11DepthStencilState> state = default;
CreateDepthStencilState(&description, state.GetAddressOf()).ThrowIfFailed();
return state.Move();
}
public ComPtr<ID3D11RasterizerState> CreateRasterizerState(RasterizerDescription* description)
{
using ComPtr<ID3D11RasterizerState> state = default;
CreateRasterizerState(description, state.GetAddressOf()).ThrowIfFailed();
return state.Move();
}
public ComPtr<ID3D11RasterizerState> CreateRasterizerState(RasterizerDescription description)
{
using ComPtr<ID3D11RasterizerState> state = default;
CreateRasterizerState(&description, state.GetAddressOf()).ThrowIfFailed();
return state.Move();
}
public ComPtr<ID3D11SamplerState> CreateSamplerState(SamplerDescription* description)
{
using ComPtr<ID3D11SamplerState> state = default;
CreateSamplerState(description, state.GetAddressOf()).ThrowIfFailed();
return state.Move();
}
public ComPtr<ID3D11SamplerState> CreateSamplerState(SamplerDescription description)
{
using ComPtr<ID3D11SamplerState> state = default;
CreateSamplerState(&description, state.GetAddressOf()).ThrowIfFailed();
return state.Move();
}
public ComPtr<ID3D11Texture1D> CreateTexture1D(Texture1DDescription* description, SubresourceData* initialData = default)
{
using ComPtr<ID3D11Texture1D> texture = default;
CreateTexture1D(description, initialData, texture.GetAddressOf()).ThrowIfFailed();
return texture.Move();
}
public ComPtr<ID3D11Texture1D> CreateTexture1D(Texture1DDescription description, SubresourceData* initialData = default)
{
using ComPtr<ID3D11Texture1D> texture = default;
CreateTexture1D(&description, initialData, texture.GetAddressOf()).ThrowIfFailed();
return texture.Move();
}
public ComPtr<ID3D11Texture2D> CreateTexture2D(Texture2DDescription* description, SubresourceData* initialData = default)
{
using ComPtr<ID3D11Texture2D> texture = default;
CreateTexture2D(description, initialData, texture.GetAddressOf()).ThrowIfFailed();
return texture.Move();
}
public ComPtr<ID3D11Texture2D> CreateTexture2D(Texture2DDescription description, SubresourceData* initialData = default)
{
using ComPtr<ID3D11Texture2D> texture = default;
CreateTexture2D(&description, initialData, texture.GetAddressOf()).ThrowIfFailed();
return texture.Move();
}
public ComPtr<ID3D11Texture3D> CreateTexture3D(Texture3DDescription* description, SubresourceData* initialData = default)
{
using ComPtr<ID3D11Texture3D> texture = default;
CreateTexture3D(description, initialData, texture.GetAddressOf()).ThrowIfFailed();
return texture.Move();
}
public ComPtr<ID3D11Texture3D> CreateTexture3D(Texture3DDescription description, SubresourceData* initialData = default)
{
using ComPtr<ID3D11Texture3D> texture = default;
CreateTexture3D(&description, initialData, texture.GetAddressOf()).ThrowIfFailed();
return texture.Move();
}
} }

View File

@@ -0,0 +1,45 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
using static Win32.Graphics.Direct3D.Apis;
using static Win32.StringUtilities;
namespace Win32.Graphics.Direct3D11;
public unsafe partial struct ID3D11DeviceChild
{
public static Guid* D3DDebugObjectNameGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in WKPDID_D3DDebugObjectName));
/// <summary>
/// Gets or sets the debug-name for this object.
/// </summary>
public string? DebugName
{
get
{
sbyte* pname = stackalloc sbyte[1024];
uint size = 1024 - 1;
if (GetPrivateData(D3DDebugObjectNameGuid, &size, pname).Failure)
{
return string.Empty;
}
pname[size] = 0;
return GetString(pname);
}
set
{
if (string.IsNullOrEmpty(value))
{
SetPrivateData(D3DDebugObjectNameGuid, 0, null);
}
else
{
fixed (sbyte* valuePtr = value.GetUtf8Span())
{
SetPrivateData(D3DDebugObjectNameGuid, (uint)value.Length, valuePtr);
}
}
}
}
}

View File

@@ -0,0 +1,38 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
namespace Win32.Graphics.Direct3D11;
public unsafe partial struct ID3D11DeviceContext
{
public void RSSetViewport(float x, float y, float width, float height, float minDepth = 0.0f, float maxDepth = 1.0f)
{
var viewport = new Viewport(x, y, width, height, minDepth, maxDepth);
RSSetViewports(1, &viewport);
}
public void RSSetViewport(Viewport viewport)
{
RSSetViewports(1, &viewport);
}
public void RSSetScissorRect(int x, int y, int width, int height)
{
RawRect rawRect = new(x, y, x + width, y + height);
RSSetScissorRects(1, &rawRect);
}
public void RSSetScissorRect(RawRect rect)
{
RSSetScissorRects(1, &rect);
}
public ComPtr<ID3D11CommandList> FinishCommandList(bool RestoreDeferredContextState = false)
{
using ComPtr<ID3D11CommandList> commandList = default;
FinishCommandList(RestoreDeferredContextState, commandList.GetAddressOf()).ThrowIfFailed();
return commandList.Move();
}
}

View File

@@ -2,7 +2,6 @@
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information. // Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
// Copyright © Tanner Gooding and Contributors. Licensed under the MIT License (MIT). See License.md in the repository root for more information. // Copyright © Tanner Gooding and Contributors. Licensed under the MIT License (MIT). See License.md in the repository root for more information.
using System.Runtime.CompilerServices;
using System.Text; using System.Text;
using static Win32.UnsafeUtilities; using static Win32.UnsafeUtilities;

View File

@@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>netstandard2.0;net6.0;net7.0</TargetFrameworks> <TargetFrameworks>netstandard2.0;net6.0;net7.0</TargetFrameworks>
<Description>Windows API low level bindings.</Description> <Description>Windows API low level bindings.</Description>
<VersionPrefix>1.6.3</VersionPrefix> <VersionPrefix>1.6.4</VersionPrefix>
<VersionSuffix Condition="'$(VersionSuffix)' == ''"></VersionSuffix> <VersionSuffix Condition="'$(VersionSuffix)' == ''"></VersionSuffix>
<GenerateDocumentationFile>true</GenerateDocumentationFile> <GenerateDocumentationFile>true</GenerateDocumentationFile>
<EnablePreviewFeatures>True</EnablePreviewFeatures> <EnablePreviewFeatures>True</EnablePreviewFeatures>

View File

@@ -253,6 +253,7 @@ public static unsafe class Program
Texture2DDescription texture2DDesc = new(Format.D32Float, 256, 256, 1, 1, BindFlags.DepthStencil); Texture2DDescription texture2DDesc = new(Format.D32Float, 256, 256, 1, 1, BindFlags.DepthStencil);
tempDevice.Get()->CreateTexture2D(&texture2DDesc, null, depthStencilTexture.GetAddressOf()).ThrowIfFailed(); tempDevice.Get()->CreateTexture2D(&texture2DDesc, null, depthStencilTexture.GetAddressOf()).ThrowIfFailed();
depthStencilTexture.Get()->GetDesc(&texture2DDesc); depthStencilTexture.Get()->GetDesc(&texture2DDesc);
((ID3D11DeviceChild*)depthStencilTexture.Get())->DebugName = "CIAO";
tempDevice.Get()->CreateDepthStencilView((ID3D11Resource*)depthStencilTexture.Get(), null, depthStencilTextureView.GetAddressOf()).ThrowIfFailed(); tempDevice.Get()->CreateDepthStencilView((ID3D11Resource*)depthStencilTexture.Get(), null, depthStencilTextureView.GetAddressOf()).ThrowIfFailed();
} }