1/*------------------------------------------------------------------------ 2 * Vulkan Conformance Tests 3 * ------------------------ 4 * 5 * Copyright (c) 2015 The Khronos Group Inc. 6 * Copyright (c) 2015 Imagination Technologies Ltd. 7 * 8 * Licensed under the Apache License, Version 2.0 (the "License"); 9 * you may not use this file except in compliance with the License. 10 * You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, software 15 * distributed under the License is distributed on an "AS IS" BASIS, 16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 * See the License for the specific language governing permissions and 18 * limitations under the License. 19 * 20 *//*! 21 * \file 22 * \brief Utilities for clear values. 23 *//*--------------------------------------------------------------------*/ 24 25#include "vktPipelineClearUtil.hpp" 26#include "vkImageUtil.hpp" 27#include "tcuTextureUtil.hpp" 28 29namespace vkt 30{ 31namespace pipeline 32{ 33 34using namespace vk; 35 36tcu::Vec4 defaultClearColor (const tcu::TextureFormat& format) 37{ 38 if (tcu::getTextureChannelClass(format.type) == tcu::TEXTURECHANNELCLASS_FLOATING_POINT) 39 return defaultClearColorUnorm(); 40 else 41 { 42 const tcu::TextureFormatInfo formatInfo = tcu::getTextureFormatInfo(format); 43 return (defaultClearColorUnorm() - formatInfo.lookupBias) / formatInfo.lookupScale; 44 } 45} 46 47tcu::IVec4 defaultClearColorInt (const tcu::TextureFormat& format) 48{ 49 const tcu::TextureFormatInfo formatInfo = tcu::getTextureFormatInfo(format); 50 const tcu::Vec4 color = (defaultClearColorUnorm() - formatInfo.lookupBias) / formatInfo.lookupScale; 51 52 const tcu::IVec4 result ((deInt32)deFloatRound(color.x()), (deInt32)deFloatRound(color.y()), 53 (deInt32)deFloatRound(color.z()), (deInt32)deFloatRound(color.w())); 54 55 return result; 56} 57 58tcu::UVec4 defaultClearColorUint (const tcu::TextureFormat& format) 59{ 60 const tcu::TextureFormatInfo formatInfo = tcu::getTextureFormatInfo(format); 61 const tcu::Vec4 color = (defaultClearColorUnorm() - formatInfo.lookupBias) / formatInfo.lookupScale; 62 63 const tcu::UVec4 result ((deUint32)deFloatRound(color.x()), (deUint32)deFloatRound(color.y()), 64 (deUint32)deFloatRound(color.z()), (deUint32)deFloatRound(color.w())); 65 66 return result; 67} 68 69tcu::Vec4 defaultClearColorUnorm (void) 70{ 71 return tcu::Vec4(0.39f, 0.58f, 0.93f, 1.0f); 72} 73 74float defaultClearDepth (void) 75{ 76 return 1.0f; 77} 78 79deUint32 defaultClearStencil (void) 80{ 81 return 0; 82} 83 84VkClearDepthStencilValue defaultClearDepthStencilValue (void) 85{ 86 VkClearDepthStencilValue clearDepthStencilValue; 87 clearDepthStencilValue.depth = defaultClearDepth(); 88 clearDepthStencilValue.stencil = defaultClearStencil(); 89 90 return clearDepthStencilValue; 91} 92 93VkClearValue defaultClearValue (VkFormat clearFormat) 94{ 95 VkClearValue clearValue; 96 97 if (isDepthStencilFormat(clearFormat)) 98 { 99 const VkClearDepthStencilValue dsValue = defaultClearDepthStencilValue(); 100 clearValue.depthStencil.stencil = dsValue.stencil; 101 clearValue.depthStencil.depth = dsValue.depth; 102 } 103 else 104 { 105 const tcu::TextureFormat tcuClearFormat = mapVkFormat(clearFormat); 106 if (isUintFormat(clearFormat)) 107 { 108 const tcu::UVec4 defaultColor = defaultClearColorUint(tcuClearFormat); 109 clearValue.color.uint32[0] = defaultColor.x(); 110 clearValue.color.uint32[1] = defaultColor.y(); 111 clearValue.color.uint32[2] = defaultColor.z(); 112 clearValue.color.uint32[3] = defaultColor.w(); 113 } 114 else if (isIntFormat(clearFormat)) 115 { 116 const tcu::IVec4 defaultColor = defaultClearColorInt(tcuClearFormat); 117 clearValue.color.int32[0] = defaultColor.x(); 118 clearValue.color.int32[1] = defaultColor.y(); 119 clearValue.color.int32[2] = defaultColor.z(); 120 clearValue.color.int32[3] = defaultColor.w(); 121 } 122 else 123 { 124 const tcu::Vec4 defaultColor = defaultClearColor(tcuClearFormat); 125 clearValue.color.float32[0] = defaultColor.x(); 126 clearValue.color.float32[1] = defaultColor.y(); 127 clearValue.color.float32[2] = defaultColor.z(); 128 clearValue.color.float32[3] = defaultColor.w(); 129 } 130 } 131 132 return clearValue; 133} 134 135} // pipeline 136} // vkt 137