Fix normal validation issues in vulkan tests

* Missing usage flags, invalid state creation/setting, invalid combination of
  LOAD op and UNDEFINED layout, etc.
This commit is contained in:
baldurk committed 2026-11-10 12:02:46 +00:00
1 parent eb8d0450a0
commit e3c29f80cd
7 files changed
+28 -13

No files matched your search

@@ -145,7 +145,8 @@ void main()
AllocatedImage smiley(
this,
vkh::ImageCreateInfo(rgba8.width, rgba8.height, 0, VK_FORMAT_R8G8B8A8_UNORM,
VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT),
VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT |
VK_IMAGE_USAGE_SAMPLED_BIT),
VmaAllocationCreateInfo({0, VMA_MEMORY_USAGE_GPU_ONLY}));
{
VkCommandBuffer cmd = GetCommandBuffer();
+10 -7
View File
@@ -148,9 +148,12 @@ void main()
AllocatedImage MakeTex2D(VkFormat fmt, uint32_t width, uint32_t height, uint32_t mips = 1,
uint32_t arraySlices = 1)
{
return AllocatedImage(this,
vkh::ImageCreateInfo(width, height, 0, fmt,
VK_IMAGE_USAGE_TRANSFER_DST_BIT, mips, arraySlices),
VkImageCreateFlags flags = VK_IMAGE_USAGE_TRANSFER_DST_BIT;
if(fmt == VK_FORMAT_D32_SFLOAT_S8_UINT || fmt == VK_FORMAT_D24_UNORM_S8_UINT ||
fmt == VK_FORMAT_D32_SFLOAT || fmt == VK_FORMAT_D16_UNORM || fmt == VK_FORMAT_S8_UINT)
flags |= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
return AllocatedImage(this, vkh::ImageCreateInfo(width, height, 0, fmt, flags, mips, arraySlices),
VmaAllocationCreateInfo({0, VMA_MEMORY_USAGE_GPU_ONLY}));
}
@@ -319,10 +322,10 @@ void main()
renderPassCreateInfo.attachments[0].initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
renderPassCreateInfo.attachments[1].initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
renderPassCreateInfo.attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
renderPassCreateInfo.attachments[1].loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
renderPassCreateInfo.attachments[0].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
renderPassCreateInfo.attachments[1].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
renderPassCreateInfo.attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
renderPassCreateInfo.attachments[1].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
renderPassCreateInfo.attachments[0].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
renderPassCreateInfo.attachments[1].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
renderPassCreateInfo.attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
renderPassCreateInfo.attachments[1].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
renderPassCreateInfo.attachments[0].stencilStoreOp = VK_ATTACHMENT_STORE_OP_STORE;
+1
View File
@@ -179,6 +179,7 @@ void main()
tests.push_back({VK_NULL_HANDLE});
lineRasterSetup.stippledLineEnable = VK_TRUE;
lineRasterSetup.lineStippleFactor = 1;
pipeCreateInfo.dynamicState.dynamicStates.push_back(VK_DYNAMIC_STATE_LINE_STIPPLE_EXT);
if(lineRasterFeatures.rectangularLines && lineRasterFeatures.stippledRectangularLines)
@@ -133,7 +133,7 @@ RD_TEST(VK_Multi_Thread_Windows, VulkanGraphicsTest)
win->Submit(0, 1, {cmd}, {}, q);
win->Present(q);
win->Present(q, true);
} while(win);
};
+5 -2
View File
@@ -1885,12 +1885,15 @@ void VulkanWindow::MultiPresent(VkQueue queue, std::vector<VulkanWindow *> windo
}
}
void VulkanWindow::Present(VkQueue queue)
void VulkanWindow::Present(VkQueue queue, bool queueWaitIdle)
{
if(swap == VK_NULL_HANDLE)
return;
vkDeviceWaitIdle(m_Test->device);
if(queueWaitIdle)
vkQueueWaitIdle(queue);
else
vkDeviceWaitIdle(m_Test->device);
VkResult vkr =
vkQueuePresentKHR(queue, vkh::PresentInfoKHR(swap, imgIndex, &renderEndSemaphore[semIdx]));
+1 -1
View File
@@ -164,7 +164,7 @@ struct VulkanWindow : public GraphicsWindow, public VulkanCommands
void Submit(int index, int totalSubmits, const std::vector<VkCommandBuffer> &cmds,
const std::vector<VkCommandBuffer> &seccmds, VkQueue q);
static void MultiPresent(VkQueue queue, std::vector<VulkanWindow *> windows);
void Present(VkQueue q);
void Present(VkQueue q, bool queueWaitIdle = false);
// forward GraphicsWindow functions to internal window
void Resize(int width, int height) { m_Win->Resize(width, height); }
+8 -1
View File
@@ -577,9 +577,11 @@ void main()
// vulkan doesn't have 4:4:4 packed formats, makes sense as it can use normal formats
// MAKE_TEX(AYUV, VK_FORMAT_R8G8B8A8_UNORM, Vec4i(2, 1, 0, 1), yuv8, rgba8.width * 4);
// MAKE_TEX(Y416, VK_FORMAT_R16G16B16A16_UNORM, Vec4i(1, 0, 2, 1), yuv16, rgba8.width * 8);
/*
MAKE_TEX(444, VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR,
VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR, Vec4i(1, 2, 0, 1), yuv16,
rgba8.width * 8);
*/
///////////////////////////////////////
// 4:4:4 3-plane
@@ -878,7 +880,12 @@ void main()
VkSamplerYcbcrConversionInfo ycbcrChain = {VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO};
ycbcrChain.conversion = ycbcr[i].conv;
ycbcr[i].sampler = createSampler(vkh::SamplerCreateInfo(VK_FILTER_LINEAR).next(&ycbcrChain));
ycbcr[i].sampler = createSampler(
vkh::SamplerCreateInfo(VK_FILTER_LINEAR, VK_FILTER_LINEAR, VK_SAMPLER_MIPMAP_MODE_LINEAR,
VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE)
.next(&ycbcrChain));
setlayout = createDescriptorSetLayout(vkh::DescriptorSetLayoutCreateInfo({
{0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT,