Enable multiDrawIndirect feature, add indirect command struct (#30)

Fixes a validation error when attempting to draw multiple primitives via an indirect draw call. Adds some documentation for how indirect draw buffers should be set up.

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: MoonsideGames/Refresh#30
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
no-fixed-command-buffers
TheSpydog 2023-01-04 18:44:02 +00:00 committed by cosmonaut
parent 329ffab6b8
commit e4215efe5e
2 changed files with 10 additions and 0 deletions

View File

@ -376,6 +376,14 @@ typedef struct Refresh_TextureSlice
uint32_t level;
} Refresh_TextureSlice;
typedef struct Refresh_IndirectDrawCommand
{
uint32_t vertexCount;
uint32_t instanceCount;
uint32_t firstVertex;
uint32_t firstInstance;
} Refresh_IndirectDrawCommand;
/* State structures */
typedef struct Refresh_SamplerStateCreateInfo
@ -666,6 +674,7 @@ REFRESHAPI void Refresh_DrawPrimitives(
);
/* 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.

View File

@ -10537,6 +10537,7 @@ static uint8_t VULKAN_INTERNAL_CreateLogicalDevice(
SDL_zero(deviceFeatures);
deviceFeatures.fillModeNonSolid = VK_TRUE;
deviceFeatures.samplerAnisotropy = VK_TRUE;
deviceFeatures.multiDrawIndirect = VK_TRUE;
/* creating the logical device */