From ad0b168c4794ee0377c825b0149a0d21bd856e43 Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Fri, 23 Feb 2024 00:05:44 -0800 Subject: [PATCH] proposed Refresh 2 changes --- RefreshCS.csproj | 1 - src/Refresh.cs | 422 +++++++++++++++++++++++++++++------------------ 2 files changed, 259 insertions(+), 164 deletions(-) diff --git a/RefreshCS.csproj b/RefreshCS.csproj index 88078d5..b524dd6 100644 --- a/RefreshCS.csproj +++ b/RefreshCS.csproj @@ -4,7 +4,6 @@ netstandard2.0 RefreshCS true - x64 diff --git a/src/Refresh.cs b/src/Refresh.cs index ccaefef..01c1db3 100644 --- a/src/Refresh.cs +++ b/src/Refresh.cs @@ -35,8 +35,8 @@ namespace RefreshCS /* Version */ - public const uint REFRESH_MAJOR_VERSION = 1; - public const uint REFRESH_MINOR_VERSION = 15; + public const uint REFRESH_MAJOR_VERSION = 2; + public const uint REFRESH_MINOR_VERSION = 0; public const uint REFRESH_PATCH_VERSION = 0; public const uint REFRESH_COMPILED_VERSION = ( @@ -308,6 +308,12 @@ namespace RefreshCS IntOpaqueWhite } + public enum SetDataOptions + { + Discard, + Overwrite + } + public enum Backend { DontCare, @@ -358,10 +364,31 @@ namespace RefreshCS public struct TextureSlice { public IntPtr texture; - public Rect rectangle; - public uint depth; - public uint layer; - public uint level; + public uint mipLevel; + public uint baseLayer; + public uint layerCount; + public uint x; + public uint y; + public uint z; + public uint w; + public uint h; + public uint d; + } + + [StructLayout(LayoutKind.Sequential)] + public struct BufferImageCopy + { + public uint bufferOffset; + public uint bufferStride; + public uint bufferImageHeight; + } + + [StructLayout(LayoutKind.Sequential)] + public struct BufferCopy + { + public uint srcOffset; + public uint dstOffset; + public uint size; } [StructLayout(LayoutKind.Sequential)] @@ -469,7 +496,7 @@ namespace RefreshCS public IntPtr shaderModule; [MarshalAs(UnmanagedType.LPStr)] public string entryPointName; - public ulong uniformBufferSize; + public uint uniformBufferSize; public uint samplerBindingCount; } @@ -479,7 +506,7 @@ namespace RefreshCS public IntPtr shaderModule; [MarshalAs(UnmanagedType.LPStr)] public string entryPointName; - public ulong uniformBufferSize; + public uint uniformBufferSize; public uint bufferBindingCount; public uint imageBindingCount; } @@ -511,8 +538,7 @@ namespace RefreshCS public CompareOp compareOp; public byte depthBoundsTestEnable; public byte stencilTestEnable; - public StencilOpState frontStencilState; - public StencilOpState backStencilState; + public StencilOpState stencilState; public float minDepthBounds; public float maxDepthBounds; } @@ -599,64 +625,7 @@ namespace RefreshCS [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] public static extern void Refresh_DestroyDevice(IntPtr device); - /* Drawing */ - - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern void Refresh_DrawInstancedPrimitives( - IntPtr device, - IntPtr commandBuffer, - uint baseVertex, - uint startIndex, - uint primitiveCount, - uint instanceCount, - uint vertexParamOffset, - uint fragmentParamOffset - ); - - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern void Refresh_DrawIndexedPrimitives( - IntPtr device, - IntPtr commandBuffer, - uint baseVertex, - uint startIndex, - uint primitiveCount, - uint vertexParamOffset, - uint fragmentParamOffset - ); - - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern void Refresh_DrawPrimitives( - IntPtr device, - IntPtr commandBuffer, - uint vertexStart, - uint primitiveCount, - uint vertexParamOffset, - uint fragmentParamOffset - ); - - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern void Refresh_DrawPrimitivesIndirect( - IntPtr device, - IntPtr commandBuffer, - IntPtr buffer, - uint offsetInBytes, - uint drawCount, - uint stride, - uint vertexParamOffset, - uint fragmentParamOffset - ); - - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern void Refresh_DispatchCompute( - IntPtr device, - IntPtr commandBuffer, - uint groupCountX, - uint groupCountY, - uint groupCountZ, - uint computeParamOffset - ); - - /* Creates */ + /* State Creation */ [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr Refresh_CreateComputePipeline( @@ -689,100 +658,16 @@ namespace RefreshCS ); [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr Refresh_CreateBuffer( + public static extern IntPtr Refresh_CreateGpuBuffer( IntPtr device, BufferUsageFlags usageFlags, uint sizeInBytes ); - /* Setters */ - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern void Refresh_SetTextureData( + public static extern IntPtr Refresh_CreateCpuBuffer( IntPtr device, - IntPtr commandBuffer, - in TextureSlice textureSlice, - IntPtr data, - uint dataLengthInBytes - ); - - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern void Refresh_SetTextureDataYUV( - IntPtr device, - IntPtr commandBuffer, - IntPtr y, - IntPtr u, - IntPtr v, - uint yWidth, - uint yHeight, - uint uvWidth, - uint uvHeight, - IntPtr yDataPtr, - IntPtr uDataPtr, - IntPtr vDataPtr, - uint yDataLength, - uint uvDataLength, - uint yStride, - uint uvStride - ); - - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern void Refresh_CopyTextureToTexture( - IntPtr device, - IntPtr commandBuffer, - in TextureSlice sourceTextureSlice, - in TextureSlice destinationTextureSlice, - Filter filter - ); - - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern void Refresh_CopyTextureToBuffer( - IntPtr device, - IntPtr commandBuffer, - in TextureSlice textureSlice, - IntPtr buffer - ); - - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern void Refresh_GetBufferData( - IntPtr device, - IntPtr buffer, - IntPtr data, - uint dataLengthInBytes - ); - - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern void Refresh_SetBufferData( - IntPtr device, - IntPtr commandBuffer, - IntPtr buffer, - uint offsetInBytes, - IntPtr data, - uint dataLengthInBytes - ); - - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern uint Refresh_PushVertexShaderUniforms( - IntPtr device, - IntPtr commandBuffer, - IntPtr data, - uint dataLengthInBytes - ); - - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern uint Refresh_PushFragmentShaderUniforms( - IntPtr device, - IntPtr commandBuffer, - IntPtr data, - uint dataLengthInBytes - ); - - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern uint Refresh_PushComputeShaderUniforms( - IntPtr device, - IntPtr commandBuffer, - IntPtr data, - uint dataLengthInBytes + uint sizeInBytes ); /* Disposal */ @@ -800,7 +685,13 @@ namespace RefreshCS ); [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern void Refresh_QueueDestroyBuffer( + public static extern void Refresh_QueueDestroyGpuBuffer( + IntPtr device, + IntPtr buffer + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_QueueDestroyCpuBuffer( IntPtr device, IntPtr buffer ); @@ -843,12 +734,6 @@ namespace RefreshCS DepthStencilAttachmentInfo* depthStencilAttachmentInfo /* can be NULL */ ); - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern void Refresh_EndRenderPass( - IntPtr device, - IntPtr commandBuffer - ); - [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] public static extern void Refresh_BindGraphicsPipeline( IntPtr device, @@ -905,6 +790,73 @@ namespace RefreshCS IntPtr pSamplers ); + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_PushVertexShaderUniforms( + IntPtr device, + IntPtr commandBuffer, + IntPtr data, + uint dataLengthInBytes + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_PushFragmentShaderUniforms( + IntPtr device, + IntPtr commandBuffer, + IntPtr data, + uint dataLengthInBytes + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_DrawInstancedPrimitives( + IntPtr device, + IntPtr commandBuffer, + uint baseVertex, + uint startIndex, + uint primitiveCount, + uint instanceCount + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_DrawIndexedPrimitives( + IntPtr device, + IntPtr commandBuffer, + uint baseVertex, + uint startIndex, + uint primitiveCount + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_DrawPrimitives( + IntPtr device, + IntPtr commandBuffer, + uint vertexStart, + uint primitiveCount + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_DrawPrimitivesIndirect( + IntPtr device, + IntPtr commandBuffer, + IntPtr buffer, + uint offsetInBytes, + uint drawCount, + uint stride + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_EndRenderPass( + IntPtr device, + IntPtr commandBuffer + ); + + /* Compute Pass */ + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_BeginComputePass( + IntPtr device, + IntPtr commandBuffer + ); + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] public static extern void Refresh_BindComputePipeline( IntPtr device, @@ -923,7 +875,142 @@ namespace RefreshCS public static extern void Refresh_BindComputeTextures( IntPtr device, IntPtr commandBuffer, - IntPtr pTextures + IntPtr pTextures, + IntPtr pLevels + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_PushComputeShaderUniforms( + IntPtr device, + IntPtr commandBuffer, + IntPtr data, + uint dataLengthInBytes + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_DispatchCompute( + IntPtr device, + IntPtr commandBuffer, + uint groupCountX, + uint groupCountY, + uint groupCountZ + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_EndComputePass( + IntPtr device, + IntPtr commandBuffer + ); + + /* CpuBuffer Set/Get */ + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr Refresh_SetData( + IntPtr device, + IntPtr data, + IntPtr cpuBuffer, + in BufferCopy copyParams, + SetDataOptions option + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_GetData( + IntPtr device, + IntPtr cpuBuffer, + IntPtr data, + in BufferCopy copyParams + ); + + /* Copy Pass */ + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_BeginCopyPass( + IntPtr device, + IntPtr commandBuffer + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_UploadToTexture( + IntPtr device, + IntPtr commandBuffer, + IntPtr cpuBuffer, + in TextureSlice textureSlice, + in BufferImageCopy copyParams + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_UploadToBuffer( + IntPtr device, + IntPtr commandBuffer, + IntPtr cpuBuffer, + IntPtr gpuBuffer, + in BufferCopy copyParams + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_DownloadFromTexture( + IntPtr device, + IntPtr commandBuffer, + in TextureSlice textureSlice, + IntPtr cpuBuffer, + in BufferImageCopy copyParams + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_DownloadFromBuffer( + IntPtr device, + IntPtr commandBuffer, + IntPtr gpuBuffer, + IntPtr cpuBuffer, + in BufferCopy copyParams + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_CopyTextureToTexture( + IntPtr device, + IntPtr commandBuffer, + in TextureSlice source, + in TextureSlice destination + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_CopyTextureToBuffer( + IntPtr device, + IntPtr commandBuffer, + in TextureSlice textureSlice, + IntPtr gpuBuffer, + in BufferImageCopy copyParams + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_CopyBufferToTexture( + IntPtr device, + IntPtr commandBuffer, + IntPtr gpuBuffer, + in TextureSlice textureSlice, + in BufferImageCopy bufferImageCopy + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_CopyBufferToBuffer( + IntPtr device, + IntPtr commandBuffer, + IntPtr source, + IntPtr destination, + in BufferCopy copyParams + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_GenerateMipmaps( + IntPtr device, + IntPtr commandBuffer, + IntPtr texture + ); + + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern void Refresh_EndCopyPass( + IntPtr device, + IntPtr commandBuffer ); /* Submission/Presentation */ @@ -1014,6 +1101,15 @@ namespace RefreshCS out int len ); + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + public static extern byte Refresh_Image_Info( + IntPtr bufferPtr, + int bufferLength, + out int w, + out int h, + out int len + ); + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] public static extern void Refresh_Image_Free(IntPtr mem);