anv: Add support for the PMA fix on Broadwell
This helps Dota 2 on Broadwell by 8-9%. I also hacked up the driver and used the Sascha "shadowmapping" demo to get some results. Setting uses_kill to true dropped the framerate on the demo by 25-30%. Enabling the PMA fix brought it back up to around 90% of the original framerate. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Nanley Chery <nanley.g.chery@intel.com>
This commit is contained in:
@@ -637,6 +637,11 @@ genX(EndCommandBuffer)(
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
/* We want every command buffer to start with the PMA fix in a known state,
|
||||
* so we disable it at the end of the command buffer.
|
||||
*/
|
||||
genX(cmd_buffer_enable_pma_fix)(cmd_buffer, false);
|
||||
|
||||
genX(cmd_buffer_apply_pipe_flushes)(cmd_buffer);
|
||||
|
||||
anv_cmd_buffer_end_batch_buffer(cmd_buffer);
|
||||
@@ -654,6 +659,11 @@ genX(CmdExecuteCommands)(
|
||||
|
||||
assert(primary->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY);
|
||||
|
||||
/* The secondary command buffers will assume that the PMA fix is disabled
|
||||
* when they begin executing. Make sure this is true.
|
||||
*/
|
||||
genX(cmd_buffer_enable_pma_fix)(primary, false);
|
||||
|
||||
for (uint32_t i = 0; i < commandBufferCount; i++) {
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, secondary, pCmdBuffers[i]);
|
||||
|
||||
@@ -2227,7 +2237,8 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer)
|
||||
const bool has_stencil =
|
||||
image && (image->aspects & VK_IMAGE_ASPECT_STENCIL_BIT);
|
||||
|
||||
/* FIXME: Implement the PMA stall W/A */
|
||||
cmd_buffer->state.hiz_enabled = has_hiz;
|
||||
|
||||
/* FIXME: Width and Height are wrong */
|
||||
|
||||
genX(cmd_buffer_emit_gen7_depth_flush)(cmd_buffer);
|
||||
@@ -2465,6 +2476,8 @@ void genX(CmdEndRenderPass)(
|
||||
|
||||
anv_cmd_buffer_resolve_subpass(cmd_buffer);
|
||||
|
||||
cmd_buffer->state.hiz_enabled = false;
|
||||
|
||||
#ifndef NDEBUG
|
||||
anv_dump_add_framebuffer(cmd_buffer, cmd_buffer->state.framebuffer);
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user