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 {
|
struct vn_command_buffer_begin_info {
|
||||||
VkCommandBufferBeginInfo begin;
|
VkCommandBufferBeginInfo begin;
|
||||||
VkCommandBufferInheritanceInfo inheritance;
|
VkCommandBufferInheritanceInfo inheritance;
|
||||||
|
VkCommandBufferInheritanceConditionalRenderingInfoEXT conditional_rendering;
|
||||||
|
|
||||||
bool has_inherited_pass;
|
bool has_inherited_pass;
|
||||||
};
|
};
|
||||||
|
@ -655,6 +656,12 @@ vn_fix_command_buffer_begin_info(struct vn_command_buffer *cmd,
|
||||||
const bool has_renderpass =
|
const bool has_renderpass =
|
||||||
begin_info->pInheritanceInfo->renderPass != VK_NULL_HANDLE;
|
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;
|
local->begin = *begin_info;
|
||||||
|
|
||||||
if (!is_cmd_secondary) {
|
if (!is_cmd_secondary) {
|
||||||
|
@ -662,16 +669,52 @@ vn_fix_command_buffer_begin_info(struct vn_command_buffer *cmd,
|
||||||
return &local->begin;
|
return &local->begin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local->inheritance = *begin_info->pInheritanceInfo;
|
||||||
|
local->begin.pInheritanceInfo = &local->inheritance;
|
||||||
|
|
||||||
if (!has_continue) {
|
if (!has_continue) {
|
||||||
local->inheritance = *begin_info->pInheritanceInfo;
|
|
||||||
local->inheritance.framebuffer = VK_NULL_HANDLE;
|
local->inheritance.framebuffer = VK_NULL_HANDLE;
|
||||||
local->inheritance.renderPass = VK_NULL_HANDLE;
|
local->inheritance.renderPass = VK_NULL_HANDLE;
|
||||||
local->inheritance.subpass = 0;
|
local->inheritance.subpass = 0;
|
||||||
local->begin.pInheritanceInfo = &local->inheritance;
|
|
||||||
} else {
|
} 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;
|
return &local->begin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -688,7 +731,6 @@ vn_BeginCommandBuffer(VkCommandBuffer commandBuffer,
|
||||||
vn_cs_encoder_reset(&cmd->cs);
|
vn_cs_encoder_reset(&cmd->cs);
|
||||||
cmd->draw_cmd_batched = 0;
|
cmd->draw_cmd_batched = 0;
|
||||||
|
|
||||||
/* TODO: add support for VK_KHR_dynamic_rendering */
|
|
||||||
struct vn_command_buffer_begin_info local_begin_info;
|
struct vn_command_buffer_begin_info local_begin_info;
|
||||||
pBeginInfo =
|
pBeginInfo =
|
||||||
vn_fix_command_buffer_begin_info(cmd, pBeginInfo, &local_begin_info);
|
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));
|
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
|
void
|
||||||
vn_CmdDrawIndexed(VkCommandBuffer commandBuffer,
|
vn_CmdDrawIndexed(VkCommandBuffer commandBuffer,
|
||||||
uint32_t indexCount,
|
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,
|
VN_ADD_EXT_TO_PNEXT(exts->EXT_inline_uniform_block,
|
||||||
feats->inline_uniform_block,
|
feats->inline_uniform_block,
|
||||||
INLINE_UNIFORM_BLOCK_FEATURES, features2);
|
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,
|
VN_ADD_EXT_TO_PNEXT(exts->KHR_maintenance4, feats->maintenance4,
|
||||||
MAINTENANCE_4_FEATURES, features2);
|
MAINTENANCE_4_FEATURES, features2);
|
||||||
VN_ADD_EXT_TO_PNEXT(exts->EXT_shader_demote_to_helper_invocation,
|
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_inline_uniform_block = true,
|
||||||
.EXT_shader_demote_to_helper_invocation = true,
|
.EXT_shader_demote_to_helper_invocation = true,
|
||||||
.KHR_copy_commands2 = true,
|
.KHR_copy_commands2 = true,
|
||||||
|
.KHR_dynamic_rendering = true,
|
||||||
.KHR_maintenance4 = true,
|
.KHR_maintenance4 = true,
|
||||||
|
|
||||||
/* EXT */
|
/* EXT */
|
||||||
|
@ -1620,6 +1623,7 @@ vn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
|
||||||
|
|
||||||
/* Vulkan 1.3 */
|
/* Vulkan 1.3 */
|
||||||
VkPhysicalDevice4444FormatsFeaturesEXT *argb_4444_formats;
|
VkPhysicalDevice4444FormatsFeaturesEXT *argb_4444_formats;
|
||||||
|
VkPhysicalDeviceDynamicRenderingFeatures *dynamic_rendering;
|
||||||
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *extended_dynamic_state;
|
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *extended_dynamic_state;
|
||||||
VkPhysicalDeviceExtendedDynamicState2FeaturesEXT
|
VkPhysicalDeviceExtendedDynamicState2FeaturesEXT
|
||||||
*extended_dynamic_state2;
|
*extended_dynamic_state2;
|
||||||
|
@ -1804,6 +1808,9 @@ vn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
|
||||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT:
|
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT:
|
||||||
*u.argb_4444_formats = feats->argb_4444_formats;
|
*u.argb_4444_formats = feats->argb_4444_formats;
|
||||||
break;
|
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:
|
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT:
|
||||||
*u.extended_dynamic_state = feats->extended_dynamic_state;
|
*u.extended_dynamic_state = feats->extended_dynamic_state;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -24,6 +24,7 @@ struct vn_physical_device_features {
|
||||||
|
|
||||||
/* Vulkan 1.3 */
|
/* Vulkan 1.3 */
|
||||||
VkPhysicalDevice4444FormatsFeaturesEXT argb_4444_formats;
|
VkPhysicalDevice4444FormatsFeaturesEXT argb_4444_formats;
|
||||||
|
VkPhysicalDeviceDynamicRenderingFeatures dynamic_rendering;
|
||||||
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extended_dynamic_state;
|
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extended_dynamic_state;
|
||||||
VkPhysicalDeviceExtendedDynamicState2FeaturesEXT extended_dynamic_state_2;
|
VkPhysicalDeviceExtendedDynamicState2FeaturesEXT extended_dynamic_state_2;
|
||||||
VkPhysicalDeviceImageRobustnessFeatures image_robustness;
|
VkPhysicalDeviceImageRobustnessFeatures image_robustness;
|
||||||
|
|
Loading…
Reference in New Issue