add texture layout transition to API
parent
ce0eea711b
commit
941cce595c
|
@ -141,6 +141,16 @@ typedef enum REFRESH_DepthFormat
|
||||||
REFRESH_DEPTHFORMAT_D32_SFLOAT_S8_UINT
|
REFRESH_DEPTHFORMAT_D32_SFLOAT_S8_UINT
|
||||||
} REFRESH_DepthFormat;
|
} REFRESH_DepthFormat;
|
||||||
|
|
||||||
|
typedef enum REFRESH_TextureLayout
|
||||||
|
{
|
||||||
|
REFRESH_TEXTURELAYOUT_READ,
|
||||||
|
REFRESH_TEXTURELAYOUT_COLOR_TARGET,
|
||||||
|
REFRESH_TEXTURELAYOUT_DEPTHSTENCIL_TARGET,
|
||||||
|
REFRESH_TEXTURELAYOUT_VERTEX_SAMPLER,
|
||||||
|
REFRESH_TEXTURELAYOUT_FRAGMENT_SAMPLER,
|
||||||
|
REFRESH_TEXTURELAYOUT_WRITE
|
||||||
|
} REFRESH_TextureLayout;
|
||||||
|
|
||||||
typedef enum REFRESH_SampleCount
|
typedef enum REFRESH_SampleCount
|
||||||
{
|
{
|
||||||
REFRESH_SAMPLECOUNT_1,
|
REFRESH_SAMPLECOUNT_1,
|
||||||
|
@ -1253,6 +1263,24 @@ REFRESHAPI void REFRESH_BindIndexBuffer(
|
||||||
REFRESH_IndexElementSize indexElementSize
|
REFRESH_IndexElementSize indexElementSize
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Transitions */
|
||||||
|
|
||||||
|
/* Performs a texture layout transition.
|
||||||
|
* Texture layouts must be transitioned for different texture use cases.
|
||||||
|
*
|
||||||
|
* NOTE: It is an error to perform a layout transition in a render pass.
|
||||||
|
*
|
||||||
|
* layout: The layout to transition to.
|
||||||
|
* pTextures: A pointer to an array of textures to transition.
|
||||||
|
* textureCount: The number of textures in the array to transition.
|
||||||
|
*/
|
||||||
|
REFRESHAPI void REFRESH_TextureLayoutTransition(
|
||||||
|
REFRESH_Device *device,
|
||||||
|
REFRESH_TextureLayout layout,
|
||||||
|
REFRESH_Texture **pTextures,
|
||||||
|
uint32_t textureCount
|
||||||
|
);
|
||||||
|
|
||||||
/* Submission/Presentation */
|
/* Submission/Presentation */
|
||||||
|
|
||||||
/* Queues an image to be presented to the screen.
|
/* Queues an image to be presented to the screen.
|
||||||
|
|
|
@ -811,6 +811,21 @@ void REFRESH_BindIndexBuffer(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void REFRESH_TextureLayoutTransition(
|
||||||
|
REFRESH_Device *device,
|
||||||
|
REFRESH_TextureLayout layout,
|
||||||
|
REFRESH_Texture **pTextures,
|
||||||
|
uint32_t textureCount
|
||||||
|
) {
|
||||||
|
NULL_RETURN(device);
|
||||||
|
device->TextureLayoutTransition(
|
||||||
|
device->driverData,
|
||||||
|
layout,
|
||||||
|
pTextures,
|
||||||
|
textureCount
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
void REFRESH_QueuePresent(
|
void REFRESH_QueuePresent(
|
||||||
REFRESH_Device *device,
|
REFRESH_Device *device,
|
||||||
REFRESH_TextureSlice* textureSlice,
|
REFRESH_TextureSlice* textureSlice,
|
||||||
|
|
|
@ -493,6 +493,13 @@ struct REFRESH_Device
|
||||||
REFRESH_IndexElementSize indexElementSize
|
REFRESH_IndexElementSize indexElementSize
|
||||||
);
|
);
|
||||||
|
|
||||||
|
void (*TextureLayoutTransition)(
|
||||||
|
REFRESH_Renderer *driverData,
|
||||||
|
REFRESH_TextureLayout layout,
|
||||||
|
REFRESH_Texture **pTextures,
|
||||||
|
uint32_t textureCount
|
||||||
|
);
|
||||||
|
|
||||||
void(*QueuePresent)(
|
void(*QueuePresent)(
|
||||||
REFRESH_Renderer *driverData,
|
REFRESH_Renderer *driverData,
|
||||||
REFRESH_TextureSlice *textureSlice,
|
REFRESH_TextureSlice *textureSlice,
|
||||||
|
@ -555,6 +562,7 @@ struct REFRESH_Device
|
||||||
ASSIGN_DRIVER_FUNC(BindGraphicsPipeline, name) \
|
ASSIGN_DRIVER_FUNC(BindGraphicsPipeline, name) \
|
||||||
ASSIGN_DRIVER_FUNC(BindVertexBuffers, name) \
|
ASSIGN_DRIVER_FUNC(BindVertexBuffers, name) \
|
||||||
ASSIGN_DRIVER_FUNC(BindIndexBuffer, name) \
|
ASSIGN_DRIVER_FUNC(BindIndexBuffer, name) \
|
||||||
|
ASSIGN_DRIVER_FUNC(TextureLayoutTransition, name) \
|
||||||
ASSIGN_DRIVER_FUNC(QueuePresent, name) \
|
ASSIGN_DRIVER_FUNC(QueuePresent, name) \
|
||||||
ASSIGN_DRIVER_FUNC(Submit, name)
|
ASSIGN_DRIVER_FUNC(Submit, name)
|
||||||
|
|
||||||
|
|
|
@ -188,6 +188,16 @@ static VkFormat RefreshToVK_DepthFormat[] =
|
||||||
VK_FORMAT_D32_SFLOAT_S8_UINT
|
VK_FORMAT_D32_SFLOAT_S8_UINT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static VulkanResourceAccessType RefreshToVK_ImageLayout[] =
|
||||||
|
{
|
||||||
|
RESOURCE_ACCESS_TRANSFER_READ,
|
||||||
|
RESOURCE_ACCESS_COLOR_ATTACHMENT_READ_WRITE,
|
||||||
|
RESOURCE_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_WRITE,
|
||||||
|
RESOURCE_ACCESS_VERTEX_SHADER_READ_SAMPLED_IMAGE,
|
||||||
|
RESOURCE_ACCESS_FRAGMENT_SHADER_READ_SAMPLED_IMAGE,
|
||||||
|
RESOURCE_ACCESS_TRANSFER_WRITE
|
||||||
|
};
|
||||||
|
|
||||||
static VkFormat RefreshToVK_VertexFormat[] =
|
static VkFormat RefreshToVK_VertexFormat[] =
|
||||||
{
|
{
|
||||||
VK_FORMAT_R32_SFLOAT, /* SINGLE */
|
VK_FORMAT_R32_SFLOAT, /* SINGLE */
|
||||||
|
@ -5418,6 +5428,34 @@ static void VULKAN_BindIndexBuffer(
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void VULKAN_TextureLayoutTransition(
|
||||||
|
REFRESH_Renderer *driverData,
|
||||||
|
REFRESH_TextureLayout layout,
|
||||||
|
REFRESH_Texture **pTextures,
|
||||||
|
uint32_t textureCount
|
||||||
|
) {
|
||||||
|
uint32_t i;
|
||||||
|
VulkanTexture* currentTexture;
|
||||||
|
VulkanRenderer* renderer = (VulkanRenderer*) driverData;
|
||||||
|
|
||||||
|
for (i = 0; i < textureCount; i += 1)
|
||||||
|
{
|
||||||
|
currentTexture = (VulkanTexture*) pTextures[i];
|
||||||
|
VULKAN_INTERNAL_ImageMemoryBarrier(
|
||||||
|
renderer,
|
||||||
|
RefreshToVK_ImageLayout[layout],
|
||||||
|
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
|
0,
|
||||||
|
currentTexture->layerCount,
|
||||||
|
0,
|
||||||
|
currentTexture->levelCount,
|
||||||
|
0,
|
||||||
|
currentTexture->image,
|
||||||
|
¤tTexture->resourceAccessType
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void VULKAN_QueuePresent(
|
static void VULKAN_QueuePresent(
|
||||||
REFRESH_Renderer* driverData,
|
REFRESH_Renderer* driverData,
|
||||||
REFRESH_TextureSlice* textureSlice,
|
REFRESH_TextureSlice* textureSlice,
|
||||||
|
|
|
@ -85,9 +85,11 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\src\Refresh.c" />
|
<ClCompile Include="..\src\Refresh.c" />
|
||||||
<ClCompile Include="..\src\Refresh_Driver_Vulkan.c" />
|
<ClCompile Include="..\src\Refresh_Driver_Vulkan.c" />
|
||||||
|
<ClCompile Include="..\src\Refresh_Image.c" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\include\Refresh.h" />
|
<ClInclude Include="..\include\Refresh.h" />
|
||||||
|
<ClInclude Include="..\include\Refresh_Image.h" />
|
||||||
<ClInclude Include="..\src\Refresh_Driver.h" />
|
<ClInclude Include="..\src\Refresh_Driver.h" />
|
||||||
<ClInclude Include="..\src\Refresh_Driver_Vulkan_vkfuncs.h" />
|
<ClInclude Include="..\src\Refresh_Driver_Vulkan_vkfuncs.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -7,6 +7,9 @@
|
||||||
<ClCompile Include="..\src\Refresh_Driver_Vulkan.c">
|
<ClCompile Include="..\src\Refresh_Driver_Vulkan.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Refresh_Image.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\include\Refresh.h">
|
<ClInclude Include="..\include\Refresh.h">
|
||||||
|
@ -18,6 +21,9 @@
|
||||||
<ClInclude Include="..\src\Refresh_Driver_Vulkan_vkfuncs.h">
|
<ClInclude Include="..\src\Refresh_Driver_Vulkan_vkfuncs.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\Refresh_Image.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="Header Files">
|
<Filter Include="Header Files">
|
||||||
|
|
Loading…
Reference in New Issue