1/*------------------------------------------------------------------------- 2* Vulkan Conformance Tests 3* ------------------------ 4* 5* Copyright (c) 2021 NVIDIA, Inc. 6* Copyright (c) 2021 The Khronos Group Inc. 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 VK_EXT_device_drm_properties tests 23*//*--------------------------------------------------------------------*/ 24 25#include "vktApiDeviceDrmPropertiesTests.hpp" 26#include "vktTestGroupUtil.hpp" 27#include "vktTestCaseUtil.hpp" 28#include "deFilePath.hpp" 29#include "deDirectoryIterator.hpp" 30#include "deDynamicLibrary.hpp" 31#include "tcuLibDrm.hpp" 32 33using namespace vk; 34 35namespace vkt 36{ 37namespace api 38{ 39namespace 40{ 41 42enum TestType 43{ 44 TEST_FILES_EXIST = 0, 45}; 46 47void checkSupport (Context& context, const TestType config) 48{ 49 DE_UNREF(config); 50 context.requireDeviceFunctionality("VK_EXT_physical_device_drm"); 51} 52 53void testFilesExist (const VkPhysicalDeviceDrmPropertiesEXT& deviceDrmProperties) 54{ 55 bool primaryFound = !deviceDrmProperties.hasPrimary; 56 bool renderFound = !deviceDrmProperties.hasRender; 57 58#if DEQP_SUPPORT_DRM && !defined (CTS_USES_VULKANSC) 59 static const tcu::LibDrm libDrm; 60 61 int numDrmDevices; 62 drmDevicePtr* drmDevices = libDrm.getDevices(&numDrmDevices); 63 64 if (libDrm.findDeviceNode(drmDevices, numDrmDevices, 65 deviceDrmProperties.primaryMajor, 66 deviceDrmProperties.primaryMinor)) 67 primaryFound = true; 68 if (libDrm.findDeviceNode(drmDevices, numDrmDevices, 69 deviceDrmProperties.renderMajor, 70 deviceDrmProperties.renderMinor)) 71 renderFound = true; 72 73 libDrm.freeDevices(drmDevices, numDrmDevices); 74#endif // DEQP_SUPPORT_DRM && !defined (CTS_USES_VULKANSC) 75 76 if (!primaryFound && !renderFound) { 77 TCU_THROW(NotSupportedError, "Neither DRM primary nor render device files were found"); 78 } 79} 80 81static tcu::TestStatus testDeviceDrmProperties (Context& context, const TestType testType) 82{ 83 84 const VkPhysicalDevice physDevice = context.getPhysicalDevice(); 85 VkPhysicalDeviceProperties2 deviceProperties2; 86 const int memsetPattern = 0xaa; 87 VkPhysicalDeviceDrmPropertiesEXT deviceDrmProperties; 88 89 deMemset(&deviceDrmProperties, 0, sizeof(deviceDrmProperties)); 90 deviceDrmProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT; 91 deviceDrmProperties.pNext = DE_NULL; 92 93 deMemset(&deviceProperties2, memsetPattern, sizeof(deviceProperties2)); 94 deviceProperties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; 95 deviceProperties2.pNext = &deviceDrmProperties; 96 97 context.getInstanceInterface().getPhysicalDeviceProperties2(physDevice, &deviceProperties2); 98 99 switch (testType) 100 { 101 case TEST_FILES_EXIST: testFilesExist (deviceDrmProperties); break; 102 default: TCU_THROW(InternalError, "Unknown test type specified"); 103 } 104 105 return tcu::TestStatus::pass("Pass"); 106} 107 108static void createTestCases (tcu::TestCaseGroup* group) 109{ 110 // Verify device files for major/minor nodes exist 111 addFunctionCase(group, "drm_files_exist", checkSupport, testDeviceDrmProperties, TEST_FILES_EXIST); 112} 113 114} // anonymous 115 116tcu::TestCaseGroup* createDeviceDrmPropertiesTests(tcu::TestContext& testCtx) 117{ 118 return createTestGroup(testCtx, "device_drm_properties", createTestCases); 119} 120 121} // api 122} // vkt 123