diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index bdd1a144c0c..60cb36d62e4 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -2787,6 +2787,33 @@ genX(cmd_buffer_begin_companion)(struct anv_cmd_buffer *cmd_buffer, } } +static void +genX(cmd_buffer_set_protected_memory)(struct anv_cmd_buffer *cmd_buffer, + bool enabled) +{ +#if GFX_VER >= 12 + if (enabled) { + anv_batch_emit(&cmd_buffer->batch, GENX(MI_SET_APPID), appid) { + /* Default value for single session. */ + appid.ProtectedMemoryApplicationID = cmd_buffer->device->protected_session_id; + appid.ProtectedMemoryApplicationIDType = DISPLAY_APP; + } + } + anv_batch_emit(&cmd_buffer->batch, GENX(PIPE_CONTROL), pc) { + pc.PipeControlFlushEnable = true; + pc.DCFlushEnable = true; + pc.RenderTargetCacheFlushEnable = true; + pc.CommandStreamerStallEnable = true; + if (enabled) + pc.ProtectedMemoryEnable = true; + else + pc.ProtectedMemoryDisable = true; + } +#else + unreachable("Protected content not supported"); +#endif +} + VkResult genX(BeginCommandBuffer)( VkCommandBuffer commandBuffer, @@ -2861,19 +2888,8 @@ genX(BeginCommandBuffer)( #if GFX_VER >= 12 if (cmd_buffer->vk.level == VK_COMMAND_BUFFER_LEVEL_PRIMARY && - cmd_buffer->vk.pool->flags & VK_COMMAND_POOL_CREATE_PROTECTED_BIT) { - anv_batch_emit(&cmd_buffer->batch, GENX(MI_SET_APPID), appid) { - /* Default value for single session. */ - appid.ProtectedMemoryApplicationID = cmd_buffer->device->protected_session_id; - appid.ProtectedMemoryApplicationIDType = DISPLAY_APP; - } - anv_batch_emit(&cmd_buffer->batch, GENX(PIPE_CONTROL), pc) { - pc.CommandStreamerStallEnable = true; - pc.DCFlushEnable = true; - pc.RenderTargetCacheFlushEnable = true; - pc.ProtectedMemoryEnable = true; - } - } + cmd_buffer->vk.pool->flags & VK_COMMAND_POOL_CREATE_PROTECTED_BIT) + genX(cmd_buffer_set_protected_memory)(cmd_buffer, true); #endif if (cmd_buffer->device->vk.enabled_extensions.EXT_descriptor_buffer) { @@ -3092,14 +3108,8 @@ end_command_buffer(struct anv_cmd_buffer *cmd_buffer) #if GFX_VER >= 12 if (cmd_buffer->vk.level == VK_COMMAND_BUFFER_LEVEL_PRIMARY && - cmd_buffer->vk.pool->flags & VK_COMMAND_POOL_CREATE_PROTECTED_BIT) { - anv_batch_emit(&cmd_buffer->batch, GENX(PIPE_CONTROL), pc) { - pc.CommandStreamerStallEnable = true; - pc.DCFlushEnable = true; - pc.RenderTargetCacheFlushEnable = true; - pc.ProtectedMemoryDisable = true; - } - } + cmd_buffer->vk.pool->flags & VK_COMMAND_POOL_CREATE_PROTECTED_BIT) + genX(cmd_buffer_set_protected_memory)(cmd_buffer, false); #endif trace_intel_end_cmd_buffer(&cmd_buffer->trace, cmd_buffer->vk.level); @@ -3212,6 +3222,9 @@ genX(CmdExecuteCommands)( } if (need_surface_state_copy) { + if (container->vk.pool->flags & VK_COMMAND_POOL_CREATE_PROTECTED_BIT) + genX(cmd_buffer_set_protected_memory)(container, false); + /* The memcpy will take care of the 3D preemption requirements. */ struct anv_memcpy_state memcpy_state; genX(emit_so_memcpy_init)(&memcpy_state, device, &container->batch); @@ -3242,6 +3255,9 @@ genX(CmdExecuteCommands)( } } genX(emit_so_memcpy_fini)(&memcpy_state); + + if (container->vk.pool->flags & VK_COMMAND_POOL_CREATE_PROTECTED_BIT) + genX(cmd_buffer_set_protected_memory)(container, true); } /* Ensure preemption is enabled (assumption for all secondary) */