Resource containers, new bindings API, WriteOptions #51
			
				
			
		
		
		
	|  | @ -327,11 +327,17 @@ typedef enum Refresh_BorderColor | |||
| 	REFRESH_BORDERCOLOR_INT_OPAQUE_WHITE | ||||
| } Refresh_BorderColor; | ||||
| 
 | ||||
| typedef enum Refresh_SetDataOptions | ||||
| typedef enum Refresh_TransferOptions | ||||
| { | ||||
| 	REFRESH_SETDATAOPTIONS_SAFEDISCARD, | ||||
| 	REFRESH_SETDATAOPTIONS_OVERWRITE | ||||
| } Refresh_SetDataOptions; | ||||
| 	REFRESH_TRANSFEROPTIONS_SAFEDISCARD, | ||||
| 	REFRESH_TRANSFEROPTIONS_OVERWRITE | ||||
| } Refresh_TransferOptions; | ||||
| 
 | ||||
| typedef enum Refresh_WriteOptions | ||||
| { | ||||
| 	REFRESH_WRITEOPTIONS_SAFEDISCARD, | ||||
| 	REFRESH_WRITEOPTIONS_SAFEOVERWRITE | ||||
| } Refresh_WriteOptions; | ||||
| 
 | ||||
| typedef enum Refresh_Backend | ||||
| { | ||||
|  | @ -379,15 +385,19 @@ typedef struct Refresh_TextureSlice | |||
| { | ||||
| 	Refresh_Texture *texture; | ||||
| 	uint32_t mipLevel; | ||||
| 	uint32_t baseLayer; | ||||
| 	uint32_t layerCount; | ||||
| 	uint32_t layer; | ||||
| } Refresh_TextureSlice; | ||||
| 
 | ||||
| typedef struct Refresh_TextureRegion | ||||
| { | ||||
| 	Refresh_TextureSlice textureSlice; | ||||
| 	uint32_t x; | ||||
| 	uint32_t y; | ||||
| 	uint32_t z; | ||||
| 	uint32_t w; | ||||
| 	uint32_t h; | ||||
| 	uint32_t d; | ||||
| } Refresh_TextureSlice; | ||||
| } Refresh_TextureRegion; | ||||
| 
 | ||||
| typedef struct Refresh_BufferImageCopy | ||||
| { | ||||
|  | @ -489,6 +499,7 @@ typedef struct Refresh_TextureCreateInfo | |||
| 	uint32_t height; | ||||
| 	uint32_t depth; | ||||
| 	uint8_t isCube; | ||||
| 	uint32_t layerCount; | ||||
| 	uint32_t levelCount; | ||||
| 	Refresh_SampleCount sampleCount; | ||||
| 	Refresh_TextureFormat format; | ||||
|  | @ -572,30 +583,91 @@ typedef struct Refresh_GraphicsPipelineCreateInfo | |||
| 
 | ||||
| /* Render pass structures */ | ||||
| 
 | ||||
| /* These structures define how textures will be read/written in a render pass.
 | ||||
|  * | ||||
|  * loadOp: Determines what is done with the texture slice at the beginning of the render pass. | ||||
|  * | ||||
|  *   LOAD: | ||||
|  *     Loads the data currently in the texture slice. | ||||
|  * | ||||
|  *   CLEAR: | ||||
|  *     Clears the texture slice to a single color. | ||||
|  * | ||||
|  *   DONT_CARE: | ||||
|  *     The driver will do whatever it wants with the texture slice memory. | ||||
|  *     This is a good option if you know that every single pixel will be touched in the render pass. | ||||
|  * | ||||
|  * storeOp: Determines what is done with the texture slice at the end of the render pass. | ||||
|  * | ||||
|  *   STORE: | ||||
|  *     Stores the results of the render pass in the texture slice. | ||||
|  * | ||||
|  *   DONT_CARE: | ||||
|  *     The driver will do whatever it wants with the texture slice memory. | ||||
|  *     This is often a good option for depth/stencil textures. | ||||
|  * | ||||
|  * | ||||
|  * writeOption is ignored if loadOp is LOAD and is implicitly assumed to be SAFEOVERWRITE. | ||||
|  * Interleaving LOAD and SAFEDISCARD successively on the same texture (not slice!) is undefined behavior. | ||||
|  * | ||||
|  * writeOption: | ||||
|  *  SAFEDISCARD: | ||||
|  *    If this texture slice has been used in commands that have not completed, | ||||
|  *    this option will prevent a data dependency at the cost of increased memory usage. | ||||
|  *    You may NOT assume that any of the previous texture data is retained. | ||||
|  *    If the texture slice was not in use, this option is equivalent to SAFEOVERWRITE. | ||||
|  *    This is a good option to prevent stalls when frequently reusing a texture slice in rendering. | ||||
|  * | ||||
|  *  SAFEOVERWRITE: | ||||
|  *    Overwrites the data safely using a GPU memory barrier. | ||||
|  */ | ||||
| 
 | ||||
| typedef struct Refresh_ColorAttachmentInfo | ||||
| { | ||||
| 	Refresh_Texture *texture; /* We can't use TextureSlice because render passes take a single rectangle. */ | ||||
| 	uint32_t depth; | ||||
| 	uint32_t layer; | ||||
| 	uint32_t level; | ||||
| 	Refresh_Vec4 clearColor; /* Can be ignored by RenderPass */ | ||||
| 	Refresh_TextureSlice textureSlice; | ||||
| 	Refresh_Vec4 clearColor; /* Can be ignored by RenderPass if CLEAR is not used */ | ||||
| 	Refresh_LoadOp loadOp; | ||||
| 	Refresh_StoreOp storeOp; | ||||
| 	Refresh_WriteOptions writeOption; | ||||
| } Refresh_ColorAttachmentInfo; | ||||
| 
 | ||||
| typedef struct Refresh_DepthStencilAttachmentInfo | ||||
| { | ||||
| 	Refresh_Texture *texture; /* We can't use TextureSlice because render passes take a single rectangle. */ | ||||
| 	uint32_t depth; | ||||
| 	uint32_t layer; | ||||
| 	uint32_t level; | ||||
| 	Refresh_DepthStencilValue depthStencilClearValue; /* Can be ignored by RenderPass */ | ||||
| 	Refresh_TextureSlice textureSlice; | ||||
| 	Refresh_DepthStencilValue depthStencilClearValue; /* Can be ignored by RenderPass if CLEAR is not used */ | ||||
| 	Refresh_LoadOp loadOp; | ||||
| 	Refresh_StoreOp storeOp; | ||||
| 	Refresh_LoadOp stencilLoadOp; | ||||
| 	Refresh_StoreOp stencilStoreOp; | ||||
| 	Refresh_WriteOptions writeOption; | ||||
| } Refresh_DepthStencilAttachmentInfo; | ||||
| 
 | ||||
| /* Binding structs */ | ||||
| 
 | ||||
| typedef struct Refresh_BufferBinding | ||||
| { | ||||
| 	Refresh_GpuBuffer *gpuBuffer; | ||||
| 	uint32_t offset; | ||||
| } Refresh_BufferBinding; | ||||
| 
 | ||||
| typedef struct Refresh_TextureSamplerBinding | ||||
| { | ||||
| 	Refresh_Texture *texture; | ||||
| 	Refresh_Sampler *sampler; | ||||
| } Refresh_TextureSamplerBinding; | ||||
| 
 | ||||
| typedef struct Refresh_ComputeBufferBinding | ||||
| { | ||||
| 	Refresh_GpuBuffer *gpuBuffer; | ||||
| 	Refresh_WriteOptions writeOption; | ||||
| } Refresh_ComputeBufferBinding; | ||||
| 
 | ||||
| typedef struct Refresh_ComputeTextureBinding | ||||
| { | ||||
| 	Refresh_TextureSlice textureSlice; | ||||
| 	Refresh_WriteOptions writeOption; | ||||
| } Refresh_ComputeTextureBinding; | ||||
| 
 | ||||
| /* Functions */ | ||||
| 
 | ||||
| /* Logging */ | ||||
|  | @ -821,49 +893,43 @@ REFRESHAPI void Refresh_BindVertexBuffers( | |||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	uint32_t firstBinding, | ||||
| 	uint32_t bindingCount, | ||||
| 	Refresh_GpuBuffer **pBuffers, | ||||
| 	uint64_t *pOffsets | ||||
| 	Refresh_BufferBinding *pBindings | ||||
| ); | ||||
| 
 | ||||
| /* Binds an index buffer for use with subsequent draw calls. */ | ||||
| REFRESHAPI void Refresh_BindIndexBuffer( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_GpuBuffer *gpuBuffer, | ||||
| 	uint64_t offset, | ||||
| 	Refresh_BufferBinding *pBinding, | ||||
| 	Refresh_IndexElementSize indexElementSize | ||||
| ); | ||||
| 
 | ||||
| /* Sets textures/samplers for use with the currently bound vertex shader.
 | ||||
|  * | ||||
|  * NOTE: | ||||
|  * 		The length of the passed arrays must be equal to the number | ||||
|  * 		The length of the bindings array must be equal to the number | ||||
|  * 		of sampler bindings specified by the pipeline. | ||||
|  * | ||||
|  * textures:	A pointer to an array of textures. | ||||
|  * samplers:	A pointer to an array of samplers. | ||||
|  * pBindings:  A pointer to an array of TextureSamplerBindings. | ||||
|  */ | ||||
| REFRESHAPI void Refresh_BindVertexSamplers( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_Texture **pTextures, | ||||
| 	Refresh_Sampler **pSamplers | ||||
| 	Refresh_TextureSamplerBinding *pBindings | ||||
| ); | ||||
| 
 | ||||
| /* Sets textures/samplers for use with the currently bound fragment shader.
 | ||||
|  * | ||||
|  * NOTE: | ||||
|  *		The length of the passed arrays must be equal to the number | ||||
|  *		The length of the bindings array must be equal to the number | ||||
|  * 		of sampler bindings specified by the pipeline. | ||||
|  * | ||||
|  * textures: 	A pointer to an array of textures. | ||||
|  * samplers:	A pointer to an array of samplers. | ||||
|  * pBindings:  A pointer to an array of TextureSamplerBindings. | ||||
|  */ | ||||
| REFRESHAPI void Refresh_BindFragmentSamplers( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_Texture **pTextures, | ||||
| 	Refresh_Sampler **pSamplers | ||||
| 	Refresh_TextureSamplerBinding *pBindings | ||||
| ); | ||||
| 
 | ||||
| /* Pushes vertex shader uniforms to the device.
 | ||||
|  | @ -984,32 +1050,28 @@ REFRESHAPI void Refresh_BindComputePipeline( | |||
| 
 | ||||
| /* Binds buffers for use with the currently bound compute pipeline.
 | ||||
|  * | ||||
|  * pBuffers: An array of buffers to bind. | ||||
|  * pBindings: | ||||
|  *   An array of ComputeBufferBinding structs. | ||||
|  *   Length must be equal to the number of buffers | ||||
|  *   specified by the compute pipeline. | ||||
|  */ | ||||
| REFRESHAPI void Refresh_BindComputeBuffers( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_GpuBuffer **pBuffers | ||||
| 	Refresh_ComputeBufferBinding *pBindings | ||||
| ); | ||||
| 
 | ||||
| /* Binds textures for use with the currently bound compute pipeline.
 | ||||
|  * | ||||
|  * pTextures: An array of textures to bind. | ||||
|  * 	Length must be equal to the number of buffers | ||||
|  * 	specified by the compute pipeline. | ||||
|  * | ||||
|  * pLevels: An array of levels to bind, | ||||
|  *   corresponding to the indices in pTextures. | ||||
|  *   Length must be equal to the number of buffers | ||||
|  * pBindings: | ||||
|  *   An array of ComputeTextureBinding structs. | ||||
|  *   Length must be equal to the number of textures | ||||
|  *   specified by the compute pipeline. | ||||
|  */ | ||||
| REFRESHAPI void Refresh_BindComputeTextures( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_Texture **pTextures, | ||||
| 	uint32_t **pLevels | ||||
| 	Refresh_ComputeTextureBinding *pBindings | ||||
| ); | ||||
| 
 | ||||
| /* Pushes compute shader params to the device.
 | ||||
|  | @ -1053,27 +1115,29 @@ REFRESHAPI void Refresh_EndComputePass( | |||
| 
 | ||||
| /* Immediately copies data from a pointer into a TransferBuffer.
 | ||||
|  * | ||||
|  * option: | ||||
|  * transferOption: | ||||
|  *  SAFEDISCARD: | ||||
|  *    If this TransferBuffer has been used in a copy command that has not completed, | ||||
|  *    the issued copy commands will still be valid at the cost of increased memory usage. | ||||
|  *    Otherwise the data will overwrite. | ||||
|  *    If this TransferBuffer has been used in commands that have not completed, | ||||
|  *    the issued commands will still be valid at the cost of increased memory usage. | ||||
|  *    You may NOT assume that any of the previous data is retained. | ||||
|  *    If the TransferBuffer was not in use, this option is equivalent to OVERWRITE. | ||||
|  *    This is a good option to prevent stalls when frequently updating data. | ||||
|  *    It is not recommended to use this option with large TransferBuffers. | ||||
|  * | ||||
|  *  OVERWRITE: | ||||
|  *    Overwrites the data regardless of whether a copy has been issued. | ||||
|  *    Overwrites the data regardless of whether a command has been issued. | ||||
|  *    Use this option with great care, as it can cause data races to occur! | ||||
|  */ | ||||
| REFRESHAPI void Refresh_SetData( | ||||
| REFRESHAPI void Refresh_SetTransferData( | ||||
| 	Refresh_Device *device, | ||||
| 	void* data, | ||||
| 	Refresh_TransferBuffer *transferBuffer, | ||||
| 	Refresh_BufferCopy *copyParams, | ||||
| 	Refresh_SetDataOptions option | ||||
| 	Refresh_TransferOptions transferOption | ||||
| ); | ||||
| 
 | ||||
| /* Immediately copies data from a TransferBuffer into a pointer. */ | ||||
| REFRESHAPI void Refresh_GetData( | ||||
| REFRESHAPI void Refresh_GetTransferData( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_TransferBuffer *transferBuffer, | ||||
| 	void* data, | ||||
|  | @ -1093,13 +1157,28 @@ REFRESHAPI void Refresh_BeginCopyPass( | |||
|  * You MAY assume that the copy has finished for subsequent commands. | ||||
|  */ | ||||
| 
 | ||||
| /*
 | ||||
|  * writeOption: | ||||
|  *  SAFEDISCARD: | ||||
|  *    If the destination resource has been used in commands that have not completed, | ||||
|  *    this option will prevent a data dependency at the cost of increased memory usage. | ||||
|  *    You may NOT assume that any of the previous data is retained. | ||||
|  *    If the destination resource was not in use, this option is equivalent to SAFEOVERWRITE. | ||||
|  * 	  This is a good option to prevent stalls on resources with frequent updates. | ||||
|  *    It is not recommended to use this option with large resources. | ||||
|  * | ||||
|  *  SAFEOVERWRITE: | ||||
|  *    Overwrites the data safely using a GPU memory barrier. | ||||
|  */ | ||||
| 
 | ||||
| /* Uploads data from a TransferBuffer to a texture. */ | ||||
| REFRESHAPI void Refresh_UploadToTexture( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_TransferBuffer *transferBuffer, | ||||
| 	Refresh_TextureSlice *textureSlice, | ||||
| 	Refresh_BufferImageCopy *copyParams | ||||
| 	Refresh_TextureRegion *textureRegion, | ||||
| 	Refresh_BufferImageCopy *copyParams, | ||||
| 	Refresh_WriteOptions writeOption | ||||
| ); | ||||
| 
 | ||||
| /* Uploads data from a TransferBuffer to a GpuBuffer. */ | ||||
|  | @ -1108,7 +1187,8 @@ REFRESHAPI void Refresh_UploadToBuffer( | |||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_TransferBuffer *transferBuffer, | ||||
| 	Refresh_GpuBuffer *gpuBuffer, | ||||
| 	Refresh_BufferCopy *copyParams | ||||
| 	Refresh_BufferCopy *copyParams, | ||||
| 	Refresh_WriteOptions writeOption | ||||
| ); | ||||
| 
 | ||||
| /* GPU-to-CPU copies occur on the GPU timeline.
 | ||||
|  | @ -1117,13 +1197,28 @@ REFRESHAPI void Refresh_UploadToBuffer( | |||
|  * until the command buffer has finished execution. | ||||
|  */ | ||||
| 
 | ||||
| /*
 | ||||
|  * transferOption: | ||||
|  *  SAFEDISCARD: | ||||
|  *    If this TransferBuffer has been used in commands that have not completed, | ||||
|  *    the issued commands will still be valid at the cost of increased memory usage. | ||||
|  *    You may NOT assume that any of the previous data is retained. | ||||
|  *    If the TransferBuffer was not in use, this option is equivalent to OVERWRITE. | ||||
|  *    It is not recommended to use this option with large TransferBuffers. | ||||
|  * | ||||
|  *  OVERWRITE: | ||||
|  *    Overwrites the data regardless of whether a command has been issued. | ||||
|  *    Use this option with great care, as it can cause data races to occur! | ||||
|  */ | ||||
| 
 | ||||
| /* Downloads data from a texture to a TransferBuffer. */ | ||||
| REFRESHAPI void Refresh_DownloadFromTexture( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_TextureSlice *textureSlice, | ||||
| 	Refresh_TextureRegion *textureRegion, | ||||
| 	Refresh_TransferBuffer *transferBuffer, | ||||
| 	Refresh_BufferImageCopy *copyParams | ||||
| 	Refresh_BufferImageCopy *copyParams, | ||||
| 	Refresh_TransferOptions transferOption | ||||
| ); | ||||
| 
 | ||||
| /* Downloads data from a GpuBuffer object. */ | ||||
|  | @ -1132,28 +1227,45 @@ REFRESHAPI void Refresh_DownloadFromBuffer( | |||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_GpuBuffer *gpuBuffer, | ||||
| 	Refresh_TransferBuffer *transferBuffer, | ||||
| 	Refresh_BufferCopy *copyParams | ||||
| 	Refresh_BufferCopy *copyParams, | ||||
| 	Refresh_TransferOptions transferOption | ||||
| ); | ||||
| 
 | ||||
| /* GPU-to-GPU copies occur on the GPU timeline,
 | ||||
|  * and you may assume the copy has finished in subsequent commands. | ||||
|  */ | ||||
| 
 | ||||
| /*
 | ||||
|  * writeOption: | ||||
|  *  SAFEDISCARD: | ||||
|  *    If the destination resource has been used in commands that have not completed, | ||||
|  *    this option will prevent a data dependency at the cost of increased memory usage. | ||||
|  *    You may NOT assume that any of the previous data is retained. | ||||
|  *    If the destination resource was not in use, this option is equivalent to SAFEOVERWRITE. | ||||
|  * 	  This is a good option to prevent stalls on resources with frequent updates. | ||||
|  *    It is not recommended to use this option with large resources. | ||||
|  * | ||||
|  *  SAFEOVERWRITE: | ||||
|  *    Overwrites the data safely using a GPU memory barrier. | ||||
|  */ | ||||
| 
 | ||||
| /* Performs a texture-to-texture copy. */ | ||||
| REFRESHAPI void Refresh_CopyTextureToTexture( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_TextureSlice *source, | ||||
| 	Refresh_TextureSlice *destination | ||||
| 	Refresh_TextureRegion *source, | ||||
| 	Refresh_TextureRegion *destination, | ||||
| 	Refresh_WriteOptions writeOption | ||||
| ); | ||||
| 
 | ||||
| /* Copies image data from a texture slice into a buffer. */ | ||||
| REFRESHAPI void Refresh_CopyTextureToBuffer( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_TextureSlice *textureSlice, | ||||
| 	Refresh_TextureRegion *textureRegion, | ||||
| 	Refresh_GpuBuffer *gpuBuffer, | ||||
| 	Refresh_BufferImageCopy *copyParams | ||||
| 	Refresh_BufferImageCopy *copyParams, | ||||
| 	Refresh_WriteOptions writeOption | ||||
| ); | ||||
| 
 | ||||
| /* Copies data from a buffer to a texture slice. */ | ||||
|  | @ -1161,8 +1273,9 @@ REFRESHAPI void Refresh_CopyBufferToTexture( | |||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_GpuBuffer *gpuBuffer, | ||||
| 	Refresh_TextureSlice *textureSlice, | ||||
| 	Refresh_BufferImageCopy *copyParams | ||||
| 	Refresh_TextureRegion *textureRegion, | ||||
| 	Refresh_BufferImageCopy *copyParams, | ||||
| 	Refresh_WriteOptions writeOption | ||||
| ); | ||||
| 
 | ||||
| /* Copies data from a buffer to a buffer. */ | ||||
|  | @ -1171,7 +1284,8 @@ REFRESHAPI void Refresh_CopyBufferToBuffer( | |||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_GpuBuffer *source, | ||||
| 	Refresh_GpuBuffer *destination, | ||||
| 	Refresh_BufferCopy *copyParams | ||||
| 	Refresh_BufferCopy *copyParams, | ||||
| 	Refresh_WriteOptions writeOption | ||||
| ); | ||||
| 
 | ||||
| /* Generate mipmaps for the given texture. */ | ||||
|  |  | |||
							
								
								
									
										114
									
								
								src/Refresh.c
								
								
								
								
							
							
						
						
									
										114
									
								
								src/Refresh.c
								
								
								
								
							|  | @ -461,8 +461,7 @@ void Refresh_BindVertexBuffers( | |||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	uint32_t firstBinding, | ||||
| 	uint32_t bindingCount, | ||||
| 	Refresh_GpuBuffer **pBuffers, | ||||
| 	uint64_t *pOffsets | ||||
| 	Refresh_BufferBinding *pBindings | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->BindVertexBuffers( | ||||
|  | @ -470,24 +469,21 @@ void Refresh_BindVertexBuffers( | |||
| 		commandBuffer, | ||||
| 		firstBinding, | ||||
| 		bindingCount, | ||||
| 		pBuffers, | ||||
| 		pOffsets | ||||
| 		pBindings | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| void Refresh_BindIndexBuffer( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_GpuBuffer *gpuBuffer, | ||||
| 	uint64_t offset, | ||||
| 	Refresh_BufferBinding *pBinding, | ||||
| 	Refresh_IndexElementSize indexElementSize | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->BindIndexBuffer( | ||||
| 		device->driverData, | ||||
| 		commandBuffer, | ||||
| 		gpuBuffer, | ||||
| 		offset, | ||||
| 		pBinding, | ||||
| 		indexElementSize | ||||
| 	); | ||||
| } | ||||
|  | @ -495,30 +491,26 @@ void Refresh_BindIndexBuffer( | |||
| void Refresh_BindVertexSamplers( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_Texture **pTextures, | ||||
| 	Refresh_Sampler **pSamplers | ||||
| 	Refresh_TextureSamplerBinding *pBindings | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->BindVertexSamplers( | ||||
| 		device->driverData, | ||||
| 		commandBuffer, | ||||
| 		pTextures, | ||||
| 		pSamplers | ||||
| 		pBindings | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| void Refresh_BindFragmentSamplers( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_Texture **pTextures, | ||||
| 	Refresh_Sampler **pSamplers | ||||
| 	Refresh_TextureSamplerBinding *pBindings | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->BindFragmentSamplers( | ||||
| 		device->driverData, | ||||
| 		commandBuffer, | ||||
| 		pTextures, | ||||
| 		pSamplers | ||||
| 		pBindings | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
|  | @ -662,28 +654,26 @@ void Refresh_BindComputePipeline( | |||
| void Refresh_BindComputeBuffers( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_GpuBuffer **pBuffers | ||||
| 	Refresh_ComputeBufferBinding *pBindings | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->BindComputeBuffers( | ||||
| 		device->driverData, | ||||
| 		commandBuffer, | ||||
| 		pBuffers | ||||
| 		pBindings | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| void Refresh_BindComputeTextures( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_Texture **pTextures, | ||||
| 	uint32_t **pLevels | ||||
| 	Refresh_ComputeTextureBinding *pBindings | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->BindComputeTextures( | ||||
| 		device->driverData, | ||||
| 		commandBuffer, | ||||
| 		pTextures, | ||||
| 		pLevels | ||||
| 		pBindings | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
|  | @ -732,31 +722,31 @@ void Refresh_EndComputePass( | |||
| 
 | ||||
| /* TransferBuffer Set/Get */ | ||||
| 
 | ||||
| void Refresh_SetData( | ||||
| void Refresh_SetTransferData( | ||||
| 	Refresh_Device *device, | ||||
| 	void* data, | ||||
| 	Refresh_TransferBuffer *transferBuffer, | ||||
| 	Refresh_BufferCopy *copyParams, | ||||
| 	Refresh_SetDataOptions option | ||||
| 	Refresh_TransferOptions transferOption | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->SetData( | ||||
| 	device->SetTransferData( | ||||
| 		device->driverData, | ||||
| 		data, | ||||
| 		transferBuffer, | ||||
| 		copyParams, | ||||
| 		option | ||||
| 		transferOption | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| void Refresh_GetData( | ||||
| void Refresh_GetTransferData( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_TransferBuffer *transferBuffer, | ||||
| 	void* data, | ||||
| 	Refresh_BufferCopy *copyParams | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->GetData( | ||||
| 	device->GetTransferData( | ||||
| 		device->driverData, | ||||
| 		transferBuffer, | ||||
| 		data, | ||||
|  | @ -781,16 +771,18 @@ void Refresh_UploadToTexture( | |||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_TransferBuffer *transferBuffer, | ||||
| 	Refresh_TextureSlice *textureSlice, | ||||
| 	Refresh_BufferImageCopy *copyParams | ||||
| 	Refresh_TextureRegion *textureRegion, | ||||
| 	Refresh_BufferImageCopy *copyParams, | ||||
| 	Refresh_WriteOptions writeOption | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->UploadToTexture( | ||||
| 		device->driverData, | ||||
| 		commandBuffer, | ||||
| 		transferBuffer, | ||||
| 		textureSlice, | ||||
| 		copyParams | ||||
| 		textureRegion, | ||||
| 		copyParams, | ||||
| 		writeOption | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
|  | @ -799,7 +791,8 @@ void Refresh_UploadToBuffer( | |||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_TransferBuffer *transferBuffer, | ||||
| 	Refresh_GpuBuffer *gpuBuffer, | ||||
| 	Refresh_BufferCopy *copyParams | ||||
| 	Refresh_BufferCopy *copyParams, | ||||
| 	Refresh_WriteOptions writeOption | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->UploadToBuffer( | ||||
|  | @ -807,24 +800,27 @@ void Refresh_UploadToBuffer( | |||
| 		commandBuffer, | ||||
| 		transferBuffer, | ||||
| 		gpuBuffer, | ||||
| 		copyParams | ||||
| 		copyParams, | ||||
| 		writeOption | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| void Refresh_DownloadFromTexture( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_TextureSlice *textureSlice, | ||||
| 	Refresh_TextureRegion *textureRegion, | ||||
| 	Refresh_TransferBuffer *transferBuffer, | ||||
| 	Refresh_BufferImageCopy *copyParams | ||||
| 	Refresh_BufferImageCopy *copyParams, | ||||
| 	Refresh_TransferOptions transferOption | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->DownloadFromTexture( | ||||
| 		device->driverData, | ||||
| 		commandBuffer, | ||||
| 		textureSlice, | ||||
| 		textureRegion, | ||||
| 		transferBuffer, | ||||
| 		copyParams | ||||
| 		copyParams, | ||||
| 		transferOption | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
|  | @ -833,7 +829,8 @@ void Refresh_DownloadFromBuffer( | |||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_GpuBuffer *gpuBuffer, | ||||
| 	Refresh_TransferBuffer *transferBuffer, | ||||
| 	Refresh_BufferCopy *copyParams | ||||
| 	Refresh_BufferCopy *copyParams, | ||||
| 	Refresh_TransferOptions transferOption | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->DownloadFromBuffer( | ||||
|  | @ -841,39 +838,44 @@ void Refresh_DownloadFromBuffer( | |||
| 		commandBuffer, | ||||
| 		gpuBuffer, | ||||
| 		transferBuffer, | ||||
| 		copyParams | ||||
| 		copyParams, | ||||
| 		transferOption | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| void Refresh_CopyTextureToTexture( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_TextureSlice *sourceTextureSlice, | ||||
| 	Refresh_TextureSlice *destinationTextureSlice | ||||
| 	Refresh_TextureRegion *source, | ||||
| 	Refresh_TextureRegion *destination, | ||||
| 	Refresh_WriteOptions writeOption | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->CopyTextureToTexture( | ||||
| 		device->driverData, | ||||
| 		commandBuffer, | ||||
| 		sourceTextureSlice, | ||||
| 		destinationTextureSlice | ||||
| 		source, | ||||
| 		destination, | ||||
| 		writeOption | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| void Refresh_CopyTextureToBuffer( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_TextureSlice *textureSlice, | ||||
| 	Refresh_TextureRegion *textureRegion, | ||||
| 	Refresh_GpuBuffer *gpuBuffer, | ||||
| 	Refresh_BufferImageCopy *copyParameters | ||||
| 	Refresh_BufferImageCopy *copyParameters, | ||||
| 	Refresh_WriteOptions writeOption | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->CopyTextureToBuffer( | ||||
| 		device->driverData, | ||||
| 		commandBuffer, | ||||
| 		textureSlice, | ||||
| 		textureRegion, | ||||
| 		gpuBuffer, | ||||
| 		copyParameters | ||||
| 		copyParameters, | ||||
| 		writeOption | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
|  | @ -881,16 +883,18 @@ void Refresh_CopyBufferToTexture( | |||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_GpuBuffer *gpuBuffer, | ||||
| 	Refresh_TextureSlice *textureSlice, | ||||
| 	Refresh_BufferImageCopy *copyParams | ||||
| 	Refresh_TextureRegion *textureRegion, | ||||
| 	Refresh_BufferImageCopy *copyParams, | ||||
| 	Refresh_WriteOptions writeOption | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->CopyBufferToTexture( | ||||
| 		device->driverData, | ||||
| 		commandBuffer, | ||||
| 		gpuBuffer, | ||||
| 		textureSlice, | ||||
| 		copyParams | ||||
| 		textureRegion, | ||||
| 		copyParams, | ||||
| 		writeOption | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
|  | @ -899,7 +903,8 @@ void Refresh_CopyBufferToBuffer( | |||
| 	Refresh_CommandBuffer *commandBuffer, | ||||
| 	Refresh_GpuBuffer *source, | ||||
| 	Refresh_GpuBuffer *destination, | ||||
| 	Refresh_BufferCopy *copyParams | ||||
| 	Refresh_BufferCopy *copyParams, | ||||
| 	Refresh_WriteOptions writeOption | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->CopyBufferToBuffer( | ||||
|  | @ -907,7 +912,8 @@ void Refresh_CopyBufferToBuffer( | |||
| 		commandBuffer, | ||||
| 		source, | ||||
| 		destination, | ||||
| 		copyParams | ||||
| 		copyParams, | ||||
| 		writeOption | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -289,30 +289,26 @@ struct Refresh_Device | |||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		uint32_t firstBinding, | ||||
| 		uint32_t bindingCount, | ||||
| 		Refresh_GpuBuffer **pBuffers, | ||||
| 		uint64_t *pOffsets | ||||
| 		Refresh_BufferBinding *pBindings | ||||
| 	); | ||||
| 
 | ||||
| 	void (*BindIndexBuffer)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_GpuBuffer *gpuBuffer, | ||||
| 		uint64_t offset, | ||||
| 		Refresh_BufferBinding *pBinding, | ||||
| 		Refresh_IndexElementSize indexElementSize | ||||
| 	); | ||||
| 
 | ||||
| 	void (*BindVertexSamplers)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_Texture **pTextures, | ||||
| 		Refresh_Sampler **pSamplers | ||||
| 		Refresh_TextureSamplerBinding *pBindings | ||||
| 	); | ||||
| 
 | ||||
| 	void (*BindFragmentSamplers)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_Texture **pTextures, | ||||
| 		Refresh_Sampler **pSamplers | ||||
| 		Refresh_TextureSamplerBinding *pBindings | ||||
| 	); | ||||
| 
 | ||||
| 	void (*PushVertexShaderUniforms)( | ||||
|  | @ -383,14 +379,13 @@ struct Refresh_Device | |||
| 	void (*BindComputeBuffers)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_GpuBuffer **pBuffers | ||||
| 		Refresh_ComputeBufferBinding *pBindings | ||||
| 	); | ||||
| 
 | ||||
| 	void (*BindComputeTextures)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_Texture **pTextures, | ||||
| 		uint32_t **pLevels | ||||
| 		Refresh_ComputeTextureBinding *pBindings | ||||
| 	); | ||||
| 
 | ||||
| 	void (*PushComputeShaderUniforms)( | ||||
|  | @ -415,15 +410,15 @@ struct Refresh_Device | |||
| 
 | ||||
| 	/* TransferBuffer Set/Get */ | ||||
| 
 | ||||
| 	void (*SetData)( | ||||
| 	void (*SetTransferData)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		void* data, | ||||
| 		Refresh_TransferBuffer *transferBuffer, | ||||
| 		Refresh_BufferCopy *copyParams, | ||||
| 		Refresh_SetDataOptions option | ||||
| 		Refresh_TransferOptions transferOption | ||||
| 	); | ||||
| 
 | ||||
| 	void (*GetData)( | ||||
| 	void (*GetTransferData)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_TransferBuffer *transferBuffer, | ||||
| 		void* data, | ||||
|  | @ -441,8 +436,9 @@ struct Refresh_Device | |||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_TransferBuffer *transferBuffer, | ||||
| 		Refresh_TextureSlice *textureSlice, | ||||
| 		Refresh_BufferImageCopy *copyParams | ||||
| 		Refresh_TextureRegion *textureSlice, | ||||
| 		Refresh_BufferImageCopy *copyParams, | ||||
| 		Refresh_WriteOptions writeOption | ||||
| 	); | ||||
| 
 | ||||
| 	void (*UploadToBuffer)( | ||||
|  | @ -450,15 +446,17 @@ struct Refresh_Device | |||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_TransferBuffer *transferBuffer, | ||||
| 		Refresh_GpuBuffer *gpuBuffer, | ||||
| 		Refresh_BufferCopy *copyParams | ||||
| 		Refresh_BufferCopy *copyParams, | ||||
| 		Refresh_WriteOptions writeOption | ||||
| 	); | ||||
| 
 | ||||
| 	void (*DownloadFromTexture)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_TextureSlice *textureSlice, | ||||
| 		Refresh_TextureRegion *textureSlice, | ||||
| 		Refresh_TransferBuffer *transferBuffer, | ||||
| 		Refresh_BufferImageCopy *copyParams | ||||
| 		Refresh_BufferImageCopy *copyParams, | ||||
| 		Refresh_TransferOptions transferOption | ||||
| 	); | ||||
| 
 | ||||
| 	void (*DownloadFromBuffer)( | ||||
|  | @ -466,30 +464,34 @@ struct Refresh_Device | |||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_GpuBuffer *gpuBuffer, | ||||
| 		Refresh_TransferBuffer *transferBuffer, | ||||
| 		Refresh_BufferCopy *copyParams | ||||
| 		Refresh_BufferCopy *copyParams, | ||||
| 		Refresh_TransferOptions transferOption | ||||
| 	); | ||||
| 
 | ||||
| 	void (*CopyTextureToTexture)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_TextureSlice *source, | ||||
| 		Refresh_TextureSlice *destination | ||||
| 		Refresh_TextureRegion *source, | ||||
| 		Refresh_TextureRegion *destination, | ||||
| 		Refresh_WriteOptions writeOption | ||||
| 	); | ||||
| 
 | ||||
| 	void (*CopyTextureToBuffer)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_TextureSlice *textureSlice, | ||||
| 		Refresh_TextureRegion *textureSlice, | ||||
| 		Refresh_GpuBuffer *gpuBuffer, | ||||
| 		Refresh_BufferImageCopy *copyParams | ||||
| 		Refresh_BufferImageCopy *copyParams, | ||||
| 		Refresh_WriteOptions writeOption | ||||
| 	); | ||||
| 
 | ||||
| 	void (*CopyBufferToTexture)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_GpuBuffer *gpuBuffer, | ||||
| 		Refresh_TextureSlice *textureSlice, | ||||
| 		Refresh_BufferImageCopy *copyParams | ||||
| 		Refresh_TextureRegion *textureSlice, | ||||
| 		Refresh_BufferImageCopy *copyParams, | ||||
| 		Refresh_WriteOptions writeOption | ||||
| 	); | ||||
| 
 | ||||
| 	void (*CopyBufferToBuffer)( | ||||
|  | @ -497,7 +499,8 @@ struct Refresh_Device | |||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_GpuBuffer *source, | ||||
| 		Refresh_GpuBuffer *destination, | ||||
| 		Refresh_BufferCopy *copyParams | ||||
| 		Refresh_BufferCopy *copyParams, | ||||
| 		Refresh_WriteOptions writeOption | ||||
| 	); | ||||
| 
 | ||||
| 	void (*GenerateMipmaps)( | ||||
|  | @ -622,8 +625,8 @@ struct Refresh_Device | |||
| 	ASSIGN_DRIVER_FUNC(PushComputeShaderUniforms, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(DispatchCompute, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(EndComputePass, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(SetData, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(GetData, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(SetTransferData, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(GetTransferData, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(BeginCopyPass, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(UploadToTexture, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(UploadToBuffer, name) \ | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue