mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-11 13:48:30 +09:00
[Fix] (MG_Backend/DirectVulkan): materialize mid-pass pending color clears at the subpass color slot index, not the compacted description index
This commit is contained in:
@@ -718,6 +718,7 @@ namespace MobileGL::MG_Backend::DirectVulkan {
|
|||||||
if (hasClear) {
|
if (hasClear) {
|
||||||
pendingClearAttachments.emplace_back(PendingClearAttachmentInfo {
|
pendingClearAttachments.emplace_back(PendingClearAttachmentInfo {
|
||||||
.attachmentIndex = attachmentIndex,
|
.attachmentIndex = attachmentIndex,
|
||||||
|
.colorAttachmentSlot = i,
|
||||||
.key = VkClearManager::MakePendingClearKey(att)
|
.key = VkClearManager::MakePendingClearKey(att)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,12 @@ namespace MobileGL::MG_Backend::DirectVulkan {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct PendingClearAttachmentInfo {
|
struct PendingClearAttachmentInfo {
|
||||||
|
// Index into the render pass attachment descriptions (VkRenderPassBeginInfo::pClearValues space).
|
||||||
Uint32 attachmentIndex = 0;
|
Uint32 attachmentIndex = 0;
|
||||||
|
// Index into the subpass pColorAttachments (VkClearAttachment::colorAttachment space) — the GL
|
||||||
|
// draw-buffer slot. Differs from attachmentIndex when earlier slots are GL_NONE/incomplete.
|
||||||
|
// Only meaningful for color clears.
|
||||||
|
Uint32 colorAttachmentSlot = 0;
|
||||||
PendingClearKey key{};
|
PendingClearKey key{};
|
||||||
MG_State::GLState::RenderbufferObject* renderbuffer = nullptr;
|
MG_State::GLState::RenderbufferObject* renderbuffer = nullptr;
|
||||||
Bool hasInlinePayload = false;
|
Bool hasInlinePayload = false;
|
||||||
|
|||||||
@@ -6908,7 +6908,9 @@ void main() {
|
|||||||
clearAttachment.clearValue.depthStencil = {1.0f, 0};
|
clearAttachment.clearValue.depthStencil = {1.0f, 0};
|
||||||
if ((clearPayload.mask & GL_COLOR_BUFFER_BIT) != 0) {
|
if ((clearPayload.mask & GL_COLOR_BUFFER_BIT) != 0) {
|
||||||
clearAttachment.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
clearAttachment.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||||
clearAttachment.colorAttachment = pending.attachmentIndex;
|
// VkClearAttachment::colorAttachment indexes the subpass pColorAttachments (draw-buffer
|
||||||
|
// slot space, with UNUSED holes), not the compacted attachment descriptions.
|
||||||
|
clearAttachment.colorAttachment = pending.colorAttachmentSlot;
|
||||||
clearAttachment.clearValue.color = {
|
clearAttachment.clearValue.color = {
|
||||||
clearPayload.color.x(),
|
clearPayload.color.x(),
|
||||||
clearPayload.color.y(),
|
clearPayload.color.y(),
|
||||||
|
|||||||
Reference in New Issue
Block a user