diff --git a/bindings/cs/bgfx.cs b/bindings/cs/bgfx.cs index 0d04ddd31..c55545a83 100644 --- a/bindings/cs/bgfx.cs +++ b/bindings/cs/bgfx.cs @@ -532,6 +532,11 @@ public static partial class bgfx [Flags] public enum DiscardFlags : uint { + /// + /// Discard nothing + /// + None = 0x00000000, + /// /// Discard only Index Buffer /// @@ -3728,10 +3733,10 @@ public static partial class bgfx /// View id. /// Program. /// Depth for sorting. - /// Preserve internal draw state for next draw call submit. + /// Which states to discard for next draw. 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, bool _preserveState); + public static extern unsafe void encoder_submit(Encoder* _this, ushort _id, ProgramHandle _program, uint _depth, byte _flags); /// /// Submit primitive with occlusion query for rendering. @@ -3741,10 +3746,10 @@ public static partial class bgfx /// Program. /// Occlusion query. /// Depth for sorting. - /// Preserve internal draw state for next draw call submit. + /// Which states to discard for next draw. 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, bool _preserveState); + public static extern unsafe void encoder_submit_occlusion_query(Encoder* _this, ushort _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, uint _depth, byte _flags); /// /// Submit primitive for rendering with index and instance data info from @@ -3757,10 +3762,10 @@ public static partial class bgfx /// First element in indirect buffer. /// Number of dispatches. /// Depth for sorting. - /// Preserve internal draw state for next draw call submit. + /// Which states to discard for next draw. 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, bool _preserveState); + public static extern unsafe void encoder_submit_indirect(Encoder* _this, ushort _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, ushort _start, ushort _num, uint _depth, byte _flags); /// /// Set compute index buffer. @@ -4243,10 +4248,10 @@ public static partial class bgfx /// View id. /// Program. /// Depth for sorting. - /// Preserve internal draw state for next draw call submit. + /// Which states to discard for next draw. See BGFX_DISCARD_ /// [DllImport(DllName, EntryPoint="bgfx_submit", CallingConvention = CallingConvention.Cdecl)] - public static extern unsafe void submit(ushort _id, ProgramHandle _program, uint _depth, bool _preserveState); + public static extern unsafe void submit(ushort _id, ProgramHandle _program, uint _depth, byte _flags); /// /// Submit primitive with occlusion query for rendering. @@ -4256,10 +4261,10 @@ public static partial class bgfx /// Program. /// Occlusion query. /// Depth for sorting. - /// Preserve internal draw state for next draw call submit. + /// Which states to discard for next draw. See BGFX_DISCARD_ /// [DllImport(DllName, EntryPoint="bgfx_submit_occlusion_query", CallingConvention = CallingConvention.Cdecl)] - public static extern unsafe void submit_occlusion_query(ushort _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, uint _depth, bool _preserveState); + public static extern unsafe void submit_occlusion_query(ushort _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, uint _depth, byte _flags); /// /// Submit primitive for rendering with index and instance data info from @@ -4272,10 +4277,10 @@ public static partial class bgfx /// First element in indirect buffer. /// Number of dispatches. /// Depth for sorting. - /// Preserve internal draw state for next draw call submit. + /// Which states to discard for next draw. See BGFX_DISCARD_ /// [DllImport(DllName, EntryPoint="bgfx_submit_indirect", CallingConvention = CallingConvention.Cdecl)] - public static extern unsafe void submit_indirect(ushort _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, ushort _start, ushort _num, uint _depth, bool _preserveState); + public static extern unsafe void submit_indirect(ushort _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, ushort _start, ushort _num, uint _depth, byte _flags); /// /// Set compute index buffer. diff --git a/bindings/d/funcs.d b/bindings/d/funcs.d index 273cf5b26..65a94296a 100644 --- a/bindings/d/funcs.d +++ b/bindings/d/funcs.d @@ -1463,9 +1463,9 @@ version(BindBgfx_Static) * _id = View id. * _program = Program. * _depth = Depth for sorting. - * _preserveState = Preserve internal draw state for next draw call submit. + * _flags = Which states to discard for next draw. See BGFX_DISCARD_ */ - void bgfx_encoder_submit(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _depth, bool _preserveState); + void bgfx_encoder_submit(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _depth, byte _flags); /** * Submit primitive with occlusion query for rendering. @@ -1474,9 +1474,9 @@ version(BindBgfx_Static) * _program = Program. * _occlusionQuery = Occlusion query. * _depth = Depth for sorting. - * _preserveState = Preserve internal draw state for next draw call submit. + * _flags = Which states to discard for next draw. 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, bool _preserveState); + 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); /** * Submit primitive for rendering with index and instance data info from @@ -1488,9 +1488,9 @@ version(BindBgfx_Static) * _start = First element in indirect buffer. * _num = Number of dispatches. * _depth = Depth for sorting. - * _preserveState = Preserve internal draw state for next draw call submit. + * _flags = Which states to discard for next draw. 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, bool _preserveState); + 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); /** * Set compute index buffer. @@ -1922,9 +1922,9 @@ version(BindBgfx_Static) * _id = View id. * _program = Program. * _depth = Depth for sorting. - * _preserveState = Preserve internal draw state for next draw call submit. + * _flags = Which states to discard for next draw. See BGFX_DISCARD_ */ - void bgfx_submit(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _depth, bool _preserveState); + void bgfx_submit(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _depth, byte _flags); /** * Submit primitive with occlusion query for rendering. @@ -1933,9 +1933,9 @@ version(BindBgfx_Static) * _program = Program. * _occlusionQuery = Occlusion query. * _depth = Depth for sorting. - * _preserveState = Preserve internal draw state for next draw call submit. + * _flags = Which states to discard for next draw. See BGFX_DISCARD_ */ - void bgfx_submit_occlusion_query(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, uint _depth, bool _preserveState); + void bgfx_submit_occlusion_query(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, uint _depth, byte _flags); /** * Submit primitive for rendering with index and instance data info from @@ -1947,9 +1947,9 @@ version(BindBgfx_Static) * _start = First element in indirect buffer. * _num = Number of dispatches. * _depth = Depth for sorting. - * _preserveState = Preserve internal draw state for next draw call submit. + * _flags = Which states to discard for next draw. See BGFX_DISCARD_ */ - void bgfx_submit_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, ushort _start, ushort _num, uint _depth, bool _preserveState); + void bgfx_submit_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, ushort _start, ushort _num, uint _depth, byte _flags); /** * Set compute index buffer. @@ -3648,9 +3648,9 @@ else * _id = View id. * _program = Program. * _depth = Depth for sorting. - * _preserveState = Preserve internal draw state for next draw call submit. + * _flags = Which states to discard for next draw. 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, bool _preserveState); + 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,9 +3660,9 @@ else * _program = Program. * _occlusionQuery = Occlusion query. * _depth = Depth for sorting. - * _preserveState = Preserve internal draw state for next draw call submit. + * _flags = Which states to discard for next draw. 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, bool _preserveState); + 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,9 +3675,9 @@ else * _start = First element in indirect buffer. * _num = Number of dispatches. * _depth = Depth for sorting. - * _preserveState = Preserve internal draw state for next draw call submit. + * _flags = Which states to discard for next draw. 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, bool _preserveState); + 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; /** @@ -4149,9 +4149,9 @@ else * _id = View id. * _program = Program. * _depth = Depth for sorting. - * _preserveState = Preserve internal draw state for next draw call submit. + * _flags = Which states to discard for next draw. See BGFX_DISCARD_ */ - alias da_bgfx_submit = void function(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _depth, bool _preserveState); + alias da_bgfx_submit = void function(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint _depth, byte _flags); da_bgfx_submit bgfx_submit; /** @@ -4161,9 +4161,9 @@ else * _program = Program. * _occlusionQuery = Occlusion query. * _depth = Depth for sorting. - * _preserveState = Preserve internal draw state for next draw call submit. + * _flags = Which states to discard for next draw. See BGFX_DISCARD_ */ - alias da_bgfx_submit_occlusion_query = void function(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, uint _depth, bool _preserveState); + alias da_bgfx_submit_occlusion_query = void function(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, uint _depth, byte _flags); da_bgfx_submit_occlusion_query bgfx_submit_occlusion_query; /** @@ -4176,9 +4176,9 @@ else * _start = First element in indirect buffer. * _num = Number of dispatches. * _depth = Depth for sorting. - * _preserveState = Preserve internal draw state for next draw call submit. + * _flags = Which states to discard for next draw. See BGFX_DISCARD_ */ - alias da_bgfx_submit_indirect = void function(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_indirect_buffer_handle_t _indirectHandle, ushort _start, ushort _num, uint _depth, bool _preserveState); + alias da_bgfx_submit_indirect = void function(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_submit_indirect bgfx_submit_indirect; /** diff --git a/bindings/d/types.d b/bindings/d/types.d index a59821364..193d15268 100644 --- a/bindings/d/types.d +++ b/bindings/d/types.d @@ -193,6 +193,7 @@ 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 diff --git a/examples/41-tess/tess.cpp b/examples/41-tess/tess.cpp index f5c3a167d..9f979a66e 100644 --- a/examples/41-tess/tess.cpp +++ b/examples/41-tess/tess.cpp @@ -610,7 +610,7 @@ namespace m_uniforms.submit(); - bgfx::submit(1, m_programsDraw[m_shading], m_dispatchIndirect, 0, true); + bgfx::submit(1, m_programsDraw[m_shading], m_dispatchIndirect, 0, 1, 0, BGFX_DISCARD_NONE); m_pingPong = 1 - m_pingPong; diff --git a/include/bgfx/bgfx.h b/include/bgfx/bgfx.h index 08cf1591f..bdd54432e 100644 --- a/include/bgfx/bgfx.h +++ b/include/bgfx/bgfx.h @@ -1407,7 +1407,7 @@ namespace bgfx /// @param[in] _id View id. /// @param[in] _program Program. /// @param[in] _depth Depth for sorting. - /// @param[in] _preserveState Preserve internal draw state for next draw + /// @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_ /// call submit. /// /// @attention C99 equivalent is `bgfx_encoder_submit`. @@ -1416,7 +1416,7 @@ namespace bgfx ViewId _id , ProgramHandle _program , uint32_t _depth = 0 - , bool _preserveState = false + , uint8_t _flags = BGFX_DISCARD_ALL ); /// Submit primitive with occlusion query for rendering. @@ -1425,7 +1425,7 @@ namespace bgfx /// @param[in] _program Program. /// @param[in] _occlusionQuery Occlusion query. /// @param[in] _depth Depth for sorting. - /// @param[in] _preserveState Preserve internal draw state for next draw + /// @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_ /// call submit. /// /// @attention C99 equivalent is `bgfx_encoder_submit_occlusion_query`. @@ -1435,7 +1435,7 @@ namespace bgfx , ProgramHandle _program , OcclusionQueryHandle _occlusionQuery , uint32_t _depth = 0 - , bool _preserveState = false + , uint8_t _flags = BGFX_DISCARD_ALL ); /// Submit primitive for rendering with index and instance data info from @@ -1447,7 +1447,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] _preserveState Preserve internal draw state for next draw + /// @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_ /// call submit. /// /// @attention C99 equivalent is `bgfx_encoder_submit_indirect`. @@ -1459,7 +1459,7 @@ namespace bgfx , uint16_t _start = 0 , uint16_t _num = 1 , uint32_t _depth = 0 - , bool _preserveState = false + , uint8_t _flags = BGFX_DISCARD_ALL ); /// Set compute index buffer. @@ -3804,7 +3804,7 @@ namespace bgfx /// @param[in] _id View id. /// @param[in] _program Program. /// @param[in] _depth Depth for sorting. - /// @param[in] _preserveState Preserve internal draw state for next draw + /// @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_ /// call submit. /// /// @attention C99 equivalent is `bgfx_submit`. @@ -3813,7 +3813,7 @@ namespace bgfx ViewId _id , ProgramHandle _program , uint32_t _depth = 0 - , bool _preserveState = false + , uint8_t _flags = BGFX_DISCARD_ALL ); /// Submit primitive with occlusion query for rendering. @@ -3822,7 +3822,7 @@ namespace bgfx /// @param[in] _program Program. /// @param[in] _occlusionQuery Occlusion query. /// @param[in] _depth Depth for sorting. - /// @param[in] _preserveState Preserve internal draw state for next draw + /// @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_ /// call submit. /// /// @attention C99 equivalent is `bgfx_submit_occlusion_query`. @@ -3832,7 +3832,7 @@ namespace bgfx , ProgramHandle _program , OcclusionQueryHandle _occlusionQuery , uint32_t _depth = 0 - , bool _preserveState = false + , uint8_t _flags = BGFX_DISCARD_ALL ); /// Submit primitive for rendering with index and instance data info from @@ -3844,7 +3844,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] _preserveState Preserve internal draw state for next draw + /// @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_ /// call submit. /// /// @attention C99 equivalent is `bgfx_submit_indirect`. @@ -3856,7 +3856,7 @@ namespace bgfx , uint16_t _start = 0 , uint16_t _num = 1 , uint32_t _depth = 0 - , bool _preserveState = false + , uint8_t _flags = BGFX_DISCARD_ALL ); /// Set compute index buffer. diff --git a/include/bgfx/c99/bgfx.h b/include/bgfx/c99/bgfx.h index 815a105ad..f2966d6b4 100644 --- a/include/bgfx/c99/bgfx.h +++ b/include/bgfx/c99/bgfx.h @@ -2551,10 +2551,10 @@ 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] _preserveState Preserve internal draw state for next draw call submit. + * @param[in] _flags Which states to discard for next draw. 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, bool _preserveState); +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); /** * Submit primitive with occlusion query for rendering. @@ -2563,10 +2563,10 @@ 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] _preserveState Preserve internal draw state for next draw call submit. + * @param[in] _flags Which states to discard for next draw. 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, bool _preserveState); +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); /** * Submit primitive for rendering with index and instance data info from @@ -2578,10 +2578,10 @@ 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] _preserveState Preserve internal draw state for next draw call submit. + * @param[in] _flags Which states to discard for next draw. 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, bool _preserveState); +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); /** * Set compute index buffer. @@ -3069,10 +3069,10 @@ BGFX_C_API void bgfx_touch(bgfx_view_id_t _id); * @param[in] _id View id. * @param[in] _program Program. * @param[in] _depth Depth for sorting. - * @param[in] _preserveState Preserve internal draw state for next draw call submit. + * @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_ * */ -BGFX_C_API void bgfx_submit(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _depth, bool _preserveState); +BGFX_C_API void bgfx_submit(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _depth, uint8_t _flags); /** * Submit primitive with occlusion query for rendering. @@ -3081,10 +3081,10 @@ BGFX_C_API void bgfx_submit(bgfx_view_id_t _id, bgfx_program_handle_t _program, * @param[in] _program Program. * @param[in] _occlusionQuery Occlusion query. * @param[in] _depth Depth for sorting. - * @param[in] _preserveState Preserve internal draw state for next draw call submit. + * @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_ * */ -BGFX_C_API void bgfx_submit_occlusion_query(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, uint32_t _depth, bool _preserveState); +BGFX_C_API void bgfx_submit_occlusion_query(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, uint32_t _depth, uint8_t _flags); /** * Submit primitive for rendering with index and instance data info from @@ -3096,10 +3096,10 @@ BGFX_C_API void bgfx_submit_occlusion_query(bgfx_view_id_t _id, bgfx_program_han * @param[in] _start First element in indirect buffer. * @param[in] _num Number of dispatches. * @param[in] _depth Depth for sorting. - * @param[in] _preserveState Preserve internal draw state for next draw call submit. + * @param[in] _flags Which states to discard for next draw. See BGFX_DISCARD_ * */ -BGFX_C_API void bgfx_submit_indirect(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, bool _preserveState); +BGFX_C_API void bgfx_submit_indirect(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); /** * Set compute index buffer. @@ -3547,9 +3547,9 @@ struct bgfx_interface_vtbl void (*encoder_set_instance_count)(bgfx_encoder_t* _this, uint32_t _numInstances); void (*encoder_set_texture)(bgfx_encoder_t* _this, uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint32_t _flags); void (*encoder_touch)(bgfx_encoder_t* _this, bgfx_view_id_t _id); - void (*encoder_submit)(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _depth, bool _preserveState); - void (*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, bool _preserveState); - void (*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, bool _preserveState); + void (*encoder_submit)(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _depth, uint8_t _flags); + void (*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); + void (*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); void (*encoder_set_compute_index_buffer)(bgfx_encoder_t* _this, uint8_t _stage, bgfx_index_buffer_handle_t _handle, bgfx_access_t _access); void (*encoder_set_compute_vertex_buffer)(bgfx_encoder_t* _this, uint8_t _stage, bgfx_vertex_buffer_handle_t _handle, bgfx_access_t _access); void (*encoder_set_compute_dynamic_index_buffer)(bgfx_encoder_t* _this, uint8_t _stage, bgfx_dynamic_index_buffer_handle_t _handle, bgfx_access_t _access); @@ -3589,9 +3589,9 @@ struct bgfx_interface_vtbl void (*set_instance_count)(uint32_t _numInstances); void (*set_texture)(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint32_t _flags); void (*touch)(bgfx_view_id_t _id); - void (*submit)(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _depth, bool _preserveState); - void (*submit_occlusion_query)(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, uint32_t _depth, bool _preserveState); - void (*submit_indirect)(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, bool _preserveState); + void (*submit)(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _depth, uint8_t _flags); + void (*submit_occlusion_query)(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, uint32_t _depth, uint8_t _flags); + void (*submit_indirect)(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); void (*set_compute_index_buffer)(uint8_t _stage, bgfx_index_buffer_handle_t _handle, bgfx_access_t _access); void (*set_compute_vertex_buffer)(uint8_t _stage, bgfx_vertex_buffer_handle_t _handle, bgfx_access_t _access); void (*set_compute_dynamic_index_buffer)(uint8_t _stage, bgfx_dynamic_index_buffer_handle_t _handle, bgfx_access_t _access); diff --git a/include/bgfx/defines.h b/include/bgfx/defines.h index 89cefd460..f5c7d038d 100644 --- a/include/bgfx/defines.h +++ b/include/bgfx/defines.h @@ -258,6 +258,7 @@ * 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 diff --git a/scripts/bgfx.idl b/scripts/bgfx.idl index 379b32202..ffd6af686 100644 --- a/scripts/bgfx.idl +++ b/scripts/bgfx.idl @@ -201,7 +201,8 @@ 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, base = 1, desc = "Discard flags" } +flag.Discard { bits = 8, desc = "Discard flags" } + .None(0) --- Discard nothing .IndexBuffer --- Discard only Index Buffer .VertexStreams --- Discard only Vertex Streams .TextureSamplers --- Discard only texture samplers @@ -2351,8 +2352,8 @@ func.Encoder.submit .program "ProgramHandle" --- Program. .depth "uint32_t" --- Depth for sorting. { default = 0 } - .preserveState "bool" --- Preserve internal draw state for next draw call submit. - { default = false } + .flags "uint8_t" --- Which states to discard for next draw. See BGFX_DISCARD_ + { default = "BGFX_DISCARD_ALL" } --- Submit primitive with occlusion query for rendering. func.Encoder.submit { cname = "submit_occlusion_query" } @@ -2362,8 +2363,8 @@ func.Encoder.submit { cname = "submit_occlusion_query" } .occlusionQuery "OcclusionQueryHandle" --- Occlusion query. .depth "uint32_t" --- Depth for sorting. { default = 0 } - .preserveState "bool" --- Preserve internal draw state for next draw call submit. - { default = false } + .flags "uint8_t" --- Which states to discard for next draw. See BGFX_DISCARD_ + { default = "BGFX_DISCARD_ALL" } --- Submit primitive for rendering with index and instance data info from --- indirect buffer. @@ -2378,8 +2379,8 @@ func.Encoder.submit { cname = "submit_indirect" } { default = 1 } .depth "uint32_t" --- Depth for sorting. { default = 0 } - .preserveState "bool" --- Preserve internal draw state for next draw call submit. - { default = false } + .flags "uint8_t" --- Which states to discard for next draw. See BGFX_DISCARD_ + { default = "BGFX_DISCARD_ALL" } --- Set compute index buffer. func.Encoder.setBuffer { cname = "set_compute_index_buffer" } @@ -2863,8 +2864,8 @@ func.submit .program "ProgramHandle" --- Program. .depth "uint32_t" --- Depth for sorting. { default = 0 } - .preserveState "bool" --- Preserve internal draw state for next draw call submit. - { default = false } + .flags "uint8_t" --- Which states to discard for next draw. See BGFX_DISCARD_ + { default = "BGFX_DISCARD_ALL" } --- Submit primitive with occlusion query for rendering. func.submit { cname = "submit_occlusion_query" } @@ -2874,8 +2875,8 @@ func.submit { cname = "submit_occlusion_query" } .occlusionQuery "OcclusionQueryHandle" --- Occlusion query. .depth "uint32_t" --- Depth for sorting. { default = 0 } - .preserveState "bool" --- Preserve internal draw state for next draw call submit. - { default = false } + .flags "uint8_t" --- Which states to discard for next draw. See BGFX_DISCARD_ + { default = "BGFX_DISCARD_ALL" } --- Submit primitive for rendering with index and instance data info from --- indirect buffer. @@ -2890,8 +2891,8 @@ func.submit { cname = "submit_indirect" } { default = 1 } .depth "uint32_t" --- Depth for sorting. { default = 0 } - .preserveState "bool" --- Preserve internal draw state for next draw call submit. - { default = false } + .flags "uint8_t" --- Which states to discard for next draw. See BGFX_DISCARD_ + { default = "BGFX_DISCARD_ALL" } --- Set compute index buffer. func.setBuffer { cname = "set_compute_index_buffer" } diff --git a/src/bgfx.cpp b/src/bgfx.cpp index dbb3a675b..f3fd1e62e 100644 --- a/src/bgfx.cpp +++ b/src/bgfx.cpp @@ -1191,10 +1191,10 @@ namespace bgfx } } - void EncoderImpl::submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, uint32_t _depth, bool _preserveState) + void EncoderImpl::submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, uint32_t _depth, uint8_t _flags) { if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) - && !_preserveState) + && (_flags == BGFX_DISCARD_ALL)) { m_uniformSet.clear(); } @@ -1291,10 +1291,10 @@ namespace bgfx m_frame->m_renderItem[renderItemIdx].draw = m_draw; m_frame->m_renderItemBind[renderItemIdx] = m_bind; - if (!_preserveState) + m_draw.clear(_flags); + m_bind.clear(_flags); + if (_flags == BGFX_DISCARD_ALL) { - m_draw.clear(); - m_bind.clear(); m_uniformBegin = m_uniformEnd; } } @@ -3713,13 +3713,13 @@ namespace bgfx submit(_id, handle); } - void Encoder::submit(ViewId _id, ProgramHandle _program, uint32_t _depth, bool _preserveState) + void Encoder::submit(ViewId _id, ProgramHandle _program, uint32_t _depth, uint8_t _flags) { OcclusionQueryHandle handle = BGFX_INVALID_HANDLE; - submit(_id, _program, handle, _depth, _preserveState); + submit(_id, _program, handle, _depth, _flags); } - void Encoder::submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, uint32_t _depth, bool _preserveState) + void Encoder::submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, uint32_t _depth, uint8_t _flags) { BX_CHECK(false || !isValid(_occlusionQuery) @@ -3728,15 +3728,15 @@ namespace bgfx ); BGFX_CHECK_HANDLE_INVALID_OK("submit", s_ctx->m_programHandle, _program); BGFX_CHECK_HANDLE_INVALID_OK("submit", s_ctx->m_occlusionQueryHandle, _occlusionQuery); - BGFX_ENCODER(submit(_id, _program, _occlusionQuery, _depth, _preserveState) ); + BGFX_ENCODER(submit(_id, _program, _occlusionQuery, _depth, _flags) ); } - void Encoder::submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint32_t _depth, bool _preserveState) + void Encoder::submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint32_t _depth, uint8_t _flags) { BGFX_CHECK_HANDLE_INVALID_OK("submit", s_ctx->m_programHandle, _program); BGFX_CHECK_HANDLE("submit", s_ctx->m_vertexBufferHandle, _indirectHandle); BGFX_CHECK_CAPS(BGFX_CAPS_DRAW_INDIRECT, "Draw indirect is not supported!"); - BGFX_ENCODER(submit(_id, _program, _indirectHandle, _start, _num, _depth, _preserveState) ); + BGFX_ENCODER(submit(_id, _program, _indirectHandle, _start, _num, _depth, _flags) ); } void Encoder::setBuffer(uint8_t _stage, IndexBufferHandle _handle, Access::Enum _access) @@ -4953,22 +4953,22 @@ namespace bgfx submit(_id, handle); } - void submit(ViewId _id, ProgramHandle _program, uint32_t _depth, bool _preserveState) + void submit(ViewId _id, ProgramHandle _program, uint32_t _depth, uint8_t _flags) { OcclusionQueryHandle handle = BGFX_INVALID_HANDLE; - submit(_id, _program, handle, _depth, _preserveState); + submit(_id, _program, handle, _depth, _flags); } - void submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, uint32_t _depth, bool _preserveState) + void submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, uint32_t _depth, uint8_t _flags) { BGFX_CHECK_API_THREAD(); - s_ctx->m_encoder0->submit(_id, _program, _occlusionQuery, _depth, _preserveState); + s_ctx->m_encoder0->submit(_id, _program, _occlusionQuery, _depth, _flags); } - void submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint32_t _depth, bool _preserveState) + void submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint32_t _depth, uint8_t _flags) { BGFX_CHECK_API_THREAD(); - s_ctx->m_encoder0->submit(_id, _program, _indirectHandle, _start, _num, _depth, _preserveState); + s_ctx->m_encoder0->submit(_id, _program, _indirectHandle, _start, _num, _depth, _flags); } void setBuffer(uint8_t _stage, IndexBufferHandle _handle, Access::Enum _access) diff --git a/src/bgfx.idl.inl b/src/bgfx.idl.inl index a64c2c57f..bdbcc53f8 100644 --- a/src/bgfx.idl.inl +++ b/src/bgfx.idl.inl @@ -832,27 +832,27 @@ BGFX_C_API void bgfx_encoder_touch(bgfx_encoder_t* _this, bgfx_view_id_t _id) This->touch((bgfx::ViewId)_id); } -BGFX_C_API void bgfx_encoder_submit(bgfx_encoder_t* _this, bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _depth, bool _preserveState) +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) { bgfx::Encoder* This = (bgfx::Encoder*)_this; union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } program = { _program }; - This->submit((bgfx::ViewId)_id, program.cpp, _depth, _preserveState); + This->submit((bgfx::ViewId)_id, program.cpp, _depth, _flags); } -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, bool _preserveState) +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) { bgfx::Encoder* This = (bgfx::Encoder*)_this; union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } program = { _program }; union { bgfx_occlusion_query_handle_t c; bgfx::OcclusionQueryHandle cpp; } occlusionQuery = { _occlusionQuery }; - This->submit((bgfx::ViewId)_id, program.cpp, occlusionQuery.cpp, _depth, _preserveState); + This->submit((bgfx::ViewId)_id, program.cpp, occlusionQuery.cpp, _depth, _flags); } -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, bool _preserveState) +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) { 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->submit((bgfx::ViewId)_id, program.cpp, indirectHandle.cpp, _start, _num, _depth, _preserveState); + This->submit((bgfx::ViewId)_id, program.cpp, indirectHandle.cpp, _start, _num, _depth, _flags); } BGFX_C_API void bgfx_encoder_set_compute_index_buffer(bgfx_encoder_t* _this, uint8_t _stage, bgfx_index_buffer_handle_t _handle, bgfx_access_t _access) @@ -1085,24 +1085,24 @@ BGFX_C_API void bgfx_touch(bgfx_view_id_t _id) bgfx::touch((bgfx::ViewId)_id); } -BGFX_C_API void bgfx_submit(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _depth, bool _preserveState) +BGFX_C_API void bgfx_submit(bgfx_view_id_t _id, bgfx_program_handle_t _program, uint32_t _depth, uint8_t _flags) { union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } program = { _program }; - bgfx::submit((bgfx::ViewId)_id, program.cpp, _depth, _preserveState); + bgfx::submit((bgfx::ViewId)_id, program.cpp, _depth, _flags); } -BGFX_C_API void bgfx_submit_occlusion_query(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, uint32_t _depth, bool _preserveState) +BGFX_C_API void bgfx_submit_occlusion_query(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, uint32_t _depth, uint8_t _flags) { union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } program = { _program }; union { bgfx_occlusion_query_handle_t c; bgfx::OcclusionQueryHandle cpp; } occlusionQuery = { _occlusionQuery }; - bgfx::submit((bgfx::ViewId)_id, program.cpp, occlusionQuery.cpp, _depth, _preserveState); + bgfx::submit((bgfx::ViewId)_id, program.cpp, occlusionQuery.cpp, _depth, _flags); } -BGFX_C_API void bgfx_submit_indirect(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, bool _preserveState) +BGFX_C_API void bgfx_submit_indirect(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) { union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } program = { _program }; union { bgfx_indirect_buffer_handle_t c; bgfx::IndirectBufferHandle cpp; } indirectHandle = { _indirectHandle }; - bgfx::submit((bgfx::ViewId)_id, program.cpp, indirectHandle.cpp, _start, _num, _depth, _preserveState); + bgfx::submit((bgfx::ViewId)_id, program.cpp, indirectHandle.cpp, _start, _num, _depth, _flags); } BGFX_C_API void bgfx_set_compute_index_buffer(uint8_t _stage, bgfx_index_buffer_handle_t _handle, bgfx_access_t _access) diff --git a/src/bgfx_p.h b/src/bgfx_p.h index 79f2bd245..968dfb9e7 100644 --- a/src/bgfx_p.h +++ b/src/bgfx_p.h @@ -2509,15 +2509,15 @@ 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, bool _preserveState); + void submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, 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, bool _preserveState) + void submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint32_t _depth, uint8_t _flags = BGFX_DISCARD_ALL) { m_draw.m_startIndirect = _start; m_draw.m_numIndirect = _num; m_draw.m_indirectBuffer = _indirectHandle; OcclusionQueryHandle handle = BGFX_INVALID_HANDLE; - submit(_id, _program, handle, _depth, _preserveState); + submit(_id, _program, handle, _depth, _flags); } void dispatch(ViewId _id, ProgramHandle _handle, uint32_t _ngx, uint32_t _ngy, uint32_t _ngz);