Skip to content

Commit

Permalink
Fix bloom in Vulkan
Browse files Browse the repository at this point in the history
  • Loading branch information
ksuprynowicz committed Jan 6, 2025
1 parent a45d9c5 commit 88c6520
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 40 deletions.
16 changes: 12 additions & 4 deletions libraries/gpu-vk/src/gpu/vk/VKBackend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2737,6 +2737,7 @@ void VKBackend::do_clearFramebuffer(const Batch& batch, size_t paramOffset) {
|| ((masks & Framebuffer::BUFFER_DEPTH) && !formatHasStencil(attachment.format))) {
attachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
attachment.finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
//Q_ASSERT(attachmentTexture->_vkImageLayout != VK_IMAGE_LAYOUT_GENERAL); //
attachmentTexture->_vkImageLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
depthReference.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
} else {
Expand Down Expand Up @@ -2764,6 +2765,7 @@ void VKBackend::do_clearFramebuffer(const Batch& batch, size_t paramOffset) {
attachment.finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
// Texture state needs to be updated
if (attachmentTexture) {
Q_ASSERT(attachmentTexture->_vkImageLayout != VK_IMAGE_LAYOUT_GENERAL);
attachmentTexture->_vkImageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
//Q_ASSERT(attachmentTexture->_gpuObject.isColorRenderTarget()); // isColorRenderTarget is broken
}
Expand Down Expand Up @@ -2842,6 +2844,7 @@ void VKBackend::do_clearFramebuffer(const Batch& batch, size_t paramOffset) {
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, // VKTODO: should be
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, // VKTODO
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, mipSubRange); // VKTODO: what stage mask for depth stencil?
Q_ASSERT(attachmentTexture->_vkImageLayout != VK_IMAGE_LAYOUT_GENERAL);
attachmentTexture->_vkImageLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
} else {
VkImageSubresourceRange mipSubRange = {};
Expand All @@ -2852,7 +2855,7 @@ void VKBackend::do_clearFramebuffer(const Batch& batch, size_t paramOffset) {
vks::tools::insertImageMemoryBarrier(_currentCommandBuffer, attachmentTexture->_vkImage,
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VKTODO: should be
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, // VKTODO
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, mipSubRange);
Expand Down Expand Up @@ -2881,14 +2884,19 @@ void VKBackend::do_clearFramebuffer(const Batch& batch, size_t paramOffset) {
mipSubRange.baseMipLevel = 0;
mipSubRange.levelCount = 1;
mipSubRange.layerCount = 1;
VkImageLayout layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
if (attachmentTexture->_vkImageLayout == VK_IMAGE_LAYOUT_GENERAL) {
layout = VK_IMAGE_LAYOUT_GENERAL;
}
vks::tools::insertImageMemoryBarrier(_currentCommandBuffer, attachmentTexture->_vkImage,
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, // VKTODO: should be
layout,
layout, // VKTODO: should be
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, // VKTODO
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, mipSubRange); // VKTODO: what stage mask for depth stencil?
attachmentTexture->_vkImageLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;

attachmentTexture->_vkImageLayout = layout;
}

/*VKuint glmask = 0;
Expand Down
11 changes: 2 additions & 9 deletions libraries/gpu/src/gpu/DrawTexcoordRectTransformUnitQuad.slv
Original file line number Diff line number Diff line change
Expand Up @@ -32,27 +32,20 @@ UNIFORM_BUFFER(0, texcoordRectBuffer) {
OUTPUT(0, vec2, varTexCoord0);

void main(void) {
#ifdef VULKAN
const vec4 UNIT_QUAD[4] = vec4[4](
vec4(-1.0, 1.0, 0.0, 1.0),
vec4(1.0, 1.0, 0.0, 1.0),
vec4(-1.0, -1.0, 0.0, 1.0),
vec4(1.0, -1.0, 0.0, 1.0)
);
#else

const vec4 UNIT_QUAD[4] = vec4[4](
vec4(-1.0, -1.0, 0.0, 1.0),
vec4(1.0, -1.0, 0.0, 1.0),
vec4(-1.0, 1.0, 0.0, 1.0),
vec4(1.0, 1.0, 0.0, 1.0)
);
#endif
vec4 pos = UNIT_QUAD[gl_VertexID];

// standard transform
TransformCamera cam = getTransformCamera();
TransformObject obj = getTransformObject();
<$transformModelToClipPos(cam, obj, pos, gl_Position)$>

// VKTODO: texture coordinates might need to be inverted
varTexCoord0 = ((pos.xy + 1.0) * 0.5) * params.texcoordRect.zw + params.texcoordRect.xy;
}
13 changes: 4 additions & 9 deletions libraries/gpu/src/gpu/DrawTransformUnitQuad.slv
Original file line number Diff line number Diff line change
Expand Up @@ -21,27 +21,22 @@
OUTPUT(0, vec2, varTexCoord0);

void main(void) {
#ifdef VULKAN
const vec4 UNIT_QUAD[4] = vec4[4](
vec4(-1.0, 1.0, 0.0, 1.0),
vec4(1.0, 1.0, 0.0, 1.0),
vec4(-1.0, -1.0, 0.0, 1.0),
vec4(1.0, -1.0, 0.0, 1.0)
);
#else
const vec4 UNIT_QUAD[4] = vec4[4](
vec4(-1.0, -1.0, 0.0, 1.0),
vec4(1.0, -1.0, 0.0, 1.0),
vec4(-1.0, 1.0, 0.0, 1.0),
vec4(1.0, 1.0, 0.0, 1.0)
);
#endif
vec4 pos = UNIT_QUAD[gl_VertexID];

// standard transform
TransformCamera cam = getTransformCamera();
TransformObject obj = getTransformObject();
<$transformModelToClipPos(cam, obj, pos, gl_Position)$>

#ifdef VULKAN
varTexCoord0 = vec2((pos.x + 1.0) * 0.5, (-pos.y + 1.0) * 0.5);
#else
varTexCoord0 = (pos.xy + 1.0) * 0.5;
#endif
}
10 changes: 1 addition & 9 deletions libraries/gpu/src/gpu/DrawViewportQuadTransformTexcoord.slv
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,13 @@
OUTPUT(0, vec2, varTexCoord0);

void main(void) {
#ifdef VULKAN
const vec4 UNIT_QUAD[4] = vec4[4](
vec4(-1.0, 1.0, 0.0, 1.0),
vec4(1.0, 1.0, 0.0, 1.0),
vec4(-1.0, -1.0, 0.0, 1.0),
vec4(1.0, -1.0, 0.0, 1.0)
);
#else

const vec4 UNIT_QUAD[4] = vec4[4](
vec4(-1.0, -1.0, 0.0, 1.0),
vec4(1.0, -1.0, 0.0, 1.0),
vec4(-1.0, 1.0, 0.0, 1.0),
vec4(1.0, 1.0, 0.0, 1.0)
);
#endif
vec4 pos = UNIT_QUAD[gl_VertexID];

// standard transform but applied to the Texcoord
Expand Down
9 changes: 0 additions & 9 deletions libraries/render-utils/src/ssao_bilateralBlur.slv
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,12 @@
layout(location=0) out vec4 varTexCoord0;

void main(void) {
#ifdef VULKAN
const vec4 UNIT_QUAD[4] = vec4[4](
vec4(-1.0, 1.0, 0.0, 1.0),
vec4(1.0, 1.0, 0.0, 1.0),
vec4(-1.0, -1.0, 0.0, 1.0),
vec4(1.0, -1.0, 0.0, 1.0)
);
#else
const vec4 UNIT_QUAD[4] = vec4[4](
vec4(-1.0, -1.0, 0.0, 1.0),
vec4(1.0, -1.0, 0.0, 1.0),
vec4(-1.0, 1.0, 0.0, 1.0),
vec4(1.0, 1.0, 0.0, 1.0)
);
#endif
vec4 pos = UNIT_QUAD[gl_VertexID];

// standard transform but applied to the Texcoord
Expand Down

0 comments on commit 88c6520

Please sign in to comment.