Compare commits

..

4 Commits

Author SHA1 Message Date
Caleb Cornett 16d2b922ce add IndirectDrawCommand struct 2023-01-04 12:08:56 -05:00
cosmonaut 1fb3e5adf0 update RefreshCS 2022-12-28 19:24:08 -08:00
TheSpydog 6f8858c8b7 RasterizerState / BlendFactor ABI break (#38)
Updates the APIs to match [this Refresh PR](MoonsideGames/Refresh#27).

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: MoonsideGames/MoonWorks#38
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2022-12-29 03:22:47 +00:00
TheSpydog f96298f991 Add validation checks for AcquireSwapchainTexture and BindVertexBuffers (#37)
This replaces the Refresh-side check for window claim status in AcquireSwapchainTexture, and adds validation to ensure that BindVertexBuffers is not called before BindGraphicsPipeline.

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: MoonsideGames/MoonWorks#37
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2022-12-29 03:18:36 +00:00
6 changed files with 51 additions and 9 deletions

@ -1 +1 @@
Subproject commit 2880ab39a323a8482331cf76f69d764f13ff2921 Subproject commit 9068263afcf5743ac8f2c023eb68610523feb905

View File

@ -847,6 +847,10 @@ namespace MoonWorks.Graphics
in BufferBinding bufferBinding, in BufferBinding bufferBinding,
uint firstBinding = 0 uint firstBinding = 0
) { ) {
#if DEBUG
AssertGraphicsPipelineBound();
#endif
var bufferPtrs = stackalloc IntPtr[1]; var bufferPtrs = stackalloc IntPtr[1];
var offsets = stackalloc ulong[1]; var offsets = stackalloc ulong[1];
@ -874,6 +878,10 @@ namespace MoonWorks.Graphics
in BufferBinding bufferBindingTwo, in BufferBinding bufferBindingTwo,
uint firstBinding = 0 uint firstBinding = 0
) { ) {
#if DEBUG
AssertGraphicsPipelineBound();
#endif
var bufferPtrs = stackalloc IntPtr[2]; var bufferPtrs = stackalloc IntPtr[2];
var offsets = stackalloc ulong[2]; var offsets = stackalloc ulong[2];
@ -906,6 +914,10 @@ namespace MoonWorks.Graphics
in BufferBinding bufferBindingThree, in BufferBinding bufferBindingThree,
uint firstBinding = 0 uint firstBinding = 0
) { ) {
#if DEBUG
AssertGraphicsPipelineBound();
#endif
var bufferPtrs = stackalloc IntPtr[3]; var bufferPtrs = stackalloc IntPtr[3];
var offsets = stackalloc ulong[3]; var offsets = stackalloc ulong[3];
@ -942,6 +954,10 @@ namespace MoonWorks.Graphics
in BufferBinding bufferBindingFour, in BufferBinding bufferBindingFour,
uint firstBinding = 0 uint firstBinding = 0
) { ) {
#if DEBUG
AssertGraphicsPipelineBound();
#endif
var bufferPtrs = stackalloc IntPtr[4]; var bufferPtrs = stackalloc IntPtr[4];
var offsets = stackalloc ulong[4]; var offsets = stackalloc ulong[4];
@ -974,6 +990,10 @@ namespace MoonWorks.Graphics
in Span<BufferBinding> bufferBindings, in Span<BufferBinding> bufferBindings,
uint firstBinding = 0 uint firstBinding = 0
) { ) {
#if DEBUG
AssertGraphicsPipelineBound();
#endif
var bufferPtrs = stackalloc IntPtr[bufferBindings.Length]; var bufferPtrs = stackalloc IntPtr[bufferBindings.Length];
var offsets = stackalloc ulong[bufferBindings.Length]; var offsets = stackalloc ulong[bufferBindings.Length];
@ -1623,6 +1643,13 @@ namespace MoonWorks.Graphics
public Texture AcquireSwapchainTexture( public Texture AcquireSwapchainTexture(
Window window Window window
) { ) {
#if DEBUG
if (!window.Claimed)
{
throw new System.InvalidOperationException("Cannot acquire swapchain texture, window has not been claimed!");
}
#endif
var texturePtr = Refresh.Refresh_AcquireSwapchainTexture( var texturePtr = Refresh.Refresh_AcquireSwapchainTexture(
Device.Handle, Device.Handle,
Handle, Handle,

View File

@ -221,11 +221,7 @@ namespace MoonWorks.Graphics
OneMinusDestinationAlpha, OneMinusDestinationAlpha,
ConstantColor, ConstantColor,
OneMinusConstantColor, OneMinusConstantColor,
SourceAlphaSaturate, SourceAlphaSaturate
SourceOneColor,
OneMinusSourceOneColor,
SourceOneAlpha,
OneMinusSourceOneAlpha
} }
[Flags] [Flags]

View File

@ -364,4 +364,25 @@ namespace MoonWorks.Graphics
BlendState = blendState; BlendState = blendState;
} }
} }
[StructLayout(LayoutKind.Sequential)]
public struct IndirectDrawCommand
{
public uint VertexCount;
public uint InstanceCount;
public uint FirstVertex;
public uint FirstInstance;
public IndirectDrawCommand(
uint vertexCount,
uint instanceCount,
uint firstVertex,
uint firstInstance
) {
VertexCount = vertexCount;
InstanceCount = instanceCount;
FirstVertex = firstVertex;
FirstInstance = firstInstance;
}
}
} }

View File

@ -14,7 +14,7 @@ namespace MoonWorks.Graphics
public GraphicsShaderInfo VertexShaderInfo { get; } public GraphicsShaderInfo VertexShaderInfo { get; }
public GraphicsShaderInfo FragmentShaderInfo { get; } public GraphicsShaderInfo FragmentShaderInfo { get; }
public SampleCount SampleCount { get; } public SampleCount SampleCount { get; }
#if DEBUG #if DEBUG
internal GraphicsPipelineAttachmentInfo AttachmentInfo { get; } internal GraphicsPipelineAttachmentInfo AttachmentInfo { get; }
@ -89,7 +89,6 @@ namespace MoonWorks.Graphics
refreshGraphicsPipelineCreateInfo.rasterizerState.depthBiasConstantFactor = rasterizerState.DepthBiasConstantFactor; refreshGraphicsPipelineCreateInfo.rasterizerState.depthBiasConstantFactor = rasterizerState.DepthBiasConstantFactor;
refreshGraphicsPipelineCreateInfo.rasterizerState.depthBiasEnable = Conversions.BoolToByte(rasterizerState.DepthBiasEnable); refreshGraphicsPipelineCreateInfo.rasterizerState.depthBiasEnable = Conversions.BoolToByte(rasterizerState.DepthBiasEnable);
refreshGraphicsPipelineCreateInfo.rasterizerState.depthBiasSlopeFactor = rasterizerState.DepthBiasSlopeFactor; refreshGraphicsPipelineCreateInfo.rasterizerState.depthBiasSlopeFactor = rasterizerState.DepthBiasSlopeFactor;
refreshGraphicsPipelineCreateInfo.rasterizerState.depthClampEnable = Conversions.BoolToByte(rasterizerState.DepthClampEnable);
refreshGraphicsPipelineCreateInfo.rasterizerState.fillMode = (Refresh.FillMode) rasterizerState.FillMode; refreshGraphicsPipelineCreateInfo.rasterizerState.fillMode = (Refresh.FillMode) rasterizerState.FillMode;
refreshGraphicsPipelineCreateInfo.rasterizerState.frontFace = (Refresh.FrontFace) rasterizerState.FrontFace; refreshGraphicsPipelineCreateInfo.rasterizerState.frontFace = (Refresh.FrontFace) rasterizerState.FrontFace;

View File

@ -29,7 +29,6 @@
/// Factor applied to a fragment's slope in depth bias calculations. Only applies if depth biasing is enabled. /// Factor applied to a fragment's slope in depth bias calculations. Only applies if depth biasing is enabled.
/// </summary> /// </summary>
public float DepthBiasSlopeFactor; public float DepthBiasSlopeFactor;
public bool DepthClampEnable;
/// <summary> /// <summary>
/// Specifies how triangles should be drawn. /// Specifies how triangles should be drawn.