|
|
@ -971,7 +971,6 @@ typedef struct RenderPassHash
|
|
|
|
RenderPassColorTargetDescription colorTargetDescriptions[MAX_COLOR_TARGET_BINDINGS];
|
|
|
|
RenderPassColorTargetDescription colorTargetDescriptions[MAX_COLOR_TARGET_BINDINGS];
|
|
|
|
uint32_t colorAttachmentCount;
|
|
|
|
uint32_t colorAttachmentCount;
|
|
|
|
RenderPassDepthStencilTargetDescription depthStencilTargetDescription;
|
|
|
|
RenderPassDepthStencilTargetDescription depthStencilTargetDescription;
|
|
|
|
Refresh_SampleCount colorAttachmentSampleCount;
|
|
|
|
|
|
|
|
} RenderPassHash;
|
|
|
|
} RenderPassHash;
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct RenderPassHashMap
|
|
|
|
typedef struct RenderPassHashMap
|
|
|
@ -998,11 +997,6 @@ static inline uint8_t RenderPassHash_Compare(
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (a->colorAttachmentSampleCount != b->colorAttachmentSampleCount)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < a->colorAttachmentCount; i += 1)
|
|
|
|
for (i = 0; i < a->colorAttachmentCount; i += 1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (a->colorTargetDescriptions[i].format != b->colorTargetDescriptions[i].format)
|
|
|
|
if (a->colorTargetDescriptions[i].format != b->colorTargetDescriptions[i].format)
|
|
|
@ -2029,29 +2023,6 @@ static inline VkDeviceSize VULKAN_INTERNAL_BytesPerImage(
|
|
|
|
return blocksPerRow * blocksPerColumn * VULKAN_INTERNAL_BytesPerPixel(format);
|
|
|
|
return blocksPerRow * blocksPerColumn * VULKAN_INTERNAL_BytesPerPixel(format);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline Refresh_SampleCount VULKAN_INTERNAL_GetMaxMultiSampleCount(
|
|
|
|
|
|
|
|
VulkanRenderer *renderer,
|
|
|
|
|
|
|
|
Refresh_SampleCount multiSampleCount
|
|
|
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
VkSampleCountFlags flags = renderer->physicalDeviceProperties.properties.limits.framebufferColorSampleCounts;
|
|
|
|
|
|
|
|
Refresh_SampleCount maxSupported = REFRESH_SAMPLECOUNT_1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (flags & VK_SAMPLE_COUNT_8_BIT)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
maxSupported = REFRESH_SAMPLECOUNT_8;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (flags & VK_SAMPLE_COUNT_4_BIT)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
maxSupported = REFRESH_SAMPLECOUNT_4;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (flags & VK_SAMPLE_COUNT_2_BIT)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
maxSupported = REFRESH_SAMPLECOUNT_2;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return SDL_min(multiSampleCount, maxSupported);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Memory Management */
|
|
|
|
/* Memory Management */
|
|
|
|
|
|
|
|
|
|
|
|
static inline VkDeviceSize VULKAN_INTERNAL_NextHighestAlignment(
|
|
|
|
static inline VkDeviceSize VULKAN_INTERNAL_NextHighestAlignment(
|
|
|
@ -5460,12 +5431,6 @@ static VulkanRenderTarget* VULKAN_INTERNAL_CreateRenderTarget(
|
|
|
|
/* create resolve target for multisample */
|
|
|
|
/* create resolve target for multisample */
|
|
|
|
if (multisampleCount > REFRESH_SAMPLECOUNT_1)
|
|
|
|
if (multisampleCount > REFRESH_SAMPLECOUNT_1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
/* Find a compatible sample count to use */
|
|
|
|
|
|
|
|
multisampleCount = VULKAN_INTERNAL_GetMaxMultiSampleCount(
|
|
|
|
|
|
|
|
renderer,
|
|
|
|
|
|
|
|
multisampleCount
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
renderTarget->multisampleTexture =
|
|
|
|
renderTarget->multisampleTexture =
|
|
|
|
VULKAN_INTERNAL_CreateTexture(
|
|
|
|
VULKAN_INTERNAL_CreateTexture(
|
|
|
|
renderer,
|
|
|
|
renderer,
|
|
|
@ -5481,7 +5446,7 @@ static VulkanRenderTarget* VULKAN_INTERNAL_CreateRenderTarget(
|
|
|
|
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT
|
|
|
|
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
renderTarget->multisampleCount = RefreshToVK_SampleCount[multisampleCount];
|
|
|
|
renderTarget->multisampleCount = multisampleCount;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* create framebuffer compatible views for RenderTarget */
|
|
|
|
/* create framebuffer compatible views for RenderTarget */
|
|
|
@ -5575,7 +5540,6 @@ static VulkanRenderTarget* VULKAN_INTERNAL_FetchRenderTarget(
|
|
|
|
|
|
|
|
|
|
|
|
static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
|
|
|
static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
|
|
|
VulkanRenderer *renderer,
|
|
|
|
VulkanRenderer *renderer,
|
|
|
|
VulkanCommandBuffer *commandBuffer,
|
|
|
|
|
|
|
|
Refresh_ColorAttachmentInfo *colorAttachmentInfos,
|
|
|
|
Refresh_ColorAttachmentInfo *colorAttachmentInfos,
|
|
|
|
uint32_t colorAttachmentCount,
|
|
|
|
uint32_t colorAttachmentCount,
|
|
|
|
Refresh_DepthStencilAttachmentInfo *depthStencilAttachmentInfo
|
|
|
|
Refresh_DepthStencilAttachmentInfo *depthStencilAttachmentInfo
|
|
|
@ -5615,22 +5579,6 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
|
|
|
{
|
|
|
|
{
|
|
|
|
multisampling = 1;
|
|
|
|
multisampling = 1;
|
|
|
|
|
|
|
|
|
|
|
|
/* Transition the multisample attachment */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VULKAN_INTERNAL_ImageMemoryBarrier(
|
|
|
|
|
|
|
|
renderer,
|
|
|
|
|
|
|
|
commandBuffer->commandBuffer,
|
|
|
|
|
|
|
|
RESOURCE_ACCESS_COLOR_ATTACHMENT_WRITE,
|
|
|
|
|
|
|
|
VK_IMAGE_ASPECT_COLOR_BIT,
|
|
|
|
|
|
|
|
0,
|
|
|
|
|
|
|
|
renderTarget->multisampleTexture->layerCount,
|
|
|
|
|
|
|
|
0,
|
|
|
|
|
|
|
|
renderTarget->multisampleTexture->levelCount,
|
|
|
|
|
|
|
|
0,
|
|
|
|
|
|
|
|
renderTarget->multisampleTexture->image,
|
|
|
|
|
|
|
|
&renderTarget->multisampleTexture->resourceAccessType
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Resolve attachment and multisample attachment */
|
|
|
|
/* Resolve attachment and multisample attachment */
|
|
|
|
|
|
|
|
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].flags = 0;
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].flags = 0;
|
|
|
@ -5640,8 +5588,9 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].loadOp = RefreshToVK_LoadOp[
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].loadOp = RefreshToVK_LoadOp[
|
|
|
|
colorAttachmentInfos[i].loadOp
|
|
|
|
colorAttachmentInfos[i].loadOp
|
|
|
|
];
|
|
|
|
];
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].storeOp =
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].storeOp = RefreshToVK_StoreOp[
|
|
|
|
VK_ATTACHMENT_STORE_OP_STORE; /* Always store the resolve texture */
|
|
|
|
colorAttachmentInfos[i].storeOp
|
|
|
|
|
|
|
|
];
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].stencilLoadOp =
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].stencilLoadOp =
|
|
|
|
VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
|
|
|
VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].stencilStoreOp =
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].stencilStoreOp =
|
|
|
@ -5694,8 +5643,9 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].loadOp = RefreshToVK_LoadOp[
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].loadOp = RefreshToVK_LoadOp[
|
|
|
|
colorAttachmentInfos[i].loadOp
|
|
|
|
colorAttachmentInfos[i].loadOp
|
|
|
|
];
|
|
|
|
];
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].storeOp =
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].storeOp = RefreshToVK_StoreOp[
|
|
|
|
VK_ATTACHMENT_STORE_OP_STORE; /* Always store non-MSAA textures */
|
|
|
|
colorAttachmentInfos[i].storeOp
|
|
|
|
|
|
|
|
];
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].stencilLoadOp =
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].stencilLoadOp =
|
|
|
|
VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
|
|
|
VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].stencilStoreOp =
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].stencilStoreOp =
|
|
|
@ -5810,8 +5760,7 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
|
|
|
|
|
|
|
|
|
|
|
static VkRenderPass VULKAN_INTERNAL_CreateTransientRenderPass(
|
|
|
|
static VkRenderPass VULKAN_INTERNAL_CreateTransientRenderPass(
|
|
|
|
VulkanRenderer *renderer,
|
|
|
|
VulkanRenderer *renderer,
|
|
|
|
Refresh_GraphicsPipelineAttachmentInfo attachmentInfo,
|
|
|
|
Refresh_GraphicsPipelineAttachmentInfo attachmentInfo
|
|
|
|
Refresh_SampleCount sampleCount
|
|
|
|
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
VkAttachmentDescription attachmentDescriptions[2 * MAX_COLOR_TARGET_BINDINGS + 1];
|
|
|
|
VkAttachmentDescription attachmentDescriptions[2 * MAX_COLOR_TARGET_BINDINGS + 1];
|
|
|
|
VkAttachmentReference colorAttachmentReferences[MAX_COLOR_TARGET_BINDINGS];
|
|
|
|
VkAttachmentReference colorAttachmentReferences[MAX_COLOR_TARGET_BINDINGS];
|
|
|
@ -5833,7 +5782,7 @@ static VkRenderPass VULKAN_INTERNAL_CreateTransientRenderPass(
|
|
|
|
{
|
|
|
|
{
|
|
|
|
attachmentDescription = attachmentInfo.colorAttachmentDescriptions[i];
|
|
|
|
attachmentDescription = attachmentInfo.colorAttachmentDescriptions[i];
|
|
|
|
|
|
|
|
|
|
|
|
if (sampleCount > REFRESH_SAMPLECOUNT_1)
|
|
|
|
if (attachmentDescription.sampleCount > REFRESH_SAMPLECOUNT_1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
multisampling = 1;
|
|
|
|
multisampling = 1;
|
|
|
|
|
|
|
|
|
|
|
@ -5861,9 +5810,7 @@ static VkRenderPass VULKAN_INTERNAL_CreateTransientRenderPass(
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].format = RefreshToVK_SurfaceFormat[
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].format = RefreshToVK_SurfaceFormat[
|
|
|
|
attachmentDescription.format
|
|
|
|
attachmentDescription.format
|
|
|
|
];
|
|
|
|
];
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].samples = RefreshToVK_SampleCount[
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].samples = VK_SAMPLE_COUNT_1_BIT;
|
|
|
|
sampleCount
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
|
|
|
attachmentDescriptions[attachmentDescriptionCount].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
|
|
@ -5993,7 +5940,6 @@ static Refresh_GraphicsPipeline* VULKAN_CreateGraphicsPipeline(
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
VkResult vulkanResult;
|
|
|
|
VkResult vulkanResult;
|
|
|
|
uint32_t i;
|
|
|
|
uint32_t i;
|
|
|
|
Refresh_SampleCount actualSampleCount;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VulkanGraphicsPipeline *graphicsPipeline = (VulkanGraphicsPipeline*) SDL_malloc(sizeof(VulkanGraphicsPipeline));
|
|
|
|
VulkanGraphicsPipeline *graphicsPipeline = (VulkanGraphicsPipeline*) SDL_malloc(sizeof(VulkanGraphicsPipeline));
|
|
|
|
VkGraphicsPipelineCreateInfo vkPipelineCreateInfo;
|
|
|
|
VkGraphicsPipelineCreateInfo vkPipelineCreateInfo;
|
|
|
@ -6031,19 +5977,11 @@ static Refresh_GraphicsPipeline* VULKAN_CreateGraphicsPipeline(
|
|
|
|
|
|
|
|
|
|
|
|
VulkanRenderer *renderer = (VulkanRenderer*) driverData;
|
|
|
|
VulkanRenderer *renderer = (VulkanRenderer*) driverData;
|
|
|
|
|
|
|
|
|
|
|
|
/* Find a compatible sample count to use */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actualSampleCount = VULKAN_INTERNAL_GetMaxMultiSampleCount(
|
|
|
|
|
|
|
|
renderer,
|
|
|
|
|
|
|
|
pipelineCreateInfo->multisampleState.multisampleCount
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Create a "compatible" render pass */
|
|
|
|
/* Create a "compatible" render pass */
|
|
|
|
|
|
|
|
|
|
|
|
VkRenderPass transientRenderPass = VULKAN_INTERNAL_CreateTransientRenderPass(
|
|
|
|
VkRenderPass transientRenderPass = VULKAN_INTERNAL_CreateTransientRenderPass(
|
|
|
|
renderer,
|
|
|
|
renderer,
|
|
|
|
pipelineCreateInfo->attachmentInfo,
|
|
|
|
pipelineCreateInfo->attachmentInfo
|
|
|
|
actualSampleCount
|
|
|
|
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/* Dynamic state */
|
|
|
|
/* Dynamic state */
|
|
|
@ -6174,7 +6112,9 @@ static Refresh_GraphicsPipeline* VULKAN_CreateGraphicsPipeline(
|
|
|
|
multisampleStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
|
|
|
|
multisampleStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
|
|
|
|
multisampleStateCreateInfo.pNext = NULL;
|
|
|
|
multisampleStateCreateInfo.pNext = NULL;
|
|
|
|
multisampleStateCreateInfo.flags = 0;
|
|
|
|
multisampleStateCreateInfo.flags = 0;
|
|
|
|
multisampleStateCreateInfo.rasterizationSamples = RefreshToVK_SampleCount[actualSampleCount];
|
|
|
|
multisampleStateCreateInfo.rasterizationSamples = RefreshToVK_SampleCount[
|
|
|
|
|
|
|
|
pipelineCreateInfo->multisampleState.multisampleCount
|
|
|
|
|
|
|
|
];
|
|
|
|
multisampleStateCreateInfo.sampleShadingEnable = VK_FALSE;
|
|
|
|
multisampleStateCreateInfo.sampleShadingEnable = VK_FALSE;
|
|
|
|
multisampleStateCreateInfo.minSampleShading = 1.0f;
|
|
|
|
multisampleStateCreateInfo.minSampleShading = 1.0f;
|
|
|
|
multisampleStateCreateInfo.pSampleMask =
|
|
|
|
multisampleStateCreateInfo.pSampleMask =
|
|
|
@ -8040,7 +7980,6 @@ static void VULKAN_QueueDestroyGraphicsPipeline(
|
|
|
|
|
|
|
|
|
|
|
|
static VkRenderPass VULKAN_INTERNAL_FetchRenderPass(
|
|
|
|
static VkRenderPass VULKAN_INTERNAL_FetchRenderPass(
|
|
|
|
VulkanRenderer *renderer,
|
|
|
|
VulkanRenderer *renderer,
|
|
|
|
VulkanCommandBuffer *commandBuffer,
|
|
|
|
|
|
|
|
Refresh_ColorAttachmentInfo *colorAttachmentInfos,
|
|
|
|
Refresh_ColorAttachmentInfo *colorAttachmentInfos,
|
|
|
|
uint32_t colorAttachmentCount,
|
|
|
|
uint32_t colorAttachmentCount,
|
|
|
|
Refresh_DepthStencilAttachmentInfo *depthStencilAttachmentInfo
|
|
|
|
Refresh_DepthStencilAttachmentInfo *depthStencilAttachmentInfo
|
|
|
@ -8059,11 +7998,6 @@ static VkRenderPass VULKAN_INTERNAL_FetchRenderPass(
|
|
|
|
hash.colorTargetDescriptions[i].storeOp = colorAttachmentInfos[i].storeOp;
|
|
|
|
hash.colorTargetDescriptions[i].storeOp = colorAttachmentInfos[i].storeOp;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (colorAttachmentCount > 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
hash.colorAttachmentSampleCount = colorAttachmentInfos[0].sampleCount;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hash.colorAttachmentCount = colorAttachmentCount;
|
|
|
|
hash.colorAttachmentCount = colorAttachmentCount;
|
|
|
|
|
|
|
|
|
|
|
|
if (depthStencilAttachmentInfo == NULL)
|
|
|
|
if (depthStencilAttachmentInfo == NULL)
|
|
|
@ -8096,7 +8030,6 @@ static VkRenderPass VULKAN_INTERNAL_FetchRenderPass(
|
|
|
|
|
|
|
|
|
|
|
|
renderPass = VULKAN_INTERNAL_CreateRenderPass(
|
|
|
|
renderPass = VULKAN_INTERNAL_CreateRenderPass(
|
|
|
|
renderer,
|
|
|
|
renderer,
|
|
|
|
commandBuffer,
|
|
|
|
|
|
|
|
colorAttachmentInfos,
|
|
|
|
colorAttachmentInfos,
|
|
|
|
colorAttachmentCount,
|
|
|
|
colorAttachmentCount,
|
|
|
|
depthStencilAttachmentInfo
|
|
|
|
depthStencilAttachmentInfo
|
|
|
@ -8361,6 +8294,7 @@ static void VULKAN_SetScissor(
|
|
|
|
static void VULKAN_BeginRenderPass(
|
|
|
|
static void VULKAN_BeginRenderPass(
|
|
|
|
Refresh_Renderer *driverData,
|
|
|
|
Refresh_Renderer *driverData,
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
Refresh_CommandBuffer *commandBuffer,
|
|
|
|
|
|
|
|
Refresh_Rect *renderArea,
|
|
|
|
Refresh_ColorAttachmentInfo *colorAttachmentInfos,
|
|
|
|
Refresh_ColorAttachmentInfo *colorAttachmentInfos,
|
|
|
|
uint32_t colorAttachmentCount,
|
|
|
|
uint32_t colorAttachmentCount,
|
|
|
|
Refresh_DepthStencilAttachmentInfo *depthStencilAttachmentInfo
|
|
|
|
Refresh_DepthStencilAttachmentInfo *depthStencilAttachmentInfo
|
|
|
@ -8373,7 +8307,6 @@ static void VULKAN_BeginRenderPass(
|
|
|
|
VulkanTexture *texture;
|
|
|
|
VulkanTexture *texture;
|
|
|
|
VkClearValue *clearValues;
|
|
|
|
VkClearValue *clearValues;
|
|
|
|
uint32_t clearCount = colorAttachmentCount;
|
|
|
|
uint32_t clearCount = colorAttachmentCount;
|
|
|
|
uint32_t multisampleAttachmentCount = 0;
|
|
|
|
|
|
|
|
uint32_t i;
|
|
|
|
uint32_t i;
|
|
|
|
VkImageAspectFlags depthAspectFlags;
|
|
|
|
VkImageAspectFlags depthAspectFlags;
|
|
|
|
Refresh_Viewport defaultViewport;
|
|
|
|
Refresh_Viewport defaultViewport;
|
|
|
@ -8423,7 +8356,6 @@ static void VULKAN_BeginRenderPass(
|
|
|
|
|
|
|
|
|
|
|
|
renderPass = VULKAN_INTERNAL_FetchRenderPass(
|
|
|
|
renderPass = VULKAN_INTERNAL_FetchRenderPass(
|
|
|
|
renderer,
|
|
|
|
renderer,
|
|
|
|
vulkanCommandBuffer,
|
|
|
|
|
|
|
|
colorAttachmentInfos,
|
|
|
|
colorAttachmentInfos,
|
|
|
|
colorAttachmentCount,
|
|
|
|
colorAttachmentCount,
|
|
|
|
depthStencilAttachmentInfo
|
|
|
|
depthStencilAttachmentInfo
|
|
|
@ -8461,12 +8393,6 @@ static void VULKAN_BeginRenderPass(
|
|
|
|
&texture->resourceAccessType
|
|
|
|
&texture->resourceAccessType
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
if (colorAttachmentInfos[i].sampleCount > REFRESH_SAMPLECOUNT_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
clearCount += 1;
|
|
|
|
|
|
|
|
multisampleAttachmentCount += 1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VULKAN_INTERNAL_TrackTexture(renderer, vulkanCommandBuffer, texture);
|
|
|
|
VULKAN_INTERNAL_TrackTexture(renderer, vulkanCommandBuffer, texture);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -8504,21 +8430,12 @@ static void VULKAN_BeginRenderPass(
|
|
|
|
|
|
|
|
|
|
|
|
clearValues = SDL_stack_alloc(VkClearValue, clearCount);
|
|
|
|
clearValues = SDL_stack_alloc(VkClearValue, clearCount);
|
|
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < colorAttachmentCount + multisampleAttachmentCount; i += 1)
|
|
|
|
for (i = 0; i < colorAttachmentCount; i += 1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
clearValues[i].color.float32[0] = colorAttachmentInfos[i].clearColor.x;
|
|
|
|
clearValues[i].color.float32[0] = colorAttachmentInfos[i].clearColor.x;
|
|
|
|
clearValues[i].color.float32[1] = colorAttachmentInfos[i].clearColor.y;
|
|
|
|
clearValues[i].color.float32[1] = colorAttachmentInfos[i].clearColor.y;
|
|
|
|
clearValues[i].color.float32[2] = colorAttachmentInfos[i].clearColor.z;
|
|
|
|
clearValues[i].color.float32[2] = colorAttachmentInfos[i].clearColor.z;
|
|
|
|
clearValues[i].color.float32[3] = colorAttachmentInfos[i].clearColor.w;
|
|
|
|
clearValues[i].color.float32[3] = colorAttachmentInfos[i].clearColor.w;
|
|
|
|
|
|
|
|
|
|
|
|
if (colorAttachmentInfos[i].sampleCount > REFRESH_SAMPLECOUNT_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (depthStencilAttachmentInfo != NULL)
|
|
|
|
if (depthStencilAttachmentInfo != NULL)
|
|
|
@ -8536,10 +8453,21 @@ static void VULKAN_BeginRenderPass(
|
|
|
|
renderPassBeginInfo.framebuffer = framebuffer->framebuffer;
|
|
|
|
renderPassBeginInfo.framebuffer = framebuffer->framebuffer;
|
|
|
|
renderPassBeginInfo.pClearValues = clearValues;
|
|
|
|
renderPassBeginInfo.pClearValues = clearValues;
|
|
|
|
renderPassBeginInfo.clearValueCount = clearCount;
|
|
|
|
renderPassBeginInfo.clearValueCount = clearCount;
|
|
|
|
renderPassBeginInfo.renderArea.extent.width = framebufferWidth;
|
|
|
|
|
|
|
|
renderPassBeginInfo.renderArea.extent.height = framebufferHeight;
|
|
|
|
if (renderArea != NULL)
|
|
|
|
renderPassBeginInfo.renderArea.offset.x = 0;
|
|
|
|
{
|
|
|
|
renderPassBeginInfo.renderArea.offset.y = 0;
|
|
|
|
renderPassBeginInfo.renderArea.extent.width = renderArea->w;
|
|
|
|
|
|
|
|
renderPassBeginInfo.renderArea.extent.height = renderArea->h;
|
|
|
|
|
|
|
|
renderPassBeginInfo.renderArea.offset.x = renderArea->x;
|
|
|
|
|
|
|
|
renderPassBeginInfo.renderArea.offset.y = renderArea->y;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
renderPassBeginInfo.renderArea.extent.width = framebufferWidth;
|
|
|
|
|
|
|
|
renderPassBeginInfo.renderArea.extent.height = framebufferHeight;
|
|
|
|
|
|
|
|
renderPassBeginInfo.renderArea.offset.x = 0;
|
|
|
|
|
|
|
|
renderPassBeginInfo.renderArea.offset.y = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
renderer->vkCmdBeginRenderPass(
|
|
|
|
renderer->vkCmdBeginRenderPass(
|
|
|
|
vulkanCommandBuffer->commandBuffer,
|
|
|
|
vulkanCommandBuffer->commandBuffer,
|
|
|
|