2022-03-02 19:10:28 +00:00
|
|
|
|
/* Refresh - XNA-inspired 3D Graphics Library with modern capabilities
|
2020-12-15 23:00:46 +00:00
|
|
|
|
*
|
|
|
|
|
* Copyright (c) 2020 Evan Hemsley
|
|
|
|
|
*
|
|
|
|
|
* This software is provided 'as-is', without any express or implied warranty.
|
|
|
|
|
* In no event will the authors be held liable for any damages arising from
|
|
|
|
|
* the use of this software.
|
|
|
|
|
*
|
|
|
|
|
* Permission is granted to anyone to use this software for any purpose,
|
|
|
|
|
* including commercial applications, and to alter it and redistribute it
|
|
|
|
|
* freely, subject to the following restrictions:
|
|
|
|
|
*
|
|
|
|
|
* 1. The origin of this software must not be misrepresented; you must not
|
|
|
|
|
* claim that you wrote the original software. If you use this software in a
|
|
|
|
|
* product, an acknowledgment in the product documentation would be
|
|
|
|
|
* appreciated but is not required.
|
|
|
|
|
*
|
|
|
|
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
|
|
|
* misrepresented as being the original software.
|
|
|
|
|
*
|
|
|
|
|
* 3. This notice may not be removed or altered from any source distribution.
|
|
|
|
|
*
|
|
|
|
|
* Evan "cosmonaut" Hemsley <evan@moonside.games>
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
2020-12-16 22:59:14 +00:00
|
|
|
|
#include <stddef.h>
|
|
|
|
|
|
2020-12-15 23:00:46 +00:00
|
|
|
|
#ifndef REFRESH_H
|
|
|
|
|
#define REFRESH_H
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
|
#define REFRESHAPI __declspec(dllexport)
|
|
|
|
|
#define REFRESHCALL __cdecl
|
|
|
|
|
#else
|
|
|
|
|
#define REFRESHAPI
|
|
|
|
|
#define REFRESHCALL
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/* -Wpedantic nameless union/struct silencing */
|
|
|
|
|
#ifndef REFRESHNAMELESS
|
|
|
|
|
#ifdef __GNUC__
|
|
|
|
|
#define REFRESHNAMELESS __extension__
|
|
|
|
|
#else
|
|
|
|
|
#define REFRESHNAMELESS
|
|
|
|
|
#endif /* __GNUC__ */
|
|
|
|
|
#endif /* REFRESHNAMELESS */
|
|
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
2022-03-04 01:31:33 +00:00
|
|
|
|
/* Version API */
|
|
|
|
|
|
|
|
|
|
#define REFRESH_MAJOR_VERSION 1
|
2023-09-19 06:12:01 +00:00
|
|
|
|
#define REFRESH_MINOR_VERSION 15
|
2024-01-16 06:34:31 +00:00
|
|
|
|
#define REFRESH_PATCH_VERSION 4
|
2022-03-04 01:31:33 +00:00
|
|
|
|
|
|
|
|
|
#define REFRESH_COMPILED_VERSION ( \
|
|
|
|
|
(REFRESH_MAJOR_VERSION * 100 * 100) + \
|
|
|
|
|
(REFRESH_MINOR_VERSION * 100) + \
|
|
|
|
|
(REFRESH_PATCH_VERSION) \
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
REFRESHAPI uint32_t Refresh_LinkedVersion(void);
|
|
|
|
|
|
2020-12-15 23:00:46 +00:00
|
|
|
|
/* Type Declarations */
|
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_Device Refresh_Device;
|
2024-02-12 08:04:02 +00:00
|
|
|
|
typedef struct Refresh_GpuBuffer Refresh_GpuBuffer;
|
2024-02-23 17:42:31 +00:00
|
|
|
|
typedef struct Refresh_TransferBuffer Refresh_TransferBuffer;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_Texture Refresh_Texture;
|
|
|
|
|
typedef struct Refresh_Sampler Refresh_Sampler;
|
|
|
|
|
typedef struct Refresh_ShaderModule Refresh_ShaderModule;
|
|
|
|
|
typedef struct Refresh_ComputePipeline Refresh_ComputePipeline;
|
|
|
|
|
typedef struct Refresh_GraphicsPipeline Refresh_GraphicsPipeline;
|
|
|
|
|
typedef struct Refresh_CommandBuffer Refresh_CommandBuffer;
|
2023-09-19 06:11:20 +00:00
|
|
|
|
typedef struct Refresh_Fence Refresh_Fence;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
|
|
|
|
|
typedef enum Refresh_PresentMode
|
2020-12-17 03:50:31 +00:00
|
|
|
|
{
|
|
|
|
|
REFRESH_PRESENTMODE_IMMEDIATE,
|
|
|
|
|
REFRESH_PRESENTMODE_MAILBOX,
|
|
|
|
|
REFRESH_PRESENTMODE_FIFO,
|
|
|
|
|
REFRESH_PRESENTMODE_FIFO_RELAXED
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_PresentMode;
|
2020-12-17 03:50:31 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_PrimitiveType
|
2020-12-16 02:29:26 +00:00
|
|
|
|
{
|
2022-02-25 21:42:11 +00:00
|
|
|
|
REFRESH_PRIMITIVETYPE_POINTLIST,
|
2020-12-16 02:29:26 +00:00
|
|
|
|
REFRESH_PRIMITIVETYPE_LINELIST,
|
|
|
|
|
REFRESH_PRIMITIVETYPE_LINESTRIP,
|
|
|
|
|
REFRESH_PRIMITIVETYPE_TRIANGLELIST,
|
2020-12-17 00:27:14 +00:00
|
|
|
|
REFRESH_PRIMITIVETYPE_TRIANGLESTRIP
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_PrimitiveType;
|
2020-12-16 02:29:26 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_LoadOp
|
2020-12-16 02:08:49 +00:00
|
|
|
|
{
|
2022-02-25 21:42:11 +00:00
|
|
|
|
REFRESH_LOADOP_LOAD,
|
|
|
|
|
REFRESH_LOADOP_CLEAR,
|
|
|
|
|
REFRESH_LOADOP_DONT_CARE
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_LoadOp;
|
2020-12-16 02:08:49 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_StoreOp
|
2020-12-16 02:08:49 +00:00
|
|
|
|
{
|
2022-02-25 21:42:11 +00:00
|
|
|
|
REFRESH_STOREOP_STORE,
|
|
|
|
|
REFRESH_STOREOP_DONT_CARE
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_StoreOp;
|
2020-12-15 23:00:46 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_IndexElementSize
|
2020-12-15 23:00:46 +00:00
|
|
|
|
{
|
2022-02-25 21:42:11 +00:00
|
|
|
|
REFRESH_INDEXELEMENTSIZE_16BIT,
|
|
|
|
|
REFRESH_INDEXELEMENTSIZE_32BIT
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_IndexElementSize;
|
2020-12-15 23:00:46 +00:00
|
|
|
|
|
2021-01-27 02:57:46 +00:00
|
|
|
|
typedef enum Refresh_TextureFormat
|
2021-01-03 22:53:12 +00:00
|
|
|
|
{
|
2022-09-13 20:51:41 +00:00
|
|
|
|
/* Unsigned Normalized Float Color Formats */
|
2022-02-25 21:42:11 +00:00
|
|
|
|
REFRESH_TEXTUREFORMAT_R8G8B8A8,
|
2022-03-02 06:33:57 +00:00
|
|
|
|
REFRESH_TEXTUREFORMAT_B8G8R8A8,
|
2022-02-25 21:42:11 +00:00
|
|
|
|
REFRESH_TEXTUREFORMAT_R5G6B5,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_A1R5G5B5,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_B4G4R4A4,
|
2022-09-13 20:51:41 +00:00
|
|
|
|
REFRESH_TEXTUREFORMAT_A2R10G10B10,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R16G16,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R16G16B16A16,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R8,
|
|
|
|
|
/* Compressed Unsigned Normalized Float Color Formats */
|
2022-02-25 21:42:11 +00:00
|
|
|
|
REFRESH_TEXTUREFORMAT_BC1,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_BC2,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_BC3,
|
2022-05-12 04:16:24 +00:00
|
|
|
|
REFRESH_TEXTUREFORMAT_BC7,
|
2022-09-13 20:51:41 +00:00
|
|
|
|
/* Signed Normalized Float Color Formats */
|
2022-02-25 21:42:11 +00:00
|
|
|
|
REFRESH_TEXTUREFORMAT_R8G8_SNORM,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R8G8B8A8_SNORM,
|
2022-09-13 20:51:41 +00:00
|
|
|
|
/* Signed Float Color Formats */
|
2022-02-25 21:42:11 +00:00
|
|
|
|
REFRESH_TEXTUREFORMAT_R16_SFLOAT,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R16G16_SFLOAT,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R16G16B16A16_SFLOAT,
|
2022-09-13 20:51:41 +00:00
|
|
|
|
REFRESH_TEXTUREFORMAT_R32_SFLOAT,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R32G32_SFLOAT,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R32G32B32A32_SFLOAT,
|
|
|
|
|
/* Unsigned Integer Color Formats */
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R8_UINT,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R8G8_UINT,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R8G8B8A8_UINT,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R16_UINT,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R16G16_UINT,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_R16G16B16A16_UINT,
|
2021-01-27 02:57:46 +00:00
|
|
|
|
/* Depth Formats */
|
|
|
|
|
REFRESH_TEXTUREFORMAT_D16_UNORM,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_D32_SFLOAT,
|
2022-02-25 21:42:11 +00:00
|
|
|
|
REFRESH_TEXTUREFORMAT_D16_UNORM_S8_UINT,
|
|
|
|
|
REFRESH_TEXTUREFORMAT_D32_SFLOAT_S8_UINT
|
2021-01-27 02:57:46 +00:00
|
|
|
|
} Refresh_TextureFormat;
|
2020-12-15 23:00:46 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_TextureUsageFlagBits
|
2020-12-28 20:15:17 +00:00
|
|
|
|
{
|
2021-01-27 02:57:46 +00:00
|
|
|
|
REFRESH_TEXTUREUSAGE_SAMPLER_BIT = 0x00000001,
|
|
|
|
|
REFRESH_TEXTUREUSAGE_COLOR_TARGET_BIT = 0x00000002,
|
2022-08-25 19:21:49 +00:00
|
|
|
|
REFRESH_TEXTUREUSAGE_DEPTH_STENCIL_TARGET_BIT = 0x00000004,
|
|
|
|
|
REFRESH_TEXTUREUSAGE_COMPUTE_BIT = 0X00000008
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_TextureUsageFlagBits;
|
2020-12-28 21:40:26 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef uint32_t Refresh_TextureUsageFlags;
|
2020-12-28 20:15:17 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_SampleCount
|
2020-12-17 08:19:02 +00:00
|
|
|
|
{
|
|
|
|
|
REFRESH_SAMPLECOUNT_1,
|
|
|
|
|
REFRESH_SAMPLECOUNT_2,
|
|
|
|
|
REFRESH_SAMPLECOUNT_4,
|
Miscellaneous API changes + more MSAA fixes (#26)
**Breaking API Changes**
* Removed `REFRESH_SAMPLECOUNT_16/32/64`, since hardware support for these sample counts is generally poor (and completely non-existent with MoltenVK and certain consoles).
* Removed unused `sampleCount` parameter from `Refresh_TextureCreateInfo`.
* Removed `sampleCount` parameter from `Refresh_ColorAttachmentDescription`. The existence of this parameter meant you had to sync up three different sample count values (render pass, pipeline, and color attachment description) whenever you wanted to use multisampling. However, Vulkan requires that all color attachments in a given pipeline _must_ match the pipeline's sample count anyway, so we can assume all color attachments will use the pipeline's sample count.
* Removed the `renderArea` parameter from `Refresh_BeginRenderPass()` since it didn't serve much practical purpose and slightly complicated things on the MoonWorks managed side.
**Behavior Changes**
* When creating a render pass or graphics pipeline, the requested multisample count will be converted into a sample count that's actually supported by the GPU. For example, if you request 8x MSAA on a device that only supports up to 4x MSAA, it will silently fall back to 4x MSAA.
* All color attachments are now forced to have an internal store op of `STORE`, even if `REFRESH_STORE_OP_DONTCARE` is specified. The one exception is internal multisample textures -- if `DONTCARE` is used, those textures will be discarded to save on bandwidth. (Their resolve textures will still be stored.)
* The RenderPass hashing logic was updated so that it would still work correctly with the removal of `Refresh_ColorAttachmentDescription.sampleCount`.
**Bug Fixes**
* Fixed bugs where multisampling logic wasn't kicking in for certain sample counts due to incorrect enum comparisons.
Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: https://gitea.moonside.games/MoonsideGames/Refresh/pulls/26
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2022-11-08 19:09:21 +00:00
|
|
|
|
REFRESH_SAMPLECOUNT_8
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_SampleCount;
|
2020-12-17 08:19:02 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_CubeMapFace
|
2020-12-15 23:00:46 +00:00
|
|
|
|
{
|
2022-02-25 21:42:11 +00:00
|
|
|
|
REFRESH_CUBEMAPFACE_POSITIVEX,
|
|
|
|
|
REFRESH_CUBEMAPFACE_NEGATIVEX,
|
|
|
|
|
REFRESH_CUBEMAPFACE_POSITIVEY,
|
|
|
|
|
REFRESH_CUBEMAPFACE_NEGATIVEY,
|
|
|
|
|
REFRESH_CUBEMAPFACE_POSITIVEZ,
|
|
|
|
|
REFRESH_CUBEMAPFACE_NEGATIVEZ
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_CubeMapFace;
|
2020-12-15 23:00:46 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_BufferUsageFlagBits
|
2020-12-31 04:39:47 +00:00
|
|
|
|
{
|
2022-08-25 19:21:49 +00:00
|
|
|
|
REFRESH_BUFFERUSAGE_VERTEX_BIT = 0x00000001,
|
|
|
|
|
REFRESH_BUFFERUSAGE_INDEX_BIT = 0x00000002,
|
|
|
|
|
REFRESH_BUFFERUSAGE_COMPUTE_BIT = 0x00000004,
|
|
|
|
|
REFRESH_BUFFERUSAGE_INDIRECT_BIT = 0x00000008
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_BufferUsageFlagBits;
|
2020-12-31 04:39:47 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef uint32_t Refresh_BufferUsageFlags;
|
2020-12-31 04:39:47 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_VertexElementFormat
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
2022-03-17 21:41:16 +00:00
|
|
|
|
REFRESH_VERTEXELEMENTFORMAT_UINT,
|
|
|
|
|
REFRESH_VERTEXELEMENTFORMAT_FLOAT,
|
2020-12-16 20:11:43 +00:00
|
|
|
|
REFRESH_VERTEXELEMENTFORMAT_VECTOR2,
|
|
|
|
|
REFRESH_VERTEXELEMENTFORMAT_VECTOR3,
|
|
|
|
|
REFRESH_VERTEXELEMENTFORMAT_VECTOR4,
|
|
|
|
|
REFRESH_VERTEXELEMENTFORMAT_COLOR,
|
|
|
|
|
REFRESH_VERTEXELEMENTFORMAT_BYTE4,
|
|
|
|
|
REFRESH_VERTEXELEMENTFORMAT_SHORT2,
|
|
|
|
|
REFRESH_VERTEXELEMENTFORMAT_SHORT4,
|
|
|
|
|
REFRESH_VERTEXELEMENTFORMAT_NORMALIZEDSHORT2,
|
|
|
|
|
REFRESH_VERTEXELEMENTFORMAT_NORMALIZEDSHORT4,
|
|
|
|
|
REFRESH_VERTEXELEMENTFORMAT_HALFVECTOR2,
|
|
|
|
|
REFRESH_VERTEXELEMENTFORMAT_HALFVECTOR4
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_VertexElementFormat;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_VertexInputRate
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
|
|
|
|
REFRESH_VERTEXINPUTRATE_VERTEX = 0,
|
|
|
|
|
REFRESH_VERTEXINPUTRATE_INSTANCE = 1
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_VertexInputRate;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_FillMode
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
|
|
|
|
REFRESH_FILLMODE_FILL,
|
2022-03-02 19:10:28 +00:00
|
|
|
|
REFRESH_FILLMODE_LINE
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_FillMode;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_CullMode
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
|
|
|
|
REFRESH_CULLMODE_NONE,
|
|
|
|
|
REFRESH_CULLMODE_FRONT,
|
2022-03-02 19:10:28 +00:00
|
|
|
|
REFRESH_CULLMODE_BACK
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_CullMode;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_FrontFace
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
|
|
|
|
REFRESH_FRONTFACE_COUNTER_CLOCKWISE,
|
|
|
|
|
REFRESH_FRONTFACE_CLOCKWISE
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_FrontFace;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_CompareOp
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
|
|
|
|
REFRESH_COMPAREOP_NEVER,
|
|
|
|
|
REFRESH_COMPAREOP_LESS,
|
|
|
|
|
REFRESH_COMPAREOP_EQUAL,
|
|
|
|
|
REFRESH_COMPAREOP_LESS_OR_EQUAL,
|
|
|
|
|
REFRESH_COMPAREOP_GREATER,
|
|
|
|
|
REFRESH_COMPAREOP_NOT_EQUAL,
|
|
|
|
|
REFRESH_COMPAREOP_GREATER_OR_EQUAL,
|
|
|
|
|
REFRESH_COMPAREOP_ALWAYS
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_CompareOp;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_StencilOp
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
|
|
|
|
REFRESH_STENCILOP_KEEP,
|
|
|
|
|
REFRESH_STENCILOP_ZERO,
|
|
|
|
|
REFRESH_STENCILOP_REPLACE,
|
|
|
|
|
REFRESH_STENCILOP_INCREMENT_AND_CLAMP,
|
|
|
|
|
REFRESH_STENCILOP_DECREMENT_AND_CLAMP,
|
|
|
|
|
REFRESH_STENCILOP_INVERT,
|
|
|
|
|
REFRESH_STENCILOP_INCREMENT_AND_WRAP,
|
|
|
|
|
REFRESH_STENCILOP_DECREMENT_AND_WRAP
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_StencilOp;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_BlendOp
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
2020-12-17 19:40:49 +00:00
|
|
|
|
REFRESH_BLENDOP_ADD,
|
|
|
|
|
REFRESH_BLENDOP_SUBTRACT,
|
|
|
|
|
REFRESH_BLENDOP_REVERSE_SUBTRACT,
|
|
|
|
|
REFRESH_BLENDOP_MIN,
|
|
|
|
|
REFRESH_BLENDOP_MAX
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_BlendOp;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_BlendFactor
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
2022-03-02 19:10:28 +00:00
|
|
|
|
REFRESH_BLENDFACTOR_ZERO,
|
|
|
|
|
REFRESH_BLENDFACTOR_ONE,
|
|
|
|
|
REFRESH_BLENDFACTOR_SRC_COLOR,
|
|
|
|
|
REFRESH_BLENDFACTOR_ONE_MINUS_SRC_COLOR,
|
|
|
|
|
REFRESH_BLENDFACTOR_DST_COLOR,
|
|
|
|
|
REFRESH_BLENDFACTOR_ONE_MINUS_DST_COLOR,
|
|
|
|
|
REFRESH_BLENDFACTOR_SRC_ALPHA,
|
|
|
|
|
REFRESH_BLENDFACTOR_ONE_MINUS_SRC_ALPHA,
|
|
|
|
|
REFRESH_BLENDFACTOR_DST_ALPHA,
|
|
|
|
|
REFRESH_BLENDFACTOR_ONE_MINUS_DST_ALPHA,
|
|
|
|
|
REFRESH_BLENDFACTOR_CONSTANT_COLOR,
|
|
|
|
|
REFRESH_BLENDFACTOR_ONE_MINUS_CONSTANT_COLOR,
|
2022-11-19 16:59:38 +00:00
|
|
|
|
REFRESH_BLENDFACTOR_SRC_ALPHA_SATURATE
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_BlendFactor;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_ColorComponentFlagBits
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
2022-02-25 21:42:11 +00:00
|
|
|
|
REFRESH_COLORCOMPONENT_R_BIT = 0x00000001,
|
|
|
|
|
REFRESH_COLORCOMPONENT_G_BIT = 0x00000002,
|
|
|
|
|
REFRESH_COLORCOMPONENT_B_BIT = 0x00000004,
|
|
|
|
|
REFRESH_COLORCOMPONENT_A_BIT = 0x00000008
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_ColorComponentFlagBits;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef uint32_t Refresh_ColorComponentFlags;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_Filter
|
2020-12-16 20:47:54 +00:00
|
|
|
|
{
|
2021-01-03 21:01:29 +00:00
|
|
|
|
REFRESH_FILTER_NEAREST,
|
2022-03-02 19:10:28 +00:00
|
|
|
|
REFRESH_FILTER_LINEAR
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_Filter;
|
2020-12-16 20:47:54 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_SamplerMipmapMode
|
2020-12-16 20:47:54 +00:00
|
|
|
|
{
|
|
|
|
|
REFRESH_SAMPLERMIPMAPMODE_NEAREST,
|
|
|
|
|
REFRESH_SAMPLERMIPMAPMODE_LINEAR
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_SamplerMipmapMode;
|
2020-12-16 20:47:54 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_SamplerAddressMode
|
2020-12-16 20:47:54 +00:00
|
|
|
|
{
|
|
|
|
|
REFRESH_SAMPLERADDRESSMODE_REPEAT,
|
|
|
|
|
REFRESH_SAMPLERADDRESSMODE_MIRRORED_REPEAT,
|
|
|
|
|
REFRESH_SAMPLERADDRESSMODE_CLAMP_TO_EDGE,
|
|
|
|
|
REFRESH_SAMPLERADDRESSMODE_CLAMP_TO_BORDER
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_SamplerAddressMode;
|
2020-12-16 20:47:54 +00:00
|
|
|
|
|
2021-01-05 23:53:16 +00:00
|
|
|
|
/* FIXME: we should probably make a library-level decision about color types */
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef enum Refresh_BorderColor
|
2020-12-16 20:47:54 +00:00
|
|
|
|
{
|
2022-03-02 19:10:28 +00:00
|
|
|
|
REFRESH_BORDERCOLOR_FLOAT_TRANSPARENT_BLACK,
|
|
|
|
|
REFRESH_BORDERCOLOR_INT_TRANSPARENT_BLACK,
|
|
|
|
|
REFRESH_BORDERCOLOR_FLOAT_OPAQUE_BLACK,
|
|
|
|
|
REFRESH_BORDERCOLOR_INT_OPAQUE_BLACK,
|
|
|
|
|
REFRESH_BORDERCOLOR_FLOAT_OPAQUE_WHITE,
|
|
|
|
|
REFRESH_BORDERCOLOR_INT_OPAQUE_WHITE
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_BorderColor;
|
2020-12-16 20:47:54 +00:00
|
|
|
|
|
2024-03-02 09:09:49 +00:00
|
|
|
|
typedef enum Refresh_TransferOptions
|
2024-02-18 04:21:52 +00:00
|
|
|
|
{
|
2024-03-02 09:09:49 +00:00
|
|
|
|
REFRESH_TRANSFEROPTIONS_SAFEDISCARD,
|
|
|
|
|
REFRESH_TRANSFEROPTIONS_OVERWRITE
|
|
|
|
|
} Refresh_TransferOptions;
|
|
|
|
|
|
|
|
|
|
typedef enum Refresh_WriteOptions
|
|
|
|
|
{
|
|
|
|
|
REFRESH_WRITEOPTIONS_SAFEDISCARD,
|
|
|
|
|
REFRESH_WRITEOPTIONS_SAFEOVERWRITE
|
|
|
|
|
} Refresh_WriteOptions;
|
2024-02-18 04:21:52 +00:00
|
|
|
|
|
2022-09-29 21:11:25 +00:00
|
|
|
|
typedef enum Refresh_Backend
|
|
|
|
|
{
|
|
|
|
|
REFRESH_BACKEND_DONTCARE,
|
|
|
|
|
REFRESH_BACKEND_VULKAN,
|
2023-09-23 01:44:20 +00:00
|
|
|
|
REFRESH_BACKEND_D3D11,
|
2022-09-29 21:11:25 +00:00
|
|
|
|
REFRESH_BACKEND_PS5,
|
|
|
|
|
REFRESH_BACKEND_INVALID
|
|
|
|
|
} Refresh_Backend;
|
|
|
|
|
|
2020-12-15 23:27:06 +00:00
|
|
|
|
/* Structures */
|
2020-12-15 23:00:46 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_DepthStencilValue
|
2020-12-16 21:28:06 +00:00
|
|
|
|
{
|
|
|
|
|
float depth;
|
|
|
|
|
uint32_t stencil;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_DepthStencilValue;
|
2020-12-16 21:28:06 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_Rect
|
2020-12-16 02:29:26 +00:00
|
|
|
|
{
|
|
|
|
|
int32_t x;
|
|
|
|
|
int32_t y;
|
|
|
|
|
int32_t w;
|
|
|
|
|
int32_t h;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_Rect;
|
2020-12-16 02:29:26 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_Vec4
|
2020-12-16 02:29:26 +00:00
|
|
|
|
{
|
|
|
|
|
float x;
|
|
|
|
|
float y;
|
|
|
|
|
float z;
|
|
|
|
|
float w;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_Vec4;
|
2020-12-16 02:29:26 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_Viewport
|
2020-12-16 02:29:26 +00:00
|
|
|
|
{
|
2020-12-18 00:39:25 +00:00
|
|
|
|
float x;
|
|
|
|
|
float y;
|
|
|
|
|
float w;
|
|
|
|
|
float h;
|
2020-12-16 02:29:26 +00:00
|
|
|
|
float minDepth;
|
|
|
|
|
float maxDepth;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_Viewport;
|
2020-12-16 02:29:26 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_TextureSlice
|
2020-12-19 00:39:03 +00:00
|
|
|
|
{
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_Texture *texture;
|
2024-02-12 08:04:02 +00:00
|
|
|
|
uint32_t mipLevel;
|
2024-03-02 09:09:49 +00:00
|
|
|
|
uint32_t layer;
|
|
|
|
|
} Refresh_TextureSlice;
|
|
|
|
|
|
|
|
|
|
typedef struct Refresh_TextureRegion
|
|
|
|
|
{
|
|
|
|
|
Refresh_TextureSlice textureSlice;
|
2024-02-12 08:04:02 +00:00
|
|
|
|
uint32_t x;
|
|
|
|
|
uint32_t y;
|
|
|
|
|
uint32_t z;
|
|
|
|
|
uint32_t w;
|
|
|
|
|
uint32_t h;
|
|
|
|
|
uint32_t d;
|
2024-03-02 09:09:49 +00:00
|
|
|
|
} Refresh_TextureRegion;
|
2020-12-19 00:39:03 +00:00
|
|
|
|
|
2024-02-12 08:04:02 +00:00
|
|
|
|
typedef struct Refresh_BufferImageCopy
|
|
|
|
|
{
|
|
|
|
|
uint32_t bufferOffset;
|
|
|
|
|
uint32_t bufferStride;
|
|
|
|
|
uint32_t bufferImageHeight;
|
|
|
|
|
} Refresh_BufferImageCopy;
|
|
|
|
|
|
|
|
|
|
typedef struct Refresh_BufferCopy
|
|
|
|
|
{
|
|
|
|
|
uint32_t srcOffset;
|
|
|
|
|
uint32_t dstOffset;
|
|
|
|
|
uint32_t size;
|
|
|
|
|
} Refresh_BufferCopy;
|
|
|
|
|
|
2023-01-04 18:44:02 +00:00
|
|
|
|
typedef struct Refresh_IndirectDrawCommand
|
|
|
|
|
{
|
|
|
|
|
uint32_t vertexCount;
|
|
|
|
|
uint32_t instanceCount;
|
|
|
|
|
uint32_t firstVertex;
|
|
|
|
|
uint32_t firstInstance;
|
|
|
|
|
} Refresh_IndirectDrawCommand;
|
|
|
|
|
|
2020-12-16 20:11:43 +00:00
|
|
|
|
/* State structures */
|
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_SamplerStateCreateInfo
|
2020-12-16 20:47:54 +00:00
|
|
|
|
{
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_Filter minFilter;
|
|
|
|
|
Refresh_Filter magFilter;
|
|
|
|
|
Refresh_SamplerMipmapMode mipmapMode;
|
|
|
|
|
Refresh_SamplerAddressMode addressModeU;
|
|
|
|
|
Refresh_SamplerAddressMode addressModeV;
|
|
|
|
|
Refresh_SamplerAddressMode addressModeW;
|
2020-12-16 20:47:54 +00:00
|
|
|
|
float mipLodBias;
|
|
|
|
|
uint8_t anisotropyEnable;
|
|
|
|
|
float maxAnisotropy;
|
|
|
|
|
uint8_t compareEnable;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_CompareOp compareOp;
|
2020-12-16 20:47:54 +00:00
|
|
|
|
float minLod;
|
|
|
|
|
float maxLod;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_BorderColor borderColor;
|
|
|
|
|
} Refresh_SamplerStateCreateInfo;
|
2020-12-16 20:47:54 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_VertexBinding
|
2020-12-16 02:29:26 +00:00
|
|
|
|
{
|
2020-12-16 20:11:43 +00:00
|
|
|
|
uint32_t binding;
|
|
|
|
|
uint32_t stride;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_VertexInputRate inputRate;
|
|
|
|
|
} Refresh_VertexBinding;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_VertexAttribute
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
|
|
|
|
uint32_t location;
|
|
|
|
|
uint32_t binding;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_VertexElementFormat format;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
uint32_t offset;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_VertexAttribute;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_VertexInputState
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
2021-01-05 23:00:51 +00:00
|
|
|
|
const Refresh_VertexBinding *vertexBindings;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
uint32_t vertexBindingCount;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
const Refresh_VertexAttribute *vertexAttributes;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
uint32_t vertexAttributeCount;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_VertexInputState;
|
2020-12-16 02:29:26 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_StencilOpState
|
2020-12-15 23:00:46 +00:00
|
|
|
|
{
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_StencilOp failOp;
|
|
|
|
|
Refresh_StencilOp passOp;
|
|
|
|
|
Refresh_StencilOp depthFailOp;
|
|
|
|
|
Refresh_CompareOp compareOp;
|
|
|
|
|
} Refresh_StencilOpState;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2022-02-26 01:37:42 +00:00
|
|
|
|
typedef struct Refresh_ColorAttachmentBlendState
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
|
|
|
|
uint8_t blendEnable;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_BlendFactor srcColorBlendFactor;
|
|
|
|
|
Refresh_BlendFactor dstColorBlendFactor;
|
|
|
|
|
Refresh_BlendOp colorBlendOp;
|
|
|
|
|
Refresh_BlendFactor srcAlphaBlendFactor;
|
|
|
|
|
Refresh_BlendFactor dstAlphaBlendFactor;
|
|
|
|
|
Refresh_BlendOp alphaBlendOp;
|
|
|
|
|
Refresh_ColorComponentFlags colorWriteMask;
|
2022-02-26 01:37:42 +00:00
|
|
|
|
} Refresh_ColorAttachmentBlendState;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
|
|
|
|
|
typedef struct Refresh_ShaderModuleCreateInfo
|
2020-12-16 22:59:14 +00:00
|
|
|
|
{
|
|
|
|
|
size_t codeSize;
|
|
|
|
|
const uint32_t *byteCode;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_ShaderModuleCreateInfo;
|
2020-12-16 22:59:14 +00:00
|
|
|
|
|
2021-01-14 09:52:45 +00:00
|
|
|
|
typedef struct Refresh_TextureCreateInfo
|
|
|
|
|
{
|
|
|
|
|
uint32_t width;
|
|
|
|
|
uint32_t height;
|
|
|
|
|
uint32_t depth;
|
2021-01-14 10:05:21 +00:00
|
|
|
|
uint8_t isCube;
|
2024-03-02 09:09:49 +00:00
|
|
|
|
uint32_t layerCount;
|
2021-01-14 09:52:45 +00:00
|
|
|
|
uint32_t levelCount;
|
2023-01-30 18:22:16 +00:00
|
|
|
|
Refresh_SampleCount sampleCount;
|
2021-01-27 02:57:46 +00:00
|
|
|
|
Refresh_TextureFormat format;
|
2021-01-14 09:52:45 +00:00
|
|
|
|
Refresh_TextureUsageFlags usageFlags;
|
|
|
|
|
} Refresh_TextureCreateInfo;
|
|
|
|
|
|
2020-12-16 20:11:43 +00:00
|
|
|
|
/* Pipeline state structures */
|
|
|
|
|
|
2022-03-02 19:22:52 +00:00
|
|
|
|
typedef struct Refresh_GraphicsShaderInfo
|
2020-12-16 22:53:34 +00:00
|
|
|
|
{
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_ShaderModule *shaderModule;
|
2020-12-16 22:53:34 +00:00
|
|
|
|
const char* entryPointName;
|
2024-02-12 19:00:06 +00:00
|
|
|
|
uint32_t uniformBufferSize;
|
2022-03-02 19:10:28 +00:00
|
|
|
|
uint32_t samplerBindingCount;
|
2022-03-02 19:22:52 +00:00
|
|
|
|
} Refresh_GraphicsShaderInfo;
|
|
|
|
|
|
|
|
|
|
typedef struct Refresh_ComputeShaderInfo
|
|
|
|
|
{
|
|
|
|
|
Refresh_ShaderModule* shaderModule;
|
|
|
|
|
const char* entryPointName;
|
2024-02-12 19:00:06 +00:00
|
|
|
|
uint32_t uniformBufferSize;
|
2022-03-02 19:22:52 +00:00
|
|
|
|
uint32_t bufferBindingCount;
|
|
|
|
|
uint32_t imageBindingCount;
|
|
|
|
|
} Refresh_ComputeShaderInfo;
|
2020-12-16 22:53:34 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_RasterizerState
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_FillMode fillMode;
|
|
|
|
|
Refresh_CullMode cullMode;
|
|
|
|
|
Refresh_FrontFace frontFace;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
uint8_t depthBiasEnable;
|
|
|
|
|
float depthBiasConstantFactor;
|
|
|
|
|
float depthBiasClamp;
|
|
|
|
|
float depthBiasSlopeFactor;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_RasterizerState;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_MultisampleState
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_SampleCount multisampleCount;
|
2021-01-06 02:05:01 +00:00
|
|
|
|
uint32_t sampleMask;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_MultisampleState;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_DepthStencilState
|
2020-12-16 20:11:43 +00:00
|
|
|
|
{
|
|
|
|
|
uint8_t depthTestEnable;
|
|
|
|
|
uint8_t depthWriteEnable;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_CompareOp compareOp;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
uint8_t depthBoundsTestEnable;
|
|
|
|
|
uint8_t stencilTestEnable;
|
2024-03-03 07:00:44 +00:00
|
|
|
|
Refresh_StencilOpState backStencilState;
|
|
|
|
|
Refresh_StencilOpState frontStencilState;
|
|
|
|
|
uint32_t compareMask;
|
|
|
|
|
uint32_t writeMask;
|
|
|
|
|
uint32_t reference;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
float minDepthBounds;
|
|
|
|
|
float maxDepthBounds;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_DepthStencilState;
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2022-02-24 22:01:37 +00:00
|
|
|
|
typedef struct Refresh_ColorAttachmentDescription
|
|
|
|
|
{
|
|
|
|
|
Refresh_TextureFormat format;
|
2022-02-26 01:37:42 +00:00
|
|
|
|
Refresh_ColorAttachmentBlendState blendState;
|
2022-02-24 22:01:37 +00:00
|
|
|
|
} Refresh_ColorAttachmentDescription;
|
|
|
|
|
|
|
|
|
|
typedef struct Refresh_GraphicsPipelineAttachmentInfo
|
|
|
|
|
{
|
2022-02-26 01:37:42 +00:00
|
|
|
|
Refresh_ColorAttachmentDescription *colorAttachmentDescriptions;
|
2022-02-24 22:01:37 +00:00
|
|
|
|
uint32_t colorAttachmentCount;
|
|
|
|
|
uint8_t hasDepthStencilAttachment;
|
|
|
|
|
Refresh_TextureFormat depthStencilFormat;
|
|
|
|
|
} Refresh_GraphicsPipelineAttachmentInfo;
|
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef struct Refresh_GraphicsPipelineCreateInfo
|
2020-12-16 22:53:34 +00:00
|
|
|
|
{
|
2022-03-02 19:22:52 +00:00
|
|
|
|
Refresh_GraphicsShaderInfo vertexShaderInfo;
|
|
|
|
|
Refresh_GraphicsShaderInfo fragmentShaderInfo;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_VertexInputState vertexInputState;
|
2021-01-14 05:06:20 +00:00
|
|
|
|
Refresh_PrimitiveType primitiveType;
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_RasterizerState rasterizerState;
|
|
|
|
|
Refresh_MultisampleState multisampleState;
|
|
|
|
|
Refresh_DepthStencilState depthStencilState;
|
2022-02-24 22:01:37 +00:00
|
|
|
|
Refresh_GraphicsPipelineAttachmentInfo attachmentInfo;
|
2022-03-02 19:10:28 +00:00
|
|
|
|
float blendConstants[4];
|
2021-01-05 23:00:51 +00:00
|
|
|
|
} Refresh_GraphicsPipelineCreateInfo;
|
|
|
|
|
|
2022-02-24 22:01:37 +00:00
|
|
|
|
/* Render pass structures */
|
|
|
|
|
|
2024-03-02 09:09:49 +00:00
|
|
|
|
/* 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.
|
|
|
|
|
*/
|
|
|
|
|
|
2022-02-24 22:01:37 +00:00
|
|
|
|
typedef struct Refresh_ColorAttachmentInfo
|
|
|
|
|
{
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_TextureSlice textureSlice;
|
|
|
|
|
Refresh_Vec4 clearColor; /* Can be ignored by RenderPass if CLEAR is not used */
|
2022-02-24 22:01:37 +00:00
|
|
|
|
Refresh_LoadOp loadOp;
|
|
|
|
|
Refresh_StoreOp storeOp;
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_WriteOptions writeOption;
|
2022-02-24 22:01:37 +00:00
|
|
|
|
} Refresh_ColorAttachmentInfo;
|
|
|
|
|
|
|
|
|
|
typedef struct Refresh_DepthStencilAttachmentInfo
|
2020-12-16 21:28:06 +00:00
|
|
|
|
{
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_TextureSlice textureSlice;
|
|
|
|
|
Refresh_DepthStencilValue depthStencilClearValue; /* Can be ignored by RenderPass if CLEAR is not used */
|
2022-02-24 22:01:37 +00:00
|
|
|
|
Refresh_LoadOp loadOp;
|
|
|
|
|
Refresh_StoreOp storeOp;
|
|
|
|
|
Refresh_LoadOp stencilLoadOp;
|
|
|
|
|
Refresh_StoreOp stencilStoreOp;
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_WriteOptions writeOption;
|
2022-02-24 22:01:37 +00:00
|
|
|
|
} Refresh_DepthStencilAttachmentInfo;
|
2020-12-16 21:28:06 +00:00
|
|
|
|
|
2024-03-02 09:09:49 +00:00
|
|
|
|
/* 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;
|
|
|
|
|
|
2020-12-15 23:00:46 +00:00
|
|
|
|
/* Functions */
|
|
|
|
|
|
2020-12-17 02:38:22 +00:00
|
|
|
|
/* Logging */
|
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
typedef void (REFRESHCALL * Refresh_LogFunc)(const char *msg);
|
2020-12-17 02:38:22 +00:00
|
|
|
|
|
2021-01-06 00:07:42 +00:00
|
|
|
|
/* Reroutes Refresh's logging to custom logging functions.
|
|
|
|
|
*
|
|
|
|
|
* info: Basic logs that might be useful to have stored for support.
|
|
|
|
|
* warn: Something went wrong, but it's really just annoying, not fatal.
|
|
|
|
|
* error: You better have this stored somewhere because it's crashing now!
|
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI void Refresh_HookLogFunctions(
|
|
|
|
|
Refresh_LogFunc info,
|
|
|
|
|
Refresh_LogFunc warn,
|
|
|
|
|
Refresh_LogFunc error
|
|
|
|
|
);
|
|
|
|
|
|
2022-09-29 21:11:25 +00:00
|
|
|
|
/* Backend selection */
|
|
|
|
|
|
|
|
|
|
/* Select the graphics API backend that Refresh should use.
|
|
|
|
|
*
|
|
|
|
|
* Note that Refresh is not required to select your preferred backend
|
|
|
|
|
* if it detects an incompatibility.
|
|
|
|
|
*
|
|
|
|
|
* Returns the backend that will actually be used, and fills in a window flag bitmask.
|
|
|
|
|
* This bitmask should be used to create all windows that the device claims.
|
|
|
|
|
*
|
|
|
|
|
* preferredBackend: The preferred backend that Refresh should select.
|
|
|
|
|
* flags: A pointer to a bitflag value that will be filled in with required SDL_WindowFlags masks.
|
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI Refresh_Backend Refresh_SelectBackend(Refresh_Backend preferredBackend, uint32_t *flags);
|
|
|
|
|
|
2020-12-16 23:33:09 +00:00
|
|
|
|
/* Device */
|
|
|
|
|
|
|
|
|
|
/* Create a rendering context for use on the calling thread.
|
2024-02-13 20:25:53 +00:00
|
|
|
|
* You MUST have called Refresh_SelectBackend prior to calling this function.
|
2020-12-16 23:33:09 +00:00
|
|
|
|
*
|
2020-12-17 03:28:02 +00:00
|
|
|
|
* debugMode: Enable debug mode properties.
|
2020-12-16 23:33:09 +00:00
|
|
|
|
*/
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI Refresh_Device* Refresh_CreateDevice(
|
2020-12-17 03:28:02 +00:00
|
|
|
|
uint8_t debugMode
|
2020-12-16 23:33:09 +00:00
|
|
|
|
);
|
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
/* Destroys a rendering context previously returned by Refresh_CreateDevice. */
|
|
|
|
|
REFRESHAPI void Refresh_DestroyDevice(Refresh_Device *device);
|
2020-12-16 23:33:09 +00:00
|
|
|
|
|
2020-12-16 20:47:54 +00:00
|
|
|
|
/* State Creation */
|
2020-12-16 20:11:43 +00:00
|
|
|
|
|
2020-12-29 22:52:24 +00:00
|
|
|
|
/* Returns an allocated ComputePipeline* object. */
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI Refresh_ComputePipeline* Refresh_CreateComputePipeline(
|
|
|
|
|
Refresh_Device *device,
|
2022-03-02 19:22:52 +00:00
|
|
|
|
Refresh_ComputeShaderInfo *computeShaderInfo
|
2020-12-29 22:52:24 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Returns an allocated GraphicsPipeline* object. */
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI Refresh_GraphicsPipeline* Refresh_CreateGraphicsPipeline(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_GraphicsPipelineCreateInfo *pipelineCreateInfo
|
2020-12-16 20:11:43 +00:00
|
|
|
|
);
|
|
|
|
|
|
2020-12-16 21:49:10 +00:00
|
|
|
|
/* Returns an allocated Sampler* object. */
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI Refresh_Sampler* Refresh_CreateSampler(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_SamplerStateCreateInfo *samplerStateCreateInfo
|
2020-12-16 20:47:54 +00:00
|
|
|
|
);
|
|
|
|
|
|
2020-12-16 22:59:14 +00:00
|
|
|
|
/* Returns an allocated ShaderModule* object. */
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI Refresh_ShaderModule* Refresh_CreateShaderModule(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_ShaderModuleCreateInfo *shaderModuleCreateInfo
|
2020-12-16 22:59:14 +00:00
|
|
|
|
);
|
|
|
|
|
|
2021-01-14 09:52:45 +00:00
|
|
|
|
/* Returns an allocated Refresh_Texture* object. Note that the contents of
|
2020-12-16 21:49:10 +00:00
|
|
|
|
* the texture are undefined until SetData is called.
|
|
|
|
|
*/
|
2021-01-14 09:52:45 +00:00
|
|
|
|
REFRESHAPI Refresh_Texture* Refresh_CreateTexture(
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_Device *device,
|
2021-01-14 09:52:45 +00:00
|
|
|
|
Refresh_TextureCreateInfo *textureCreateInfo
|
2020-12-18 22:35:33 +00:00
|
|
|
|
);
|
|
|
|
|
|
2024-02-12 08:04:02 +00:00
|
|
|
|
/* Creates a GpuBuffer.
|
2020-12-16 22:02:03 +00:00
|
|
|
|
*
|
2020-12-31 04:39:47 +00:00
|
|
|
|
* usageFlags: Specifies how the buffer will be used.
|
|
|
|
|
* sizeInBytes: The length of the buffer.
|
2020-12-16 22:02:03 +00:00
|
|
|
|
*/
|
2024-02-12 08:04:02 +00:00
|
|
|
|
REFRESHAPI Refresh_GpuBuffer* Refresh_CreateGpuBuffer(
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_BufferUsageFlags usageFlags,
|
2020-12-16 22:53:34 +00:00
|
|
|
|
uint32_t sizeInBytes
|
2020-12-16 22:02:03 +00:00
|
|
|
|
);
|
|
|
|
|
|
2024-02-23 17:42:31 +00:00
|
|
|
|
/* Creates a TransferBuffer.
|
2020-12-16 22:53:34 +00:00
|
|
|
|
*
|
2024-02-12 08:04:02 +00:00
|
|
|
|
* sizeInBytes: The length of the buffer.
|
2020-12-16 22:53:34 +00:00
|
|
|
|
*/
|
2024-02-23 17:42:31 +00:00
|
|
|
|
REFRESHAPI Refresh_TransferBuffer* Refresh_CreateTransferBuffer(
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_Device *device,
|
2024-02-18 04:21:52 +00:00
|
|
|
|
uint32_t sizeInBytes
|
2021-01-03 01:00:52 +00:00
|
|
|
|
);
|
|
|
|
|
|
2020-12-16 22:53:34 +00:00
|
|
|
|
/* Disposal */
|
|
|
|
|
|
|
|
|
|
/* Sends a texture to be destroyed by the renderer. Note that we call it
|
2021-01-06 01:02:36 +00:00
|
|
|
|
* "QueueDestroy" because it may not be immediately destroyed by the renderer if
|
2020-12-16 22:53:34 +00:00
|
|
|
|
* this is not called from the main thread (for example, if a garbage collector
|
|
|
|
|
* deletes the resource instead of the programmer).
|
|
|
|
|
*
|
2021-01-05 23:00:51 +00:00
|
|
|
|
* texture: The Refresh_Texture to be destroyed.
|
2020-12-16 22:53:34 +00:00
|
|
|
|
*/
|
2021-01-06 01:02:36 +00:00
|
|
|
|
REFRESHAPI void Refresh_QueueDestroyTexture(
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_Texture *texture
|
2020-12-16 22:53:34 +00:00
|
|
|
|
);
|
|
|
|
|
|
2020-12-16 23:15:42 +00:00
|
|
|
|
/* Sends a sampler to be destroyed by the renderer. Note that we call it
|
2021-01-06 01:02:36 +00:00
|
|
|
|
* "QueueDestroy" because it may not be immediately destroyed by the renderer if
|
2020-12-16 23:15:42 +00:00
|
|
|
|
* this is not called from the main thread (for example, if a garbage collector
|
|
|
|
|
* deletes the resource instead of the programmer).
|
|
|
|
|
*
|
2021-01-05 23:00:51 +00:00
|
|
|
|
* texture: The Refresh_Sampler to be destroyed.
|
2020-12-16 23:15:42 +00:00
|
|
|
|
*/
|
2021-01-06 01:02:36 +00:00
|
|
|
|
REFRESHAPI void Refresh_QueueDestroySampler(
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_Sampler *sampler
|
2020-12-16 23:15:42 +00:00
|
|
|
|
);
|
|
|
|
|
|
2021-01-03 04:56:40 +00:00
|
|
|
|
/* Sends a buffer to be destroyed by the renderer. Note that we call it
|
2024-02-12 08:04:02 +00:00
|
|
|
|
* "QueueDestroy" because it may not be immediately destroyed by the renderer.
|
|
|
|
|
*
|
|
|
|
|
* buffer: The Refresh_GpuBuffer to be destroyed.
|
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI void Refresh_QueueDestroyGpuBuffer(
|
|
|
|
|
Refresh_Device *device,
|
2024-02-23 17:50:48 +00:00
|
|
|
|
Refresh_GpuBuffer *gpuBuffer
|
2024-02-12 08:04:02 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Sends a buffer to be destroyed by the renderer. Note that we call it
|
|
|
|
|
* "QueueDestroy" because it may not be immediately destroyed by the renderer.
|
2020-12-16 23:15:42 +00:00
|
|
|
|
*
|
2024-02-23 17:42:31 +00:00
|
|
|
|
* buffer: The Refresh_TransferBuffer to be destroyed.
|
2020-12-16 23:15:42 +00:00
|
|
|
|
*/
|
2024-02-23 17:42:31 +00:00
|
|
|
|
REFRESHAPI void Refresh_QueueDestroyTransferBuffer(
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_Device *device,
|
2024-02-23 17:50:48 +00:00
|
|
|
|
Refresh_TransferBuffer *transferBuffer
|
2020-12-16 23:15:42 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Sends a shader module to be destroyed by the renderer. Note that we call it
|
2024-02-12 08:04:02 +00:00
|
|
|
|
* "QueueDestroy" because it may not be immediately destroyed by the renderer.
|
2020-12-16 22:53:34 +00:00
|
|
|
|
*
|
2021-01-05 23:00:51 +00:00
|
|
|
|
* shaderModule: The Refresh_ShaderModule to be destroyed.
|
2020-12-16 22:53:34 +00:00
|
|
|
|
*/
|
2021-01-06 01:02:36 +00:00
|
|
|
|
REFRESHAPI void Refresh_QueueDestroyShaderModule(
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_ShaderModule *shaderModule
|
2020-12-16 22:53:34 +00:00
|
|
|
|
);
|
|
|
|
|
|
2020-12-29 22:52:24 +00:00
|
|
|
|
/* Sends a compute pipeline to be destroyed by the renderer. Note that we call it
|
2024-02-12 08:04:02 +00:00
|
|
|
|
* "QueueDestroy" because it may not be immediately destroyed by the renderer.
|
2020-12-29 22:52:24 +00:00
|
|
|
|
*
|
2021-01-05 23:00:51 +00:00
|
|
|
|
* computePipeline: The Refresh_ComputePipeline to be destroyed.
|
2020-12-29 22:52:24 +00:00
|
|
|
|
*/
|
2021-01-06 01:02:36 +00:00
|
|
|
|
REFRESHAPI void Refresh_QueueDestroyComputePipeline(
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_ComputePipeline *computePipeline
|
2020-12-29 22:52:24 +00:00
|
|
|
|
);
|
|
|
|
|
|
2020-12-16 23:15:42 +00:00
|
|
|
|
/* Sends a graphics pipeline to be destroyed by the renderer. Note that we call it
|
2024-02-12 08:04:02 +00:00
|
|
|
|
* "QueueDestroy" because it may not be immediately destroyed by the renderer.
|
2020-12-16 23:15:42 +00:00
|
|
|
|
*
|
2021-01-05 23:00:51 +00:00
|
|
|
|
* graphicsPipeline: The Refresh_GraphicsPipeline to be destroyed.
|
2020-12-16 23:15:42 +00:00
|
|
|
|
*/
|
2021-01-06 01:02:36 +00:00
|
|
|
|
REFRESHAPI void Refresh_QueueDestroyGraphicsPipeline(
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_GraphicsPipeline *graphicsPipeline
|
2020-12-16 22:59:14 +00:00
|
|
|
|
);
|
|
|
|
|
|
2020-12-16 22:53:34 +00:00
|
|
|
|
/* Graphics State */
|
2020-12-16 20:47:54 +00:00
|
|
|
|
|
2020-12-16 21:28:06 +00:00
|
|
|
|
/* Begins a render pass.
|
2022-03-04 20:30:33 +00:00
|
|
|
|
* This will also set a default viewport and scissor state.
|
2020-12-16 21:28:06 +00:00
|
|
|
|
*
|
2022-02-24 22:01:37 +00:00
|
|
|
|
* colorAttachmentInfos:
|
|
|
|
|
* A pointer to an array of Refresh_ColorAttachmentInfo structures
|
|
|
|
|
* that contains render targets and clear values. May be NULL.
|
|
|
|
|
* colorAttachmentCount: The amount of structs in the above array.
|
|
|
|
|
* depthStencilAttachmentInfo: The depth/stencil render target and clear value. May be NULL.
|
2020-12-16 21:28:06 +00:00
|
|
|
|
*/
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI void Refresh_BeginRenderPass(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
2022-02-24 22:01:37 +00:00
|
|
|
|
Refresh_ColorAttachmentInfo *colorAttachmentInfos,
|
|
|
|
|
uint32_t colorAttachmentCount,
|
|
|
|
|
Refresh_DepthStencilAttachmentInfo *depthStencilAttachmentInfo
|
2020-12-16 21:28:06 +00:00
|
|
|
|
);
|
2020-12-16 20:47:54 +00:00
|
|
|
|
|
2020-12-30 01:31:39 +00:00
|
|
|
|
/* Binds a graphics pipeline to the graphics bind point. */
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI void Refresh_BindGraphicsPipeline(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
|
Refresh_GraphicsPipeline *graphicsPipeline
|
2020-12-16 22:53:34 +00:00
|
|
|
|
);
|
|
|
|
|
|
2022-03-04 20:30:33 +00:00
|
|
|
|
/* Sets the current viewport state. */
|
2022-03-04 20:47:36 +00:00
|
|
|
|
REFRESHAPI void Refresh_SetViewport(
|
2022-03-04 20:30:33 +00:00
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
|
Refresh_Viewport *viewport
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Sets the current scissor state. */
|
2022-03-04 20:47:36 +00:00
|
|
|
|
REFRESHAPI void Refresh_SetScissor(
|
2022-03-04 20:30:33 +00:00
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
|
Refresh_Rect *scissor
|
|
|
|
|
);
|
|
|
|
|
|
2022-12-29 01:50:23 +00:00
|
|
|
|
/* Binds vertex buffers for use with subsequent draw calls.
|
|
|
|
|
* Note that this may only be called after binding a graphics pipeline.
|
|
|
|
|
*/
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI void Refresh_BindVertexBuffers(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
2020-12-20 07:31:55 +00:00
|
|
|
|
uint32_t firstBinding,
|
|
|
|
|
uint32_t bindingCount,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_BufferBinding *pBindings
|
2020-12-20 07:31:55 +00:00
|
|
|
|
);
|
|
|
|
|
|
2020-12-21 23:44:43 +00:00
|
|
|
|
/* Binds an index buffer for use with subsequent draw calls. */
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI void Refresh_BindIndexBuffer(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_BufferBinding *pBinding,
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_IndexElementSize indexElementSize
|
2020-12-20 07:31:55 +00:00
|
|
|
|
);
|
|
|
|
|
|
2021-01-06 01:00:06 +00:00
|
|
|
|
/* Sets textures/samplers for use with the currently bound vertex shader.
|
|
|
|
|
*
|
|
|
|
|
* NOTE:
|
2024-03-02 09:09:49 +00:00
|
|
|
|
* The length of the bindings array must be equal to the number
|
2021-01-06 01:00:06 +00:00
|
|
|
|
* of sampler bindings specified by the pipeline.
|
|
|
|
|
*
|
2024-03-02 09:09:49 +00:00
|
|
|
|
* pBindings: A pointer to an array of TextureSamplerBindings.
|
2021-01-06 01:00:06 +00:00
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI void Refresh_BindVertexSamplers(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_TextureSamplerBinding *pBindings
|
2021-01-06 01:00:06 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Sets textures/samplers for use with the currently bound fragment shader.
|
|
|
|
|
*
|
|
|
|
|
* NOTE:
|
2024-03-02 09:09:49 +00:00
|
|
|
|
* The length of the bindings array must be equal to the number
|
2021-01-06 01:00:06 +00:00
|
|
|
|
* of sampler bindings specified by the pipeline.
|
|
|
|
|
*
|
2024-03-02 09:09:49 +00:00
|
|
|
|
* pBindings: A pointer to an array of TextureSamplerBindings.
|
2021-01-06 01:00:06 +00:00
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI void Refresh_BindFragmentSamplers(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_TextureSamplerBinding *pBindings
|
2021-01-06 01:00:06 +00:00
|
|
|
|
);
|
|
|
|
|
|
2024-02-17 01:51:18 +00:00
|
|
|
|
/* Pushes vertex shader uniforms to the device.
|
|
|
|
|
* This uniform data will be used with subsequent draw calls.
|
2024-02-12 08:04:02 +00:00
|
|
|
|
*
|
|
|
|
|
* NOTE:
|
2024-02-17 01:51:18 +00:00
|
|
|
|
* A graphics pipeline must be bound.
|
2024-02-12 08:04:02 +00:00
|
|
|
|
* Will use the block size of the currently bound vertex shader.
|
|
|
|
|
*
|
|
|
|
|
* data: The client data to write into the buffer.
|
|
|
|
|
* dataLengthInBytes: The length of the data to write.
|
|
|
|
|
*/
|
2024-02-17 01:51:18 +00:00
|
|
|
|
REFRESHAPI void Refresh_PushVertexShaderUniforms(
|
2024-02-12 08:04:02 +00:00
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer * commandBuffer,
|
|
|
|
|
void *data,
|
|
|
|
|
uint32_t dataLengthInBytes
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Pushes fragment shader params to the device.
|
2024-02-17 01:51:18 +00:00
|
|
|
|
* This uniform data will be used with subsequent draw calls.
|
2024-02-12 08:04:02 +00:00
|
|
|
|
*
|
|
|
|
|
* NOTE:
|
|
|
|
|
* A graphics pipeline must be bound.
|
|
|
|
|
* Will use the block size of the currently bound fragment shader.
|
|
|
|
|
*
|
|
|
|
|
* data: The client data to write into the buffer.
|
|
|
|
|
* dataLengthInBytes: The length of the data to write.
|
|
|
|
|
*/
|
2024-02-17 01:51:18 +00:00
|
|
|
|
REFRESHAPI void Refresh_PushFragmentShaderUniforms(
|
2024-02-12 08:04:02 +00:00
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
|
void *data,
|
|
|
|
|
uint32_t dataLengthInBytes
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Drawing */
|
|
|
|
|
|
|
|
|
|
/* Draws data from vertex/index buffers with instancing enabled.
|
|
|
|
|
*
|
|
|
|
|
* baseVertex: The starting offset to read from the vertex buffer.
|
|
|
|
|
* startIndex: The starting offset to read from the index buffer.
|
|
|
|
|
* primitiveCount: The number of primitives to draw.
|
|
|
|
|
* instanceCount: The number of instances that will be drawn.
|
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI void Refresh_DrawInstancedPrimitives(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
|
uint32_t baseVertex,
|
|
|
|
|
uint32_t startIndex,
|
|
|
|
|
uint32_t primitiveCount,
|
2024-02-17 01:51:18 +00:00
|
|
|
|
uint32_t instanceCount
|
2024-02-12 08:04:02 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Draws data from vertex/index buffers.
|
|
|
|
|
*
|
|
|
|
|
* baseVertex: The starting offset to read from the vertex buffer.
|
|
|
|
|
* startIndex: The starting offset to read from the index buffer.
|
|
|
|
|
* primitiveCount: The number of primitives to draw.
|
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI void Refresh_DrawIndexedPrimitives(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
|
uint32_t baseVertex,
|
|
|
|
|
uint32_t startIndex,
|
2024-02-17 01:51:18 +00:00
|
|
|
|
uint32_t primitiveCount
|
2024-02-12 08:04:02 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Draws data from vertex buffers.
|
|
|
|
|
*
|
|
|
|
|
* vertexStart: The starting offset to read from the vertex buffer.
|
|
|
|
|
* primitiveCount: The number of primitives to draw.
|
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI void Refresh_DrawPrimitives(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
|
uint32_t vertexStart,
|
2024-02-17 01:51:18 +00:00
|
|
|
|
uint32_t primitiveCount
|
2024-02-12 08:04:02 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Similar to Refresh_DrawPrimitives, but draw parameters are set from a buffer.
|
|
|
|
|
* The buffer layout should match the layout of Refresh_IndirectDrawCommand.
|
|
|
|
|
*
|
|
|
|
|
* buffer: A buffer containing draw parameters.
|
|
|
|
|
* offsetInBytes: The offset to start reading from the draw buffer.
|
|
|
|
|
* drawCount: The number of draw parameter sets that should be read from the draw buffer.
|
|
|
|
|
* stride: The byte stride between sets of draw parameters.
|
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI void Refresh_DrawPrimitivesIndirect(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
2024-02-23 17:50:48 +00:00
|
|
|
|
Refresh_GpuBuffer *gpuBuffer,
|
2024-02-12 08:04:02 +00:00
|
|
|
|
uint32_t offsetInBytes,
|
|
|
|
|
uint32_t drawCount,
|
2024-02-17 01:51:18 +00:00
|
|
|
|
uint32_t stride
|
2024-02-12 08:04:02 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Ends the current render pass. */
|
|
|
|
|
REFRESHAPI void Refresh_EndRenderPass(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer
|
|
|
|
|
);
|
|
|
|
|
|
2024-02-13 20:25:53 +00:00
|
|
|
|
/* Compute Pass */
|
2024-02-12 08:04:02 +00:00
|
|
|
|
|
|
|
|
|
/* Begins a compute pass. */
|
2024-02-16 00:48:26 +00:00
|
|
|
|
REFRESHAPI void Refresh_BeginComputePass(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer
|
|
|
|
|
);
|
2024-02-12 08:04:02 +00:00
|
|
|
|
|
2020-12-30 01:31:39 +00:00
|
|
|
|
/* Binds a compute pipeline to the compute bind point. */
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI void Refresh_BindComputePipeline(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
|
Refresh_ComputePipeline *computePipeline
|
2020-12-30 01:31:39 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Binds buffers for use with the currently bound compute pipeline.
|
|
|
|
|
*
|
2024-03-02 09:09:49 +00:00
|
|
|
|
* pBindings:
|
|
|
|
|
* An array of ComputeBufferBinding structs.
|
|
|
|
|
* Length must be equal to the number of buffers
|
|
|
|
|
* specified by the compute pipeline.
|
2020-12-30 01:31:39 +00:00
|
|
|
|
*/
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI void Refresh_BindComputeBuffers(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_ComputeBufferBinding *pBindings
|
2020-12-30 01:31:39 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Binds textures for use with the currently bound compute pipeline.
|
|
|
|
|
*
|
2024-03-02 09:09:49 +00:00
|
|
|
|
* pBindings:
|
|
|
|
|
* An array of ComputeTextureBinding structs.
|
|
|
|
|
* Length must be equal to the number of textures
|
2024-02-12 08:04:02 +00:00
|
|
|
|
* specified by the compute pipeline.
|
2020-12-30 01:31:39 +00:00
|
|
|
|
*/
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI void Refresh_BindComputeTextures(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_ComputeTextureBinding *pBindings
|
2024-02-12 08:04:02 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Pushes compute shader params to the device.
|
2024-02-17 01:51:18 +00:00
|
|
|
|
* This uniform data will be used with subsequent dispatch calls.
|
2024-02-12 08:04:02 +00:00
|
|
|
|
*
|
|
|
|
|
* NOTE:
|
|
|
|
|
* A compute pipeline must be bound.
|
|
|
|
|
* Will use the block size of the currently bound compute shader.
|
|
|
|
|
*
|
|
|
|
|
* data: The client data to write into the buffer.
|
|
|
|
|
* dataLengthInBytes: The length of the data to write.
|
|
|
|
|
*/
|
2024-02-17 01:51:18 +00:00
|
|
|
|
REFRESHAPI void Refresh_PushComputeShaderUniforms(
|
2024-02-12 08:04:02 +00:00
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer * commandBuffer,
|
|
|
|
|
void *data,
|
|
|
|
|
uint32_t dataLengthInBytes
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Dispatches work compute items.
|
|
|
|
|
*
|
|
|
|
|
* groupCountX: Number of local workgroups to dispatch in the X dimension.
|
|
|
|
|
* groupCountY: Number of local workgroups to dispatch in the Y dimension.
|
|
|
|
|
* groupCountZ: Number of local workgroups to dispatch in the Z dimension.
|
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI void Refresh_DispatchCompute(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
|
uint32_t groupCountX,
|
|
|
|
|
uint32_t groupCountY,
|
2024-02-17 01:51:18 +00:00
|
|
|
|
uint32_t groupCountZ
|
2024-02-12 08:04:02 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Ends the current compute pass. */
|
2024-02-16 00:48:26 +00:00
|
|
|
|
REFRESHAPI void Refresh_EndComputePass(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer
|
|
|
|
|
);
|
2024-02-12 08:04:02 +00:00
|
|
|
|
|
2024-02-23 17:42:31 +00:00
|
|
|
|
/* TransferBuffer Set/Get */
|
2024-02-18 04:21:52 +00:00
|
|
|
|
|
2024-02-23 17:42:31 +00:00
|
|
|
|
/* Immediately copies data from a pointer into a TransferBuffer.
|
2024-02-18 04:21:52 +00:00
|
|
|
|
*
|
2024-03-02 09:09:49 +00:00
|
|
|
|
* transferOption:
|
2024-02-22 18:32:24 +00:00
|
|
|
|
* SAFEDISCARD:
|
2024-03-02 09:09:49 +00:00
|
|
|
|
* 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.
|
2024-02-23 17:42:31 +00:00
|
|
|
|
* It is not recommended to use this option with large TransferBuffers.
|
2024-02-18 04:21:52 +00:00
|
|
|
|
*
|
2024-02-18 04:23:09 +00:00
|
|
|
|
* OVERWRITE:
|
2024-03-02 09:09:49 +00:00
|
|
|
|
* Overwrites the data regardless of whether a command has been issued.
|
2024-02-18 04:21:52 +00:00
|
|
|
|
* Use this option with great care, as it can cause data races to occur!
|
|
|
|
|
*/
|
2024-03-02 09:09:49 +00:00
|
|
|
|
REFRESHAPI void Refresh_SetTransferData(
|
2024-02-18 04:21:52 +00:00
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
void* data,
|
2024-02-23 17:42:31 +00:00
|
|
|
|
Refresh_TransferBuffer *transferBuffer,
|
2024-02-18 04:21:52 +00:00
|
|
|
|
Refresh_BufferCopy *copyParams,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_TransferOptions transferOption
|
2024-02-18 04:21:52 +00:00
|
|
|
|
);
|
|
|
|
|
|
2024-02-23 17:42:31 +00:00
|
|
|
|
/* Immediately copies data from a TransferBuffer into a pointer. */
|
2024-03-02 09:09:49 +00:00
|
|
|
|
REFRESHAPI void Refresh_GetTransferData(
|
2024-02-18 04:21:52 +00:00
|
|
|
|
Refresh_Device *device,
|
2024-02-23 17:42:31 +00:00
|
|
|
|
Refresh_TransferBuffer *transferBuffer,
|
2024-02-18 04:21:52 +00:00
|
|
|
|
void* data,
|
|
|
|
|
Refresh_BufferCopy *copyParams
|
|
|
|
|
);
|
|
|
|
|
|
2024-02-12 08:04:02 +00:00
|
|
|
|
/* Copy Pass */
|
|
|
|
|
|
|
|
|
|
/* Begins a copy pass. */
|
2024-02-16 00:48:26 +00:00
|
|
|
|
REFRESHAPI void Refresh_BeginCopyPass(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer
|
|
|
|
|
);
|
2024-02-12 08:04:02 +00:00
|
|
|
|
|
|
|
|
|
/* CPU-to-GPU copies occur on the GPU timeline.
|
|
|
|
|
*
|
|
|
|
|
* You MAY assume that the copy has finished for subsequent commands.
|
|
|
|
|
*/
|
|
|
|
|
|
2024-03-02 09:09:49 +00:00
|
|
|
|
/*
|
|
|
|
|
* 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.
|
|
|
|
|
*/
|
|
|
|
|
|
2024-02-23 17:42:31 +00:00
|
|
|
|
/* Uploads data from a TransferBuffer to a texture. */
|
2024-02-12 08:04:02 +00:00
|
|
|
|
REFRESHAPI void Refresh_UploadToTexture(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
2024-02-23 17:42:31 +00:00
|
|
|
|
Refresh_TransferBuffer *transferBuffer,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_TextureRegion *textureRegion,
|
|
|
|
|
Refresh_BufferImageCopy *copyParams,
|
|
|
|
|
Refresh_WriteOptions writeOption
|
2024-02-12 08:04:02 +00:00
|
|
|
|
);
|
|
|
|
|
|
2024-02-23 17:42:31 +00:00
|
|
|
|
/* Uploads data from a TransferBuffer to a GpuBuffer. */
|
2024-02-12 08:04:02 +00:00
|
|
|
|
REFRESHAPI void Refresh_UploadToBuffer(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
2024-02-23 17:42:31 +00:00
|
|
|
|
Refresh_TransferBuffer *transferBuffer,
|
2024-02-12 08:04:02 +00:00
|
|
|
|
Refresh_GpuBuffer *gpuBuffer,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_BufferCopy *copyParams,
|
|
|
|
|
Refresh_WriteOptions writeOption
|
2024-02-12 08:04:02 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* GPU-to-CPU copies occur on the GPU timeline.
|
|
|
|
|
*
|
2024-02-23 17:42:31 +00:00
|
|
|
|
* You may NOT assume that the data in the TransferBuffer is fully copied
|
2024-02-12 08:04:02 +00:00
|
|
|
|
* until the command buffer has finished execution.
|
|
|
|
|
*/
|
|
|
|
|
|
2024-03-02 09:09:49 +00:00
|
|
|
|
/*
|
|
|
|
|
* 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!
|
|
|
|
|
*/
|
|
|
|
|
|
2024-02-23 17:42:31 +00:00
|
|
|
|
/* Downloads data from a texture to a TransferBuffer. */
|
2024-02-12 08:04:02 +00:00
|
|
|
|
REFRESHAPI void Refresh_DownloadFromTexture(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_TextureRegion *textureRegion,
|
2024-02-23 17:42:31 +00:00
|
|
|
|
Refresh_TransferBuffer *transferBuffer,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_BufferImageCopy *copyParams,
|
|
|
|
|
Refresh_TransferOptions transferOption
|
2024-02-12 08:04:02 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Downloads data from a GpuBuffer object. */
|
|
|
|
|
REFRESHAPI void Refresh_DownloadFromBuffer(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
|
Refresh_GpuBuffer *gpuBuffer,
|
2024-02-23 17:42:31 +00:00
|
|
|
|
Refresh_TransferBuffer *transferBuffer,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_BufferCopy *copyParams,
|
|
|
|
|
Refresh_TransferOptions transferOption
|
2024-02-12 08:04:02 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* GPU-to-GPU copies occur on the GPU timeline,
|
|
|
|
|
* and you may assume the copy has finished in subsequent commands.
|
|
|
|
|
*/
|
|
|
|
|
|
2024-03-02 09:09:49 +00:00
|
|
|
|
/*
|
|
|
|
|
* 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.
|
|
|
|
|
*/
|
|
|
|
|
|
2024-02-12 08:04:02 +00:00
|
|
|
|
/* Performs a texture-to-texture copy. */
|
|
|
|
|
REFRESHAPI void Refresh_CopyTextureToTexture(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_TextureRegion *source,
|
|
|
|
|
Refresh_TextureRegion *destination,
|
|
|
|
|
Refresh_WriteOptions writeOption
|
2024-02-12 08:04:02 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Copies data from a buffer to a buffer. */
|
|
|
|
|
REFRESHAPI void Refresh_CopyBufferToBuffer(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
|
Refresh_GpuBuffer *source,
|
|
|
|
|
Refresh_GpuBuffer *destination,
|
2024-03-02 09:09:49 +00:00
|
|
|
|
Refresh_BufferCopy *copyParams,
|
|
|
|
|
Refresh_WriteOptions writeOption
|
2024-02-12 08:04:02 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Generate mipmaps for the given texture. */
|
|
|
|
|
REFRESHAPI void Refresh_GenerateMipmaps(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
|
Refresh_Texture *texture
|
|
|
|
|
);
|
|
|
|
|
|
2024-02-16 00:48:26 +00:00
|
|
|
|
REFRESHAPI void Refresh_EndCopyPass(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer
|
|
|
|
|
);
|
2024-02-12 08:04:02 +00:00
|
|
|
|
|
|
|
|
|
/* Ends a copy pass. */
|
|
|
|
|
|
2020-12-21 23:44:43 +00:00
|
|
|
|
/* Submission/Presentation */
|
2020-12-17 04:19:11 +00:00
|
|
|
|
|
2022-09-29 21:11:25 +00:00
|
|
|
|
/* Claims a window, creating a swapchain structure for it.
|
|
|
|
|
* This function MUST be called before any swapchain functions
|
|
|
|
|
* are called using the window.
|
|
|
|
|
*
|
|
|
|
|
* Returns 0 on swapchain creation failure.
|
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI uint8_t Refresh_ClaimWindow(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
void *windowHandle,
|
|
|
|
|
Refresh_PresentMode presentMode
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Unclaims a window, destroying the swapchain structure for it.
|
|
|
|
|
* It is good practice to call this when a window is closed to
|
|
|
|
|
* prevent memory bloat, but windows are automatically unclaimed
|
|
|
|
|
* by DestroyDevice.
|
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI void Refresh_UnclaimWindow(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
void *windowHandle
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Changes the present mode of the swapchain for the given window. */
|
|
|
|
|
REFRESHAPI void Refresh_SetSwapchainPresentMode(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
void *windowHandle,
|
|
|
|
|
Refresh_PresentMode presentMode
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Returns the format of the swapchain for the given window. */
|
|
|
|
|
REFRESHAPI Refresh_TextureFormat Refresh_GetSwapchainFormat(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
void *windowHandle
|
|
|
|
|
);
|
|
|
|
|
|
2021-01-05 23:00:51 +00:00
|
|
|
|
/* Returns an allocated Refresh_CommandBuffer* object.
|
2021-01-03 03:03:25 +00:00
|
|
|
|
* This command buffer is managed by the implementation and
|
|
|
|
|
* should NOT be freed by the user.
|
2021-01-02 06:07:15 +00:00
|
|
|
|
*
|
|
|
|
|
* NOTE:
|
|
|
|
|
* A command buffer may only be used on the thread that
|
|
|
|
|
* it was acquired on. Using it on any other thread is an error.
|
|
|
|
|
*
|
|
|
|
|
*/
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI Refresh_CommandBuffer* Refresh_AcquireCommandBuffer(
|
2023-01-14 18:03:58 +00:00
|
|
|
|
Refresh_Device *device
|
2021-01-02 06:07:15 +00:00
|
|
|
|
);
|
|
|
|
|
|
2022-03-02 06:33:57 +00:00
|
|
|
|
/* Acquires a texture to use for presentation.
|
|
|
|
|
* May return NULL under certain conditions.
|
2022-03-10 18:21:49 +00:00
|
|
|
|
* If NULL, the user must ensure to not use the texture.
|
2022-03-02 06:33:57 +00:00
|
|
|
|
* Once a swapchain texture is acquired,
|
|
|
|
|
* it will automatically be presented on command buffer submission.
|
2020-12-21 23:44:43 +00:00
|
|
|
|
*
|
|
|
|
|
* NOTE:
|
2022-03-02 06:33:57 +00:00
|
|
|
|
* It is not recommended to hold a reference to this texture long term.
|
2022-03-10 18:21:49 +00:00
|
|
|
|
*
|
|
|
|
|
* pWidth: A pointer to a uint32 that will be filled with the texture width.
|
|
|
|
|
* pHeight: A pointer to a uint32 that will be filled with the texture height.
|
2020-12-21 23:44:43 +00:00
|
|
|
|
*/
|
2022-03-02 06:33:57 +00:00
|
|
|
|
REFRESHAPI Refresh_Texture* Refresh_AcquireSwapchainTexture(
|
2021-01-05 23:00:51 +00:00
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
2022-03-10 18:21:49 +00:00
|
|
|
|
void *windowHandle,
|
|
|
|
|
uint32_t *pWidth,
|
|
|
|
|
uint32_t *pHeight
|
2022-03-02 06:33:57 +00:00
|
|
|
|
);
|
|
|
|
|
|
2020-12-21 23:44:43 +00:00
|
|
|
|
/* Submits all of the enqueued commands. */
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI void Refresh_Submit(
|
|
|
|
|
Refresh_Device* device,
|
2023-09-19 06:11:20 +00:00
|
|
|
|
Refresh_CommandBuffer *commandBuffer
|
2020-12-21 23:44:43 +00:00
|
|
|
|
);
|
|
|
|
|
|
2023-09-19 06:11:20 +00:00
|
|
|
|
/* Submits a command buffer and acquires a fence.
|
|
|
|
|
* You can use the fence to check if or wait until the command buffer has finished processing.
|
|
|
|
|
* You are responsible for releasing this fence when you are done using it.
|
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI Refresh_Fence* Refresh_SubmitAndAcquireFence(
|
|
|
|
|
Refresh_Device* device,
|
|
|
|
|
Refresh_CommandBuffer *commandBuffer
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Waits for the device to become idle. */
|
2021-01-05 23:00:51 +00:00
|
|
|
|
REFRESHAPI void Refresh_Wait(
|
|
|
|
|
Refresh_Device *device
|
2021-01-03 05:07:51 +00:00
|
|
|
|
);
|
|
|
|
|
|
2023-09-19 06:11:20 +00:00
|
|
|
|
/* Waits for given fences to be signaled.
|
|
|
|
|
*
|
|
|
|
|
* waitAll: If 0, waits for any fence to be signaled. If 1, waits for all fences to be signaled.
|
|
|
|
|
* fenceCount: The number of fences being submitted.
|
|
|
|
|
* pFences: An array of fences to be waited on.
|
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI void Refresh_WaitForFences(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
uint8_t waitAll,
|
|
|
|
|
uint32_t fenceCount,
|
|
|
|
|
Refresh_Fence **pFences
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Check the status of a fence. 1 means the fence is signaled. */
|
|
|
|
|
REFRESHAPI int Refresh_QueryFence(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_Fence *fence
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Allows the fence to be reused by future command buffer submissions.
|
|
|
|
|
* If you do not release fences after acquiring them, you will cause unbounded resource growth.
|
|
|
|
|
*/
|
|
|
|
|
REFRESHAPI void Refresh_ReleaseFence(
|
|
|
|
|
Refresh_Device *device,
|
|
|
|
|
Refresh_Fence *fence
|
|
|
|
|
);
|
|
|
|
|
|
2020-12-15 23:00:46 +00:00
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
|
|
|
|
#endif /* REFRESH_H */
|
|
|
|
|
|
|
|
|
|
/* vim: set noexpandtab shiftwidth=8 tabstop=8: */
|