forked from MoonsideGames/Refresh
BindVertexBuffers and BindIndexBuffer
parent
47823c67ac
commit
7d2018e712
|
@ -1233,6 +1233,21 @@ REFRESHAPI void REFRESH_BindGraphicsPipeline(
|
||||||
REFRESH_GraphicsPipeline *graphicsPipeline
|
REFRESH_GraphicsPipeline *graphicsPipeline
|
||||||
);
|
);
|
||||||
|
|
||||||
|
REFRESHAPI void REFRESH_BindVertexBuffers(
|
||||||
|
REFRESH_Device *device,
|
||||||
|
uint32_t firstBinding,
|
||||||
|
uint32_t bindingCount,
|
||||||
|
REFRESH_Buffer **pBuffers,
|
||||||
|
uint64_t *pOffsets
|
||||||
|
);
|
||||||
|
|
||||||
|
REFRESHAPI void REFRESH_BindIndexBuffer(
|
||||||
|
REFRESH_Device *device,
|
||||||
|
REFRESH_Buffer *buffer,
|
||||||
|
uint64_t offset,
|
||||||
|
REFRESH_IndexElementSize indexElementSize
|
||||||
|
);
|
||||||
|
|
||||||
/* Presentation */
|
/* Presentation */
|
||||||
|
|
||||||
REFRESHAPI void REFRESH_Present(
|
REFRESHAPI void REFRESH_Present(
|
||||||
|
|
|
@ -481,6 +481,21 @@ struct REFRESH_Device
|
||||||
REFRESH_GraphicsPipeline *graphicsPipeline
|
REFRESH_GraphicsPipeline *graphicsPipeline
|
||||||
);
|
);
|
||||||
|
|
||||||
|
void(*BindVertexBuffers)(
|
||||||
|
REFRESH_Renderer *driverData,
|
||||||
|
uint32_t firstBinding,
|
||||||
|
uint32_t bindingCount,
|
||||||
|
REFRESH_Buffer **pBuffers,
|
||||||
|
uint64_t *pOffsets
|
||||||
|
);
|
||||||
|
|
||||||
|
void(*BindIndexBuffer)(
|
||||||
|
REFRESH_Renderer *driverData,
|
||||||
|
REFRESH_Buffer *buffer,
|
||||||
|
uint64_t offset,
|
||||||
|
REFRESH_IndexElementSize indexElementSize
|
||||||
|
);
|
||||||
|
|
||||||
void(*Present)(
|
void(*Present)(
|
||||||
REFRESH_Renderer *driverData,
|
REFRESH_Renderer *driverData,
|
||||||
REFRESH_Rect *sourceRectangle,
|
REFRESH_Rect *sourceRectangle,
|
||||||
|
@ -536,6 +551,8 @@ struct REFRESH_Device
|
||||||
ASSIGN_DRIVER_FUNC(BeginRenderPass, name) \
|
ASSIGN_DRIVER_FUNC(BeginRenderPass, name) \
|
||||||
ASSIGN_DRIVER_FUNC(EndRenderPass, name) \
|
ASSIGN_DRIVER_FUNC(EndRenderPass, name) \
|
||||||
ASSIGN_DRIVER_FUNC(BindGraphicsPipeline, name) \
|
ASSIGN_DRIVER_FUNC(BindGraphicsPipeline, name) \
|
||||||
|
ASSIGN_DRIVER_FUNC(BindVertexBuffers, name) \
|
||||||
|
ASSIGN_DRIVER_FUNC(BindIndexBuffer, name) \
|
||||||
ASSIGN_DRIVER_FUNC(Present, name)
|
ASSIGN_DRIVER_FUNC(Present, name)
|
||||||
|
|
||||||
typedef struct REFRESH_Driver
|
typedef struct REFRESH_Driver
|
||||||
|
|
|
@ -183,6 +183,12 @@ static VkFormat RefreshToVK_VertexFormat[] =
|
||||||
VK_FORMAT_R16G16B16A16_SFLOAT /* HALFVECTOR4 */
|
VK_FORMAT_R16G16B16A16_SFLOAT /* HALFVECTOR4 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static VkIndexType RefreshToVK_IndexType[] =
|
||||||
|
{
|
||||||
|
VK_INDEX_TYPE_UINT16,
|
||||||
|
VK_INDEX_TYPE_UINT32
|
||||||
|
};
|
||||||
|
|
||||||
static VkPrimitiveTopology RefreshToVK_PrimitiveType[] =
|
static VkPrimitiveTopology RefreshToVK_PrimitiveType[] =
|
||||||
{
|
{
|
||||||
VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
|
VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
|
||||||
|
@ -3887,6 +3893,51 @@ static void VULKAN_BindGraphicsPipeline(
|
||||||
SDL_assert(0);
|
SDL_assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void VULKAN_BindVertexBuffers(
|
||||||
|
REFRESH_Renderer *driverData,
|
||||||
|
uint32_t firstBinding,
|
||||||
|
uint32_t bindingCount,
|
||||||
|
REFRESH_Buffer **pBuffers,
|
||||||
|
uint64_t *pOffsets
|
||||||
|
) {
|
||||||
|
VkBuffer *buffers = SDL_stack_alloc(VkBuffer, bindingCount);
|
||||||
|
VulkanBuffer* currentBuffer;
|
||||||
|
VulkanRenderer* renderer = (VulkanRenderer*) driverData;
|
||||||
|
|
||||||
|
for (int i = 0; i < bindingCount; i += 1)
|
||||||
|
{
|
||||||
|
currentBuffer = (VulkanBuffer*) pBuffers[i];
|
||||||
|
buffers[i] = currentBuffer->subBuffers[currentBuffer->currentSubBufferIndex]->buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
RECORD_CMD(renderer->vkCmdBindVertexBuffers(
|
||||||
|
renderer->currentCommandBuffer,
|
||||||
|
firstBinding,
|
||||||
|
bindingCount,
|
||||||
|
buffers,
|
||||||
|
pOffsets
|
||||||
|
));
|
||||||
|
|
||||||
|
SDL_stack_free(buffers);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VULKAN_BindIndexBuffer(
|
||||||
|
REFRESH_Renderer *driverData,
|
||||||
|
REFRESH_Buffer *buffer,
|
||||||
|
uint64_t offset,
|
||||||
|
REFRESH_IndexElementSize indexElementSize
|
||||||
|
) {
|
||||||
|
VulkanRenderer* renderer = (VulkanRenderer*) driverData;
|
||||||
|
VulkanBuffer* vulkanBuffer = (VulkanBuffer*) buffer;
|
||||||
|
|
||||||
|
RECORD_CMD(renderer->vkCmdBindIndexBuffer(
|
||||||
|
renderer->currentCommandBuffer,
|
||||||
|
vulkanBuffer->subBuffers[vulkanBuffer->currentSubBufferIndex]->buffer,
|
||||||
|
offset,
|
||||||
|
RefreshToVK_IndexType[indexElementSize]
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
static void VULKAN_Present(
|
static void VULKAN_Present(
|
||||||
REFRESH_Renderer *driverData,
|
REFRESH_Renderer *driverData,
|
||||||
REFRESH_Rect *sourceRectangle,
|
REFRESH_Rect *sourceRectangle,
|
||||||
|
|
Loading…
Reference in New Issue