Resource containers, new bindings API, WriteOptions #51

Merged
cosmonaut merged 16 commits from resource_containers into abi_break 2024-03-02 09:09:50 +00:00
4 changed files with 1698 additions and 1659 deletions

View File

@ -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. */

View File

@ -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
);
}

View File

@ -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