From f1d1670b0b1b5c08064df95dabd295f3cf5dcf7f Mon Sep 17 00:00:00 2001 From: gdkchan Date: Wed, 16 Nov 2022 14:53:04 -0300 Subject: Implement HLE macro for DrawElementsIndirect (#3748) * Implement HLE macro for DrawElementsIndirect * Shader cache version bump * Use GL_ARB_shader_draw_parameters extension on OpenGL * Fix DrawIndexedIndirectCount on Vulkan when extension is not supported * Implement DrawIndex * Alignment * Fix some validation errors * Rename BaseIds to DrawParameters * Fix incorrect index buffer and vertex buffer size in some cases * Add HLE macros for DrawArraysInstanced and DrawElementsInstanced * Perform a regular draw when indirect data is not modified * Use non-indirect draw methods if indirect buffer was not GPU modified * Only check if draw parameters match if the shader actually uses them * Expose Macro HLE setting on GUI * Reset FirstVertex and FirstInstance after draw * Update shader cache version again since some people already tested this * PR feedback Co-authored-by: riperiperi --- .../Engine/Threed/IndirectDrawType.cs | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Ryujinx.Graphics.Gpu/Engine/Threed/IndirectDrawType.cs (limited to 'Ryujinx.Graphics.Gpu/Engine/Threed/IndirectDrawType.cs') diff --git a/Ryujinx.Graphics.Gpu/Engine/Threed/IndirectDrawType.cs b/Ryujinx.Graphics.Gpu/Engine/Threed/IndirectDrawType.cs new file mode 100644 index 00000000..d78aa498 --- /dev/null +++ b/Ryujinx.Graphics.Gpu/Engine/Threed/IndirectDrawType.cs @@ -0,0 +1,38 @@ +namespace Ryujinx.Graphics.Gpu.Engine.Threed +{ + /// + /// Indirect draw type, which can be indexed or non-indexed, with or without a draw count. + /// + enum IndirectDrawType + { + /// + /// Non-indexed draw without draw count. + /// + DrawIndirect = 0, + + /// + /// Indexed draw without draw count. + /// + DrawIndexedIndirect = Indexed, + + /// + /// Non-indexed draw with draw count. + /// + DrawIndirectCount = Count, + + /// + /// Indexed draw with draw count. + /// + DrawIndexedIndirectCount = Indexed | Count, + + /// + /// Indexed flag. + /// + Indexed = 1 << 0, + + /// + /// Draw count flag. + /// + Count = 1 << 1 + } +} \ No newline at end of file -- cgit v1.2.3