diff --git a/libraries/gpu-vk/src/gpu/vk/VKBackend.cpp b/libraries/gpu-vk/src/gpu/vk/VKBackend.cpp index 8122c8a714..d1f0b173ec 100644 --- a/libraries/gpu-vk/src/gpu/vk/VKBackend.cpp +++ b/libraries/gpu-vk/src/gpu/vk/VKBackend.cpp @@ -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 { @@ -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 } @@ -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 = {}; @@ -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); @@ -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; diff --git a/libraries/gpu/src/gpu/DrawTexcoordRectTransformUnitQuad.slv b/libraries/gpu/src/gpu/DrawTexcoordRectTransformUnitQuad.slv index ba0eed1a22..9295b4185d 100755 --- a/libraries/gpu/src/gpu/DrawTexcoordRectTransformUnitQuad.slv +++ b/libraries/gpu/src/gpu/DrawTexcoordRectTransformUnitQuad.slv @@ -32,21 +32,13 @@ 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 @@ -54,5 +46,6 @@ void main(void) { 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; } diff --git a/libraries/gpu/src/gpu/DrawTransformUnitQuad.slv b/libraries/gpu/src/gpu/DrawTransformUnitQuad.slv index 2f23299610..eb0da722b0 100755 --- a/libraries/gpu/src/gpu/DrawTransformUnitQuad.slv +++ b/libraries/gpu/src/gpu/DrawTransformUnitQuad.slv @@ -21,21 +21,12 @@ 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 @@ -43,5 +34,9 @@ void main(void) { 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 } diff --git a/libraries/gpu/src/gpu/DrawViewportQuadTransformTexcoord.slv b/libraries/gpu/src/gpu/DrawViewportQuadTransformTexcoord.slv index 544ce6e75a..fbeaaffcc8 100755 --- a/libraries/gpu/src/gpu/DrawViewportQuadTransformTexcoord.slv +++ b/libraries/gpu/src/gpu/DrawViewportQuadTransformTexcoord.slv @@ -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 diff --git a/libraries/render-utils/src/ssao_bilateralBlur.slv b/libraries/render-utils/src/ssao_bilateralBlur.slv index 67cd9f360a..d45fdf8360 100644 --- a/libraries/render-utils/src/ssao_bilateralBlur.slv +++ b/libraries/render-utils/src/ssao_bilateralBlur.slv @@ -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