diff --git a/bindings/cs/bgfx.cs b/bindings/cs/bgfx.cs
index 3470aa238..ac25fd0e0 100644
--- a/bindings/cs/bgfx.cs
+++ b/bindings/cs/bgfx.cs
@@ -533,37 +533,42 @@ public static partial class bgfx
public enum DiscardFlags : uint
{
///
- /// Discard nothing
+ /// Preserve everything.
///
None = 0x00000000,
///
- /// Discard only Index Buffer
+ /// Discard texture sampler and buffer bindings.
///
- IndexBuffer = 0x00000001,
+ Bindings = 0x00000001,
///
- /// Discard only Vertex Streams
+ /// Discard index buffer.
///
- VertexStreams = 0x00000002,
+ IndexBuffer = 0x00000002,
///
- /// Discard only texture samplers
+ /// Discard instance data.
///
- TextureSamplers = 0x00000004,
+ InstanceData = 0x00000004,
///
- /// Discard only Compute shader related state
+ /// Discard state.
///
- Compute = 0x00000008,
+ State = 0x00000008,
///
- /// Discard only state
+ /// Discard transform.
///
- State = 0x00000010,
+ Transform = 0x00000010,
///
- /// Discard every rendering states
+ /// Discard vertex streams.
+ ///
+ VertexStreams = 0x00000020,
+
+ ///
+ /// Discard all states.
///
All = 0x000000ff,
}
@@ -3733,7 +3738,7 @@ public static partial class bgfx
/// View id.
/// Program.
/// Depth for sorting.
- /// Which states to discard for next draw. See BGFX_DISCARD_
+ /// Discard or preserve states. See `BGFX_DISCARD_*`.
///
[DllImport(DllName, EntryPoint="bgfx_encoder_submit", CallingConvention = CallingConvention.Cdecl)]
public static extern unsafe void encoder_submit(Encoder* _this, ushort _id, ProgramHandle _program, uint _depth, byte _flags);
@@ -3746,7 +3751,7 @@ public static partial class bgfx
/// Program.
/// Occlusion query.
/// Depth for sorting.
- /// Which states to discard for next draw. See BGFX_DISCARD_
+ /// Discard or preserve states. See `BGFX_DISCARD_*`.
///
[DllImport(DllName, EntryPoint="bgfx_encoder_submit_occlusion_query", CallingConvention = CallingConvention.Cdecl)]
public static extern unsafe void encoder_submit_occlusion_query(Encoder* _this, ushort _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, uint _depth, byte _flags);
@@ -3762,7 +3767,7 @@ public static partial class bgfx
/// First element in indirect buffer.
/// Number of dispatches.
/// Depth for sorting.
- /// Which states to discard for next draw. See BGFX_DISCARD_
+ /// Discard or preserve states. See `BGFX_DISCARD_*`.
///
[DllImport(DllName, EntryPoint="bgfx_encoder_submit_indirect", CallingConvention = CallingConvention.Cdecl)]
public static extern unsafe void encoder_submit_indirect(Encoder* _this, ushort _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, ushort _start, ushort _num, uint _depth, byte _flags);
@@ -3844,9 +3849,10 @@ public static partial class bgfx
/// Number of groups X.
/// Number of groups Y.
/// Number of groups Z.
+ /// Discard or preserve states. See `BGFX_DISCARD_*`.
///
[DllImport(DllName, EntryPoint="bgfx_encoder_dispatch", CallingConvention = CallingConvention.Cdecl)]
- public static extern unsafe void encoder_dispatch(Encoder* _this, ushort _id, ProgramHandle _program, uint _numX, uint _numY, uint _numZ);
+ public static extern unsafe void encoder_dispatch(Encoder* _this, ushort _id, ProgramHandle _program, uint _numX, uint _numY, uint _numZ, byte _flags);
///
/// Dispatch compute indirect.
@@ -3857,15 +3863,16 @@ public static partial class bgfx
/// Indirect buffer.
/// First element in indirect buffer.
/// Number of dispatches.
+ /// Discard or preserve states. See `BGFX_DISCARD_*`.
///
[DllImport(DllName, EntryPoint="bgfx_encoder_dispatch_indirect", CallingConvention = CallingConvention.Cdecl)]
- public static extern unsafe void encoder_dispatch_indirect(Encoder* _this, ushort _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, ushort _start, ushort _num);
+ public static extern unsafe void encoder_dispatch_indirect(Encoder* _this, ushort _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, ushort _start, ushort _num, byte _flags);
///
/// Discard previously set state for draw or compute call.
///
///
- /// Draw/compute states to discard.
+ /// Discard or preserve states. See `BGFX_DISCARD_*`.
///
[DllImport(DllName, EntryPoint="bgfx_encoder_discard", CallingConvention = CallingConvention.Cdecl)]
public static extern unsafe void encoder_discard(Encoder* _this, byte _flags);
@@ -4359,9 +4366,10 @@ public static partial class bgfx
/// Number of groups X.
/// Number of groups Y.
/// Number of groups Z.
+ /// Discard or preserve states. See `BGFX_DISCARD_*`.
///
[DllImport(DllName, EntryPoint="bgfx_dispatch", CallingConvention = CallingConvention.Cdecl)]
- public static extern unsafe void dispatch(ushort _id, ProgramHandle _program, uint _numX, uint _numY, uint _numZ);
+ public static extern unsafe void dispatch(ushort _id, ProgramHandle _program, uint _numX, uint _numY, uint _numZ, byte _flags);
///
/// Dispatch compute indirect.
@@ -4372,9 +4380,10 @@ public static partial class bgfx
/// Indirect buffer.
/// First element in indirect buffer.
/// Number of dispatches.
+ /// Discard or preserve states. See `BGFX_DISCARD_*`.
///
[DllImport(DllName, EntryPoint="bgfx_dispatch_indirect", CallingConvention = CallingConvention.Cdecl)]
- public static extern unsafe void dispatch_indirect(ushort _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, ushort _start, ushort _num);
+ public static extern unsafe void dispatch_indirect(ushort _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, ushort _start, ushort _num, byte _flags);
///
/// Discard previously set state for draw or compute call.
diff --git a/bindings/d/funcs.d b/bindings/d/funcs.d
index 65a94296a..076f77b84 100644
--- a/bindings/d/funcs.d
+++ b/bindings/d/funcs.d
@@ -1463,7 +1463,7 @@ version(BindBgfx_Static)
* _id = View id.
* _program = Program.
* _depth = Depth for sorting.
- * _flags = Which states to discard for next draw. See BGFX_DISCARD_
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
void bgfx_encoder_submit(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _depth, byte _flags);
@@ -1474,7 +1474,7 @@ version(BindBgfx_Static)
* _program = Program.
* _occlusionQuery = Occlusion query.
* _depth = Depth for sorting.
- * _flags = Which states to discard for next draw. See BGFX_DISCARD_
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
void bgfx_encoder_submit_occlusion_query(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, uint _depth, byte _flags);
@@ -1488,7 +1488,7 @@ version(BindBgfx_Static)
* _start = First element in indirect buffer.
* _num = Number of dispatches.
* _depth = Depth for sorting.
- * _flags = Which states to discard for next draw. See BGFX_DISCARD_
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
void bgfx_encoder_submit_indirect(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, ushort _start, ushort _num, uint _depth, byte _flags);
@@ -1556,8 +1556,9 @@ version(BindBgfx_Static)
* _numX = Number of groups X.
* _numY = Number of groups Y.
* _numZ = Number of groups Z.
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
- void bgfx_encoder_dispatch(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _numX, uint _numY, uint _numZ);
+ void bgfx_encoder_dispatch(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _numX, uint _numY, uint _numZ, byte _flags);
/**
* Dispatch compute indirect.
@@ -1567,13 +1568,14 @@ version(BindBgfx_Static)
* _indirectHandle = Indirect buffer.
* _start = First element in indirect buffer.
* _num = Number of dispatches.
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
- void bgfx_encoder_dispatch_indirect(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, ushort _start, ushort _num);
+ void bgfx_encoder_dispatch_indirect(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, ushort _start, ushort _num, byte _flags);
/**
* Discard previously set state for draw or compute call.
* Params:
- * _flags = Draw/compute states to discard.
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
void bgfx_encoder_discard(bgfx_encoder_t* _this, byte _flags);
@@ -2015,8 +2017,9 @@ version(BindBgfx_Static)
* _numX = Number of groups X.
* _numY = Number of groups Y.
* _numZ = Number of groups Z.
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
- void bgfx_dispatch(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _numX, uint _numY, uint _numZ);
+ void bgfx_dispatch(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _numX, uint _numY, uint _numZ, byte _flags);
/**
* Dispatch compute indirect.
@@ -2026,8 +2029,9 @@ version(BindBgfx_Static)
* _indirectHandle = Indirect buffer.
* _start = First element in indirect buffer.
* _num = Number of dispatches.
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
- void bgfx_dispatch_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, ushort _start, ushort _num);
+ void bgfx_dispatch_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, ushort _start, ushort _num, byte _flags);
/**
* Discard previously set state for draw or compute call.
@@ -3648,7 +3652,7 @@ else
* _id = View id.
* _program = Program.
* _depth = Depth for sorting.
- * _flags = Which states to discard for next draw. See BGFX_DISCARD_
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
alias da_bgfx_encoder_submit = void function(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _depth, byte _flags);
da_bgfx_encoder_submit bgfx_encoder_submit;
@@ -3660,7 +3664,7 @@ else
* _program = Program.
* _occlusionQuery = Occlusion query.
* _depth = Depth for sorting.
- * _flags = Which states to discard for next draw. See BGFX_DISCARD_
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
alias da_bgfx_encoder_submit_occlusion_query = void function(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, uint _depth, byte _flags);
da_bgfx_encoder_submit_occlusion_query bgfx_encoder_submit_occlusion_query;
@@ -3675,7 +3679,7 @@ else
* _start = First element in indirect buffer.
* _num = Number of dispatches.
* _depth = Depth for sorting.
- * _flags = Which states to discard for next draw. See BGFX_DISCARD_
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
alias da_bgfx_encoder_submit_indirect = void function(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, ushort _start, ushort _num, uint _depth, byte _flags);
da_bgfx_encoder_submit_indirect bgfx_encoder_submit_indirect;
@@ -3750,8 +3754,9 @@ else
* _numX = Number of groups X.
* _numY = Number of groups Y.
* _numZ = Number of groups Z.
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
- alias da_bgfx_encoder_dispatch = void function(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _numX, uint _numY, uint _numZ);
+ alias da_bgfx_encoder_dispatch = void function(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _numX, uint _numY, uint _numZ, byte _flags);
da_bgfx_encoder_dispatch bgfx_encoder_dispatch;
/**
@@ -3762,14 +3767,15 @@ else
* _indirectHandle = Indirect buffer.
* _start = First element in indirect buffer.
* _num = Number of dispatches.
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
- alias da_bgfx_encoder_dispatch_indirect = void function(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, ushort _start, ushort _num);
+ alias da_bgfx_encoder_dispatch_indirect = void function(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, ushort _start, ushort _num, byte _flags);
da_bgfx_encoder_dispatch_indirect bgfx_encoder_dispatch_indirect;
/**
* Discard previously set state for draw or compute call.
* Params:
- * _flags = Draw/compute states to discard.
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
alias da_bgfx_encoder_discard = void function(bgfx_encoder_t* _this, byte _flags);
da_bgfx_encoder_discard bgfx_encoder_discard;
@@ -4251,8 +4257,9 @@ else
* _numX = Number of groups X.
* _numY = Number of groups Y.
* _numZ = Number of groups Z.
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
- alias da_bgfx_dispatch = void function(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _numX, uint _numY, uint _numZ);
+ alias da_bgfx_dispatch = void function(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _numX, uint _numY, uint _numZ, byte _flags);
da_bgfx_dispatch bgfx_dispatch;
/**
@@ -4263,8 +4270,9 @@ else
* _indirectHandle = Indirect buffer.
* _start = First element in indirect buffer.
* _num = Number of dispatches.
+ * _flags = Discard or preserve states. See `BGFX_DISCARD_*`.
*/
- alias da_bgfx_dispatch_indirect = void function(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, ushort _start, ushort _num);
+ alias da_bgfx_dispatch_indirect = void function(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, ushort _start, ushort _num, byte _flags);
da_bgfx_dispatch_indirect bgfx_dispatch_indirect;
/**
diff --git a/bindings/d/types.d b/bindings/d/types.d
index 022f93ae3..b7219e32e 100644
--- a/bindings/d/types.d
+++ b/bindings/d/types.d
@@ -10,7 +10,7 @@ public import core.stdc.stdarg : va_list;
extern(C) @nogc nothrow:
-enum uint BGFX_API_VERSION = 104;
+enum uint BGFX_API_VERSION = 105;
alias bgfx_view_id_t = ushort;
@@ -193,13 +193,14 @@ enum ushort BGFX_CLEAR_DISCARD_MASK = 0x1ff8;
* Rendering state discard. When state is preserved in submit, rendering states can be discarded
* on a finer grain.
*/
-enum ubyte BGFX_DISCARD_NONE = 0x00; /// Discard nothing
-enum ubyte BGFX_DISCARD_INDEX_BUFFER = 0x01; /// Discard only Index Buffer
-enum ubyte BGFX_DISCARD_VERTEX_STREAMS = 0x02; /// Discard only Vertex Streams
-enum ubyte BGFX_DISCARD_TEXTURE_SAMPLERS = 0x04; /// Discard only texture samplers
-enum ubyte BGFX_DISCARD_COMPUTE = 0x08; /// Discard only Compute shader related state
-enum ubyte BGFX_DISCARD_STATE = 0x10; /// Discard only state
-enum ubyte BGFX_DISCARD_ALL = 0xff; /// Discard every rendering states
+enum ubyte BGFX_DISCARD_NONE = 0x00; /// Preserve everything.
+enum ubyte BGFX_DISCARD_BINDINGS = 0x01; /// Discard texture sampler and buffer bindings.
+enum ubyte BGFX_DISCARD_INDEX_BUFFER = 0x02; /// Discard index buffer.
+enum ubyte BGFX_DISCARD_INSTANCE_DATA = 0x04; /// Discard instance data.
+enum ubyte BGFX_DISCARD_STATE = 0x08; /// Discard state.
+enum ubyte BGFX_DISCARD_TRANSFORM = 0x10; /// Discard transform.
+enum ubyte BGFX_DISCARD_VERTEX_STREAMS = 0x20; /// Discard vertex streams.
+enum ubyte BGFX_DISCARD_ALL = 0xff; /// Discard all states.
enum uint BGFX_DEBUG_NONE = 0x00000000; /// No debug.
enum uint BGFX_DEBUG_WIREFRAME = 0x00000001; /// Enable wireframe for all primitives.
diff --git a/include/bgfx/bgfx.h b/include/bgfx/bgfx.h
index bdd54432e..cba9fd55d 100644
--- a/include/bgfx/bgfx.h
+++ b/include/bgfx/bgfx.h
@@ -1407,8 +1407,7 @@ namespace bgfx
/// @param[in] _id View id.
/// @param[in] _program Program.
/// @param[in] _depth Depth for sorting.
- /// @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_
- /// call submit.
+ /// @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
///
/// @attention C99 equivalent is `bgfx_encoder_submit`.
///
@@ -1416,7 +1415,7 @@ namespace bgfx
ViewId _id
, ProgramHandle _program
, uint32_t _depth = 0
- , uint8_t _flags = BGFX_DISCARD_ALL
+ , uint8_t _flags = BGFX_DISCARD_ALL
);
/// Submit primitive with occlusion query for rendering.
@@ -1425,8 +1424,7 @@ namespace bgfx
/// @param[in] _program Program.
/// @param[in] _occlusionQuery Occlusion query.
/// @param[in] _depth Depth for sorting.
- /// @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_
- /// call submit.
+ /// @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
///
/// @attention C99 equivalent is `bgfx_encoder_submit_occlusion_query`.
///
@@ -1435,7 +1433,7 @@ namespace bgfx
, ProgramHandle _program
, OcclusionQueryHandle _occlusionQuery
, uint32_t _depth = 0
- , uint8_t _flags = BGFX_DISCARD_ALL
+ , uint8_t _flags = BGFX_DISCARD_ALL
);
/// Submit primitive for rendering with index and instance data info from
@@ -1447,8 +1445,7 @@ namespace bgfx
/// @param[in] _start First element in indirect buffer.
/// @param[in] _num Number of dispatches.
/// @param[in] _depth Depth for sorting.
- /// @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_
- /// call submit.
+ /// @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
///
/// @attention C99 equivalent is `bgfx_encoder_submit_indirect`.
///
@@ -1557,6 +1554,7 @@ namespace bgfx
/// @param[in] _numX Number of groups X.
/// @param[in] _numY Number of groups Y.
/// @param[in] _numZ Number of groups Z.
+ /// @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
///
/// @attention C99 equivalent is `bgfx_encoder_dispatch`.
///
@@ -1566,6 +1564,7 @@ namespace bgfx
, uint32_t _numX = 1
, uint32_t _numY = 1
, uint32_t _numZ = 1
+ , uint8_t _flags = BGFX_DISCARD_ALL
);
/// Dispatch compute indirect.
@@ -1575,6 +1574,7 @@ namespace bgfx
/// @param[in] _indirectHandle Indirect buffer.
/// @param[in] _start First element in indirect buffer.
/// @param[in] _num Number of dispatches.
+ /// @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
///
/// @attention C99 equivalent is `bgfx_encoder_dispatch_indirect`.
///
@@ -1583,7 +1583,8 @@ namespace bgfx
, ProgramHandle _handle
, IndirectBufferHandle _indirectHandle
, uint16_t _start = 0
- , uint16_t _num = 1
+ , uint16_t _num = 1
+ , uint8_t _flags = BGFX_DISCARD_ALL
);
/// Discard all previously set state for draw or compute call.
@@ -3804,8 +3805,7 @@ namespace bgfx
/// @param[in] _id View id.
/// @param[in] _program Program.
/// @param[in] _depth Depth for sorting.
- /// @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_
- /// call submit.
+ /// @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
///
/// @attention C99 equivalent is `bgfx_submit`.
///
@@ -3813,7 +3813,7 @@ namespace bgfx
ViewId _id
, ProgramHandle _program
, uint32_t _depth = 0
- , uint8_t _flags = BGFX_DISCARD_ALL
+ , uint8_t _flags = BGFX_DISCARD_ALL
);
/// Submit primitive with occlusion query for rendering.
@@ -3822,8 +3822,7 @@ namespace bgfx
/// @param[in] _program Program.
/// @param[in] _occlusionQuery Occlusion query.
/// @param[in] _depth Depth for sorting.
- /// @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_
- /// call submit.
+ /// @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
///
/// @attention C99 equivalent is `bgfx_submit_occlusion_query`.
///
@@ -3832,7 +3831,7 @@ namespace bgfx
, ProgramHandle _program
, OcclusionQueryHandle _occlusionQuery
, uint32_t _depth = 0
- , uint8_t _flags = BGFX_DISCARD_ALL
+ , uint8_t _flags = BGFX_DISCARD_ALL
);
/// Submit primitive for rendering with index and instance data info from
@@ -3844,8 +3843,7 @@ namespace bgfx
/// @param[in] _start First element in indirect buffer.
/// @param[in] _num Number of dispatches.
/// @param[in] _depth Depth for sorting.
- /// @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_
- /// call submit.
+ /// @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
///
/// @attention C99 equivalent is `bgfx_submit_indirect`.
///
@@ -3854,9 +3852,9 @@ namespace bgfx
, ProgramHandle _program
, IndirectBufferHandle _indirectHandle
, uint16_t _start = 0
- , uint16_t _num = 1
+ , uint16_t _num = 1
, uint32_t _depth = 0
- , uint8_t _flags = BGFX_DISCARD_ALL
+ , uint8_t _flags = BGFX_DISCARD_ALL
);
/// Set compute index buffer.
@@ -3954,6 +3952,7 @@ namespace bgfx
/// @param[in] _numX Number of groups X.
/// @param[in] _numY Number of groups Y.
/// @param[in] _numZ Number of groups Z.
+ /// @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
///
/// @attention C99 equivalent is `bgfx_dispatch`.
///
@@ -3963,6 +3962,7 @@ namespace bgfx
, uint32_t _numX = 1
, uint32_t _numY = 1
, uint32_t _numZ = 1
+ , uint8_t _flags = BGFX_DISCARD_ALL
);
/// Dispatch compute indirect.
@@ -3972,6 +3972,7 @@ namespace bgfx
/// @param[in] _indirectHandle Indirect buffer.
/// @param[in] _start First element in indirect buffer.
/// @param[in] _num Number of dispatches.
+ /// @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
///
/// @attention C99 equivalent is `bgfx_dispatch_indirect`.
///
@@ -3980,7 +3981,8 @@ namespace bgfx
, ProgramHandle _handle
, IndirectBufferHandle _indirectHandle
, uint16_t _start = 0
- , uint16_t _num = 1
+ , uint16_t _num = 1
+ , uint8_t _flags = BGFX_DISCARD_ALL
);
/// Discard all previously set state for draw or compute call.
diff --git a/include/bgfx/c99/bgfx.h b/include/bgfx/c99/bgfx.h
index f2966d6b4..a004cd8fc 100644
--- a/include/bgfx/c99/bgfx.h
+++ b/include/bgfx/c99/bgfx.h
@@ -2551,7 +2551,7 @@ BGFX_C_API void bgfx_encoder_touch(bgfx_encoder_t* _this, bgfx_view_id_t _id);
* @param[in] _id View id.
* @param[in] _program Program.
* @param[in] _depth Depth for sorting.
- * @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_
+ * @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
*
*/
BGFX_C_API void bgfx_encoder_submit(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _depth, uint8_t _flags);
@@ -2563,7 +2563,7 @@ BGFX_C_API void bgfx_encoder_submit(bgfx_encoder_t* _this, bgfx_view_id_t _id, b
* @param[in] _program Program.
* @param[in] _occlusionQuery Occlusion query.
* @param[in] _depth Depth for sorting.
- * @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_
+ * @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
*
*/
BGFX_C_API void bgfx_encoder_submit_occlusion_query(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, uint32_t _depth, uint8_t _flags);
@@ -2578,7 +2578,7 @@ BGFX_C_API void bgfx_encoder_submit_occlusion_query(bgfx_encoder_t* _this, bgfx_
* @param[in] _start First element in indirect buffer.
* @param[in] _num Number of dispatches.
* @param[in] _depth Depth for sorting.
- * @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_
+ * @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
*
*/
BGFX_C_API void bgfx_encoder_submit_indirect(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint32_t _depth, uint8_t _flags);
@@ -2653,9 +2653,10 @@ BGFX_C_API void bgfx_encoder_set_image(bgfx_encoder_t* _this, uint8_t _stage, bg
* @param[in] _numX Number of groups X.
* @param[in] _numY Number of groups Y.
* @param[in] _numZ Number of groups Z.
+ * @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
*
*/
-BGFX_C_API void bgfx_encoder_dispatch(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ);
+BGFX_C_API void bgfx_encoder_dispatch(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags);
/**
* Dispatch compute indirect.
@@ -2665,14 +2666,15 @@ BGFX_C_API void bgfx_encoder_dispatch(bgfx_encoder_t* _this, bgfx_view_id_t _id,
* @param[in] _indirectHandle Indirect buffer.
* @param[in] _start First element in indirect buffer.
* @param[in] _num Number of dispatches.
+ * @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
*
*/
-BGFX_C_API void bgfx_encoder_dispatch_indirect(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num);
+BGFX_C_API void bgfx_encoder_dispatch_indirect(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags);
/**
* Discard previously set state for draw or compute call.
*
- * @param[in] _flags Draw/compute states to discard.
+ * @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
*
*/
BGFX_C_API void bgfx_encoder_discard(bgfx_encoder_t* _this, uint8_t _flags);
@@ -3171,9 +3173,10 @@ BGFX_C_API void bgfx_set_image(uint8_t _stage, bgfx_texture_handle_t _handle, ui
* @param[in] _numX Number of groups X.
* @param[in] _numY Number of groups Y.
* @param[in] _numZ Number of groups Z.
+ * @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
*
*/
-BGFX_C_API void bgfx_dispatch(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ);
+BGFX_C_API void bgfx_dispatch(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags);
/**
* Dispatch compute indirect.
@@ -3183,9 +3186,10 @@ BGFX_C_API void bgfx_dispatch(bgfx_view_id_t _id, bgfx_program_handle_t _program
* @param[in] _indirectHandle Indirect buffer.
* @param[in] _start First element in indirect buffer.
* @param[in] _num Number of dispatches.
+ * @param[in] _flags Discard or preserve states. See `BGFX_DISCARD_*`.
*
*/
-BGFX_C_API void bgfx_dispatch_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num);
+BGFX_C_API void bgfx_dispatch_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags);
/**
* Discard previously set state for draw or compute call.
@@ -3556,8 +3560,8 @@ struct bgfx_interface_vtbl
void (*encoder_set_compute_dynamic_vertex_buffer)(bgfx_encoder_t* _this, uint8_t _stage, bgfx_dynamic_vertex_buffer_handle_t _handle, bgfx_access_t _access);
void (*encoder_set_compute_indirect_buffer)(bgfx_encoder_t* _this, uint8_t _stage, bgfx_indirect_buffer_handle_t _handle, bgfx_access_t _access);
void (*encoder_set_image)(bgfx_encoder_t* _this, uint8_t _stage, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format);
- void (*encoder_dispatch)(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ);
- void (*encoder_dispatch_indirect)(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num);
+ void (*encoder_dispatch)(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags);
+ void (*encoder_dispatch_indirect)(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags);
void (*encoder_discard)(bgfx_encoder_t* _this, uint8_t _flags);
void (*encoder_blit)(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_texture_handle_t _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, bgfx_texture_handle_t _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth);
void (*request_screen_shot)(bgfx_frame_buffer_handle_t _handle, const char* _filePath);
@@ -3598,8 +3602,8 @@ struct bgfx_interface_vtbl
void (*set_compute_dynamic_vertex_buffer)(uint8_t _stage, bgfx_dynamic_vertex_buffer_handle_t _handle, bgfx_access_t _access);
void (*set_compute_indirect_buffer)(uint8_t _stage, bgfx_indirect_buffer_handle_t _handle, bgfx_access_t _access);
void (*set_image)(uint8_t _stage, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format);
- void (*dispatch)(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ);
- void (*dispatch_indirect)(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num);
+ void (*dispatch)(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags);
+ void (*dispatch_indirect)(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags);
void (*discard)(uint8_t _flags);
void (*blit)(bgfx_view_id_t _id, bgfx_texture_handle_t _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, bgfx_texture_handle_t _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth);
};
diff --git a/include/bgfx/defines.h b/include/bgfx/defines.h
index cd2655e15..2d157181a 100644
--- a/include/bgfx/defines.h
+++ b/include/bgfx/defines.h
@@ -15,7 +15,7 @@
#ifndef BGFX_DEFINES_H_HEADER_GUARD
#define BGFX_DEFINES_H_HEADER_GUARD
-#define BGFX_API_VERSION UINT32_C(104)
+#define BGFX_API_VERSION UINT32_C(105)
/**
* Color RGB/alpha/depth write. When it's not specified write will be disabled.
@@ -258,13 +258,14 @@
* on a finer grain.
*
*/
-#define BGFX_DISCARD_NONE UINT8_C(0x00) //!< Discard nothing
-#define BGFX_DISCARD_INDEX_BUFFER UINT8_C(0x01) //!< Discard only Index Buffer
-#define BGFX_DISCARD_VERTEX_STREAMS UINT8_C(0x02) //!< Discard only Vertex Streams
-#define BGFX_DISCARD_TEXTURE_SAMPLERS UINT8_C(0x04) //!< Discard only texture samplers
-#define BGFX_DISCARD_COMPUTE UINT8_C(0x08) //!< Discard only Compute shader related state
-#define BGFX_DISCARD_STATE UINT8_C(0x10) //!< Discard only state
-#define BGFX_DISCARD_ALL UINT8_C(0xff) //!< Discard every rendering states
+#define BGFX_DISCARD_NONE UINT8_C(0x00) //!< Preserve everything.
+#define BGFX_DISCARD_BINDINGS UINT8_C(0x01) //!< Discard texture sampler and buffer bindings.
+#define BGFX_DISCARD_INDEX_BUFFER UINT8_C(0x02) //!< Discard index buffer.
+#define BGFX_DISCARD_INSTANCE_DATA UINT8_C(0x04) //!< Discard instance data.
+#define BGFX_DISCARD_STATE UINT8_C(0x08) //!< Discard state.
+#define BGFX_DISCARD_TRANSFORM UINT8_C(0x10) //!< Discard transform.
+#define BGFX_DISCARD_VERTEX_STREAMS UINT8_C(0x20) //!< Discard vertex streams.
+#define BGFX_DISCARD_ALL UINT8_C(0xff) //!< Discard all states.
#define BGFX_DEBUG_NONE UINT32_C(0x00000000) //!< No debug.
#define BGFX_DEBUG_WIREFRAME UINT32_C(0x00000001) //!< Enable wireframe for all primitives.
diff --git a/scripts/bgfx.idl b/scripts/bgfx.idl
index 5112f019c..e06705d38 100644
--- a/scripts/bgfx.idl
+++ b/scripts/bgfx.idl
@@ -1,7 +1,7 @@
-- vim: syntax=lua
-- bgfx interface
-version(104)
+version(105)
typedef "bool"
typedef "char"
@@ -202,13 +202,14 @@ flag.Clear { bits = 16 }
--- Rendering state discard. When state is preserved in submit, rendering states can be discarded
--- on a finer grain.
flag.Discard { bits = 8, const, desc = "Discard flags" }
- .None (0x00) --- Discard nothing
- .IndexBuffer (0x01) --- Discard only Index Buffer
- .VertexStreams (0x02) --- Discard only Vertex Streams
- .TextureSamplers (0x04) --- Discard only texture samplers
- .Compute (0x08) --- Discard only Compute shader related state
- .State (0x10) --- Discard only state
- .All (0xff) --- Discard every rendering states
+ .None (0x00) --- Preserve everything.
+ .Bindings (0x01) --- Discard texture sampler and buffer bindings.
+ .IndexBuffer (0x02) --- Discard index buffer.
+ .InstanceData (0x04) --- Discard instance data.
+ .State (0x08) --- Discard state.
+ .Transform (0x10) --- Discard transform.
+ .VertexStreams (0x20) --- Discard vertex streams.
+ .All (0xff) --- Discard all states.
()
flag.Debug { bits = 32 }
@@ -2352,7 +2353,7 @@ func.Encoder.submit
.program "ProgramHandle" --- Program.
.depth "uint32_t" --- Depth for sorting.
{ default = 0 }
- .flags "uint8_t" --- Which states to discard for next draw. See BGFX_DISCARD_
+ .flags "uint8_t" --- Discard or preserve states. See `BGFX_DISCARD_*`.
{ default = "BGFX_DISCARD_ALL" }
--- Submit primitive with occlusion query for rendering.
@@ -2363,7 +2364,7 @@ func.Encoder.submit { cname = "submit_occlusion_query" }
.occlusionQuery "OcclusionQueryHandle" --- Occlusion query.
.depth "uint32_t" --- Depth for sorting.
{ default = 0 }
- .flags "uint8_t" --- Which states to discard for next draw. See BGFX_DISCARD_
+ .flags "uint8_t" --- Discard or preserve states. See `BGFX_DISCARD_*`.
{ default = "BGFX_DISCARD_ALL" }
--- Submit primitive for rendering with index and instance data info from
@@ -2379,7 +2380,7 @@ func.Encoder.submit { cname = "submit_indirect" }
{ default = 1 }
.depth "uint32_t" --- Depth for sorting.
{ default = 0 }
- .flags "uint8_t" --- Which states to discard for next draw. See BGFX_DISCARD_
+ .flags "uint8_t" --- Discard or preserve states. See `BGFX_DISCARD_*`.
{ default = "BGFX_DISCARD_ALL" }
--- Set compute index buffer.
@@ -2438,6 +2439,8 @@ func.Encoder.dispatch
{ default = 1 }
.numZ "uint32_t" --- Number of groups Z.
{ default = 1 }
+ .flags "uint8_t" --- Discard or preserve states. See `BGFX_DISCARD_*`.
+ { default = "BGFX_DISCARD_ALL" }
--- Dispatch compute indirect.
func.Encoder.dispatch { cname = "dispatch_indirect" }
@@ -2449,11 +2452,13 @@ func.Encoder.dispatch { cname = "dispatch_indirect" }
{ default = 0 }
.num "uint16_t" --- Number of dispatches.
{ default = 1 }
+ .flags "uint8_t" --- Discard or preserve states. See `BGFX_DISCARD_*`.
+ { default = "BGFX_DISCARD_ALL" }
--- Discard previously set state for draw or compute call.
func.Encoder.discard
"void"
- .flags "uint8_t" --- Draw/compute states to discard.
+ .flags "uint8_t" --- Discard or preserve states. See `BGFX_DISCARD_*`.
{ default = "BGFX_DISCARD_ALL" }
--- Blit 2D texture region between two 2D textures.
@@ -2950,6 +2955,8 @@ func.dispatch
{ default = 1 }
.numZ "uint32_t" --- Number of groups Z.
{ default = 1 }
+ .flags "uint8_t" --- Discard or preserve states. See `BGFX_DISCARD_*`.
+ { default = "BGFX_DISCARD_ALL" }
--- Dispatch compute indirect.
func.dispatch { cname = "dispatch_indirect" }
@@ -2961,6 +2968,8 @@ func.dispatch { cname = "dispatch_indirect" }
{ default = 0 }
.num "uint16_t" --- Number of dispatches.
{ default = 1 }
+ .flags "uint8_t" --- Discard or preserve states. See `BGFX_DISCARD_*`.
+ { default = "BGFX_DISCARD_ALL" }
--- Discard previously set state for draw or compute call.
func.discard
diff --git a/src/bgfx.cpp b/src/bgfx.cpp
index 2977726f3..12260c495 100644
--- a/src/bgfx.cpp
+++ b/src/bgfx.cpp
@@ -1212,14 +1212,14 @@ namespace bgfx
if (m_discard)
{
- discard();
+ discard(_flags);
return;
}
if (0 == m_draw.m_numVertices
&& 0 == m_draw.m_numIndices)
{
- discard();
+ discard(_flags);
++m_numDropped;
return;
}
@@ -1227,7 +1227,7 @@ namespace bgfx
const uint32_t renderItemIdx = bx::atomicFetchAndAddsat(&m_frame->m_numRenderItems, 1, BGFX_CONFIG_MAX_DRAW_CALLS);
if (BGFX_CONFIG_MAX_DRAW_CALLS-1 <= renderItemIdx)
{
- discard();
+ discard(_flags);
++m_numDropped;
return;
}
@@ -1300,7 +1300,7 @@ namespace bgfx
}
}
- void EncoderImpl::dispatch(ViewId _id, ProgramHandle _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ)
+ void EncoderImpl::dispatch(ViewId _id, ProgramHandle _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
{
@@ -1309,14 +1309,14 @@ namespace bgfx
if (m_discard)
{
- discard();
+ discard(_flags);
return;
}
const uint32_t renderItemIdx = bx::atomicFetchAndAddsat(&m_frame->m_numRenderItems, 1, BGFX_CONFIG_MAX_DRAW_CALLS);
if (BGFX_CONFIG_MAX_DRAW_CALLS-1 <= renderItemIdx)
{
- discard();
+ discard(_flags);
++m_numDropped;
return;
}
@@ -1347,8 +1347,8 @@ namespace bgfx
m_frame->m_renderItem[renderItemIdx].compute = m_compute;
m_frame->m_renderItemBind[renderItemIdx] = m_bind;
- m_compute.clear();
- m_bind.clear();
+ m_compute.clear(_flags);
+ m_bind.clear(_flags);
m_uniformBegin = m_uniformEnd;
}
@@ -3798,25 +3798,25 @@ namespace bgfx
BGFX_ENCODER(setImage(_stage, _handle, _mip, _access, _format) );
}
- void Encoder::dispatch(ViewId _id, ProgramHandle _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ)
+ void Encoder::dispatch(ViewId _id, ProgramHandle _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
{
BGFX_CHECK_CAPS(BGFX_CAPS_COMPUTE, "Compute is not supported!");
BGFX_CHECK_HANDLE_INVALID_OK("dispatch", s_ctx->m_programHandle, _program);
- BGFX_ENCODER(dispatch(_id, _program, _numX, _numY, _numZ) );
+ BGFX_ENCODER(dispatch(_id, _program, _numX, _numY, _numZ, _flags) );
}
- void Encoder::dispatch(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num)
+ void Encoder::dispatch(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
{
BGFX_CHECK_CAPS(BGFX_CAPS_DRAW_INDIRECT, "Dispatch indirect is not supported!");
BGFX_CHECK_CAPS(BGFX_CAPS_COMPUTE, "Compute is not supported!");
BGFX_CHECK_HANDLE_INVALID_OK("dispatch", s_ctx->m_programHandle, _program);
BGFX_CHECK_HANDLE("dispatch", s_ctx->m_vertexBufferHandle, _indirectHandle);
- BGFX_ENCODER(dispatch(_id, _program, _indirectHandle, _start, _num) );
+ BGFX_ENCODER(dispatch(_id, _program, _indirectHandle, _start, _num, _flags) );
}
- void Encoder::discard(uint8_t flags)
+ void Encoder::discard(uint8_t _flags)
{
- BGFX_ENCODER(discard(flags) );
+ BGFX_ENCODER(discard(_flags) );
}
void Encoder::blit(ViewId _id, TextureHandle _dst, uint16_t _dstX, uint16_t _dstY, TextureHandle _src, uint16_t _srcX, uint16_t _srcY, uint16_t _width, uint16_t _height)
@@ -5014,22 +5014,22 @@ namespace bgfx
s_ctx->m_encoder0->setImage(_stage, _handle, _mip, _access, _format);
}
- void dispatch(ViewId _id, ProgramHandle _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ)
+ void dispatch(ViewId _id, ProgramHandle _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
{
BGFX_CHECK_API_THREAD();
- s_ctx->m_encoder0->dispatch(_id, _handle, _numX, _numY, _numZ);
+ s_ctx->m_encoder0->dispatch(_id, _handle, _numX, _numY, _numZ, _flags);
}
- void dispatch(ViewId _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num)
+ void dispatch(ViewId _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
{
BGFX_CHECK_API_THREAD();
- s_ctx->m_encoder0->dispatch(_id, _handle, _indirectHandle, _start, _num);
+ s_ctx->m_encoder0->dispatch(_id, _handle, _indirectHandle, _start, _num, _flags);
}
- void discard(uint8_t flags)
+ void discard(uint8_t _flags)
{
BGFX_CHECK_API_THREAD();
- s_ctx->m_encoder0->discard(flags);
+ s_ctx->m_encoder0->discard(_flags);
}
void blit(ViewId _id, TextureHandle _dst, uint16_t _dstX, uint16_t _dstY, TextureHandle _src, uint16_t _srcX, uint16_t _srcY, uint16_t _width, uint16_t _height)
diff --git a/src/bgfx.idl.inl b/src/bgfx.idl.inl
index bdbcc53f8..91512d089 100644
--- a/src/bgfx.idl.inl
+++ b/src/bgfx.idl.inl
@@ -897,19 +897,19 @@ BGFX_C_API void bgfx_encoder_set_image(bgfx_encoder_t* _this, uint8_t _stage, bg
This->setImage(_stage, handle.cpp, _mip, (bgfx::Access::Enum)_access, (bgfx::TextureFormat::Enum)_format);
}
-BGFX_C_API void bgfx_encoder_dispatch(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ)
+BGFX_C_API void bgfx_encoder_dispatch(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
{
bgfx::Encoder* This = (bgfx::Encoder*)_this;
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } program = { _program };
- This->dispatch((bgfx::ViewId)_id, program.cpp, _numX, _numY, _numZ);
+ This->dispatch((bgfx::ViewId)_id, program.cpp, _numX, _numY, _numZ, _flags);
}
-BGFX_C_API void bgfx_encoder_dispatch_indirect(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num)
+BGFX_C_API void bgfx_encoder_dispatch_indirect(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
{
bgfx::Encoder* This = (bgfx::Encoder*)_this;
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } program = { _program };
union { bgfx_indirect_buffer_handle_t c; bgfx::IndirectBufferHandle cpp; } indirectHandle = { _indirectHandle };
- This->dispatch((bgfx::ViewId)_id, program.cpp, indirectHandle.cpp, _start, _num);
+ This->dispatch((bgfx::ViewId)_id, program.cpp, indirectHandle.cpp, _start, _num, _flags);
}
BGFX_C_API void bgfx_encoder_discard(bgfx_encoder_t* _this, uint8_t _flags)
@@ -1141,17 +1141,17 @@ BGFX_C_API void bgfx_set_image(uint8_t _stage, bgfx_texture_handle_t _handle, ui
bgfx::setImage(_stage, handle.cpp, _mip, (bgfx::Access::Enum)_access, (bgfx::TextureFormat::Enum)_format);
}
-BGFX_C_API void bgfx_dispatch(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ)
+BGFX_C_API void bgfx_dispatch(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } program = { _program };
- bgfx::dispatch((bgfx::ViewId)_id, program.cpp, _numX, _numY, _numZ);
+ bgfx::dispatch((bgfx::ViewId)_id, program.cpp, _numX, _numY, _numZ, _flags);
}
-BGFX_C_API void bgfx_dispatch_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num)
+BGFX_C_API void bgfx_dispatch_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } program = { _program };
union { bgfx_indirect_buffer_handle_t c; bgfx::IndirectBufferHandle cpp; } indirectHandle = { _indirectHandle };
- bgfx::dispatch((bgfx::ViewId)_id, program.cpp, indirectHandle.cpp, _start, _num);
+ bgfx::dispatch((bgfx::ViewId)_id, program.cpp, indirectHandle.cpp, _start, _num, _flags);
}
BGFX_C_API void bgfx_discard(uint8_t _flags)
diff --git a/src/bgfx_p.h b/src/bgfx_p.h
index 2d11ba4de..764d9527f 100644
--- a/src/bgfx_p.h
+++ b/src/bgfx_p.h
@@ -1545,7 +1545,7 @@ constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRA
{
void clear(uint8_t _flags = BGFX_DISCARD_ALL)
{
- if (0 != (_flags & BGFX_DISCARD_TEXTURE_SAMPLERS) )
+ if (0 != (_flags & BGFX_DISCARD_BINDINGS) )
{
for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++ii)
{
@@ -1566,40 +1566,49 @@ constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRA
{
if (0 != (_flags & BGFX_DISCARD_STATE) )
{
- m_uniformBegin = 0;
- m_uniformEnd = 0;
- m_stateFlags = BGFX_STATE_DEFAULT;
- m_stencil = packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT);
- m_rgba = 0;
- m_startMatrix = 0;
- m_startIndex = 0;
- m_numIndices = UINT32_MAX;
- m_numVertices = UINT32_MAX;
+ m_uniformBegin = 0;
+ m_uniformEnd = 0;
+ m_uniformIdx = UINT8_MAX;
+
+ m_stateFlags = BGFX_STATE_DEFAULT;
+ m_stencil = packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT);
+ m_rgba = 0;
+ m_scissor = UINT16_MAX;
+ }
+
+ if (0 != (_flags & BGFX_DISCARD_TRANSFORM) )
+ {
+ m_startMatrix = 0;
+ m_numMatrices = 1;
+ }
+
+ if (0 != (_flags & BGFX_DISCARD_INSTANCE_DATA) )
+ {
m_instanceDataOffset = 0;
m_instanceDataStride = 0;
m_numInstances = 1;
- m_startIndirect = 0;
- m_numIndirect = UINT16_MAX;
- m_numMatrices = 1;
- m_submitFlags = 0;
- m_scissor = UINT16_MAX;
-
m_instanceDataBuffer.idx = kInvalidHandle;
- m_indirectBuffer.idx = kInvalidHandle;
- m_occlusionQuery.idx = kInvalidHandle;
- m_uniformIdx = UINT8_MAX;
}
if (0 != (_flags & BGFX_DISCARD_VERTEX_STREAMS) )
{
- m_streamMask = 0;
+ m_numVertices = UINT32_MAX;
+ m_streamMask = 0;
m_stream[0].clear();
}
if (0 != (_flags & BGFX_DISCARD_INDEX_BUFFER) )
{
+ m_startIndex = 0;
+ m_numIndices = UINT32_MAX;
m_indexBuffer.idx = kInvalidHandle;
}
+
+ m_submitFlags = 0;
+ m_startIndirect = 0;
+ m_numIndirect = UINT16_MAX;
+ m_indirectBuffer.idx = kInvalidHandle;
+ m_occlusionQuery.idx = kInvalidHandle;
}
bool setStreamBit(uint8_t _stream, VertexBufferHandle _handle)
@@ -1640,24 +1649,28 @@ constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRA
BX_ALIGN_DECL_CACHE_LINE(struct) RenderCompute
{
- void clear(uint8_t _flags = BGFX_DISCARD_ALL)
+ void clear(uint8_t _flags)
{
- if (0 != (_flags & BGFX_DISCARD_COMPUTE) )
+ if (0 != (_flags & BGFX_DISCARD_STATE) )
{
m_uniformBegin = 0;
m_uniformEnd = 0;
- m_startMatrix = 0;
- m_numX = 0;
- m_numY = 0;
- m_numZ = 0;
- m_numMatrices = 0;
- m_submitFlags = 0;
m_uniformIdx = UINT8_MAX;
-
- m_indirectBuffer.idx = kInvalidHandle;
- m_startIndirect = 0;
- m_numIndirect = UINT16_MAX;
}
+
+ if (0 != (_flags & BGFX_DISCARD_TRANSFORM) )
+ {
+ m_startMatrix = 0;
+ m_numMatrices = 0;
+ }
+
+ m_numX = 0;
+ m_numY = 0;
+ m_numZ = 0;
+ m_submitFlags = 0;
+ m_indirectBuffer.idx = kInvalidHandle;
+ m_startIndirect = 0;
+ m_numIndirect = UINT16_MAX;
}
uint32_t m_uniformBegin;
@@ -2201,7 +2214,7 @@ constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRA
{
EncoderImpl()
{
- discard();
+ discard(BGFX_DISCARD_ALL);
}
void begin(Frame* _frame, uint8_t _idx)
@@ -2496,7 +2509,7 @@ constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRA
bind.m_mip = _mip;
}
- void discard(uint8_t _flags = BGFX_DISCARD_ALL)
+ void discard(uint8_t _flags)
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
{
@@ -2509,9 +2522,9 @@ constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRA
m_bind.clear(_flags);
}
- void submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, uint32_t _depth, uint8_t _flags = BGFX_DISCARD_ALL);
+ void submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, uint32_t _depth, uint8_t _flags);
- void submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint32_t _depth, uint8_t _flags = BGFX_DISCARD_ALL)
+ void submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint32_t _depth, uint8_t _flags)
{
m_draw.m_startIndirect = _start;
m_draw.m_numIndirect = _num;
@@ -2520,14 +2533,14 @@ constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRA
submit(_id, _program, handle, _depth, _flags);
}
- void dispatch(ViewId _id, ProgramHandle _handle, uint32_t _ngx, uint32_t _ngy, uint32_t _ngz);
+ void dispatch(ViewId _id, ProgramHandle _handle, uint32_t _ngx, uint32_t _ngy, uint32_t _ngz, uint8_t _flags);
- void dispatch(ViewId _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num)
+ void dispatch(ViewId _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
{
m_compute.m_indirectBuffer = _indirectHandle;
m_compute.m_startIndirect = _start;
m_compute.m_numIndirect = _num;
- dispatch(_id, _handle, 0, 0, 0);
+ dispatch(_id, _handle, 0, 0, 0, _flags);
}
void blit(ViewId _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, TextureHandle _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth);