Compare commits

..

No commits in common. "88edb87228468701ca9e782cd00cb22dca1d16f5" and "c4b9798fc1207715f4041f32e29c80496a8e93bf" have entirely different histories.

4 changed files with 46 additions and 104 deletions

View File

@ -169,7 +169,10 @@ typedef enum Refresh_SampleCount
REFRESH_SAMPLECOUNT_1, REFRESH_SAMPLECOUNT_1,
REFRESH_SAMPLECOUNT_2, REFRESH_SAMPLECOUNT_2,
REFRESH_SAMPLECOUNT_4, REFRESH_SAMPLECOUNT_4,
REFRESH_SAMPLECOUNT_8 REFRESH_SAMPLECOUNT_8,
REFRESH_SAMPLECOUNT_16,
REFRESH_SAMPLECOUNT_32,
REFRESH_SAMPLECOUNT_64
} Refresh_SampleCount; } Refresh_SampleCount;
typedef enum Refresh_CubeMapFace typedef enum Refresh_CubeMapFace
@ -464,6 +467,7 @@ typedef struct Refresh_TextureCreateInfo
uint32_t height; uint32_t height;
uint32_t depth; uint32_t depth;
uint8_t isCube; uint8_t isCube;
Refresh_SampleCount sampleCount;
uint32_t levelCount; uint32_t levelCount;
Refresh_TextureFormat format; Refresh_TextureFormat format;
Refresh_TextureUsageFlags usageFlags; Refresh_TextureUsageFlags usageFlags;
@ -522,6 +526,7 @@ typedef struct Refresh_DepthStencilState
typedef struct Refresh_ColorAttachmentDescription typedef struct Refresh_ColorAttachmentDescription
{ {
Refresh_TextureFormat format; Refresh_TextureFormat format;
Refresh_SampleCount sampleCount;
Refresh_ColorAttachmentBlendState blendState; Refresh_ColorAttachmentBlendState blendState;
} Refresh_ColorAttachmentDescription; } Refresh_ColorAttachmentDescription;
@ -995,6 +1000,11 @@ REFRESHAPI void Refresh_QueueDestroyGraphicsPipeline(
/* Begins a render pass. /* Begins a render pass.
* This will also set a default viewport and scissor state. * This will also set a default viewport and scissor state.
* *
* renderArea:
* The area affected by the render pass.
* All load, store and resolve operations are restricted
* to the given rectangle.
* If NULL, a sensible default will be chosen.
* colorAttachmentInfos: * colorAttachmentInfos:
* A pointer to an array of Refresh_ColorAttachmentInfo structures * A pointer to an array of Refresh_ColorAttachmentInfo structures
* that contains render targets and clear values. May be NULL. * that contains render targets and clear values. May be NULL.
@ -1004,6 +1014,7 @@ REFRESHAPI void Refresh_QueueDestroyGraphicsPipeline(
REFRESHAPI void Refresh_BeginRenderPass( REFRESHAPI void Refresh_BeginRenderPass(
Refresh_Device *device, Refresh_Device *device,
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

View File

@ -625,6 +625,7 @@ void Refresh_QueueDestroyGraphicsPipeline(
void Refresh_BeginRenderPass( void Refresh_BeginRenderPass(
Refresh_Device *device, Refresh_Device *device,
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
@ -633,6 +634,7 @@ void Refresh_BeginRenderPass(
device->BeginRenderPass( device->BeginRenderPass(
device->driverData, device->driverData,
commandBuffer, commandBuffer,
renderArea,
colorAttachmentInfos, colorAttachmentInfos,
colorAttachmentCount, colorAttachmentCount,
depthStencilAttachmentInfo depthStencilAttachmentInfo

View File

@ -395,6 +395,7 @@ struct Refresh_Device
void(*BeginRenderPass)( void(*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

View File

@ -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;
if (renderArea != NULL)
{
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.width = framebufferWidth;
renderPassBeginInfo.renderArea.extent.height = framebufferHeight; renderPassBeginInfo.renderArea.extent.height = framebufferHeight;
renderPassBeginInfo.renderArea.offset.x = 0; renderPassBeginInfo.renderArea.offset.x = 0;
renderPassBeginInfo.renderArea.offset.y = 0; renderPassBeginInfo.renderArea.offset.y = 0;
}
renderer->vkCmdBeginRenderPass( renderer->vkCmdBeginRenderPass(
vulkanCommandBuffer->commandBuffer, vulkanCommandBuffer->commandBuffer,