forked from MoonsideGames/Refresh
Compare commits
No commits in common. "e697739ae64092e81662a359504b8f6d0c6af632" and "05900bee14f9277620f742bd64c50c34f173ee04" have entirely different histories.
e697739ae6
...
05900bee14
|
@ -463,7 +463,6 @@ typedef struct Refresh_TextureCreateInfo
|
|||
uint32_t depth;
|
||||
uint8_t isCube;
|
||||
uint32_t levelCount;
|
||||
Refresh_SampleCount sampleCount;
|
||||
Refresh_TextureFormat format;
|
||||
Refresh_TextureUsageFlags usageFlags;
|
||||
} Refresh_TextureCreateInfo;
|
||||
|
@ -552,6 +551,7 @@ typedef struct Refresh_ColorAttachmentInfo
|
|||
uint32_t depth;
|
||||
uint32_t layer;
|
||||
uint32_t level;
|
||||
Refresh_SampleCount sampleCount;
|
||||
Refresh_Vec4 clearColor; /* Can be ignored by RenderPass */
|
||||
Refresh_LoadOp loadOp;
|
||||
Refresh_StoreOp storeOp;
|
||||
|
|
|
@ -758,21 +758,20 @@ typedef struct VulkanTexture
|
|||
uint32_t depth;
|
||||
uint32_t layerCount;
|
||||
uint32_t levelCount;
|
||||
Refresh_SampleCount sampleCount;
|
||||
VkFormat format;
|
||||
VulkanResourceAccessType resourceAccessType;
|
||||
VkImageUsageFlags usageFlags;
|
||||
|
||||
VkImageAspectFlags aspectFlags;
|
||||
|
||||
struct VulkanTexture *msaaTex;
|
||||
|
||||
SDL_atomic_t referenceCount;
|
||||
} VulkanTexture;
|
||||
|
||||
typedef struct VulkanRenderTarget
|
||||
{
|
||||
VkImageView view;
|
||||
VulkanTexture *multisampleTexture;
|
||||
VkSampleCountFlags multisampleCount;
|
||||
} VulkanRenderTarget;
|
||||
|
||||
typedef struct VulkanFramebuffer
|
||||
|
@ -1201,10 +1200,11 @@ static inline void FramebufferHashArray_Remove(
|
|||
|
||||
typedef struct RenderTargetHash
|
||||
{
|
||||
VulkanTexture *texture;
|
||||
Refresh_Texture *texture;
|
||||
uint32_t depth;
|
||||
uint32_t layer;
|
||||
uint32_t level;
|
||||
Refresh_SampleCount sampleCount;
|
||||
} RenderTargetHash;
|
||||
|
||||
typedef struct RenderTargetHashMap
|
||||
|
@ -1244,6 +1244,11 @@ static inline uint8_t RenderTargetHash_Compare(
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (a->sampleCount != b->sampleCount)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -3063,15 +3068,6 @@ static void VULKAN_INTERNAL_DestroyTexture(
|
|||
NULL
|
||||
);
|
||||
|
||||
/* destroy the msaa texture, if there is one */
|
||||
if (texture->msaaTex != NULL)
|
||||
{
|
||||
VULKAN_INTERNAL_DestroyTexture(
|
||||
renderer,
|
||||
texture->msaaTex
|
||||
);
|
||||
}
|
||||
|
||||
SDL_free(texture);
|
||||
}
|
||||
|
||||
|
@ -3090,6 +3086,18 @@ static void VULKAN_INTERNAL_DestroyRenderTarget(
|
|||
NULL
|
||||
);
|
||||
|
||||
/* The texture is not owned by the RenderTarget
|
||||
* so we don't free it here
|
||||
* But the multisampleTexture is!
|
||||
*/
|
||||
if (renderTarget->multisampleTexture != NULL)
|
||||
{
|
||||
VULKAN_INTERNAL_DestroyTexture(
|
||||
renderer,
|
||||
renderTarget->multisampleTexture
|
||||
);
|
||||
}
|
||||
|
||||
SDL_free(renderTarget);
|
||||
}
|
||||
|
||||
|
@ -4597,13 +4605,11 @@ static uint8_t VULKAN_INTERNAL_CreateSwapchain(
|
|||
swapchainData->textures[i].isCube = 0;
|
||||
swapchainData->textures[i].layerCount = 1;
|
||||
swapchainData->textures[i].levelCount = 1;
|
||||
swapchainData->textures[i].sampleCount = REFRESH_SAMPLECOUNT_1;
|
||||
swapchainData->textures[i].usageFlags =
|
||||
VK_IMAGE_USAGE_TRANSFER_DST_BIT |
|
||||
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
|
||||
swapchainData->textures[i].aspectFlags = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
swapchainData->textures[i].resourceAccessType = RESOURCE_ACCESS_NONE;
|
||||
swapchainData->textures[i].msaaTex = NULL;
|
||||
}
|
||||
|
||||
SDL_stack_free(swapchainImages);
|
||||
|
@ -5211,10 +5217,11 @@ static VulkanTexture* VULKAN_INTERNAL_CreateTexture(
|
|||
uint32_t height,
|
||||
uint32_t depth,
|
||||
uint32_t isCube,
|
||||
VkSampleCountFlagBits samples,
|
||||
uint32_t levelCount,
|
||||
Refresh_SampleCount sampleCount,
|
||||
VkFormat format,
|
||||
VkImageAspectFlags aspectMask,
|
||||
VkImageType imageType,
|
||||
VkImageUsageFlags imageUsageFlags
|
||||
) {
|
||||
VkResult vulkanResult;
|
||||
|
@ -5248,14 +5255,14 @@ static VulkanTexture* VULKAN_INTERNAL_CreateTexture(
|
|||
imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
|
||||
imageCreateInfo.pNext = NULL;
|
||||
imageCreateInfo.flags = imageCreateFlags;
|
||||
imageCreateInfo.imageType = is3D ? VK_IMAGE_TYPE_3D : VK_IMAGE_TYPE_2D;
|
||||
imageCreateInfo.imageType = imageType;
|
||||
imageCreateInfo.format = format;
|
||||
imageCreateInfo.extent.width = width;
|
||||
imageCreateInfo.extent.height = height;
|
||||
imageCreateInfo.extent.depth = depth;
|
||||
imageCreateInfo.mipLevels = levelCount;
|
||||
imageCreateInfo.arrayLayers = layerCount;
|
||||
imageCreateInfo.samples = RefreshToVK_SampleCount[sampleCount];
|
||||
imageCreateInfo.samples = samples;
|
||||
imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
|
||||
imageCreateInfo.usage = imageUsageFlags;
|
||||
imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
|
@ -5353,13 +5360,17 @@ static VulkanTexture* VULKAN_INTERNAL_CreateTexture(
|
|||
{
|
||||
imageViewCreateInfo.viewType = VK_IMAGE_VIEW_TYPE_CUBE;
|
||||
}
|
||||
else if (is3D)
|
||||
else if (imageType == VK_IMAGE_TYPE_2D)
|
||||
{
|
||||
imageViewCreateInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
||||
}
|
||||
else if (imageType == VK_IMAGE_TYPE_3D)
|
||||
{
|
||||
imageViewCreateInfo.viewType = VK_IMAGE_VIEW_TYPE_3D;
|
||||
}
|
||||
else
|
||||
{
|
||||
imageViewCreateInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
||||
Refresh_LogError("invalid image type: %u", imageType);
|
||||
}
|
||||
|
||||
vulkanResult = renderer->vkCreateImageView(
|
||||
|
@ -5382,11 +5393,9 @@ static VulkanTexture* VULKAN_INTERNAL_CreateTexture(
|
|||
texture->format = format;
|
||||
texture->levelCount = levelCount;
|
||||
texture->layerCount = layerCount;
|
||||
texture->sampleCount = sampleCount;
|
||||
texture->resourceAccessType = RESOURCE_ACCESS_NONE;
|
||||
texture->usageFlags = imageUsageFlags;
|
||||
texture->aspectFlags = aspectMask;
|
||||
texture->msaaTex = NULL;
|
||||
|
||||
SDL_AtomicSet(&texture->referenceCount, 0);
|
||||
|
||||
|
@ -5395,22 +5404,27 @@ static VulkanTexture* VULKAN_INTERNAL_CreateTexture(
|
|||
|
||||
static VulkanRenderTarget* VULKAN_INTERNAL_CreateRenderTarget(
|
||||
VulkanRenderer *renderer,
|
||||
VulkanTexture *texture,
|
||||
Refresh_Texture *texture,
|
||||
uint32_t depth,
|
||||
uint32_t layer,
|
||||
uint32_t level
|
||||
uint32_t level,
|
||||
Refresh_SampleCount multisampleCount
|
||||
) {
|
||||
VkResult vulkanResult;
|
||||
VulkanRenderTarget *renderTarget = (VulkanRenderTarget*) SDL_malloc(sizeof(VulkanRenderTarget));
|
||||
VulkanTexture *vulkanTexture = (VulkanTexture*) texture;
|
||||
VkImageViewCreateInfo imageViewCreateInfo;
|
||||
VkComponentMapping swizzle = IDENTITY_SWIZZLE;
|
||||
VkImageAspectFlags aspectFlags = 0;
|
||||
|
||||
if (IsDepthFormat(texture->format))
|
||||
renderTarget->multisampleTexture = NULL;
|
||||
renderTarget->multisampleCount = 1;
|
||||
|
||||
if (IsDepthFormat(vulkanTexture->format))
|
||||
{
|
||||
aspectFlags |= VK_IMAGE_ASPECT_DEPTH_BIT;
|
||||
|
||||
if (IsStencilFormat(texture->format))
|
||||
if (IsStencilFormat(vulkanTexture->format))
|
||||
{
|
||||
aspectFlags |= VK_IMAGE_ASPECT_STENCIL_BIT;
|
||||
}
|
||||
|
@ -5420,22 +5434,49 @@ static VulkanRenderTarget* VULKAN_INTERNAL_CreateRenderTarget(
|
|||
aspectFlags |= VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
}
|
||||
|
||||
/* create resolve target for multisample */
|
||||
if (multisampleCount > REFRESH_SAMPLECOUNT_1)
|
||||
{
|
||||
/* Find a compatible sample count to use */
|
||||
multisampleCount = VULKAN_INTERNAL_GetMaxMultiSampleCount(
|
||||
renderer,
|
||||
multisampleCount
|
||||
);
|
||||
|
||||
renderTarget->multisampleTexture =
|
||||
VULKAN_INTERNAL_CreateTexture(
|
||||
renderer,
|
||||
vulkanTexture->dimensions.width,
|
||||
vulkanTexture->dimensions.height,
|
||||
1,
|
||||
0,
|
||||
RefreshToVK_SampleCount[multisampleCount],
|
||||
1,
|
||||
vulkanTexture->format,
|
||||
aspectFlags,
|
||||
VK_IMAGE_TYPE_2D,
|
||||
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT
|
||||
);
|
||||
|
||||
renderTarget->multisampleCount = RefreshToVK_SampleCount[multisampleCount];
|
||||
}
|
||||
|
||||
/* create framebuffer compatible views for RenderTarget */
|
||||
imageViewCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||
imageViewCreateInfo.pNext = NULL;
|
||||
imageViewCreateInfo.flags = 0;
|
||||
imageViewCreateInfo.image = texture->image;
|
||||
imageViewCreateInfo.format = texture->format;
|
||||
imageViewCreateInfo.image = vulkanTexture->image;
|
||||
imageViewCreateInfo.format = vulkanTexture->format;
|
||||
imageViewCreateInfo.components = swizzle;
|
||||
imageViewCreateInfo.subresourceRange.aspectMask = aspectFlags;
|
||||
imageViewCreateInfo.subresourceRange.baseMipLevel = level;
|
||||
imageViewCreateInfo.subresourceRange.levelCount = 1;
|
||||
imageViewCreateInfo.subresourceRange.baseArrayLayer = 0;
|
||||
if (texture->is3D)
|
||||
if (vulkanTexture->is3D)
|
||||
{
|
||||
imageViewCreateInfo.subresourceRange.baseArrayLayer = depth;
|
||||
}
|
||||
else if (texture->isCube)
|
||||
else if (vulkanTexture->isCube)
|
||||
{
|
||||
imageViewCreateInfo.subresourceRange.baseArrayLayer = layer;
|
||||
}
|
||||
|
@ -5464,10 +5505,11 @@ static VulkanRenderTarget* VULKAN_INTERNAL_CreateRenderTarget(
|
|||
|
||||
static VulkanRenderTarget* VULKAN_INTERNAL_FetchRenderTarget(
|
||||
VulkanRenderer *renderer,
|
||||
VulkanTexture *texture,
|
||||
Refresh_Texture *texture,
|
||||
uint32_t depth,
|
||||
uint32_t layer,
|
||||
uint32_t level
|
||||
uint32_t level,
|
||||
Refresh_SampleCount sampleCount
|
||||
) {
|
||||
RenderTargetHash hash;
|
||||
VulkanRenderTarget *renderTarget;
|
||||
|
@ -5476,6 +5518,7 @@ static VulkanRenderTarget* VULKAN_INTERNAL_FetchRenderTarget(
|
|||
hash.depth = depth;
|
||||
hash.layer = layer;
|
||||
hash.level = level;
|
||||
hash.sampleCount = sampleCount;
|
||||
|
||||
SDL_LockMutex(renderer->renderTargetFetchLock);
|
||||
|
||||
|
@ -5491,7 +5534,8 @@ static VulkanRenderTarget* VULKAN_INTERNAL_FetchRenderTarget(
|
|||
texture,
|
||||
depth,
|
||||
layer,
|
||||
level
|
||||
level,
|
||||
sampleCount
|
||||
);
|
||||
|
||||
RenderTargetHash_Insert(
|
||||
|
@ -5522,21 +5566,31 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
|||
VkSubpassDescription subpass;
|
||||
VkRenderPass renderPass;
|
||||
uint32_t i;
|
||||
uint8_t multisampling = 0;
|
||||
|
||||
uint32_t attachmentDescriptionCount = 0;
|
||||
uint32_t colorAttachmentReferenceCount = 0;
|
||||
uint32_t resolveReferenceCount = 0;
|
||||
|
||||
VulkanRenderTarget *renderTarget;
|
||||
VulkanTexture *texture;
|
||||
VulkanTexture *msaaTexture = NULL;
|
||||
|
||||
for (i = 0; i < colorAttachmentCount; i += 1)
|
||||
{
|
||||
texture = (VulkanTexture*) colorAttachmentInfos[i].texture;
|
||||
|
||||
if (texture->msaaTex != NULL)
|
||||
renderTarget = VULKAN_INTERNAL_FetchRenderTarget(
|
||||
renderer,
|
||||
colorAttachmentInfos[i].texture,
|
||||
colorAttachmentInfos[i].depth,
|
||||
colorAttachmentInfos[i].layer,
|
||||
colorAttachmentInfos[i].level,
|
||||
colorAttachmentInfos[i].sampleCount
|
||||
);
|
||||
|
||||
if (renderTarget->multisampleCount > VK_SAMPLE_COUNT_1_BIT)
|
||||
{
|
||||
msaaTexture = texture->msaaTex;
|
||||
multisampling = 1;
|
||||
|
||||
/* Transition the multisample attachment */
|
||||
|
||||
|
@ -5546,12 +5600,12 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
|||
RESOURCE_ACCESS_COLOR_ATTACHMENT_WRITE,
|
||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
0,
|
||||
msaaTexture->layerCount,
|
||||
renderTarget->multisampleTexture->layerCount,
|
||||
0,
|
||||
msaaTexture->levelCount,
|
||||
renderTarget->multisampleTexture->levelCount,
|
||||
0,
|
||||
msaaTexture->image,
|
||||
&msaaTexture->resourceAccessType
|
||||
renderTarget->multisampleTexture->image,
|
||||
&renderTarget->multisampleTexture->resourceAccessType
|
||||
);
|
||||
|
||||
/* Resolve attachment and multisample attachment */
|
||||
|
@ -5583,10 +5637,8 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
|||
resolveReferenceCount += 1;
|
||||
|
||||
attachmentDescriptions[attachmentDescriptionCount].flags = 0;
|
||||
attachmentDescriptions[attachmentDescriptionCount].format = msaaTexture->format;
|
||||
attachmentDescriptions[attachmentDescriptionCount].samples = RefreshToVK_SampleCount[
|
||||
msaaTexture->sampleCount
|
||||
];
|
||||
attachmentDescriptions[attachmentDescriptionCount].format = texture->format;
|
||||
attachmentDescriptions[attachmentDescriptionCount].samples = renderTarget->multisampleCount;
|
||||
attachmentDescriptions[attachmentDescriptionCount].loadOp = RefreshToVK_LoadOp[
|
||||
colorAttachmentInfos[i].loadOp
|
||||
];
|
||||
|
@ -5655,9 +5707,16 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
|||
}
|
||||
else
|
||||
{
|
||||
texture = (VulkanTexture*) depthStencilAttachmentInfo->texture;
|
||||
renderTarget = VULKAN_INTERNAL_FetchRenderTarget(
|
||||
renderer,
|
||||
depthStencilAttachmentInfo->texture,
|
||||
depthStencilAttachmentInfo->depth,
|
||||
depthStencilAttachmentInfo->layer,
|
||||
depthStencilAttachmentInfo->level,
|
||||
REFRESH_SAMPLECOUNT_1
|
||||
);
|
||||
|
||||
/* FIXME: MSAA? */
|
||||
texture = (VulkanTexture*) depthStencilAttachmentInfo->texture;
|
||||
|
||||
attachmentDescriptions[attachmentDescriptionCount].flags = 0;
|
||||
attachmentDescriptions[attachmentDescriptionCount].format = texture->format;
|
||||
|
@ -5691,7 +5750,7 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
|||
attachmentDescriptionCount += 1;
|
||||
}
|
||||
|
||||
if (msaaTexture != NULL)
|
||||
if (multisampling)
|
||||
{
|
||||
subpass.pResolveAttachments = resolveReferences;
|
||||
}
|
||||
|
@ -6548,7 +6607,6 @@ static Refresh_Texture* VULKAN_CreateTexture(
|
|||
);
|
||||
VkImageAspectFlags imageAspectFlags;
|
||||
VkFormat format;
|
||||
VulkanTexture *result;
|
||||
|
||||
if (IsRefreshDepthFormat(textureCreateInfo->format))
|
||||
{
|
||||
|
@ -6593,37 +6651,19 @@ static Refresh_Texture* VULKAN_CreateTexture(
|
|||
imageAspectFlags = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
}
|
||||
|
||||
result = VULKAN_INTERNAL_CreateTexture(
|
||||
return (Refresh_Texture*) VULKAN_INTERNAL_CreateTexture(
|
||||
renderer,
|
||||
textureCreateInfo->width,
|
||||
textureCreateInfo->height,
|
||||
textureCreateInfo->depth,
|
||||
textureCreateInfo->isCube,
|
||||
VK_SAMPLE_COUNT_1_BIT,
|
||||
textureCreateInfo->levelCount,
|
||||
REFRESH_SAMPLECOUNT_1,
|
||||
format,
|
||||
imageAspectFlags,
|
||||
VK_IMAGE_TYPE_2D,
|
||||
imageUsageFlags
|
||||
);
|
||||
|
||||
/* create the MSAA texture */
|
||||
if (result != NULL && textureCreateInfo->sampleCount > REFRESH_SAMPLECOUNT_1)
|
||||
{
|
||||
result->msaaTex = VULKAN_INTERNAL_CreateTexture(
|
||||
renderer,
|
||||
textureCreateInfo->width,
|
||||
textureCreateInfo->height,
|
||||
textureCreateInfo->depth,
|
||||
textureCreateInfo->isCube,
|
||||
textureCreateInfo->levelCount,
|
||||
textureCreateInfo->sampleCount,
|
||||
format,
|
||||
imageAspectFlags,
|
||||
imageUsageFlags
|
||||
);
|
||||
}
|
||||
|
||||
return (Refresh_Texture*) result;
|
||||
}
|
||||
|
||||
static Refresh_Buffer* VULKAN_CreateBuffer(
|
||||
|
@ -7809,7 +7849,7 @@ static void VULKAN_QueueDestroyTexture(
|
|||
Refresh_Texture *texture
|
||||
) {
|
||||
VulkanRenderer *renderer = (VulkanRenderer*) driverData;
|
||||
VulkanTexture* vulkanTexture = (VulkanTexture*) texture;
|
||||
VulkanTexture* vulkanTexture = (VulkanTexture*)texture;
|
||||
|
||||
SDL_LockMutex(renderer->disposeLock);
|
||||
|
||||
|
@ -7956,7 +7996,6 @@ static VkRenderPass VULKAN_INTERNAL_FetchRenderPass(
|
|||
VkRenderPass renderPass;
|
||||
RenderPassHash hash;
|
||||
uint32_t i;
|
||||
VulkanTexture *texture;
|
||||
|
||||
SDL_LockMutex(renderer->renderPassFetchLock);
|
||||
|
||||
|
@ -7968,15 +8007,9 @@ static VkRenderPass VULKAN_INTERNAL_FetchRenderPass(
|
|||
hash.colorTargetDescriptions[i].storeOp = colorAttachmentInfos[i].storeOp;
|
||||
}
|
||||
|
||||
hash.colorAttachmentSampleCount = REFRESH_SAMPLECOUNT_1;
|
||||
if (colorAttachmentCount > 0)
|
||||
{
|
||||
texture = (VulkanTexture*) colorAttachmentInfos[0].texture;
|
||||
if (texture->msaaTex != NULL)
|
||||
{
|
||||
hash.colorAttachmentSampleCount = texture->msaaTex->sampleCount;
|
||||
}
|
||||
}
|
||||
hash.colorAttachmentSampleCount = (colorAttachmentCount > 0) ?
|
||||
colorAttachmentInfos[0].sampleCount :
|
||||
REFRESH_SAMPLECOUNT_1;
|
||||
|
||||
hash.colorAttachmentCount = colorAttachmentCount;
|
||||
|
||||
|
@ -8043,7 +8076,6 @@ static VulkanFramebuffer* VULKAN_INTERNAL_FetchFramebuffer(
|
|||
VkResult result;
|
||||
VkImageView imageViewAttachments[2 * MAX_COLOR_TARGET_BINDINGS + 1];
|
||||
FramebufferHash hash;
|
||||
VulkanTexture *texture;
|
||||
VulkanRenderTarget *renderTarget;
|
||||
uint32_t attachmentCount = 0;
|
||||
uint32_t i;
|
||||
|
@ -8060,32 +8092,23 @@ static VulkanFramebuffer* VULKAN_INTERNAL_FetchFramebuffer(
|
|||
|
||||
for (i = 0; i < colorAttachmentCount; i += 1)
|
||||
{
|
||||
texture = (VulkanTexture*) colorAttachmentInfos[i].texture;
|
||||
|
||||
renderTarget = VULKAN_INTERNAL_FetchRenderTarget(
|
||||
renderer,
|
||||
texture,
|
||||
colorAttachmentInfos[i].texture,
|
||||
colorAttachmentInfos[i].depth,
|
||||
colorAttachmentInfos[i].layer,
|
||||
colorAttachmentInfos[i].level
|
||||
colorAttachmentInfos[i].level,
|
||||
colorAttachmentInfos[i].sampleCount
|
||||
);
|
||||
|
||||
hash.colorAttachmentViews[i] = (
|
||||
renderTarget->view
|
||||
);
|
||||
|
||||
if (texture->msaaTex != NULL)
|
||||
if (renderTarget->multisampleTexture != NULL)
|
||||
{
|
||||
renderTarget = VULKAN_INTERNAL_FetchRenderTarget(
|
||||
renderer,
|
||||
texture->msaaTex,
|
||||
colorAttachmentInfos[i].depth,
|
||||
colorAttachmentInfos[i].layer,
|
||||
colorAttachmentInfos[i].level
|
||||
);
|
||||
|
||||
hash.colorMultiSampleAttachmentViews[i] = (
|
||||
renderTarget->view
|
||||
renderTarget->multisampleTexture->view
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -8096,13 +8119,13 @@ static VulkanFramebuffer* VULKAN_INTERNAL_FetchFramebuffer(
|
|||
}
|
||||
else
|
||||
{
|
||||
texture = (VulkanTexture*) depthStencilAttachmentInfo->texture;
|
||||
renderTarget = VULKAN_INTERNAL_FetchRenderTarget(
|
||||
renderer,
|
||||
texture,
|
||||
depthStencilAttachmentInfo->texture,
|
||||
depthStencilAttachmentInfo->depth,
|
||||
depthStencilAttachmentInfo->layer,
|
||||
depthStencilAttachmentInfo->level
|
||||
depthStencilAttachmentInfo->level,
|
||||
REFRESH_SAMPLECOUNT_1
|
||||
);
|
||||
hash.depthStencilAttachmentView = renderTarget->view;
|
||||
}
|
||||
|
@ -8129,14 +8152,13 @@ static VulkanFramebuffer* VULKAN_INTERNAL_FetchFramebuffer(
|
|||
|
||||
for (i = 0; i < colorAttachmentCount; i += 1)
|
||||
{
|
||||
texture = (VulkanTexture*) colorAttachmentInfos[i].texture;
|
||||
|
||||
renderTarget = VULKAN_INTERNAL_FetchRenderTarget(
|
||||
renderer,
|
||||
texture,
|
||||
colorAttachmentInfos[i].texture,
|
||||
colorAttachmentInfos[i].depth,
|
||||
colorAttachmentInfos[i].layer,
|
||||
colorAttachmentInfos[i].level
|
||||
colorAttachmentInfos[i].level,
|
||||
colorAttachmentInfos[i].sampleCount
|
||||
);
|
||||
|
||||
imageViewAttachments[attachmentCount] =
|
||||
|
@ -8144,18 +8166,10 @@ static VulkanFramebuffer* VULKAN_INTERNAL_FetchFramebuffer(
|
|||
|
||||
attachmentCount += 1;
|
||||
|
||||
if (texture->msaaTex != NULL)
|
||||
if (renderTarget->multisampleTexture != NULL)
|
||||
{
|
||||
renderTarget = VULKAN_INTERNAL_FetchRenderTarget(
|
||||
renderer,
|
||||
texture->msaaTex,
|
||||
colorAttachmentInfos[i].depth,
|
||||
colorAttachmentInfos[i].layer,
|
||||
colorAttachmentInfos[i].level
|
||||
);
|
||||
|
||||
imageViewAttachments[attachmentCount] =
|
||||
renderTarget->view;
|
||||
renderTarget->multisampleTexture->view;
|
||||
|
||||
attachmentCount += 1;
|
||||
}
|
||||
|
@ -8163,13 +8177,13 @@ static VulkanFramebuffer* VULKAN_INTERNAL_FetchFramebuffer(
|
|||
|
||||
if (depthStencilAttachmentInfo != NULL)
|
||||
{
|
||||
texture = (VulkanTexture*) depthStencilAttachmentInfo->texture;
|
||||
renderTarget = VULKAN_INTERNAL_FetchRenderTarget(
|
||||
renderer,
|
||||
texture,
|
||||
depthStencilAttachmentInfo->texture,
|
||||
depthStencilAttachmentInfo->depth,
|
||||
depthStencilAttachmentInfo->layer,
|
||||
depthStencilAttachmentInfo->level
|
||||
depthStencilAttachmentInfo->level,
|
||||
REFRESH_SAMPLECOUNT_1
|
||||
);
|
||||
|
||||
imageViewAttachments[attachmentCount] = renderTarget->view;
|
||||
|
@ -8292,7 +8306,6 @@ static void VULKAN_BeginRenderPass(
|
|||
VulkanFramebuffer *framebuffer;
|
||||
|
||||
VulkanTexture *texture;
|
||||
uint32_t w, h;
|
||||
VkClearValue *clearValues;
|
||||
uint32_t clearCount = colorAttachmentCount;
|
||||
uint32_t multisampleAttachmentCount = 0;
|
||||
|
@ -8308,34 +8321,30 @@ static void VULKAN_BeginRenderPass(
|
|||
for (i = 0; i < colorAttachmentCount; i += 1)
|
||||
{
|
||||
texture = (VulkanTexture*) colorAttachmentInfos[i].texture;
|
||||
w = texture->dimensions.width >> colorAttachmentInfos[i].level;
|
||||
h = texture->dimensions.height >> colorAttachmentInfos[i].level;
|
||||
|
||||
if (w < framebufferWidth)
|
||||
if (texture->dimensions.width < framebufferWidth)
|
||||
{
|
||||
framebufferWidth = w;
|
||||
framebufferWidth = texture->dimensions.width;
|
||||
}
|
||||
|
||||
if (h < framebufferHeight)
|
||||
if (texture->dimensions.height < framebufferHeight)
|
||||
{
|
||||
framebufferHeight = h;
|
||||
framebufferHeight = texture->dimensions.height;
|
||||
}
|
||||
}
|
||||
|
||||
if (depthStencilAttachmentInfo != NULL)
|
||||
{
|
||||
texture = (VulkanTexture*) depthStencilAttachmentInfo->texture;
|
||||
w = texture->dimensions.width >> depthStencilAttachmentInfo->level;
|
||||
h = texture->dimensions.height >> depthStencilAttachmentInfo->level;
|
||||
|
||||
if (w < framebufferWidth)
|
||||
if (texture->dimensions.width < framebufferWidth)
|
||||
{
|
||||
framebufferWidth = w;
|
||||
framebufferWidth = texture->dimensions.width;
|
||||
}
|
||||
|
||||
if (h < framebufferHeight)
|
||||
if (texture->dimensions.height < framebufferHeight)
|
||||
{
|
||||
framebufferHeight = h;
|
||||
framebufferHeight = texture->dimensions.height;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8381,7 +8390,7 @@ static void VULKAN_BeginRenderPass(
|
|||
&texture->resourceAccessType
|
||||
);
|
||||
|
||||
if (texture->msaaTex != NULL)
|
||||
if (colorAttachmentInfos[i].sampleCount > REFRESH_SAMPLECOUNT_1)
|
||||
{
|
||||
clearCount += 1;
|
||||
multisampleAttachmentCount += 1;
|
||||
|
@ -8431,14 +8440,13 @@ static void VULKAN_BeginRenderPass(
|
|||
clearValues[i].color.float32[2] = colorAttachmentInfos[i].clearColor.z;
|
||||
clearValues[i].color.float32[3] = colorAttachmentInfos[i].clearColor.w;
|
||||
|
||||
texture = (VulkanTexture*) colorAttachmentInfos[i].texture;
|
||||
if (texture->msaaTex != NULL)
|
||||
if (colorAttachmentInfos[i].sampleCount > REFRESH_SAMPLECOUNT_1)
|
||||
{
|
||||
clearValues[i+1].color.float32[0] = colorAttachmentInfos[i].clearColor.x;
|
||||
clearValues[i+1].color.float32[1] = colorAttachmentInfos[i].clearColor.y;
|
||||
clearValues[i+1].color.float32[2] = colorAttachmentInfos[i].clearColor.z;
|
||||
clearValues[i+1].color.float32[3] = colorAttachmentInfos[i].clearColor.w;
|
||||
i += 1;
|
||||
clearValues[i].color.float32[0] = colorAttachmentInfos[i].clearColor.x;
|
||||
clearValues[i].color.float32[1] = colorAttachmentInfos[i].clearColor.y;
|
||||
clearValues[i].color.float32[2] = colorAttachmentInfos[i].clearColor.z;
|
||||
clearValues[i].color.float32[3] = colorAttachmentInfos[i].clearColor.w;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue