diff --git a/include/Refresh.h b/include/Refresh.h index cee5123..16817ad 100644 --- a/include/Refresh.h +++ b/include/Refresh.h @@ -133,11 +133,24 @@ typedef enum REFRESH_SurfaceFormat typedef enum REFRESH_DepthFormat { + REFRESH_DEPTHFORMAT_D16_UNORM, + REFRESH_DEPTHFORMAT_D32_SFLOAT, REFRESH_DEPTHFORMAT_D16_UNORM_S8_UINT, REFRESH_DEPTHFORMAT_D24_UNORM_S8_UINT, REFRESH_DEPTHFORMAT_D32_SFLOAT_S8_UINT } REFRESH_DepthFormat; +typedef enum REFRESH_SampleCount +{ + REFRESH_SAMPLECOUNT_1, + REFRESH_SAMPLECOUNT_2, + REFRESH_SAMPLECOUNT_4, + REFRESH_SAMPLECOUNT_8, + REFRESH_SAMPLECOUNT_16, + REFRESH_SAMPLECOUNT_32, + REFRESH_SAMPLECOUNT_64 +} REFRESH_SampleCount; + typedef enum REFRESH_CubeMapFace { REFRESH_CUBEMAPFACE_POSITIVEX, @@ -454,7 +467,7 @@ typedef struct REFRESH_PipelineLayoutCreateInfo typedef struct REFRESH_ColorTargetDescription { REFRESH_SurfaceFormat format; - uint32_t multisampleCount; + REFRESH_SampleCount multisampleCount; REFRESH_LoadOp loadOp; REFRESH_StoreOp storeOp; } REFRESH_ColorTargetDescription; diff --git a/src/Refresh_Driver_Vulkan.c b/src/Refresh_Driver_Vulkan.c index e867a06..88dc8e2 100644 --- a/src/Refresh_Driver_Vulkan.c +++ b/src/Refresh_Driver_Vulkan.c @@ -67,6 +67,10 @@ static const char* deviceExtensionNames[] = }; static uint32_t deviceExtensionCount = SDL_arraysize(deviceExtensionNames); +/* Defines */ + +#define NULL_RENDER_PASS (REFRESH_RenderPass*) 0 + /* Enums */ typedef enum VulkanResourceAccessType @@ -113,6 +117,64 @@ typedef enum CreateSwapchainResult CREATE_SWAPCHAIN_SURFACE_ZERO, } CreateSwapchainResult; +/* Conversions */ + +static VkFormat RefreshToVK_SurfaceFormat[] = +{ + VK_FORMAT_R8G8B8A8_UNORM, /* R8G8B8A8 */ + VK_FORMAT_R5G6B5_UNORM_PACK16, /* R5G6B5 */ + VK_FORMAT_A1R5G5B5_UNORM_PACK16, /* A1R5G5B5 */ + VK_FORMAT_B4G4R4A4_UNORM_PACK16, /* B4G4R4A4 */ + VK_FORMAT_BC1_RGBA_UNORM_BLOCK, /* BC1 */ + VK_FORMAT_BC2_UNORM_BLOCK, /* BC3 */ + VK_FORMAT_BC3_UNORM_BLOCK, /* BC5 */ + VK_FORMAT_R8G8_SNORM, /* R8G8_SNORM */ + VK_FORMAT_R8G8B8A8_SNORM, /* R8G8B8A8_SNORM */ + VK_FORMAT_A2R10G10B10_UNORM_PACK32, /* A2R10G10B10 */ + VK_FORMAT_R16G16_UNORM, /* R16G16 */ + VK_FORMAT_R16G16B16A16_UNORM, /* R16G16B16A16 */ + VK_FORMAT_R8_UNORM, /* R8 */ + VK_FORMAT_R32_SFLOAT, /* R32_SFLOAT */ + VK_FORMAT_R32G32_SFLOAT, /* R32G32_SFLOAT */ + VK_FORMAT_R32G32B32A32_SFLOAT, /* R32G32B32A32_SFLOAT */ + VK_FORMAT_R16_SFLOAT, /* R16_SFLOAT */ + VK_FORMAT_R16G16_SFLOAT, /* R16G16_SFLOAT */ + VK_FORMAT_R16G16B16A16_SFLOAT /* R16G16B16A16_SFLOAT */ +}; + +static VkFormat RefreshToVK_DepthFormat[] = +{ + VK_FORMAT_D16_UNORM, + VK_FORMAT_D32_SFLOAT, + VK_FORMAT_D16_UNORM_S8_UINT, + VK_FORMAT_D24_UNORM_S8_UINT, + VK_FORMAT_D32_SFLOAT_S8_UINT +}; + +static VkAttachmentLoadOp RefreshToVK_LoadOp[] = +{ + VK_ATTACHMENT_LOAD_OP_LOAD, + VK_ATTACHMENT_LOAD_OP_CLEAR, + VK_ATTACHMENT_LOAD_OP_DONT_CARE +}; + +static VkAttachmentStoreOp RefreshToVK_StoreOp[] = +{ + VK_ATTACHMENT_STORE_OP_STORE, + VK_ATTACHMENT_STORE_OP_DONT_CARE +}; + +static VkSampleCountFlagBits RefreshToVK_SampleCount[] = +{ + VK_SAMPLE_COUNT_1_BIT, + VK_SAMPLE_COUNT_2_BIT, + VK_SAMPLE_COUNT_4_BIT, + VK_SAMPLE_COUNT_8_BIT, + VK_SAMPLE_COUNT_16_BIT, + VK_SAMPLE_COUNT_32_BIT, + VK_SAMPLE_COUNT_64_BIT +}; + /* Structures */ typedef struct QueueFamilyIndices @@ -307,7 +369,7 @@ static void VULKAN_DestroyDevice( } static void VULKAN_Clear( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_ClearOptions options, REFRESH_Vec4 **colors, uint32_t colorCount, @@ -318,7 +380,7 @@ static void VULKAN_Clear( } static void VULKAN_DrawIndexedPrimitives( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_PrimitiveType primitiveType, uint32_t baseVertex, uint32_t minVertexIndex, @@ -332,7 +394,7 @@ static void VULKAN_DrawIndexedPrimitives( } static void VULKAN_DrawInstancedPrimitives( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_PrimitiveType primitiveType, uint32_t baseVertex, uint32_t minVertexIndex, @@ -347,7 +409,7 @@ static void VULKAN_DrawInstancedPrimitives( } static void VULKAN_DrawPrimitives( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_PrimitiveType primitiveType, uint32_t vertexStart, uint32_t primitiveCount @@ -356,42 +418,228 @@ static void VULKAN_DrawPrimitives( } static REFRESH_RenderPass* VULKAN_CreateRenderPass( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_RenderPassCreateInfo *renderPassCreateInfo ) { - SDL_assert(0); + VulkanRenderer *renderer = (VulkanRenderer*) driverData; + + VkResult vulkanResult; + VkAttachmentDescription attachmentDescriptions[2 * MAX_RENDERTARGET_BINDINGS + 1]; + VkAttachmentReference colorAttachmentReferences[MAX_RENDERTARGET_BINDINGS]; + VkAttachmentReference resolveReferences[MAX_RENDERTARGET_BINDINGS + 1]; + VkAttachmentReference depthStencilAttachmentReference; + VkRenderPassCreateInfo vkRenderPassCreateInfo; + VkSubpassDescription subpass; + VkRenderPass renderPass; + uint32_t i; + + uint32_t attachmentDescriptionCount = 0; + uint32_t colorAttachmentReferenceCount = 0; + uint32_t resolveReferenceCount = 0; + + for (i = 0; i < renderPassCreateInfo->colorTargetCount; i += 1) + { + if (renderPassCreateInfo->colorTargetDescriptions[attachmentDescriptionCount].multisampleCount > REFRESH_SAMPLECOUNT_1) + { + /* Resolve attachment and multisample attachment */ + + attachmentDescriptions[attachmentDescriptionCount].flags = 0; + attachmentDescriptions[attachmentDescriptionCount].format = RefreshToVK_SurfaceFormat[ + renderPassCreateInfo->colorTargetDescriptions[i].format + ]; + attachmentDescriptions[attachmentDescriptionCount].samples = + VK_SAMPLE_COUNT_1_BIT; + attachmentDescriptions[attachmentDescriptionCount].loadOp = RefreshToVK_LoadOp[ + renderPassCreateInfo->colorTargetDescriptions[i].loadOp + ]; + attachmentDescriptions[attachmentDescriptionCount].storeOp = RefreshToVK_StoreOp[ + renderPassCreateInfo->colorTargetDescriptions[i].storeOp + ]; + attachmentDescriptions[attachmentDescriptionCount].stencilLoadOp = + VK_ATTACHMENT_LOAD_OP_DONT_CARE; + attachmentDescriptions[attachmentDescriptionCount].stencilStoreOp = + VK_ATTACHMENT_STORE_OP_DONT_CARE; + attachmentDescriptions[attachmentDescriptionCount].initialLayout = + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + attachmentDescriptions[attachmentDescriptionCount].finalLayout = + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + + resolveReferences[resolveReferenceCount].attachment = + attachmentDescriptionCount; + resolveReferences[resolveReferenceCount].layout = + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + + attachmentDescriptionCount += 1; + resolveReferenceCount += 1; + + attachmentDescriptions[attachmentDescriptionCount].flags = 0; + attachmentDescriptions[attachmentDescriptionCount].format = RefreshToVK_SurfaceFormat[ + renderPassCreateInfo->colorTargetDescriptions[i].format + ]; + attachmentDescriptions[attachmentDescriptionCount].samples = RefreshToVK_SampleCount[ + renderPassCreateInfo->colorTargetDescriptions[i].multisampleCount + ]; + attachmentDescriptions[attachmentDescriptionCount].loadOp = RefreshToVK_LoadOp[ + renderPassCreateInfo->colorTargetDescriptions[i].loadOp + ]; + attachmentDescriptions[attachmentDescriptionCount].storeOp = RefreshToVK_StoreOp[ + renderPassCreateInfo->colorTargetDescriptions[i].storeOp + ]; + attachmentDescriptions[attachmentDescriptionCount].stencilLoadOp = + VK_ATTACHMENT_LOAD_OP_DONT_CARE; + attachmentDescriptions[attachmentDescriptionCount].stencilStoreOp = + VK_ATTACHMENT_STORE_OP_DONT_CARE; + attachmentDescriptions[attachmentDescriptionCount].initialLayout = + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + attachmentDescriptions[attachmentDescriptionCount].finalLayout = + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + + colorAttachmentReferences[colorAttachmentReferenceCount].attachment = + attachmentDescriptionCount; + colorAttachmentReferences[colorAttachmentReferenceCount].layout = + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + + attachmentDescriptionCount += 1; + colorAttachmentReferenceCount += 1; + } + else + { + attachmentDescriptions[attachmentDescriptionCount].flags = 0; + attachmentDescriptions[attachmentDescriptionCount].format = RefreshToVK_SurfaceFormat[ + renderPassCreateInfo->colorTargetDescriptions[i].format + ]; + attachmentDescriptions[attachmentDescriptionCount].samples = + VK_SAMPLE_COUNT_1_BIT; + attachmentDescriptions[attachmentDescriptionCount].loadOp = RefreshToVK_LoadOp[ + renderPassCreateInfo->colorTargetDescriptions[i].loadOp + ]; + attachmentDescriptions[attachmentDescriptionCount].storeOp = RefreshToVK_StoreOp[ + renderPassCreateInfo->colorTargetDescriptions[i].storeOp + ]; + attachmentDescriptions[attachmentDescriptionCount].stencilLoadOp = + VK_ATTACHMENT_LOAD_OP_DONT_CARE; + attachmentDescriptions[attachmentDescriptionCount].stencilStoreOp = + VK_ATTACHMENT_STORE_OP_DONT_CARE; + attachmentDescriptions[attachmentDescriptionCount].initialLayout = + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + attachmentDescriptions[attachmentDescriptionCount].finalLayout = + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + + attachmentDescriptionCount += 1; + + colorAttachmentReferences[colorAttachmentReferenceCount].attachment = i; + colorAttachmentReferences[colorAttachmentReferenceCount].layout = + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + + colorAttachmentReferenceCount += 1; + } + } + + subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; + subpass.flags = 0; + subpass.inputAttachmentCount = 0; + subpass.pInputAttachments = NULL; + subpass.colorAttachmentCount = renderPassCreateInfo->colorTargetCount; + subpass.pColorAttachments = colorAttachmentReferences; + subpass.preserveAttachmentCount = 0; + subpass.pPreserveAttachments = NULL; + + if (renderPassCreateInfo->depthTargetDescription == NULL) + { + subpass.pDepthStencilAttachment = NULL; + } + else + { + attachmentDescriptions[attachmentDescriptionCount].flags = 0; + attachmentDescriptions[attachmentDescriptionCount].format = RefreshToVK_DepthFormat[ + renderPassCreateInfo->depthTargetDescription->depthFormat + ]; + attachmentDescriptions[attachmentDescriptionCount].samples = + VK_SAMPLE_COUNT_1_BIT; /* FIXME: do these take multisamples? */ + attachmentDescriptions[attachmentDescriptionCount].loadOp = RefreshToVK_LoadOp[ + renderPassCreateInfo->depthTargetDescription->loadOp + ]; + attachmentDescriptions[attachmentDescriptionCount].storeOp = RefreshToVK_StoreOp[ + renderPassCreateInfo->depthTargetDescription->storeOp + ]; + attachmentDescriptions[attachmentDescriptionCount].stencilLoadOp = RefreshToVK_LoadOp[ + renderPassCreateInfo->depthTargetDescription->stencilLoadOp + ]; + attachmentDescriptions[attachmentDescriptionCount].stencilStoreOp = RefreshToVK_StoreOp[ + renderPassCreateInfo->depthTargetDescription->stencilStoreOp + ]; + attachmentDescriptions[attachmentDescriptionCount].initialLayout = + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + attachmentDescriptions[attachmentDescriptionCount].finalLayout = + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + + depthStencilAttachmentReference.attachment = + attachmentDescriptionCount; + depthStencilAttachmentReference.layout = + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + + subpass.pDepthStencilAttachment = + &depthStencilAttachmentReference; + + attachmentDescriptionCount += 1; + } + + vkRenderPassCreateInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO; + vkRenderPassCreateInfo.pNext = NULL; + vkRenderPassCreateInfo.flags = 0; + vkRenderPassCreateInfo.pAttachments = attachmentDescriptions; + vkRenderPassCreateInfo.attachmentCount = attachmentDescriptionCount; + vkRenderPassCreateInfo.subpassCount = 1; + vkRenderPassCreateInfo.pSubpasses = &subpass; + vkRenderPassCreateInfo.dependencyCount = 0; + vkRenderPassCreateInfo.pDependencies = NULL; + + vulkanResult = renderer->vkCreateRenderPass( + renderer->logicalDevice, + &vkRenderPassCreateInfo, + NULL, + &renderPass + ); + + if (vulkanResult != VK_SUCCESS) + { + LogVulkanResult("vkCreateRenderPass", vulkanResult); + return NULL_RENDER_PASS; + } + + return (REFRESH_RenderPass*) renderPass; } static REFRESH_GraphicsPipeline* VULKAN_CreateGraphicsPipeline( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_GraphicsPipelineCreateInfo *pipelineCreateInfo ) { SDL_assert(0); } static REFRESH_Sampler* VULKAN_CreateSampler( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_SamplerStateCreateInfo *samplerStateCreateInfo ) { SDL_assert(0); } static REFRESH_Framebuffer* VULKAN_CreateFramebuffer( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_FramebufferCreateInfo *framebufferCreateInfo ) { SDL_assert(0); } static REFRESH_ShaderModule* VULKAN_CreateShaderModule( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_ShaderModuleCreateInfo *shaderModuleCreateInfo ) { SDL_assert(0); } static REFRESH_Texture* VULKAN_CreateTexture2D( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_SurfaceFormat format, uint32_t width, uint32_t height, @@ -401,7 +649,7 @@ static REFRESH_Texture* VULKAN_CreateTexture2D( } static REFRESH_Texture* VULKAN_CreateTexture3D( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_SurfaceFormat format, uint32_t width, uint32_t height, @@ -412,7 +660,7 @@ static REFRESH_Texture* VULKAN_CreateTexture3D( } static REFRESH_Texture* VULKAN_CreateTextureCube( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_SurfaceFormat format, uint32_t size, uint32_t levelCount @@ -421,7 +669,7 @@ static REFRESH_Texture* VULKAN_CreateTextureCube( } static REFRESH_ColorTarget* VULKAN_GenColorTarget( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, uint32_t width, uint32_t height, REFRESH_SurfaceFormat format, @@ -432,7 +680,7 @@ static REFRESH_ColorTarget* VULKAN_GenColorTarget( } static REFRESH_DepthStencilTarget* VULKAN_GenDepthStencilTarget( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, uint32_t width, uint32_t height, REFRESH_DepthFormat format, @@ -442,28 +690,28 @@ static REFRESH_DepthStencilTarget* VULKAN_GenDepthStencilTarget( } static REFRESH_Buffer* VULKAN_GenVertexBuffer( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, uint32_t sizeInBytes ) { SDL_assert(0); } static REFRESH_Buffer* VULKAN_GenIndexBuffer( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, uint32_t sizeInBytes ) { SDL_assert(0); } static REFRESH_Buffer* VULKAN_GenShaderParamBuffer( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, uint32_t sizeInBytes ) { SDL_assert(0); } static void VULKAN_SetTextureData2D( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Texture *texture, uint32_t x, uint32_t y, @@ -477,7 +725,7 @@ static void VULKAN_SetTextureData2D( } static void VULKAN_SetTextureData3D( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Texture *texture, uint32_t x, uint32_t y, @@ -493,7 +741,7 @@ static void VULKAN_SetTextureData3D( } static void VULKAN_SetTextureDataCube( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Texture *texture, uint32_t x, uint32_t y, @@ -508,7 +756,7 @@ static void VULKAN_SetTextureDataCube( } static void VULKAN_SetTextureDataYUV( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Texture *y, REFRESH_Texture *u, REFRESH_Texture *v, @@ -523,7 +771,7 @@ static void VULKAN_SetTextureDataYUV( } static void VULKAN_SetVertexBufferData( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Buffer *buffer, uint32_t offsetInBytes, void* data, @@ -534,7 +782,7 @@ static void VULKAN_SetVertexBufferData( } static void VULKAN_SetIndexBufferData( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Buffer *buffer, uint32_t offsetInBytes, void* data, @@ -544,7 +792,7 @@ static void VULKAN_SetIndexBufferData( } static void VULKAN_SetShaderParamData( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Buffer *shaderParamBuffer, uint32_t offsetInBytes, void *data, @@ -555,7 +803,7 @@ static void VULKAN_SetShaderParamData( } static void VULKAN_SetVertexSamplers( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, uint32_t startIndex, REFRESH_Texture *pTextures, REFRESH_Sampler *pSamplers, @@ -565,7 +813,7 @@ static void VULKAN_SetVertexSamplers( } static void VULKAN_SetFragmentSamplers( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, uint32_t startIndex, REFRESH_Texture *pTextures, REFRESH_Sampler *pSamplers, @@ -575,7 +823,7 @@ static void VULKAN_SetFragmentSamplers( } static void VULKAN_GetTextureData2D( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Texture *texture, uint32_t x, uint32_t y, @@ -589,7 +837,7 @@ static void VULKAN_GetTextureData2D( } static void VULKAN_GetTextureDataCube( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Texture *texture, uint32_t x, uint32_t y, @@ -604,84 +852,84 @@ static void VULKAN_GetTextureDataCube( } static void VULKAN_AddDisposeTexture( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Texture *texture ) { SDL_assert(0); } static void VULKAN_AddDisposeSampler( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Sampler *sampler ) { SDL_assert(0); } static void VULKAN_AddDisposeVertexBuffer( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Buffer *buffer ) { SDL_assert(0); } static void VULKAN_AddDisposeIndexBuffer( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Buffer *buffer ) { SDL_assert(0); } static void VULKAN_AddDisposeShaderParamBuffer( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Buffer *buffer ) { SDL_assert(0); } static void VULKAN_AddDisposeColorTarget( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_ColorTarget *colorTarget ) { SDL_assert(0); } static void VULKAN_AddDisposeDepthStencilTarget( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_DepthStencilTarget *depthStencilTarget ) { SDL_assert(0); } static void VULKAN_AddDisposeFramebuffer( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Framebuffer *frameBuffer ) { SDL_assert(0); } static void VULKAN_AddDisposeShaderModule( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_ShaderModule *shaderModule ) { SDL_assert(0); } static void VULKAN_AddDisposeRenderPass( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_RenderPass *renderPass ) { SDL_assert(0); } static void VULKAN_AddDisposeGraphicsPipeline( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_GraphicsPipeline *graphicsPipeline ) { SDL_assert(0); } static void VULKAN_BeginRenderPass( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_RenderPass *renderPass, REFRESH_Framebuffer *framebuffer, REFRESH_Rect renderArea, @@ -692,20 +940,20 @@ static void VULKAN_BeginRenderPass( } static void VULKAN_EndRenderPass( - REFRESH_Renderer *renderer + REFRESH_Renderer *driverData ) { SDL_assert(0); } static void VULKAN_BindGraphicsPipeline( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_GraphicsPipeline *graphicsPipeline ) { SDL_assert(0); } static void VULKAN_Present( - REFRESH_Renderer *renderer, + REFRESH_Renderer *driverData, REFRESH_Rect *sourceRectangle, REFRESH_Rect *destinationRectangle ) {