blob: 4c0d0ae09d1ecd082f55fabb9e694b9d814506e0 [file] [log] [blame]
/*
* Copyright (c) 2015-2025 The Khronos Group Inc.
* Copyright (c) 2015-2025 Valve Corporation
* Copyright (c) 2015-2025 LunarG, Inc.
* Copyright (c) 2015-2025 Google, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*/
#include "../framework/layer_validation_tests.h"
class PositiveTooling : public VkLayerTest {};
TEST_F(PositiveTooling, InfoExt) {
TEST_DESCRIPTION("Basic usage calling Tooling Extension and verify layer results.");
AddRequiredExtensions(VK_EXT_TOOLING_INFO_EXTENSION_NAME);
RETURN_IF_SKIP(Init());
if (IsPlatformMockICD()) {
GTEST_SKIP() << "Tooling Info not supported by MockICD";
}
uint32_t tool_count = 0;
auto result = vk::GetPhysicalDeviceToolPropertiesEXT(Gpu(), &tool_count, nullptr);
if (tool_count <= 0) {
m_errorMonitor->SetError("Expected layer tooling data but received none");
}
std::vector<VkPhysicalDeviceToolPropertiesEXT> tool_properties(tool_count);
for (uint32_t i = 0; i < tool_count; i++) {
tool_properties[i] = vku::InitStructHelper();
}
bool found_validation_layer = false;
if (result == VK_SUCCESS) {
result = vk::GetPhysicalDeviceToolPropertiesEXT(Gpu(), &tool_count, tool_properties.data());
for (uint32_t i = 0; i < tool_count; i++) {
if (strcmp(tool_properties[0].name, "Khronos Validation Layer") == 0) {
found_validation_layer = true;
break;
}
}
}
if (!found_validation_layer) {
m_errorMonitor->SetError("Expected layer tooling data but received none");
}
}
TEST_F(PositiveTooling, InfoCore) {
TEST_DESCRIPTION("Basic usage calling Tooling Extension as core.");
SetTargetApiVersion(VK_API_VERSION_1_3);
RETURN_IF_SKIP(Init());
if (IsPlatformMockICD()) {
GTEST_SKIP() << "Tooling Info not supported by MockICD";
}
uint32_t tool_count = 0;
auto result = vk::GetPhysicalDeviceToolProperties(Gpu(), &tool_count, nullptr);
if (tool_count <= 0) {
m_errorMonitor->SetError("Expected layer tooling data but received none");
}
std::vector<VkPhysicalDeviceToolProperties> tool_properties(tool_count);
for (uint32_t i = 0; i < tool_count; i++) {
tool_properties[i] = vku::InitStructHelper();
}
bool found_validation_layer = false;
if (result == VK_SUCCESS) {
result = vk::GetPhysicalDeviceToolProperties(Gpu(), &tool_count, tool_properties.data());
for (uint32_t i = 0; i < tool_count; i++) {
if (strcmp(tool_properties[0].name, "Khronos Validation Layer") == 0) {
found_validation_layer = true;
break;
}
}
}
if (!found_validation_layer) {
m_errorMonitor->SetError("Expected layer tooling data but received none");
}
}
TEST_F(PositiveTooling, PrivateDataExt) {
TEST_DESCRIPTION("Basic usage calling private data extension.");
AddRequiredExtensions(VK_EXT_PRIVATE_DATA_EXTENSION_NAME);
AddRequiredFeature(vkt::Feature::privateData);
RETURN_IF_SKIP(Init());
if (IsPlatformMockICD()) {
GTEST_SKIP() << "Private data not supported by MockICD";
}
VkPrivateDataSlot data_slot;
VkPrivateDataSlotCreateInfo data_create_info = vku::InitStructHelper();
data_create_info.flags = 0;
vk::CreatePrivateDataSlotEXT(*m_device, &data_create_info, nullptr, &data_slot);
vkt::Sampler sampler(*m_device, SafeSaneSamplerCreateInfo());
static const uint64_t data_value = 0x70AD;
vk::SetPrivateDataEXT(*m_device, VK_OBJECT_TYPE_SAMPLER, (uint64_t)sampler.handle(), data_slot, data_value);
uint64_t data;
vk::GetPrivateDataEXT(*m_device, VK_OBJECT_TYPE_SAMPLER, (uint64_t)sampler.handle(), data_slot, &data);
if (data != data_value) {
m_errorMonitor->SetError("Got unexpected private data, %s.\n");
}
vk::DestroyPrivateDataSlotEXT(*m_device, data_slot, nullptr);
}
TEST_F(PositiveTooling, PrivateDataCore) {
TEST_DESCRIPTION("Basic usage calling private data as core.");
SetTargetApiVersion(VK_API_VERSION_1_3);
AddRequiredFeature(vkt::Feature::privateData);
RETURN_IF_SKIP(Init());
if (IsPlatformMockICD()) {
GTEST_SKIP() << "Private data not supported by MockICD";
}
VkPrivateDataSlot data_slot;
VkPrivateDataSlotCreateInfo data_create_info = vku::InitStructHelper();
data_create_info.flags = 0;
vk::CreatePrivateDataSlot(*m_device, &data_create_info, nullptr, &data_slot);
vkt::Sampler sampler(*m_device, SafeSaneSamplerCreateInfo());
static const uint64_t data_value = 0x70AD;
vk::SetPrivateData(*m_device, VK_OBJECT_TYPE_SAMPLER, (uint64_t)sampler.handle(), data_slot, data_value);
uint64_t data;
vk::GetPrivateData(*m_device, VK_OBJECT_TYPE_SAMPLER, (uint64_t)sampler.handle(), data_slot, &data);
if (data != data_value) {
m_errorMonitor->SetError("Got unexpected private data, %s.\n");
}
vk::DestroyPrivateDataSlot(*m_device, data_slot, nullptr);
}
TEST_F(PositiveTooling, PrivateDataDevice) {
TEST_DESCRIPTION("Test private data can set VkDevice.");
SetTargetApiVersion(VK_API_VERSION_1_3);
AddRequiredFeature(vkt::Feature::privateData);
RETURN_IF_SKIP(Init());
VkPrivateDataSlot data_slot;
VkPrivateDataSlotCreateInfo data_create_info = vku::InitStructHelper();
vk::CreatePrivateDataSlot(*m_device, &data_create_info, NULL, &data_slot);
static const uint64_t data_value = 0x70AD;
vk::SetPrivateData(*m_device, VK_OBJECT_TYPE_DEVICE, (uint64_t)device(), data_slot, data_value);
uint64_t data;
vk::GetPrivateData(*m_device, VK_OBJECT_TYPE_DEVICE, (uint64_t)device(), data_slot, &data);
vk::DestroyPrivateDataSlot(*m_device, data_slot, nullptr);
}