anv/gen9: expose VK_EXT_post_depth_coverage
authorIlia Mirkin <imirkin@alum.mit.edu>
Fri, 20 Jul 2018 21:50:02 +0000 (15:50 -0600)
committerJason Ekstrand <jason.ekstrand@intel.com>
Sun, 22 Jul 2018 21:56:44 +0000 (14:56 -0700)
Note that the use of ICMS_INNER_CONSERVATIVE disagrees with the GL driver.
Perhaps it's more performant than ICMS_NORMAL and is otherwise permitted?
Not sure, so I left it as-is.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/anv_extensions.py
src/intel/vulkan/anv_pipeline.c
src/intel/vulkan/genX_pipeline.c

index adc1d758982b5ce7f0eea9a370a9fbd0fa66f411..ea837744b4352845b0d5d9e3366d186d87e7c39b 100644 (file)
@@ -124,6 +124,7 @@ EXTENSIONS = [
     Extension('VK_EXT_shader_viewport_index_layer',       1, True),
     Extension('VK_EXT_shader_stencil_export',             1, 'device->info.gen >= 9'),
     Extension('VK_EXT_vertex_attribute_divisor',          2, True),
+    Extension('VK_EXT_post_depth_coverage',               1, 'device->info.gen >= 9'),
 ]
 
 class VkVersion:
index 95a686f7833c4e4ed09ec407e8c6d64f03f00f73..e91c146aad2a562de054ef6fa182bd561ce4d472 100644 (file)
@@ -155,6 +155,7 @@ anv_shader_compile_to_nir(struct anv_pipeline *pipeline,
          .subgroup_vote = true,
          .stencil_export = device->instance->physicalDevice.info.gen >= 9,
          .storage_8bit = device->instance->physicalDevice.info.gen >= 8,
+         .post_depth_coverage = device->instance->physicalDevice.info.gen >= 9,
       },
    };
 
index 0821d71c9f8e8d2f1a24ea3b2b2f3f2843ab6713..6f6793e122136b3a5061d14dff9043641a3196f4 100644 (file)
@@ -1617,8 +1617,14 @@ emit_3dstate_ps_extra(struct anv_pipeline *pipeline,
 #if GEN_GEN >= 9
       ps.PixelShaderComputesStencil = wm_prog_data->computed_stencil;
       ps.PixelShaderPullsBary    = wm_prog_data->pulls_bary;
-      ps.InputCoverageMaskState  = wm_prog_data->uses_sample_mask ?
-                                   ICMS_INNER_CONSERVATIVE : ICMS_NONE;
+
+      ps.InputCoverageMaskState  = ICMS_NONE;
+      if (wm_prog_data->uses_sample_mask) {
+         if (wm_prog_data->post_depth_coverage)
+            ps.InputCoverageMaskState  = ICMS_DEPTH_COVERAGE;
+         else
+            ps.InputCoverageMaskState  = ICMS_INNER_CONSERVATIVE;
+      }
 #else
       ps.PixelShaderUsesInputCoverageMask = wm_prog_data->uses_sample_mask;
 #endif