spirv: add support for SPV_KHR_post_depth_coverage

Allow the capability to be exposed, and convert the new execution mode
into fs state.

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>
This commit is contained in:
Ilia Mirkin
2018-07-20 15:50:01 -06:00
committed by Jason Ekstrand
parent 6cbbd5b4f8
commit 768f143667
2 changed files with 10 additions and 0 deletions

View File

@@ -59,6 +59,7 @@ struct spirv_supported_capabilities {
bool stencil_export; bool stencil_export;
bool atomic_storage; bool atomic_storage;
bool storage_8bit; bool storage_8bit;
bool post_depth_coverage;
}; };
typedef struct shader_info { typedef struct shader_info {

View File

@@ -3542,6 +3542,10 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
spv_check_supported(stencil_export, cap); spv_check_supported(stencil_export, cap);
break; break;
case SpvCapabilitySampleMaskPostDepthCoverage:
spv_check_supported(post_depth_coverage, cap);
break;
default: default:
vtn_fail("Unhandled capability"); vtn_fail("Unhandled capability");
} }
@@ -3609,6 +3613,11 @@ vtn_handle_execution_mode(struct vtn_builder *b, struct vtn_value *entry_point,
b->shader->info.fs.early_fragment_tests = true; b->shader->info.fs.early_fragment_tests = true;
break; break;
case SpvExecutionModePostDepthCoverage:
vtn_assert(b->shader->info.stage == MESA_SHADER_FRAGMENT);
b->shader->info.fs.post_depth_coverage = true;
break;
case SpvExecutionModeInvocations: case SpvExecutionModeInvocations:
vtn_assert(b->shader->info.stage == MESA_SHADER_GEOMETRY); vtn_assert(b->shader->info.stage == MESA_SHADER_GEOMETRY);
b->shader->info.gs.invocations = MAX2(1, mode->literals[0]); b->shader->info.gs.invocations = MAX2(1, mode->literals[0]);