diff --git a/include/Refresh.h b/include/Refresh.h index fd088ee..18de86a 100644 --- a/include/Refresh.h +++ b/include/Refresh.h @@ -460,13 +460,22 @@ typedef struct Refresh_TextureCreateInfo /* Pipeline state structures */ -typedef struct Refresh_ShaderStageState +typedef struct Refresh_GraphicsShaderInfo { Refresh_ShaderModule *shaderModule; const char* entryPointName; uint64_t uniformBufferSize; uint32_t samplerBindingCount; -} Refresh_ShaderStageState; +} Refresh_GraphicsShaderInfo; + +typedef struct Refresh_ComputeShaderInfo +{ + Refresh_ShaderModule* shaderModule; + const char* entryPointName; + uint64_t uniformBufferSize; + uint32_t bufferBindingCount; + uint32_t imageBindingCount; +} Refresh_ComputeShaderInfo; typedef struct Refresh_ViewportState { @@ -508,12 +517,6 @@ typedef struct Refresh_DepthStencilState float maxDepthBounds; } Refresh_DepthStencilState; -typedef struct Refresh_ComputePipelineCreateInfo -{ - Refresh_ShaderStageState computeShaderState; - Refresh_ComputePipelineLayoutCreateInfo pipelineLayoutCreateInfo; -} Refresh_ComputePipelineCreateInfo; - typedef struct Refresh_ColorAttachmentDescription { Refresh_TextureFormat format; @@ -531,8 +534,8 @@ typedef struct Refresh_GraphicsPipelineAttachmentInfo typedef struct Refresh_GraphicsPipelineCreateInfo { - Refresh_ShaderStageState vertexShaderState; - Refresh_ShaderStageState fragmentShaderState; + Refresh_GraphicsShaderInfo vertexShaderInfo; + Refresh_GraphicsShaderInfo fragmentShaderInfo; Refresh_VertexInputState vertexInputState; Refresh_PrimitiveType primitiveType; Refresh_ViewportState viewportState; @@ -771,7 +774,7 @@ REFRESHAPI void Refresh_DispatchCompute( /* Returns an allocated ComputePipeline* object. */ REFRESHAPI Refresh_ComputePipeline* Refresh_CreateComputePipeline( Refresh_Device *device, - Refresh_ComputePipelineCreateInfo *pipelineCreateInfo + Refresh_ComputeShaderInfo *computeShaderInfo ); /* Returns an allocated GraphicsPipeline* object. */ diff --git a/src/Refresh.c b/src/Refresh.c index c71981e..5c033d2 100644 --- a/src/Refresh.c +++ b/src/Refresh.c @@ -1,4 +1,4 @@ -/* Refresh - XNA-inspired 3D Graphics Library with modern capabilities +/* Refresh - XNA-inspired 3D Graphics Library with modern capabilities * * Copyright (c) 2020 Evan Hemsley * @@ -252,12 +252,12 @@ void Refresh_DispatchCompute( Refresh_ComputePipeline* Refresh_CreateComputePipeline( Refresh_Device *device, - Refresh_ComputePipelineCreateInfo *pipelineCreateInfo + Refresh_ComputeShaderInfo *computeShaderInfo ) { NULL_RETURN_NULL(device); return device->CreateComputePipeline( device->driverData, - pipelineCreateInfo + computeShaderInfo ); } diff --git a/src/Refresh_Driver.h b/src/Refresh_Driver.h index 5d1fdfe..7c0075b 100644 --- a/src/Refresh_Driver.h +++ b/src/Refresh_Driver.h @@ -1,4 +1,4 @@ -/* Refresh - XNA-inspired 3D Graphics Library with modern capabilities +/* Refresh - XNA-inspired 3D Graphics Library with modern capabilities * * Copyright (c) 2020 Evan Hemsley * @@ -221,7 +221,7 @@ struct Refresh_Device Refresh_ComputePipeline* (*CreateComputePipeline)( Refresh_Renderer *driverData, - Refresh_ComputePipelineCreateInfo *pipelineCreateInfo + Refresh_ComputeShaderInfo *computeShaderInfo ); Refresh_GraphicsPipeline* (*CreateGraphicsPipeline)( diff --git a/src/Refresh_Driver_Vulkan.c b/src/Refresh_Driver_Vulkan.c index a1327f7..1a36870 100644 --- a/src/Refresh_Driver_Vulkan.c +++ b/src/Refresh_Driver_Vulkan.c @@ -5664,13 +5664,13 @@ static Refresh_GraphicsPipeline* VULKAN_CreateGraphicsPipeline( shaderStageCreateInfos[0].pNext = NULL; shaderStageCreateInfos[0].flags = 0; shaderStageCreateInfos[0].stage = VK_SHADER_STAGE_VERTEX_BIT; - shaderStageCreateInfos[0].module = (VkShaderModule) pipelineCreateInfo->vertexShaderState.shaderModule; - shaderStageCreateInfos[0].pName = pipelineCreateInfo->vertexShaderState.entryPointName; + shaderStageCreateInfos[0].module = (VkShaderModule) pipelineCreateInfo->vertexShaderInfo.shaderModule; + shaderStageCreateInfos[0].pName = pipelineCreateInfo->vertexShaderInfo.entryPointName; shaderStageCreateInfos[0].pSpecializationInfo = NULL; graphicsPipeline->vertexUniformBlockSize = VULKAN_INTERNAL_NextHighestAlignment( - pipelineCreateInfo->vertexShaderState.uniformBufferSize, + pipelineCreateInfo->vertexShaderInfo.uniformBufferSize, renderer->minUBOAlignment ); @@ -5678,13 +5678,13 @@ static Refresh_GraphicsPipeline* VULKAN_CreateGraphicsPipeline( shaderStageCreateInfos[1].pNext = NULL; shaderStageCreateInfos[1].flags = 0; shaderStageCreateInfos[1].stage = VK_SHADER_STAGE_FRAGMENT_BIT; - shaderStageCreateInfos[1].module = (VkShaderModule) pipelineCreateInfo->fragmentShaderState.shaderModule; - shaderStageCreateInfos[1].pName = pipelineCreateInfo->fragmentShaderState.entryPointName; + shaderStageCreateInfos[1].module = (VkShaderModule) pipelineCreateInfo->fragmentShaderInfo.shaderModule; + shaderStageCreateInfos[1].pName = pipelineCreateInfo->fragmentShaderInfo.entryPointName; shaderStageCreateInfos[1].pSpecializationInfo = NULL; graphicsPipeline->fragmentUniformBlockSize = VULKAN_INTERNAL_NextHighestAlignment( - pipelineCreateInfo->fragmentShaderState.uniformBufferSize, + pipelineCreateInfo->fragmentShaderInfo.uniformBufferSize, renderer->minUBOAlignment ); @@ -5915,8 +5915,8 @@ static Refresh_GraphicsPipeline* VULKAN_CreateGraphicsPipeline( graphicsPipeline->pipelineLayout = VULKAN_INTERNAL_FetchGraphicsPipelineLayout( renderer, - pipelineCreateInfo->vertexShaderState.samplerBindingCount, - pipelineCreateInfo->fragmentShaderState.samplerBindingCount + pipelineCreateInfo->vertexShaderInfo.samplerBindingCount, + pipelineCreateInfo->fragmentShaderInfo.samplerBindingCount ); /* Pipeline */ @@ -6083,7 +6083,7 @@ static VulkanComputePipelineLayout* VULKAN_INTERNAL_FetchComputePipelineLayout( static Refresh_ComputePipeline* VULKAN_CreateComputePipeline( Refresh_Renderer *driverData, - Refresh_ComputePipelineCreateInfo *pipelineCreateInfo + Refresh_ComputeShaderInfo *computeShaderInfo ) { VkComputePipelineCreateInfo computePipelineCreateInfo; VkPipelineShaderStageCreateInfo pipelineShaderStageCreateInfo; @@ -6095,14 +6095,14 @@ static Refresh_ComputePipeline* VULKAN_CreateComputePipeline( pipelineShaderStageCreateInfo.pNext = NULL; pipelineShaderStageCreateInfo.flags = 0; pipelineShaderStageCreateInfo.stage = VK_SHADER_STAGE_COMPUTE_BIT; - pipelineShaderStageCreateInfo.module = (VkShaderModule) pipelineCreateInfo->computeShaderState.shaderModule; - pipelineShaderStageCreateInfo.pName = pipelineCreateInfo->computeShaderState.entryPointName; + pipelineShaderStageCreateInfo.module = (VkShaderModule)computeShaderInfo->shaderModule; + pipelineShaderStageCreateInfo.pName = computeShaderInfo->entryPointName; pipelineShaderStageCreateInfo.pSpecializationInfo = NULL; vulkanComputePipeline->pipelineLayout = VULKAN_INTERNAL_FetchComputePipelineLayout( renderer, - pipelineCreateInfo->pipelineLayoutCreateInfo.bufferBindingCount, - pipelineCreateInfo->pipelineLayoutCreateInfo.imageBindingCount + computeShaderInfo->bufferBindingCount, + computeShaderInfo->imageBindingCount ); computePipelineCreateInfo.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO; @@ -6125,7 +6125,7 @@ static Refresh_ComputePipeline* VULKAN_CreateComputePipeline( vulkanComputePipeline->uniformBlockSize = VULKAN_INTERNAL_NextHighestAlignment( - pipelineCreateInfo->computeShaderState.uniformBufferSize, + computeShaderInfo->uniformBufferSize, renderer->minUBOAlignment );