forked from MoonsideGames/Refresh
add new barrier for any-shader sampling
parent
fd01d6c033
commit
ee91cca9f6
|
@ -142,9 +142,8 @@ typedef enum REFRESH_DepthFormat
|
||||||
|
|
||||||
typedef enum REFRESH_TextureUsageFlagBits
|
typedef enum REFRESH_TextureUsageFlagBits
|
||||||
{
|
{
|
||||||
REFRESH_TEXTUREUSAGE_VERTEX_SAMPLER_BIT = 0x00000001,
|
REFRESH_TEXTUREUSAGE_SAMPLER_BIT = 0x00000001,
|
||||||
REFRESH_TEXTUREUSAGE_FRAGMENT_SAMPLER_BIT = 0x00000002,
|
REFRESH_TEXTUREUSAGE_COLOR_TARGET_BIT = 0x00000002
|
||||||
REFRESH_TEXTUREUSAGE_COLOR_TARGET_BIT = 0x00000004
|
|
||||||
} REFRESH_TextureUsageFlagBits;
|
} REFRESH_TextureUsageFlagBits;
|
||||||
|
|
||||||
typedef uint32_t REFRESH_TextureUsageFlags;
|
typedef uint32_t REFRESH_TextureUsageFlags;
|
||||||
|
|
|
@ -140,6 +140,7 @@ typedef enum VulkanResourceAccessType
|
||||||
RESOURCE_ACCESS_FRAGMENT_SHADER_READ_SAMPLED_IMAGE,
|
RESOURCE_ACCESS_FRAGMENT_SHADER_READ_SAMPLED_IMAGE,
|
||||||
RESOURCE_ACCESS_FRAGMENT_SHADER_READ_COLOR_ATTACHMENT,
|
RESOURCE_ACCESS_FRAGMENT_SHADER_READ_COLOR_ATTACHMENT,
|
||||||
RESOURCE_ACCESS_FRAGMENT_SHADER_READ_DEPTH_STENCIL_ATTACHMENT,
|
RESOURCE_ACCESS_FRAGMENT_SHADER_READ_DEPTH_STENCIL_ATTACHMENT,
|
||||||
|
RESOURCE_ACCESS_ANY_SHADER_READ_SAMPLED_IMAGE,
|
||||||
RESOURCE_ACCESS_COLOR_ATTACHMENT_READ,
|
RESOURCE_ACCESS_COLOR_ATTACHMENT_READ,
|
||||||
RESOURCE_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ,
|
RESOURCE_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ,
|
||||||
RESOURCE_ACCESS_TRANSFER_READ,
|
RESOURCE_ACCESS_TRANSFER_READ,
|
||||||
|
@ -508,6 +509,13 @@ static const VulkanResourceAccessInfo AccessMap[RESOURCE_ACCESS_TYPES_COUNT] =
|
||||||
VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
|
VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/* RESOURCE_ACCESS_ANY_SHADER_READ_SAMPLED_IMAGE */
|
||||||
|
{
|
||||||
|
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
|
||||||
|
VK_ACCESS_SHADER_READ_BIT,
|
||||||
|
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
||||||
|
},
|
||||||
|
|
||||||
/* RESOURCE_ACCESS_COLOR_ATTACHMENT_READ */
|
/* RESOURCE_ACCESS_COLOR_ATTACHMENT_READ */
|
||||||
{
|
{
|
||||||
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
||||||
|
@ -4528,13 +4536,6 @@ static uint8_t VULKAN_INTERNAL_CreateTexture(
|
||||||
uint8_t layerCount = isCube ? 6 : 1;
|
uint8_t layerCount = isCube ? 6 : 1;
|
||||||
VkComponentMapping swizzle = IDENTITY_SWIZZLE;
|
VkComponentMapping swizzle = IDENTITY_SWIZZLE;
|
||||||
|
|
||||||
if ((textureUsageFlags & REFRESH_TEXTUREUSAGE_VERTEX_SAMPLER_BIT) &&
|
|
||||||
(textureUsageFlags & REFRESH_TEXTUREUSAGE_FRAGMENT_SAMPLER_BIT))
|
|
||||||
{
|
|
||||||
REFRESH_LogError("Cannot use a texture for both vertex and fragment sampling.");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isCube)
|
if (isCube)
|
||||||
{
|
{
|
||||||
imageCreateFlags |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
|
imageCreateFlags |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
|
||||||
|
@ -5076,26 +5077,11 @@ static void VULKAN_SetTextureData2D(
|
||||||
&imageCopy
|
&imageCopy
|
||||||
));
|
));
|
||||||
|
|
||||||
if (vulkanTexture->usageFlags & REFRESH_TEXTUREUSAGE_VERTEX_SAMPLER_BIT)
|
if (vulkanTexture->usageFlags & REFRESH_TEXTUREUSAGE_SAMPLER_BIT)
|
||||||
{
|
{
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
VULKAN_INTERNAL_ImageMemoryBarrier(
|
||||||
renderer,
|
renderer,
|
||||||
RESOURCE_ACCESS_VERTEX_SHADER_READ_SAMPLED_IMAGE,
|
RESOURCE_ACCESS_ANY_SHADER_READ_SAMPLED_IMAGE,
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
|
||||||
0,
|
|
||||||
vulkanTexture->layerCount,
|
|
||||||
0,
|
|
||||||
vulkanTexture->levelCount,
|
|
||||||
0,
|
|
||||||
vulkanTexture->image,
|
|
||||||
&vulkanTexture->resourceAccessType
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else if (vulkanTexture->usageFlags & REFRESH_TEXTUREUSAGE_FRAGMENT_SAMPLER_BIT)
|
|
||||||
{
|
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
|
||||||
renderer,
|
|
||||||
RESOURCE_ACCESS_FRAGMENT_SHADER_READ_SAMPLED_IMAGE,
|
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
0,
|
0,
|
||||||
vulkanTexture->layerCount,
|
vulkanTexture->layerCount,
|
||||||
|
@ -5190,26 +5176,11 @@ static void VULKAN_SetTextureData3D(
|
||||||
&imageCopy
|
&imageCopy
|
||||||
));
|
));
|
||||||
|
|
||||||
if (vulkanTexture->usageFlags & REFRESH_TEXTUREUSAGE_VERTEX_SAMPLER_BIT)
|
if (vulkanTexture->usageFlags & REFRESH_TEXTUREUSAGE_SAMPLER_BIT)
|
||||||
{
|
{
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
VULKAN_INTERNAL_ImageMemoryBarrier(
|
||||||
renderer,
|
renderer,
|
||||||
RESOURCE_ACCESS_VERTEX_SHADER_READ_SAMPLED_IMAGE,
|
RESOURCE_ACCESS_ANY_SHADER_READ_SAMPLED_IMAGE,
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
|
||||||
0,
|
|
||||||
vulkanTexture->layerCount,
|
|
||||||
0,
|
|
||||||
vulkanTexture->levelCount,
|
|
||||||
0,
|
|
||||||
vulkanTexture->image,
|
|
||||||
&vulkanTexture->resourceAccessType
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else if (vulkanTexture->usageFlags & REFRESH_TEXTUREUSAGE_FRAGMENT_SAMPLER_BIT)
|
|
||||||
{
|
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
|
||||||
renderer,
|
|
||||||
RESOURCE_ACCESS_FRAGMENT_SHADER_READ_SAMPLED_IMAGE,
|
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
0,
|
0,
|
||||||
vulkanTexture->layerCount,
|
vulkanTexture->layerCount,
|
||||||
|
@ -5303,26 +5274,11 @@ static void VULKAN_SetTextureDataCube(
|
||||||
&imageCopy
|
&imageCopy
|
||||||
));
|
));
|
||||||
|
|
||||||
if (vulkanTexture->usageFlags & REFRESH_TEXTUREUSAGE_VERTEX_SAMPLER_BIT)
|
if (vulkanTexture->usageFlags & REFRESH_TEXTUREUSAGE_SAMPLER_BIT)
|
||||||
{
|
{
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
VULKAN_INTERNAL_ImageMemoryBarrier(
|
||||||
renderer,
|
renderer,
|
||||||
RESOURCE_ACCESS_VERTEX_SHADER_READ_SAMPLED_IMAGE,
|
RESOURCE_ACCESS_ANY_SHADER_READ_SAMPLED_IMAGE,
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
|
||||||
0,
|
|
||||||
vulkanTexture->layerCount,
|
|
||||||
0,
|
|
||||||
vulkanTexture->levelCount,
|
|
||||||
0,
|
|
||||||
vulkanTexture->image,
|
|
||||||
&vulkanTexture->resourceAccessType
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else if (vulkanTexture->usageFlags & REFRESH_TEXTUREUSAGE_FRAGMENT_SAMPLER_BIT)
|
|
||||||
{
|
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
|
||||||
renderer,
|
|
||||||
RESOURCE_ACCESS_FRAGMENT_SHADER_READ_SAMPLED_IMAGE,
|
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
0,
|
0,
|
||||||
vulkanTexture->layerCount,
|
vulkanTexture->layerCount,
|
||||||
|
@ -5505,26 +5461,11 @@ static void VULKAN_SetTextureDataYUV(
|
||||||
&imageCopy
|
&imageCopy
|
||||||
));
|
));
|
||||||
|
|
||||||
if (tex->usageFlags & REFRESH_TEXTUREUSAGE_VERTEX_SAMPLER_BIT)
|
if (tex->usageFlags & REFRESH_TEXTUREUSAGE_SAMPLER_BIT)
|
||||||
{
|
{
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
VULKAN_INTERNAL_ImageMemoryBarrier(
|
||||||
renderer,
|
renderer,
|
||||||
RESOURCE_ACCESS_VERTEX_SHADER_READ_SAMPLED_IMAGE,
|
RESOURCE_ACCESS_ANY_SHADER_READ_SAMPLED_IMAGE,
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
|
||||||
0,
|
|
||||||
tex->layerCount,
|
|
||||||
0,
|
|
||||||
tex->levelCount,
|
|
||||||
0,
|
|
||||||
tex->image,
|
|
||||||
&tex->resourceAccessType
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else if (tex->usageFlags & REFRESH_TEXTUREUSAGE_FRAGMENT_SAMPLER_BIT)
|
|
||||||
{
|
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
|
||||||
renderer,
|
|
||||||
RESOURCE_ACCESS_FRAGMENT_SHADER_READ_SAMPLED_IMAGE,
|
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
0,
|
0,
|
||||||
tex->layerCount,
|
tex->layerCount,
|
||||||
|
@ -5903,20 +5844,6 @@ static void VULKAN_SetFragmentSamplers(
|
||||||
for (i = 0; i < samplerCount; i += 1)
|
for (i = 0; i < samplerCount; i += 1)
|
||||||
{
|
{
|
||||||
currentTexture = (VulkanTexture*) pTextures[i];
|
currentTexture = (VulkanTexture*) pTextures[i];
|
||||||
|
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
|
||||||
renderer,
|
|
||||||
RESOURCE_ACCESS_FRAGMENT_SHADER_READ_SAMPLED_IMAGE,
|
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
|
||||||
0,
|
|
||||||
currentTexture->layerCount,
|
|
||||||
0,
|
|
||||||
currentTexture->levelCount,
|
|
||||||
0,
|
|
||||||
currentTexture->image,
|
|
||||||
¤tTexture->resourceAccessType
|
|
||||||
);
|
|
||||||
|
|
||||||
fragmentSamplerDescriptorSetData.descriptorImageInfo[i].imageView = currentTexture->view;
|
fragmentSamplerDescriptorSetData.descriptorImageInfo[i].imageView = currentTexture->view;
|
||||||
fragmentSamplerDescriptorSetData.descriptorImageInfo[i].sampler = (VkSampler) pSamplers[i];
|
fragmentSamplerDescriptorSetData.descriptorImageInfo[i].sampler = (VkSampler) pSamplers[i];
|
||||||
fragmentSamplerDescriptorSetData.descriptorImageInfo[i].imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
fragmentSamplerDescriptorSetData.descriptorImageInfo[i].imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||||
|
@ -6272,26 +6199,11 @@ static void VULKAN_EndRenderPass(
|
||||||
for (i = 0; i < renderer->currentFramebuffer->colorTargetCount; i += 1)
|
for (i = 0; i < renderer->currentFramebuffer->colorTargetCount; i += 1)
|
||||||
{
|
{
|
||||||
currentTexture = renderer->currentFramebuffer->colorTargets[i]->texture;
|
currentTexture = renderer->currentFramebuffer->colorTargets[i]->texture;
|
||||||
if (currentTexture->usageFlags & REFRESH_TEXTUREUSAGE_VERTEX_SAMPLER_BIT)
|
if (currentTexture->usageFlags & REFRESH_TEXTUREUSAGE_SAMPLER_BIT)
|
||||||
{
|
{
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
VULKAN_INTERNAL_ImageMemoryBarrier(
|
||||||
renderer,
|
renderer,
|
||||||
RESOURCE_ACCESS_VERTEX_SHADER_READ_SAMPLED_IMAGE,
|
RESOURCE_ACCESS_ANY_SHADER_READ_SAMPLED_IMAGE,
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
|
||||||
0,
|
|
||||||
currentTexture->layerCount,
|
|
||||||
0,
|
|
||||||
currentTexture->levelCount,
|
|
||||||
0,
|
|
||||||
currentTexture->image,
|
|
||||||
¤tTexture->resourceAccessType
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else if (currentTexture->usageFlags & REFRESH_TEXTUREUSAGE_FRAGMENT_SAMPLER_BIT)
|
|
||||||
{
|
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
|
||||||
renderer,
|
|
||||||
RESOURCE_ACCESS_FRAGMENT_SHADER_READ_SAMPLED_IMAGE,
|
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
0,
|
0,
|
||||||
currentTexture->layerCount,
|
currentTexture->layerCount,
|
||||||
|
|
Loading…
Reference in New Issue