add some missing API functions
							parent
							
								
									799c4a0627
								
							
						
					
					
						commit
						add8c8ed40
					
				|  | @ -1 +1 @@ | ||||||
| Subproject commit 2e3871a03d99e413f84748e40bdb6c03df2ecd1c | Subproject commit fbed91bfd6f09ae7864193ae620363547382f2fc | ||||||
|  | @ -37,5 +37,22 @@ namespace Campari | ||||||
|                 ); |                 ); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         // NOTE: You want to wait on the device before calling this | ||||||
|  |         public unsafe void GetData<T>( | ||||||
|  |             T[] data, | ||||||
|  |             uint dataLengthInBytes | ||||||
|  |         ) where T : unmanaged | ||||||
|  |         { | ||||||
|  |             fixed (T* ptr = &data[0]) | ||||||
|  |             { | ||||||
|  |                 Refresh.Refresh_GetBufferData( | ||||||
|  |                     Device.Handle, | ||||||
|  |                     Handle, | ||||||
|  |                     (IntPtr)ptr, | ||||||
|  |                     dataLengthInBytes | ||||||
|  |                 ); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -62,6 +62,65 @@ namespace Campari | ||||||
| 
 | 
 | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         public void BindComputePipeline( | ||||||
|  |             ComputePipeline computePipeline | ||||||
|  |         ) { | ||||||
|  |             Refresh.Refresh_BindComputePipeline( | ||||||
|  |                 Device.Handle, | ||||||
|  |                 Handle, | ||||||
|  |                 computePipeline.Handle | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public unsafe uint PushComputeShaderParams<T>( | ||||||
|  |             params T[] uniforms | ||||||
|  |         ) where T : unmanaged  | ||||||
|  |         { | ||||||
|  |             fixed (T* ptr = &uniforms[0]) | ||||||
|  |             { | ||||||
|  |                 return Refresh.Refresh_PushComputeShaderParams( | ||||||
|  |                     Device.Handle, | ||||||
|  |                     Handle, | ||||||
|  |                     (IntPtr) ptr, | ||||||
|  |                     (uint) uniforms.Length | ||||||
|  |                 ); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public unsafe void BindComputeBuffers( | ||||||
|  |             params Buffer[] buffers | ||||||
|  |         ) { | ||||||
|  |             var bufferPtrs = stackalloc IntPtr[buffers.Length]; | ||||||
|  | 
 | ||||||
|  |             for (var i = 0; i < buffers.Length; i += 1) | ||||||
|  |             { | ||||||
|  |                 bufferPtrs[i] = buffers[i].Handle; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             Refresh.Refresh_BindComputeBuffers( | ||||||
|  |                 Device.Handle, | ||||||
|  |                 Handle, | ||||||
|  |                 (IntPtr) bufferPtrs | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public unsafe void BindComputeTextures( | ||||||
|  |             params Texture[] textures | ||||||
|  |         ) { | ||||||
|  |             var texturePtrs = stackalloc IntPtr[textures.Length]; | ||||||
|  | 
 | ||||||
|  |             for (var i = 0; i < textures.Length; i += 1) | ||||||
|  |             { | ||||||
|  |                 texturePtrs[i] = textures[i].Handle; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             Refresh.Refresh_BindComputeTextures( | ||||||
|  |                 Device.Handle, | ||||||
|  |                 Handle, | ||||||
|  |                 (IntPtr) texturePtrs | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         public void BindGraphicsPipeline( |         public void BindGraphicsPipeline( | ||||||
|             GraphicsPipeline graphicsPipeline |             GraphicsPipeline graphicsPipeline | ||||||
|         ) { |         ) { | ||||||
|  | @ -142,6 +201,31 @@ namespace Campari | ||||||
|             ); |             ); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         public unsafe void BindVertexSamplers( | ||||||
|  |             Texture[] textures, | ||||||
|  |             Sampler[] samplers | ||||||
|  |         ) { | ||||||
|  |             var texturePtrs = stackalloc IntPtr[textures.Length]; | ||||||
|  |             var samplerPtrs = stackalloc IntPtr[samplers.Length]; | ||||||
|  | 
 | ||||||
|  |             for (var i = 0; i < textures.Length; i += 1) | ||||||
|  |             { | ||||||
|  |                 texturePtrs[i] = textures[i].Handle; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             for (var i = 0; i < samplers.Length; i += 1) | ||||||
|  |             { | ||||||
|  |                 samplerPtrs[i] = samplers[i].Handle; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             Refresh.Refresh_BindVertexSamplers( | ||||||
|  |                 Device.Handle, | ||||||
|  |                 Handle, | ||||||
|  |                 (IntPtr) texturePtrs, | ||||||
|  |                 (IntPtr) samplerPtrs | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         public unsafe void BindFragmentSamplers( |         public unsafe void BindFragmentSamplers( | ||||||
|             Texture[] textures, |             Texture[] textures, | ||||||
|             Sampler[] samplers |             Sampler[] samplers | ||||||
|  | @ -167,6 +251,63 @@ namespace Campari | ||||||
|             ); |             ); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         public void Clear( | ||||||
|  |             ref Refresh.Rect clearRect, | ||||||
|  |             Refresh.ClearOptionsFlags clearOptions, | ||||||
|  |             ref Refresh.Color[] colors, | ||||||
|  |             float depth, | ||||||
|  |             int stencil | ||||||
|  |         ) { | ||||||
|  |             Refresh.Refresh_Clear( | ||||||
|  |                 Device.Handle, | ||||||
|  |                 Handle, | ||||||
|  |                 ref clearRect, | ||||||
|  |                 clearOptions, | ||||||
|  |                 ref colors, | ||||||
|  |                 (uint) colors.Length, | ||||||
|  |                 depth, | ||||||
|  |                 stencil | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void DrawInstancedPrimitives( | ||||||
|  |             uint baseVertex, | ||||||
|  |             uint startIndex, | ||||||
|  |             uint primitiveCount, | ||||||
|  |             uint instanceCount, | ||||||
|  |             uint vertexParamOffset, | ||||||
|  |             uint fragmentParamOffset | ||||||
|  |         ) { | ||||||
|  |             Refresh.Refresh_DrawInstancedPrimitives( | ||||||
|  |                 Device.Handle, | ||||||
|  |                 Handle, | ||||||
|  |                 baseVertex, | ||||||
|  |                 startIndex, | ||||||
|  |                 primitiveCount, | ||||||
|  |                 instanceCount, | ||||||
|  |                 vertexParamOffset, | ||||||
|  |                 fragmentParamOffset | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void DrawIndexedPrimitives( | ||||||
|  |             uint baseVertex, | ||||||
|  |             uint startIndex, | ||||||
|  |             uint primitiveCount, | ||||||
|  |             uint vertexParamOffset, | ||||||
|  |             uint fragmentParamOffset | ||||||
|  |         ) { | ||||||
|  |             Refresh.Refresh_DrawIndexedPrimitives( | ||||||
|  |                 Device.Handle, | ||||||
|  |                 Handle, | ||||||
|  |                 baseVertex, | ||||||
|  |                 startIndex, | ||||||
|  |                 primitiveCount, | ||||||
|  |                 vertexParamOffset, | ||||||
|  |                 fragmentParamOffset | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         public void DrawPrimitives( |         public void DrawPrimitives( | ||||||
|             uint vertexStart, |             uint vertexStart, | ||||||
|             uint primitiveCount, |             uint primitiveCount, | ||||||
|  | @ -191,17 +332,66 @@ namespace Campari | ||||||
|             ); |             ); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public void QueuePresent(ref TextureSlice textureSlice, ref Refresh.Rect rectangle, Refresh.Filter filter) |         public void QueuePresent( | ||||||
|         { |             ref TextureSlice textureSlice, | ||||||
|  |             ref Refresh.Rect destinationRectangle, | ||||||
|  |             Refresh.Filter filter | ||||||
|  |         ) { | ||||||
|             var refreshTextureSlice = textureSlice.ToRefreshTextureSlice(); |             var refreshTextureSlice = textureSlice.ToRefreshTextureSlice(); | ||||||
| 
 | 
 | ||||||
|             Refresh.Refresh_QueuePresent( |             Refresh.Refresh_QueuePresent( | ||||||
|                 Device.Handle, |                 Device.Handle, | ||||||
|                 Handle, |                 Handle, | ||||||
|                 ref refreshTextureSlice, |                 ref refreshTextureSlice, | ||||||
|                 ref rectangle, |                 ref destinationRectangle, | ||||||
|                 filter |                 filter | ||||||
|             ); |             ); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         public void QueuePresent( | ||||||
|  |             ref TextureSlice textureSlice, | ||||||
|  |             Refresh.Filter filter | ||||||
|  |         ) { | ||||||
|  |             var refreshTextureSlice = textureSlice.ToRefreshTextureSlice(); | ||||||
|  | 
 | ||||||
|  |             Refresh.Refresh_QueuePresent( | ||||||
|  |                 Device.Handle, | ||||||
|  |                 Handle, | ||||||
|  |                 ref refreshTextureSlice, | ||||||
|  |                 IntPtr.Zero, | ||||||
|  |                 filter | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void CopyTextureToTexture( | ||||||
|  |             ref TextureSlice sourceTextureSlice, | ||||||
|  |             ref TextureSlice destinationTextureSlice, | ||||||
|  |             Refresh.Filter filter | ||||||
|  |         ) { | ||||||
|  |             var sourceRefreshTextureSlice = sourceTextureSlice.ToRefreshTextureSlice(); | ||||||
|  |             var destRefreshTextureSlice = destinationTextureSlice.ToRefreshTextureSlice(); | ||||||
|  | 
 | ||||||
|  |             Refresh.Refresh_CopyTextureToTexture( | ||||||
|  |                 Device.Handle, | ||||||
|  |                 Handle, | ||||||
|  |                 ref sourceRefreshTextureSlice, | ||||||
|  |                 ref destRefreshTextureSlice, | ||||||
|  |                 filter | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void CopyTextureToBuffer( | ||||||
|  |             ref TextureSlice textureSlice, | ||||||
|  |             Buffer buffer | ||||||
|  |         ) { | ||||||
|  |             var refreshTextureSlice = textureSlice.ToRefreshTextureSlice(); | ||||||
|  | 
 | ||||||
|  |             Refresh.Refresh_CopyTextureToBuffer( | ||||||
|  |                 Device.Handle, | ||||||
|  |                 Handle, | ||||||
|  |                 ref refreshTextureSlice, | ||||||
|  |                 buffer.Handle | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,39 @@ | ||||||
|  | using RefreshCS; | ||||||
|  | using System; | ||||||
|  | 
 | ||||||
|  | namespace Campari | ||||||
|  | { | ||||||
|  |     public class ComputePipeline : GraphicsResource | ||||||
|  |     { | ||||||
|  |         protected override Action<IntPtr, IntPtr> QueueDestroyFunction => Refresh.Refresh_QueueDestroyComputePipeline; | ||||||
|  | 
 | ||||||
|  |         public unsafe ComputePipeline( | ||||||
|  |             GraphicsDevice device, | ||||||
|  |             ShaderStageState computeShaderState, | ||||||
|  |             uint bufferBindingCount, | ||||||
|  |             uint imageBindingCount | ||||||
|  |         ) : base(device) { | ||||||
|  |             var computePipelineLayoutCreateInfo = new Refresh.ComputePipelineLayoutCreateInfo | ||||||
|  |             { | ||||||
|  |                 bufferBindingCount = bufferBindingCount, | ||||||
|  |                 imageBindingCount = imageBindingCount | ||||||
|  |             }; | ||||||
|  | 
 | ||||||
|  |             var computePipelineCreateInfo = new Refresh.ComputePipelineCreateInfo | ||||||
|  |             { | ||||||
|  |                 pipelineLayoutCreateInfo = computePipelineLayoutCreateInfo, | ||||||
|  |                 computeShaderState = new Refresh.ShaderStageState | ||||||
|  |                 { | ||||||
|  |                     entryPointName = computeShaderState.EntryPointName, | ||||||
|  |                     shaderModule = computeShaderState.ShaderModule.Handle, | ||||||
|  |                     uniformBufferSize = computeShaderState.UniformBufferSize | ||||||
|  |                 } | ||||||
|  |             }; | ||||||
|  | 
 | ||||||
|  |             Handle = Refresh.Refresh_CreateComputePipeline( | ||||||
|  |                 device.Handle, | ||||||
|  |                 ref computePipelineCreateInfo | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -10,7 +10,7 @@ namespace Campari | ||||||
| 
 | 
 | ||||||
|         public bool IsDisposed { get; private set; } |         public bool IsDisposed { get; private set; } | ||||||
| 
 | 
 | ||||||
|         private Queue<CommandBuffer> commandBufferPool; |         private readonly Queue<CommandBuffer> commandBufferPool; | ||||||
| 
 | 
 | ||||||
|         public GraphicsDevice( |         public GraphicsDevice( | ||||||
|             IntPtr deviceWindowHandle, |             IntPtr deviceWindowHandle, | ||||||
|  | @ -73,6 +73,11 @@ namespace Campari | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         public void Wait() | ||||||
|  |         { | ||||||
|  |             Refresh.Refresh_Wait(Handle); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         protected virtual void Dispose(bool disposing) |         protected virtual void Dispose(bool disposing) | ||||||
|         { |         { | ||||||
|             if (!IsDisposed) |             if (!IsDisposed) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue