blob: e69f306b0e4d311998da885586f95d58ecfd040b [file] [log] [blame]
/*
* Copyright (c) 2015-2024 The Khronos Group Inc.
* Copyright (c) 2015-2024 Valve Corporation
* Copyright (c) 2015-2024 LunarG, Inc.
* Copyright (c) 2015-2024 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 NegativeTooling : public VkLayerTest {};
TEST_F(NegativeTooling, PrivateDataFeature) {
TEST_DESCRIPTION("Test privateData feature not being enabled.");
AddRequiredExtensions(VK_EXT_PRIVATE_DATA_EXTENSION_NAME);
// feature not enabled
RETURN_IF_SKIP(Init());
bool vulkan_13 = (DeviceValidationVersion() >= VK_API_VERSION_1_3);
VkPrivateDataSlotEXT data_slot;
VkPrivateDataSlotCreateInfoEXT data_create_info = vku::InitStructHelper();
data_create_info.flags = 0;
m_errorMonitor->SetDesiredError("VUID-vkCreatePrivateDataSlot-privateData-04564");
vk::CreatePrivateDataSlotEXT(m_device->handle(), &data_create_info, NULL, &data_slot);
m_errorMonitor->VerifyFound();
if (vulkan_13) {
m_errorMonitor->SetDesiredError("VUID-vkCreatePrivateDataSlot-privateData-04564");
vk::CreatePrivateDataSlot(m_device->handle(), &data_create_info, NULL, &data_slot);
m_errorMonitor->VerifyFound();
}
}
TEST_F(NegativeTooling, PrivateDataSetNonDevice) {
TEST_DESCRIPTION("Use Private Data on a non-Device object type.");
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->handle(), &data_create_info, NULL, &data_slot);
static const uint64_t data_value = 0x70AD;
m_errorMonitor->SetDesiredError("VUID-vkSetPrivateData-objectHandle-04016");
vk::SetPrivateData(m_device->handle(), VK_OBJECT_TYPE_PHYSICAL_DEVICE, (uint64_t)Gpu(), data_slot, data_value);
m_errorMonitor->VerifyFound();
m_errorMonitor->SetDesiredError("VUID-vkSetPrivateData-objectHandle-04016");
vk::SetPrivateData(m_device->handle(), VK_OBJECT_TYPE_UNKNOWN, (uint64_t)Gpu(), data_slot, data_value);
m_errorMonitor->VerifyFound();
vk::DestroyPrivateDataSlot(m_device->handle(), data_slot, nullptr);
}
TEST_F(NegativeTooling, PrivateDataSetBadHandle) {
TEST_DESCRIPTION("Use Private Data a non valid handle.");
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->handle(), &data_create_info, NULL, &data_slot);
static const uint64_t data_value = 0x70AD;
m_errorMonitor->SetDesiredError("VUID-vkSetPrivateData-objectHandle-04017");
// valid handle, but not a vkSample
vk::SetPrivateData(m_device->handle(), VK_OBJECT_TYPE_SAMPLER, (uint64_t)device(), data_slot, data_value);
m_errorMonitor->VerifyFound();
vk::DestroyPrivateDataSlot(m_device->handle(), data_slot, nullptr);
}
TEST_F(NegativeTooling, PrivateDataSetSecondDevice) {
TEST_DESCRIPTION("Test private data can set VkDevice.");
SetTargetApiVersion(VK_API_VERSION_1_3);
AddRequiredFeature(vkt::Feature::privateData);
RETURN_IF_SKIP(Init());
auto features = m_device->Physical().Features();
vkt::Device second_device(gpu_, m_device_extension_names, &features, nullptr);
VkPrivateDataSlot data_slot;
VkPrivateDataSlotCreateInfo data_create_info = vku::InitStructHelper();
vk::CreatePrivateDataSlot(m_device->handle(), &data_create_info, NULL, &data_slot);
static const uint64_t data_value = 0x70AD;
m_errorMonitor->SetDesiredError("VUID-vkSetPrivateData-objectHandle-04016");
vk::SetPrivateData(m_device->handle(), VK_OBJECT_TYPE_DEVICE, (uint64_t)second_device.handle(), data_slot, data_value);
m_errorMonitor->VerifyFound();
vkt::Sampler sampler(second_device, SafeSaneSamplerCreateInfo());
m_errorMonitor->SetDesiredError("VUID-vkSetPrivateData-objectHandle-04016");
vk::SetPrivateData(m_device->handle(), VK_OBJECT_TYPE_SAMPLER, (uint64_t)sampler.handle(), data_slot, data_value);
m_errorMonitor->VerifyFound();
vk::DestroyPrivateDataSlot(m_device->handle(), data_slot, nullptr);
}
TEST_F(NegativeTooling, PrivateDataGetNonDevice) {
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->handle(), &data_create_info, nullptr, &data_slot);
uint64_t data;
m_errorMonitor->SetDesiredError("VUID-vkGetPrivateData-objectType-04018");
vk::GetPrivateData(m_device->handle(), VK_OBJECT_TYPE_PHYSICAL_DEVICE, (uint64_t)Gpu(), data_slot, &data);
m_errorMonitor->VerifyFound();
m_errorMonitor->SetDesiredError("VUID-vkGetPrivateData-objectType-04018");
vk::GetPrivateData(m_device->handle(), VK_OBJECT_TYPE_UNKNOWN, (uint64_t)Gpu(), data_slot, &data);
m_errorMonitor->VerifyFound();
vk::DestroyPrivateDataSlot(m_device->handle(), data_slot, nullptr);
}
TEST_F(NegativeTooling, PrivateDataGetBadHandle) {
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->handle(), &data_create_info, NULL, &data_slot);
uint64_t data;
m_errorMonitor->SetDesiredError("VUID-vkGetPrivateData-objectHandle-09498");
// valid handle, but not a vkSample
vk::GetPrivateData(m_device->handle(), VK_OBJECT_TYPE_SAMPLER, (uint64_t)device(), data_slot, &data);
m_errorMonitor->VerifyFound();
vk::DestroyPrivateDataSlot(m_device->handle(), data_slot, nullptr);
}
TEST_F(NegativeTooling, PrivateDataGetDestroyedHandle) {
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->handle(), &data_create_info, NULL, &data_slot);
vkt::Sampler sampler(*m_device, SafeSaneSamplerCreateInfo());
uint64_t bad_handle = (uint64_t)sampler.handle();
sampler.destroy();
uint64_t data;
m_errorMonitor->SetDesiredError("VUID-vkGetPrivateData-objectHandle-09498");
// valid handle, but not a vkSample
vk::GetPrivateData(m_device->handle(), VK_OBJECT_TYPE_SAMPLER, bad_handle, data_slot, &data);
m_errorMonitor->VerifyFound();
vk::DestroyPrivateDataSlot(m_device->handle(), data_slot, nullptr);
}
TEST_F(NegativeTooling, ValidateNVDeviceDiagnosticCheckpoints) {
TEST_DESCRIPTION("General testing of VK_NV_device_diagnostic_checkpoints");
AddRequiredExtensions(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
AddRequiredExtensions(VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME);
RETURN_IF_SKIP(Init());
uint32_t data = 100;
m_errorMonitor->SetDesiredError("VUID-vkCmdSetCheckpointNV-commandBuffer-recording");
vk::CmdSetCheckpointNV(m_command_buffer.handle(), &data);
m_errorMonitor->VerifyFound();
}
TEST_F(NegativeTooling, PrivateDataDestroyHandle) {
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->handle(), &data_create_info, nullptr, &data_slot);
vkt::Sampler sampler(*m_device, SafeSaneSamplerCreateInfo());
static const uint64_t data_value = 0x70AD;
vk::SetPrivateData(m_device->handle(), VK_OBJECT_TYPE_SAMPLER, (uint64_t)sampler.handle(), data_slot, data_value);
vk::DestroyPrivateDataSlot(m_device->handle(), data_slot, nullptr);
uint64_t data;
m_errorMonitor->SetDesiredError("VUID-vkGetPrivateData-privateDataSlot-parameter");
vk::GetPrivateData(m_device->handle(), VK_OBJECT_TYPE_SAMPLER, (uint64_t)sampler.handle(), data_slot, &data);
m_errorMonitor->VerifyFound();
m_errorMonitor->SetDesiredError("VUID-vkSetPrivateData-privateDataSlot-parameter");
vk::SetPrivateData(m_device->handle(), VK_OBJECT_TYPE_SAMPLER, (uint64_t)sampler.handle(), data_slot, data_value);
m_errorMonitor->VerifyFound();
}