venus: add support for VK_KHR_dynamic_rendering
Signed-off-by: Ryan Neph <ryanneph@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17668>
This commit is contained in:
parent
6f5289df53
commit
1f28d221d9
|
@ -634,6 +634,7 @@ vn_ResetCommandBuffer(VkCommandBuffer commandBuffer,
|
|||
struct vn_command_buffer_begin_info {
|
||||
VkCommandBufferBeginInfo begin;
|
||||
VkCommandBufferInheritanceInfo inheritance;
|
||||
VkCommandBufferInheritanceConditionalRenderingInfoEXT conditional_rendering;
|
||||
|
||||
bool has_inherited_pass;
|
||||
};
|
||||
|
@ -655,6 +656,12 @@ vn_fix_command_buffer_begin_info(struct vn_command_buffer *cmd,
|
|||
const bool has_renderpass =
|
||||
begin_info->pInheritanceInfo->renderPass != VK_NULL_HANDLE;
|
||||
|
||||
/* Can early-return if dynamic rendering is used and no structures need to
|
||||
* be dropped from the pNext chain of VkCommandBufferInheritanceInfo.
|
||||
*/
|
||||
if (is_cmd_secondary && has_continue && !has_renderpass)
|
||||
return begin_info;
|
||||
|
||||
local->begin = *begin_info;
|
||||
|
||||
if (!is_cmd_secondary) {
|
||||
|
@ -662,16 +669,52 @@ vn_fix_command_buffer_begin_info(struct vn_command_buffer *cmd,
|
|||
return &local->begin;
|
||||
}
|
||||
|
||||
if (!has_continue) {
|
||||
local->inheritance = *begin_info->pInheritanceInfo;
|
||||
local->begin.pInheritanceInfo = &local->inheritance;
|
||||
|
||||
if (!has_continue) {
|
||||
local->inheritance.framebuffer = VK_NULL_HANDLE;
|
||||
local->inheritance.renderPass = VK_NULL_HANDLE;
|
||||
local->inheritance.subpass = 0;
|
||||
local->begin.pInheritanceInfo = &local->inheritance;
|
||||
} else {
|
||||
local->has_inherited_pass = has_renderpass;
|
||||
/* With early-returns above, it must be an inherited pass. */
|
||||
local->has_inherited_pass = true;
|
||||
}
|
||||
|
||||
/* Per spec, about VkCommandBufferInheritanceRenderingInfo:
|
||||
*
|
||||
* If VkCommandBufferInheritanceInfo::renderPass is not VK_NULL_HANDLE, or
|
||||
* VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT is not specified in
|
||||
* VkCommandBufferBeginInfo::flags, parameters of this structure are
|
||||
* ignored.
|
||||
*/
|
||||
VkBaseOutStructure *head = NULL;
|
||||
VkBaseOutStructure *tail = NULL;
|
||||
vk_foreach_struct_const(src, local->inheritance.pNext) {
|
||||
void *pnext = NULL;
|
||||
switch (src->sType) {
|
||||
case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT:
|
||||
memcpy(
|
||||
&local->conditional_rendering, src,
|
||||
sizeof(VkCommandBufferInheritanceConditionalRenderingInfoEXT));
|
||||
pnext = &local->conditional_rendering;
|
||||
break;
|
||||
case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (pnext) {
|
||||
if (!head)
|
||||
head = pnext;
|
||||
else
|
||||
tail->pNext = pnext;
|
||||
|
||||
tail = pnext;
|
||||
}
|
||||
}
|
||||
local->inheritance.pNext = head;
|
||||
|
||||
return &local->begin;
|
||||
}
|
||||
|
||||
|
@ -688,7 +731,6 @@ vn_BeginCommandBuffer(VkCommandBuffer commandBuffer,
|
|||
vn_cs_encoder_reset(&cmd->cs);
|
||||
cmd->draw_cmd_batched = 0;
|
||||
|
||||
/* TODO: add support for VK_KHR_dynamic_rendering */
|
||||
struct vn_command_buffer_begin_info local_begin_info;
|
||||
pBeginInfo =
|
||||
vn_fix_command_buffer_begin_info(cmd, pBeginInfo, &local_begin_info);
|
||||
|
@ -915,6 +957,19 @@ vn_CmdDraw(VkCommandBuffer commandBuffer,
|
|||
vn_command_buffer_from_handle(commandBuffer));
|
||||
}
|
||||
|
||||
void
|
||||
vn_CmdBeginRendering(VkCommandBuffer commandBuffer,
|
||||
const VkRenderingInfo *pRenderingInfo)
|
||||
{
|
||||
VN_CMD_ENQUEUE(vkCmdBeginRendering, commandBuffer, pRenderingInfo);
|
||||
}
|
||||
|
||||
void
|
||||
vn_CmdEndRendering(VkCommandBuffer commandBuffer)
|
||||
{
|
||||
VN_CMD_ENQUEUE(vkCmdEndRendering, commandBuffer);
|
||||
}
|
||||
|
||||
void
|
||||
vn_CmdDrawIndexed(VkCommandBuffer commandBuffer,
|
||||
uint32_t indexCount,
|
||||
|
|
|
@ -132,6 +132,8 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev)
|
|||
VN_ADD_EXT_TO_PNEXT(exts->EXT_inline_uniform_block,
|
||||
feats->inline_uniform_block,
|
||||
INLINE_UNIFORM_BLOCK_FEATURES, features2);
|
||||
VN_ADD_EXT_TO_PNEXT(exts->KHR_dynamic_rendering, feats->dynamic_rendering,
|
||||
DYNAMIC_RENDERING_FEATURES, features2);
|
||||
VN_ADD_EXT_TO_PNEXT(exts->KHR_maintenance4, feats->maintenance4,
|
||||
MAINTENANCE_4_FEATURES, features2);
|
||||
VN_ADD_EXT_TO_PNEXT(exts->EXT_shader_demote_to_helper_invocation,
|
||||
|
@ -999,6 +1001,7 @@ vn_physical_device_get_passthrough_extensions(
|
|||
.EXT_inline_uniform_block = true,
|
||||
.EXT_shader_demote_to_helper_invocation = true,
|
||||
.KHR_copy_commands2 = true,
|
||||
.KHR_dynamic_rendering = true,
|
||||
.KHR_maintenance4 = true,
|
||||
|
||||
/* EXT */
|
||||
|
@ -1620,6 +1623,7 @@ vn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
|
|||
|
||||
/* Vulkan 1.3 */
|
||||
VkPhysicalDevice4444FormatsFeaturesEXT *argb_4444_formats;
|
||||
VkPhysicalDeviceDynamicRenderingFeatures *dynamic_rendering;
|
||||
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *extended_dynamic_state;
|
||||
VkPhysicalDeviceExtendedDynamicState2FeaturesEXT
|
||||
*extended_dynamic_state2;
|
||||
|
@ -1804,6 +1808,9 @@ vn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
|
|||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT:
|
||||
*u.argb_4444_formats = feats->argb_4444_formats;
|
||||
break;
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES:
|
||||
*u.dynamic_rendering = feats->dynamic_rendering;
|
||||
break;
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT:
|
||||
*u.extended_dynamic_state = feats->extended_dynamic_state;
|
||||
break;
|
||||
|
|
|
@ -24,6 +24,7 @@ struct vn_physical_device_features {
|
|||
|
||||
/* Vulkan 1.3 */
|
||||
VkPhysicalDevice4444FormatsFeaturesEXT argb_4444_formats;
|
||||
VkPhysicalDeviceDynamicRenderingFeatures dynamic_rendering;
|
||||
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extended_dynamic_state;
|
||||
VkPhysicalDeviceExtendedDynamicState2FeaturesEXT extended_dynamic_state_2;
|
||||
VkPhysicalDeviceImageRobustnessFeatures image_robustness;
|
||||
|
|
Loading…
Reference in New Issue