Bugfix: upload stencil data in pipeline image util
authorMaciej Jesionowski <maciej.jesionowski@mobica.com>
Wed, 30 Nov 2016 11:37:01 +0000 (12:37 +0100)
committerPyry Haulos <phaulos@google.com>
Fri, 2 Dec 2016 18:54:40 +0000 (13:54 -0500)
Fixes:
- Upload stencil data to the image with mixed DS formats
- Respect 4 byte offset alignment for formats <4 bytes
- Fix some nonCoherentAtomSize validation errors

Affected tests:
- dEQP-VK.texture.shadow.*d16_unorm
- dEQP-VK.texture.shadow.*x8_d24_unorm_pack32
- dEQP-VK.texture.shadow.*d32_sfloat
- dEQP-VK.texture.shadow.*s8_uint
- dEQP-VK.texture.shadow.*d16_unorm_s8_uint
- dEQP-VK.texture.shadow.*d24_unorm_s8_uint
- dEQP-VK.texture.shadow.*d32_sfloat_s8_uint

Issue #556

Change-Id: I56c0e7eef9c1bfc82790eb8ba6e48b95dc65f521

external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp
external/vulkancts/modules/vulkan/texture/vktTextureTestUtil.cpp

index c273cb8..ad77b32 100644 (file)
@@ -351,7 +351,7 @@ de::MovePtr<tcu::TextureLevel> readColorAttachment (const vk::DeviceInterface&      v
        VK_CHECK(vk.waitForFences(device, 1, &fence.get(), 0, ~(0ull) /* infinity */));
 
        // Read buffer data
-       invalidateMappedMemoryRange(vk, device, bufferAlloc->getMemory(), bufferAlloc->getOffset(), pixelDataSize);
+       invalidateMappedMemoryRange(vk, device, bufferAlloc->getMemory(), bufferAlloc->getOffset(), VK_WHOLE_SIZE);
        tcu::copy(*resultLevel, tcu::ConstPixelBufferAccess(resultLevel->getFormat(), resultLevel->getSize(), bufferAlloc->getHostPtr()));
 
        return resultLevel;
@@ -400,14 +400,12 @@ void uploadTestTextureInternal (const DeviceInterface&                    vk,
        // Calculate buffer size
        bufferSize =  (srcTexture.isCompressed())? srcTexture.getCompressedSize(): srcTexture.getSize();
 
-       // Stencil texture should be provided if (and only if) the image has combined DS format
+       // Stencil-only texture should be provided if (and only if) the image has a combined DS format
        DE_ASSERT(tcu::isCombinedDepthStencilType(format.type) == (srcStencilTexture != DE_NULL));
 
        if (srcStencilTexture != DE_NULL)
        {
-               const deInt32 stencilAlignment = deMin32(4, srcTexture.getTextureFormat().getPixelSize());
-
-               stencilOffset   = static_cast<deUint32>(deAlign32(static_cast<deInt32>(bufferSize), stencilAlignment));
+               stencilOffset   = static_cast<deUint32>(deAlign32(static_cast<deInt32>(bufferSize), 4));
                bufferSize              = stencilOffset + srcStencilTexture->getSize();
        }
 
@@ -549,7 +547,7 @@ void uploadTestTextureInternal (const DeviceInterface&                      vk,
                }
        }
 
-       flushMappedMemoryRange(vk, device, bufferAlloc->getMemory(), bufferAlloc->getOffset(), bufferSize);
+       flushMappedMemoryRange(vk, device, bufferAlloc->getMemory(), bufferAlloc->getOffset(), VK_WHOLE_SIZE);
 
        // Copy buffer to image
        VK_CHECK(vk.beginCommandBuffer(*cmdBuffer, &cmdBufferBeginInfo));
@@ -604,16 +602,15 @@ void uploadTestTexture (const DeviceInterface&                    vk,
                                break;
                        default:
                                DE_ASSERT(0);
+                               break;
                        }
                        srcDepthTexture = srcTexture.copy(format);
                }
 
                if (tcu::hasStencilComponent(srcTexture.getTextureFormat().order))
-               {
                        srcStencilTexture = srcTexture.copy(tcu::getEffectiveDepthStencilTextureFormat(srcTexture.getTextureFormat(), tcu::Sampler::MODE_STENCIL));
-               }
 
-               uploadTestTextureInternal(vk, device, queue, queueFamilyIndex, allocator, srcTexture, srcDepthTexture.get(), srcTexture.getTextureFormat(), destImage);
+               uploadTestTextureInternal(vk, device, queue, queueFamilyIndex, allocator, *srcDepthTexture, srcStencilTexture.get(), srcTexture.getTextureFormat(), destImage);
        }
        else
                uploadTestTextureInternal(vk, device, queue, queueFamilyIndex, allocator, srcTexture, DE_NULL, srcTexture.getTextureFormat(), destImage);
index 0dc2d21..c459072 100644 (file)
@@ -668,7 +668,7 @@ TextureRenderer::TextureRenderer (Context& context, VkSampleCountFlagBits sample
 
                // Load vertices into vertex buffer
                deMemcpy(m_vertexIndexBufferMemory->getHostPtr(), s_vertexIndices, s_vertexIndexBufferSize);
-               flushMappedMemoryRange(vkd, vkDevice, m_vertexIndexBufferMemory->getMemory(), m_vertexIndexBufferMemory->getOffset(), s_vertexIndexBufferSize);
+               flushMappedMemoryRange(vkd, vkDevice, m_vertexIndexBufferMemory->getMemory(), m_vertexIndexBufferMemory->getOffset(), VK_WHOLE_SIZE);
        }
 
        // FrameBuffer
@@ -1443,7 +1443,7 @@ void TextureRenderer::renderQuad (tcu::Surface&                                                                   result,
                // Load vertices into vertex buffer
                deMemcpy(vertexBufferMemory->getHostPtr(), position, positionDataSize);
                deMemcpy(reinterpret_cast<deUint8*>(vertexBufferMemory->getHostPtr()) +  positionDataSize, texCoord, textureCoordDataSize);
-               flushMappedMemoryRange(vkd, vkDevice, vertexBufferMemory->getMemory(), vertexBufferMemory->getOffset(), vertexBufferParams.size);
+               flushMappedMemoryRange(vkd, vkDevice, vertexBufferMemory->getMemory(), vertexBufferMemory->getOffset(), VK_WHOLE_SIZE);
        }
 
        // Create Command Buffer
@@ -1571,9 +1571,8 @@ void TextureRenderer::renderQuad (tcu::Surface&                                                                   result,
                        params.colorScale,              // tcu::Vec4    colorScale;                     //!< Scale for texture color values.
                        params.colorBias                // tcu::Vec4    colorBias;                      //!< Bias for texture color values.
                };
-               const deUint32          shaderParamsSize = sizeof(shaderParameters);
-               deMemcpy(m_uniformBufferMemory->getHostPtr(), &shaderParameters, shaderParamsSize);
-               flushMappedMemoryRange(vkd, vkDevice, m_uniformBufferMemory->getMemory(), m_uniformBufferMemory->getOffset(), shaderParamsSize);
+               deMemcpy(m_uniformBufferMemory->getHostPtr(), &shaderParameters, sizeof(shaderParameters));
+               flushMappedMemoryRange(vkd, vkDevice, m_uniformBufferMemory->getMemory(), m_uniformBufferMemory->getOffset(), VK_WHOLE_SIZE);
 
                if (logUniforms)
                        m_log << TestLog::Message << "u_sampler = " << texUnit << TestLog::EndMessage;
@@ -1617,7 +1616,7 @@ void TextureRenderer::renderQuad (tcu::Surface&                                                                   result,
                VK_CHECK(vkd.waitForFences(vkDevice, 1, &m_fence.get(), true, ~(0ull) /* infinity */));
        }
 
-       invalidateMappedMemoryRange(vkd, vkDevice, m_resultBufferMemory->getMemory(), m_resultBufferMemory->getOffset(), m_resultBufferSize);
+       invalidateMappedMemoryRange(vkd, vkDevice, m_resultBufferMemory->getMemory(), m_resultBufferMemory->getOffset(), VK_WHOLE_SIZE);
 
        tcu::copy(result.getAccess(), tcu::ConstPixelBufferAccess(m_textureFormat, tcu::IVec3(m_renderWidth, m_renderHeight, 1u), m_resultBufferMemory->getHostPtr()));
 }