From f6d9b9dd8d85911065af21faeff7475f2159baf1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mika=20Isoj=C3=A4rvi?= Date: Tue, 19 Jan 2016 14:46:34 -0800 Subject: [PATCH] Pass boolean values correctly to shaders. Map type to correct vkFormat for other than floating point types and pass boolean values correctly as 0xFFFFFFFFu instead of 0x1u to shader in vulkan ShaderLibrary tests. Change-Id: Ib13b4a3c648b21a0b9020d00caeafd17a23b7402 --- .../vulkancts/modules/vulkan/vktShaderLibrary.cpp | 90 ++++++++++++++++++---- 1 file changed, 77 insertions(+), 13 deletions(-) diff --git a/external/vulkancts/modules/vulkan/vktShaderLibrary.cpp b/external/vulkancts/modules/vulkan/vktShaderLibrary.cpp index b828933..bfb26bf 100644 --- a/external/vulkancts/modules/vulkan/vktShaderLibrary.cpp +++ b/external/vulkancts/modules/vulkan/vktShaderLibrary.cpp @@ -676,10 +676,27 @@ void copyToLayout (void* dst, const ValueBufferLayout::Entry& entryLayout, const DE_ASSERT(size_t((arrayNdx+1)*scalarSize) <= value.elements.size()); - for (int vecNdx = 0; vecNdx < numVecs; vecNdx++) - deMemcpy((deUint8*)dst + entryLayout.offset + vecNdx*entryLayout.vecStride, - &value.elements[arrayNdx*scalarSize + vecNdx*numComps], - numComps*sizeof(deUint32)); + if (isDataTypeBoolOrBVec(basicType)) + { + for (int vecNdx = 0; vecNdx < numVecs; vecNdx++) + { + for (int compNdx = 0; compNdx < numComps; compNdx++) + { + const deUint32 data = value.elements[arrayNdx*scalarSize + vecNdx*numComps + compNdx].bool32 ? ~0u : 0u; + + deMemcpy((deUint8*)dst + entryLayout.offset + vecNdx*entryLayout.vecStride + compNdx * sizeof(deUint32), + &data, + sizeof(deUint32)); + } + } + } + else + { + for (int vecNdx = 0; vecNdx < numVecs; vecNdx++) + deMemcpy((deUint8*)dst + entryLayout.offset + vecNdx*entryLayout.vecStride, + &value.elements[arrayNdx*scalarSize + vecNdx*numComps], + numComps*sizeof(deUint32)); + } } void copyToLayout (void* dst, const ValueBufferLayout& layout, const vector& values, int arrayNdx) @@ -928,16 +945,62 @@ Move createPipelineLayout (Context& context, vk::VkDescrip return vk::createPipelineLayout(context.getDeviceInterface(), context.getDevice(), ¶ms); } -vk::VkFormat getFloatVecFormat (int scalarSize) +vk::VkFormat getVecFormat (DataType scalarType, int scalarSize) { - const vk::VkFormat vecFmts[] = + switch (scalarType) { - vk::VK_FORMAT_R32_SFLOAT, - vk::VK_FORMAT_R32G32_SFLOAT, - vk::VK_FORMAT_R32G32B32_SFLOAT, - vk::VK_FORMAT_R32G32B32A32_SFLOAT, - }; - return de::getSizedArrayElement<4>(vecFmts, scalarSize-1); + case glu::TYPE_FLOAT: + { + const vk::VkFormat vecFmts[] = + { + vk::VK_FORMAT_R32_SFLOAT, + vk::VK_FORMAT_R32G32_SFLOAT, + vk::VK_FORMAT_R32G32B32_SFLOAT, + vk::VK_FORMAT_R32G32B32A32_SFLOAT, + }; + return de::getSizedArrayElement<4>(vecFmts, scalarSize-1); + } + + case glu::TYPE_INT: + { + const vk::VkFormat vecFmts[] = + { + vk::VK_FORMAT_R32_SINT, + vk::VK_FORMAT_R32G32_SINT, + vk::VK_FORMAT_R32G32B32_SINT, + vk::VK_FORMAT_R32G32B32A32_SINT, + }; + return de::getSizedArrayElement<4>(vecFmts, scalarSize-1); + } + + case glu::TYPE_UINT: + { + const vk::VkFormat vecFmts[] = + { + vk::VK_FORMAT_R32_UINT, + vk::VK_FORMAT_R32G32_UINT, + vk::VK_FORMAT_R32G32B32_UINT, + vk::VK_FORMAT_R32G32B32A32_UINT, + }; + return de::getSizedArrayElement<4>(vecFmts, scalarSize-1); + } + + case glu::TYPE_BOOL: + { + const vk::VkFormat vecFmts[] = + { + vk::VK_FORMAT_R32_UINT, + vk::VK_FORMAT_R32G32_UINT, + vk::VK_FORMAT_R32G32B32_UINT, + vk::VK_FORMAT_R32G32B32A32_UINT, + }; + return de::getSizedArrayElement<4>(vecFmts, scalarSize-1); + } + + default: + DE_FATAL("Unknown scalar type"); + return vk::VK_FORMAT_R8G8B8A8_UINT; + } } vector getVertexAttributeDescriptions (const vector& inputValues, const ValueBufferLayout& layout) @@ -969,7 +1032,8 @@ vector getVertexAttributeDescriptions (co const int vecSize = isDataTypeMatrix(basicType) ? getDataTypeMatrixNumRows(basicType) : getDataTypeScalarSize(basicType); - const vk::VkFormat vecFmt = getFloatVecFormat(vecSize); + const DataType scalarType = getDataTypeScalarType(basicType); + const vk::VkFormat vecFmt = getVecFormat(scalarType, vecSize); for (int vecNdx = 0; vecNdx < numVecs; vecNdx++) { -- 2.7.4