mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-11-01 11:35:43 +00:00
Check fully dynamic attachment setup doesn't break
This commit is contained in:
1 file changed
+71
-1
@@ -298,6 +298,7 @@ void main()
|
||||
optDevExts.push_back(VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME);
|
||||
optDevExts.push_back(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME);
|
||||
optDevExts.push_back(VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME);
|
||||
optDevExts.push_back(VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME);
|
||||
|
||||
VulkanGraphicsTest::Prepare(argc, argv);
|
||||
|
||||
@@ -409,6 +410,32 @@ void main()
|
||||
inlineFeats.pNext = (void *)devInfoNext;
|
||||
devInfoNext = &inlineFeats;
|
||||
}
|
||||
|
||||
static VkPhysicalDeviceExtendedDynamicState3FeaturesEXT extFeatures3 = {
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT,
|
||||
};
|
||||
|
||||
if(hasExt(VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME))
|
||||
{
|
||||
getPhysFeatures2(&extFeatures3);
|
||||
|
||||
if(!extFeatures3.extendedDynamicState3ColorBlendEnable)
|
||||
Avail = "feature 'extendedDynamicState3ColorBlendEnable' not available";
|
||||
if(!extFeatures3.extendedDynamicState3ColorBlendEquation)
|
||||
Avail = "feature 'extendedDynamicState3ColorBlendEquation' not available";
|
||||
if(!extFeatures3.extendedDynamicState3ColorWriteMask)
|
||||
Avail = "feature 'extendedDynamicState3ColorWriteMask' not available";
|
||||
|
||||
extFeatures3 = {
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT,
|
||||
};
|
||||
extFeatures3.extendedDynamicState3ColorBlendEnable = VK_TRUE;
|
||||
extFeatures3.extendedDynamicState3ColorBlendEquation = VK_TRUE;
|
||||
extFeatures3.extendedDynamicState3ColorWriteMask = VK_TRUE;
|
||||
|
||||
extFeatures3.pNext = (void *)devInfoNext;
|
||||
devInfoNext = &extFeatures3;
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
@@ -726,7 +753,30 @@ void main()
|
||||
CompileShaderModule(VKDefaultPixel, ShaderLang::glsl, ShaderStage::frag, "main"),
|
||||
};
|
||||
|
||||
VkPipeline pipe = createGraphicsPipeline(pipeCreateInfo);
|
||||
VkPipeline pipe;
|
||||
|
||||
if(hasExt(VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME))
|
||||
{
|
||||
vkh::GraphicsPipelineCreateInfo dupe = pipeCreateInfo;
|
||||
|
||||
dupe.dynamicState.dynamicStates.push_back(VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT);
|
||||
dupe.dynamicState.dynamicStates.push_back(VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT);
|
||||
dupe.dynamicState.dynamicStates.push_back(VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT);
|
||||
|
||||
// force it to bake, _then_ invalidate attachments
|
||||
VkGraphicsPipelineCreateInfo *info = dupe;
|
||||
|
||||
VkPipelineColorBlendStateCreateInfo col = *info->pColorBlendState;
|
||||
col.attachmentCount = 999999;
|
||||
col.pAttachments = NULL;
|
||||
info->pColorBlendState = &col;
|
||||
|
||||
pipe = createGraphicsPipeline(info);
|
||||
}
|
||||
else
|
||||
{
|
||||
pipe = createGraphicsPipeline(pipeCreateInfo);
|
||||
}
|
||||
|
||||
pipeCreateInfo.layout = reflayout;
|
||||
|
||||
@@ -1966,6 +2016,26 @@ void main()
|
||||
vkCmdDraw(cmd, 4, 1, 0, 0);
|
||||
|
||||
vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, pipe);
|
||||
|
||||
if(hasExt(VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME))
|
||||
{
|
||||
// need to set color blend state
|
||||
VkBool32 no = VK_FALSE;
|
||||
vkCmdSetColorBlendEnableEXT(cmd, 0, 1, &no);
|
||||
VkColorComponentFlags all = 0xf;
|
||||
vkCmdSetColorWriteMaskEXT(cmd, 0, 1, &all);
|
||||
VkColorBlendEquationEXT eq = {
|
||||
VK_BLEND_FACTOR_SRC_ALPHA,
|
||||
VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
|
||||
VK_BLEND_OP_ADD,
|
||||
// alpha*
|
||||
VK_BLEND_FACTOR_SRC_ALPHA,
|
||||
VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
|
||||
VK_BLEND_OP_ADD,
|
||||
};
|
||||
vkCmdSetColorBlendEquationEXT(cmd, 0, 1, &eq);
|
||||
}
|
||||
|
||||
vkCmdSetViewport(cmd, 0, 1, &mainWindow->viewport);
|
||||
vkCmdSetScissor(cmd, 0, 1, &mainWindow->scissor);
|
||||
vkh::cmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, layout, 0, {descset},
|
||||
|
||||
Reference in new issue
Block a user