VULKAN_CreateRenderPass
							parent
							
								
									fd731ac648
								
							
						
					
					
						commit
						b10b9bfafd
					
				|  | @ -133,11 +133,24 @@ typedef enum REFRESH_SurfaceFormat | ||||||
| 
 | 
 | ||||||
| typedef enum REFRESH_DepthFormat | typedef enum REFRESH_DepthFormat | ||||||
| { | { | ||||||
|  | 	REFRESH_DEPTHFORMAT_D16_UNORM, | ||||||
|  | 	REFRESH_DEPTHFORMAT_D32_SFLOAT, | ||||||
|     REFRESH_DEPTHFORMAT_D16_UNORM_S8_UINT, |     REFRESH_DEPTHFORMAT_D16_UNORM_S8_UINT, | ||||||
|     REFRESH_DEPTHFORMAT_D24_UNORM_S8_UINT, |     REFRESH_DEPTHFORMAT_D24_UNORM_S8_UINT, | ||||||
|     REFRESH_DEPTHFORMAT_D32_SFLOAT_S8_UINT |     REFRESH_DEPTHFORMAT_D32_SFLOAT_S8_UINT | ||||||
| } REFRESH_DepthFormat; | } 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 | typedef enum REFRESH_CubeMapFace | ||||||
| { | { | ||||||
|     REFRESH_CUBEMAPFACE_POSITIVEX, |     REFRESH_CUBEMAPFACE_POSITIVEX, | ||||||
|  | @ -454,7 +467,7 @@ typedef struct REFRESH_PipelineLayoutCreateInfo | ||||||
| typedef struct REFRESH_ColorTargetDescription | typedef struct REFRESH_ColorTargetDescription | ||||||
| { | { | ||||||
| 	REFRESH_SurfaceFormat format; | 	REFRESH_SurfaceFormat format; | ||||||
| 	uint32_t multisampleCount; | 	REFRESH_SampleCount multisampleCount; | ||||||
| 	REFRESH_LoadOp loadOp; | 	REFRESH_LoadOp loadOp; | ||||||
| 	REFRESH_StoreOp storeOp; | 	REFRESH_StoreOp storeOp; | ||||||
| } REFRESH_ColorTargetDescription; | } REFRESH_ColorTargetDescription; | ||||||
|  |  | ||||||
|  | @ -67,6 +67,10 @@ static const char* deviceExtensionNames[] = | ||||||
| }; | }; | ||||||
| static uint32_t deviceExtensionCount = SDL_arraysize(deviceExtensionNames); | static uint32_t deviceExtensionCount = SDL_arraysize(deviceExtensionNames); | ||||||
| 
 | 
 | ||||||
|  | /* Defines */ | ||||||
|  | 
 | ||||||
|  | #define NULL_RENDER_PASS (REFRESH_RenderPass*) 0 | ||||||
|  | 
 | ||||||
| /* Enums */ | /* Enums */ | ||||||
| 
 | 
 | ||||||
| typedef enum VulkanResourceAccessType | typedef enum VulkanResourceAccessType | ||||||
|  | @ -113,6 +117,64 @@ typedef enum CreateSwapchainResult | ||||||
| 	CREATE_SWAPCHAIN_SURFACE_ZERO, | 	CREATE_SWAPCHAIN_SURFACE_ZERO, | ||||||
| } CreateSwapchainResult; | } 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 */ | /* Structures */ | ||||||
| 
 | 
 | ||||||
| typedef struct QueueFamilyIndices | typedef struct QueueFamilyIndices | ||||||
|  | @ -307,7 +369,7 @@ static void VULKAN_DestroyDevice( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_Clear( | static void VULKAN_Clear( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_ClearOptions options, | 	REFRESH_ClearOptions options, | ||||||
| 	REFRESH_Vec4 **colors, | 	REFRESH_Vec4 **colors, | ||||||
|     uint32_t colorCount, |     uint32_t colorCount, | ||||||
|  | @ -318,7 +380,7 @@ static void VULKAN_Clear( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_DrawIndexedPrimitives( | static void VULKAN_DrawIndexedPrimitives( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_PrimitiveType primitiveType, | 	REFRESH_PrimitiveType primitiveType, | ||||||
| 	uint32_t baseVertex, | 	uint32_t baseVertex, | ||||||
| 	uint32_t minVertexIndex, | 	uint32_t minVertexIndex, | ||||||
|  | @ -332,7 +394,7 @@ static void VULKAN_DrawIndexedPrimitives( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_DrawInstancedPrimitives( | static void VULKAN_DrawInstancedPrimitives( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_PrimitiveType primitiveType, | 	REFRESH_PrimitiveType primitiveType, | ||||||
| 	uint32_t baseVertex, | 	uint32_t baseVertex, | ||||||
| 	uint32_t minVertexIndex, | 	uint32_t minVertexIndex, | ||||||
|  | @ -347,7 +409,7 @@ static void VULKAN_DrawInstancedPrimitives( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_DrawPrimitives( | static void VULKAN_DrawPrimitives( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_PrimitiveType primitiveType, | 	REFRESH_PrimitiveType primitiveType, | ||||||
| 	uint32_t vertexStart, | 	uint32_t vertexStart, | ||||||
| 	uint32_t primitiveCount | 	uint32_t primitiveCount | ||||||
|  | @ -356,42 +418,228 @@ static void VULKAN_DrawPrimitives( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static REFRESH_RenderPass* VULKAN_CreateRenderPass( | static REFRESH_RenderPass* VULKAN_CreateRenderPass( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_RenderPassCreateInfo *renderPassCreateInfo | 	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( | static REFRESH_GraphicsPipeline* VULKAN_CreateGraphicsPipeline( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_GraphicsPipelineCreateInfo *pipelineCreateInfo | 	REFRESH_GraphicsPipelineCreateInfo *pipelineCreateInfo | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static REFRESH_Sampler* VULKAN_CreateSampler( | static REFRESH_Sampler* VULKAN_CreateSampler( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_SamplerStateCreateInfo *samplerStateCreateInfo | 	REFRESH_SamplerStateCreateInfo *samplerStateCreateInfo | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static REFRESH_Framebuffer* VULKAN_CreateFramebuffer( | static REFRESH_Framebuffer* VULKAN_CreateFramebuffer( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_FramebufferCreateInfo *framebufferCreateInfo | 	REFRESH_FramebufferCreateInfo *framebufferCreateInfo | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static REFRESH_ShaderModule* VULKAN_CreateShaderModule( | static REFRESH_ShaderModule* VULKAN_CreateShaderModule( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_ShaderModuleCreateInfo *shaderModuleCreateInfo | 	REFRESH_ShaderModuleCreateInfo *shaderModuleCreateInfo | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static REFRESH_Texture* VULKAN_CreateTexture2D( | static REFRESH_Texture* VULKAN_CreateTexture2D( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_SurfaceFormat format, | 	REFRESH_SurfaceFormat format, | ||||||
| 	uint32_t width, | 	uint32_t width, | ||||||
| 	uint32_t height, | 	uint32_t height, | ||||||
|  | @ -401,7 +649,7 @@ static REFRESH_Texture* VULKAN_CreateTexture2D( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static REFRESH_Texture* VULKAN_CreateTexture3D( | static REFRESH_Texture* VULKAN_CreateTexture3D( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_SurfaceFormat format, | 	REFRESH_SurfaceFormat format, | ||||||
| 	uint32_t width, | 	uint32_t width, | ||||||
| 	uint32_t height, | 	uint32_t height, | ||||||
|  | @ -412,7 +660,7 @@ static REFRESH_Texture* VULKAN_CreateTexture3D( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static REFRESH_Texture* VULKAN_CreateTextureCube( | static REFRESH_Texture* VULKAN_CreateTextureCube( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_SurfaceFormat format, | 	REFRESH_SurfaceFormat format, | ||||||
| 	uint32_t size, | 	uint32_t size, | ||||||
| 	uint32_t levelCount | 	uint32_t levelCount | ||||||
|  | @ -421,7 +669,7 @@ static REFRESH_Texture* VULKAN_CreateTextureCube( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static REFRESH_ColorTarget* VULKAN_GenColorTarget( | static REFRESH_ColorTarget* VULKAN_GenColorTarget( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	uint32_t width, | 	uint32_t width, | ||||||
| 	uint32_t height, | 	uint32_t height, | ||||||
| 	REFRESH_SurfaceFormat format, | 	REFRESH_SurfaceFormat format, | ||||||
|  | @ -432,7 +680,7 @@ static REFRESH_ColorTarget* VULKAN_GenColorTarget( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static REFRESH_DepthStencilTarget* VULKAN_GenDepthStencilTarget( | static REFRESH_DepthStencilTarget* VULKAN_GenDepthStencilTarget( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	uint32_t width, | 	uint32_t width, | ||||||
| 	uint32_t height, | 	uint32_t height, | ||||||
| 	REFRESH_DepthFormat format, | 	REFRESH_DepthFormat format, | ||||||
|  | @ -442,28 +690,28 @@ static REFRESH_DepthStencilTarget* VULKAN_GenDepthStencilTarget( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static REFRESH_Buffer* VULKAN_GenVertexBuffer( | static REFRESH_Buffer* VULKAN_GenVertexBuffer( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	uint32_t sizeInBytes | 	uint32_t sizeInBytes | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static REFRESH_Buffer* VULKAN_GenIndexBuffer( | static REFRESH_Buffer* VULKAN_GenIndexBuffer( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	uint32_t sizeInBytes | 	uint32_t sizeInBytes | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static REFRESH_Buffer* VULKAN_GenShaderParamBuffer( | static REFRESH_Buffer* VULKAN_GenShaderParamBuffer( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	uint32_t sizeInBytes | 	uint32_t sizeInBytes | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_SetTextureData2D( | static void VULKAN_SetTextureData2D( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Texture *texture, | 	REFRESH_Texture *texture, | ||||||
| 	uint32_t x, | 	uint32_t x, | ||||||
| 	uint32_t y, | 	uint32_t y, | ||||||
|  | @ -477,7 +725,7 @@ static void VULKAN_SetTextureData2D( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_SetTextureData3D( | static void VULKAN_SetTextureData3D( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Texture *texture, | 	REFRESH_Texture *texture, | ||||||
| 	uint32_t x, | 	uint32_t x, | ||||||
| 	uint32_t y, | 	uint32_t y, | ||||||
|  | @ -493,7 +741,7 @@ static void VULKAN_SetTextureData3D( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_SetTextureDataCube( | static void VULKAN_SetTextureDataCube( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Texture *texture, | 	REFRESH_Texture *texture, | ||||||
| 	uint32_t x, | 	uint32_t x, | ||||||
| 	uint32_t y, | 	uint32_t y, | ||||||
|  | @ -508,7 +756,7 @@ static void VULKAN_SetTextureDataCube( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_SetTextureDataYUV( | static void VULKAN_SetTextureDataYUV( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Texture *y, | 	REFRESH_Texture *y, | ||||||
| 	REFRESH_Texture *u, | 	REFRESH_Texture *u, | ||||||
| 	REFRESH_Texture *v, | 	REFRESH_Texture *v, | ||||||
|  | @ -523,7 +771,7 @@ static void VULKAN_SetTextureDataYUV( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_SetVertexBufferData( | static void VULKAN_SetVertexBufferData( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Buffer *buffer, | 	REFRESH_Buffer *buffer, | ||||||
| 	uint32_t offsetInBytes, | 	uint32_t offsetInBytes, | ||||||
| 	void* data, | 	void* data, | ||||||
|  | @ -534,7 +782,7 @@ static void VULKAN_SetVertexBufferData( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_SetIndexBufferData( | static void VULKAN_SetIndexBufferData( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Buffer *buffer, | 	REFRESH_Buffer *buffer, | ||||||
| 	uint32_t offsetInBytes, | 	uint32_t offsetInBytes, | ||||||
| 	void* data, | 	void* data, | ||||||
|  | @ -544,7 +792,7 @@ static void VULKAN_SetIndexBufferData( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_SetShaderParamData( | static void VULKAN_SetShaderParamData( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Buffer *shaderParamBuffer, | 	REFRESH_Buffer *shaderParamBuffer, | ||||||
| 	uint32_t offsetInBytes, | 	uint32_t offsetInBytes, | ||||||
| 	void *data, | 	void *data, | ||||||
|  | @ -555,7 +803,7 @@ static void VULKAN_SetShaderParamData( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_SetVertexSamplers( | static void VULKAN_SetVertexSamplers( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	uint32_t startIndex, | 	uint32_t startIndex, | ||||||
| 	REFRESH_Texture *pTextures, | 	REFRESH_Texture *pTextures, | ||||||
| 	REFRESH_Sampler *pSamplers, | 	REFRESH_Sampler *pSamplers, | ||||||
|  | @ -565,7 +813,7 @@ static void VULKAN_SetVertexSamplers( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_SetFragmentSamplers( | static void VULKAN_SetFragmentSamplers( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	uint32_t startIndex, | 	uint32_t startIndex, | ||||||
| 	REFRESH_Texture *pTextures, | 	REFRESH_Texture *pTextures, | ||||||
| 	REFRESH_Sampler *pSamplers, | 	REFRESH_Sampler *pSamplers, | ||||||
|  | @ -575,7 +823,7 @@ static void VULKAN_SetFragmentSamplers( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_GetTextureData2D( | static void VULKAN_GetTextureData2D( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Texture *texture, | 	REFRESH_Texture *texture, | ||||||
| 	uint32_t x, | 	uint32_t x, | ||||||
| 	uint32_t y, | 	uint32_t y, | ||||||
|  | @ -589,7 +837,7 @@ static void VULKAN_GetTextureData2D( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_GetTextureDataCube( | static void VULKAN_GetTextureDataCube( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Texture *texture, | 	REFRESH_Texture *texture, | ||||||
| 	uint32_t x, | 	uint32_t x, | ||||||
| 	uint32_t y, | 	uint32_t y, | ||||||
|  | @ -604,84 +852,84 @@ static void VULKAN_GetTextureDataCube( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_AddDisposeTexture( | static void VULKAN_AddDisposeTexture( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Texture *texture | 	REFRESH_Texture *texture | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_AddDisposeSampler( | static void VULKAN_AddDisposeSampler( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Sampler *sampler | 	REFRESH_Sampler *sampler | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_AddDisposeVertexBuffer( | static void VULKAN_AddDisposeVertexBuffer( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Buffer *buffer | 	REFRESH_Buffer *buffer | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_AddDisposeIndexBuffer( | static void VULKAN_AddDisposeIndexBuffer( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Buffer *buffer | 	REFRESH_Buffer *buffer | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_AddDisposeShaderParamBuffer( | static void VULKAN_AddDisposeShaderParamBuffer( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Buffer *buffer | 	REFRESH_Buffer *buffer | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_AddDisposeColorTarget( | static void VULKAN_AddDisposeColorTarget( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_ColorTarget *colorTarget | 	REFRESH_ColorTarget *colorTarget | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_AddDisposeDepthStencilTarget( | static void VULKAN_AddDisposeDepthStencilTarget( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_DepthStencilTarget *depthStencilTarget | 	REFRESH_DepthStencilTarget *depthStencilTarget | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_AddDisposeFramebuffer( | static void VULKAN_AddDisposeFramebuffer( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_Framebuffer *frameBuffer | 	REFRESH_Framebuffer *frameBuffer | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_AddDisposeShaderModule( | static void VULKAN_AddDisposeShaderModule( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_ShaderModule *shaderModule | 	REFRESH_ShaderModule *shaderModule | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_AddDisposeRenderPass( | static void VULKAN_AddDisposeRenderPass( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_RenderPass *renderPass | 	REFRESH_RenderPass *renderPass | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_AddDisposeGraphicsPipeline( | static void VULKAN_AddDisposeGraphicsPipeline( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_GraphicsPipeline *graphicsPipeline | 	REFRESH_GraphicsPipeline *graphicsPipeline | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_BeginRenderPass( | static void VULKAN_BeginRenderPass( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_RenderPass *renderPass, | 	REFRESH_RenderPass *renderPass, | ||||||
| 	REFRESH_Framebuffer *framebuffer, | 	REFRESH_Framebuffer *framebuffer, | ||||||
| 	REFRESH_Rect renderArea, | 	REFRESH_Rect renderArea, | ||||||
|  | @ -692,20 +940,20 @@ static void VULKAN_BeginRenderPass( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_EndRenderPass( | static void VULKAN_EndRenderPass( | ||||||
| 	REFRESH_Renderer *renderer | 	REFRESH_Renderer *driverData | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_BindGraphicsPipeline( | static void VULKAN_BindGraphicsPipeline( | ||||||
| 	REFRESH_Renderer *renderer, | 	REFRESH_Renderer *driverData, | ||||||
| 	REFRESH_GraphicsPipeline *graphicsPipeline | 	REFRESH_GraphicsPipeline *graphicsPipeline | ||||||
| ) { | ) { | ||||||
|     SDL_assert(0); |     SDL_assert(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void VULKAN_Present( | static void VULKAN_Present( | ||||||
|     REFRESH_Renderer *renderer, |     REFRESH_Renderer *driverData, | ||||||
|     REFRESH_Rect *sourceRectangle, |     REFRESH_Rect *sourceRectangle, | ||||||
|     REFRESH_Rect *destinationRectangle |     REFRESH_Rect *destinationRectangle | ||||||
| ) { | ) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue