Add NV_fragment_shader_interlock support.
The main purpose for having NV_fragment_shader_interlock extension is because that extension is also for GLES31 while the ARB extension is for GL only. Reviewed-by: Plamena Manolova <plamena.manolova@intel.com>
This commit is contained in:

committed by
Kenneth Graunke

parent
44df06211c
commit
7ec308d978
@@ -519,6 +519,12 @@ supports_arb_fragment_shader_interlock(const _mesa_glsl_parse_state *state)
|
||||
return state->ARB_fragment_shader_interlock_enable;
|
||||
}
|
||||
|
||||
static bool
|
||||
supports_nv_fragment_shader_interlock(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return state->NV_fragment_shader_interlock_enable;
|
||||
}
|
||||
|
||||
static bool
|
||||
shader_clock(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
@@ -3331,6 +3337,18 @@ builtin_builder::create_builtins()
|
||||
supports_arb_fragment_shader_interlock),
|
||||
NULL);
|
||||
|
||||
add_function("beginInvocationInterlockNV",
|
||||
_invocation_interlock(
|
||||
"__intrinsic_begin_invocation_interlock",
|
||||
supports_nv_fragment_shader_interlock),
|
||||
NULL);
|
||||
|
||||
add_function("endInvocationInterlockNV",
|
||||
_invocation_interlock(
|
||||
"__intrinsic_end_invocation_interlock",
|
||||
supports_nv_fragment_shader_interlock),
|
||||
NULL);
|
||||
|
||||
add_function("anyInvocationARB",
|
||||
_vote("__intrinsic_vote_any", vote),
|
||||
NULL);
|
||||
|
@@ -1450,10 +1450,12 @@ layout_qualifier_id:
|
||||
"only valid in fragment shader input layout declaration.");
|
||||
} else if (pixel_interlock_ordered + pixel_interlock_unordered +
|
||||
sample_interlock_ordered + sample_interlock_unordered > 0 &&
|
||||
!state->ARB_fragment_shader_interlock_enable) {
|
||||
!state->ARB_fragment_shader_interlock_enable &&
|
||||
!state->NV_fragment_shader_interlock_enable) {
|
||||
_mesa_glsl_error(& @1, state,
|
||||
"interlock layout qualifier present, but the "
|
||||
"GL_ARB_fragment_shader_interlock extension is not "
|
||||
"GL_ARB_fragment_shader_interlock or "
|
||||
"GL_NV_fragment_shader_interlock extension is not "
|
||||
"enabled.");
|
||||
} else {
|
||||
$$.flags.q.pixel_interlock_ordered = pixel_interlock_ordered;
|
||||
|
@@ -724,6 +724,7 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = {
|
||||
EXT_AEP(EXT_texture_cube_map_array),
|
||||
EXT(INTEL_conservative_rasterization),
|
||||
EXT(MESA_shader_integer_functions),
|
||||
EXT(NV_fragment_shader_interlock),
|
||||
EXT(NV_image_formats),
|
||||
};
|
||||
|
||||
|
@@ -810,6 +810,8 @@ struct _mesa_glsl_parse_state {
|
||||
bool INTEL_conservative_rasterization_warn;
|
||||
bool MESA_shader_integer_functions_enable;
|
||||
bool MESA_shader_integer_functions_warn;
|
||||
bool NV_fragment_shader_interlock_enable;
|
||||
bool NV_fragment_shader_interlock_warn;
|
||||
bool NV_image_formats_enable;
|
||||
bool NV_image_formats_warn;
|
||||
/*@}*/
|
||||
|
Reference in New Issue
Block a user