mesa: add GL_OES_shader_multisample_interpolation support
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
@@ -264,10 +264,12 @@ shader_packing_or_es31_or_gpu_shader5(const _mesa_glsl_parse_state *state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
fs_gpu_shader5(const _mesa_glsl_parse_state *state)
|
fs_interpolate_at(const _mesa_glsl_parse_state *state)
|
||||||
{
|
{
|
||||||
return state->stage == MESA_SHADER_FRAGMENT &&
|
return state->stage == MESA_SHADER_FRAGMENT &&
|
||||||
(state->is_version(400, 0) || state->ARB_gpu_shader5_enable);
|
(state->is_version(400, 320) ||
|
||||||
|
state->ARB_gpu_shader5_enable ||
|
||||||
|
state->OES_shader_multisample_interpolation_enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -5165,7 +5167,7 @@ builtin_builder::_interpolateAtCentroid(const glsl_type *type)
|
|||||||
{
|
{
|
||||||
ir_variable *interpolant = in_var(type, "interpolant");
|
ir_variable *interpolant = in_var(type, "interpolant");
|
||||||
interpolant->data.must_be_shader_input = 1;
|
interpolant->data.must_be_shader_input = 1;
|
||||||
MAKE_SIG(type, fs_gpu_shader5, 1, interpolant);
|
MAKE_SIG(type, fs_interpolate_at, 1, interpolant);
|
||||||
|
|
||||||
body.emit(ret(interpolate_at_centroid(interpolant)));
|
body.emit(ret(interpolate_at_centroid(interpolant)));
|
||||||
|
|
||||||
@@ -5178,7 +5180,7 @@ builtin_builder::_interpolateAtOffset(const glsl_type *type)
|
|||||||
ir_variable *interpolant = in_var(type, "interpolant");
|
ir_variable *interpolant = in_var(type, "interpolant");
|
||||||
interpolant->data.must_be_shader_input = 1;
|
interpolant->data.must_be_shader_input = 1;
|
||||||
ir_variable *offset = in_var(glsl_type::vec2_type, "offset");
|
ir_variable *offset = in_var(glsl_type::vec2_type, "offset");
|
||||||
MAKE_SIG(type, fs_gpu_shader5, 2, interpolant, offset);
|
MAKE_SIG(type, fs_interpolate_at, 2, interpolant, offset);
|
||||||
|
|
||||||
body.emit(ret(interpolate_at_offset(interpolant, offset)));
|
body.emit(ret(interpolate_at_offset(interpolant, offset)));
|
||||||
|
|
||||||
@@ -5191,7 +5193,7 @@ builtin_builder::_interpolateAtSample(const glsl_type *type)
|
|||||||
ir_variable *interpolant = in_var(type, "interpolant");
|
ir_variable *interpolant = in_var(type, "interpolant");
|
||||||
interpolant->data.must_be_shader_input = 1;
|
interpolant->data.must_be_shader_input = 1;
|
||||||
ir_variable *sample_num = in_var(glsl_type::int_type, "sample_num");
|
ir_variable *sample_num = in_var(glsl_type::int_type, "sample_num");
|
||||||
MAKE_SIG(type, fs_gpu_shader5, 2, interpolant, sample_num);
|
MAKE_SIG(type, fs_interpolate_at, 2, interpolant, sample_num);
|
||||||
|
|
||||||
body.emit(ret(interpolate_at_sample(interpolant, sample_num)));
|
body.emit(ret(interpolate_at_sample(interpolant, sample_num)));
|
||||||
|
|
||||||
|
@@ -2371,8 +2371,10 @@ _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t versio
|
|||||||
if (extensions != NULL) {
|
if (extensions != NULL) {
|
||||||
if (extensions->OES_EGL_image_external)
|
if (extensions->OES_EGL_image_external)
|
||||||
add_builtin_define(parser, "GL_OES_EGL_image_external", 1);
|
add_builtin_define(parser, "GL_OES_EGL_image_external", 1);
|
||||||
if (extensions->OES_sample_variables)
|
if (extensions->OES_sample_variables) {
|
||||||
add_builtin_define(parser, "GL_OES_sample_variables", 1);
|
add_builtin_define(parser, "GL_OES_sample_variables", 1);
|
||||||
|
add_builtin_define(parser, "GL_OES_shader_multisample_interpolation", 1);
|
||||||
|
}
|
||||||
if (extensions->OES_standard_derivatives)
|
if (extensions->OES_standard_derivatives)
|
||||||
add_builtin_define(parser, "GL_OES_standard_derivatives", 1);
|
add_builtin_define(parser, "GL_OES_standard_derivatives", 1);
|
||||||
if (extensions->ARB_texture_multisample)
|
if (extensions->ARB_texture_multisample)
|
||||||
|
@@ -584,7 +584,7 @@ usamplerBuffer KEYWORD_WITH_ALT(140, 300, 140, 320, yyextra->EXT_texture_buffer_
|
|||||||
|
|
||||||
/* Additional reserved words in GLSL ES 3.00 */
|
/* Additional reserved words in GLSL ES 3.00 */
|
||||||
resource KEYWORD(0, 300, 0, 0, RESOURCE);
|
resource KEYWORD(0, 300, 0, 0, RESOURCE);
|
||||||
sample KEYWORD_WITH_ALT(400, 300, 400, 0, yyextra->ARB_gpu_shader5_enable, SAMPLE);
|
sample KEYWORD_WITH_ALT(400, 300, 400, 320, yyextra->ARB_gpu_shader5_enable || yyextra->OES_shader_multisample_interpolation_enable, SAMPLE);
|
||||||
subroutine KEYWORD_WITH_ALT(400, 300, 400, 0, yyextra->ARB_shader_subroutine_enable, SUBROUTINE);
|
subroutine KEYWORD_WITH_ALT(400, 300, 400, 0, yyextra->ARB_shader_subroutine_enable, SUBROUTINE);
|
||||||
|
|
||||||
|
|
||||||
|
@@ -617,6 +617,7 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = {
|
|||||||
EXT(OES_gpu_shader5, false, true, ARB_gpu_shader5),
|
EXT(OES_gpu_shader5, false, true, ARB_gpu_shader5),
|
||||||
EXT(OES_sample_variables, false, true, OES_sample_variables),
|
EXT(OES_sample_variables, false, true, OES_sample_variables),
|
||||||
EXT(OES_shader_image_atomic, false, true, ARB_shader_image_load_store),
|
EXT(OES_shader_image_atomic, false, true, ARB_shader_image_load_store),
|
||||||
|
EXT(OES_shader_multisample_interpolation, false, true, OES_sample_variables),
|
||||||
EXT(OES_standard_derivatives, false, true, OES_standard_derivatives),
|
EXT(OES_standard_derivatives, false, true, OES_standard_derivatives),
|
||||||
EXT(OES_texture_3D, false, true, dummy_true),
|
EXT(OES_texture_3D, false, true, dummy_true),
|
||||||
EXT(OES_texture_buffer, false, true, OES_texture_buffer),
|
EXT(OES_texture_buffer, false, true, OES_texture_buffer),
|
||||||
|
@@ -608,6 +608,8 @@ struct _mesa_glsl_parse_state {
|
|||||||
bool OES_sample_variables_warn;
|
bool OES_sample_variables_warn;
|
||||||
bool OES_shader_image_atomic_enable;
|
bool OES_shader_image_atomic_enable;
|
||||||
bool OES_shader_image_atomic_warn;
|
bool OES_shader_image_atomic_warn;
|
||||||
|
bool OES_shader_multisample_interpolation_enable;
|
||||||
|
bool OES_shader_multisample_interpolation_warn;
|
||||||
bool OES_standard_derivatives_enable;
|
bool OES_standard_derivatives_enable;
|
||||||
bool OES_standard_derivatives_warn;
|
bool OES_standard_derivatives_warn;
|
||||||
bool OES_texture_3D_enable;
|
bool OES_texture_3D_enable;
|
||||||
|
@@ -333,6 +333,7 @@ EXT(OES_rgb8_rgba8 , dummy_true
|
|||||||
EXT(OES_sample_shading , OES_sample_variables , x , x , x , 30, 2014)
|
EXT(OES_sample_shading , OES_sample_variables , x , x , x , 30, 2014)
|
||||||
EXT(OES_sample_variables , OES_sample_variables , x , x , x , 30, 2014)
|
EXT(OES_sample_variables , OES_sample_variables , x , x , x , 30, 2014)
|
||||||
EXT(OES_shader_image_atomic , ARB_shader_image_load_store , x , x , x , 31, 2015)
|
EXT(OES_shader_image_atomic , ARB_shader_image_load_store , x , x , x , 31, 2015)
|
||||||
|
EXT(OES_shader_multisample_interpolation , OES_sample_variables , x , x , x , 30, 2014)
|
||||||
EXT(OES_single_precision , dummy_true , x , x , ES1, x , 2003)
|
EXT(OES_single_precision , dummy_true , x , x , ES1, x , 2003)
|
||||||
EXT(OES_standard_derivatives , OES_standard_derivatives , x , x , x , ES2, 2005)
|
EXT(OES_standard_derivatives , OES_standard_derivatives , x , x , x , ES2, 2005)
|
||||||
EXT(OES_stencil1 , dummy_false , x , x , x , x , 2005)
|
EXT(OES_stencil1 , dummy_false , x , x , x , x , 2005)
|
||||||
|
@@ -408,6 +408,11 @@ static const int extra_ARB_gpu_shader5_or_oes_geometry_shader[] = {
|
|||||||
EXTRA_END
|
EXTRA_END
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const int extra_ARB_gpu_shader5_or_OES_sample_variables[] = {
|
||||||
|
EXT(ARB_gpu_shader5),
|
||||||
|
EXT(OES_sample_variables),
|
||||||
|
};
|
||||||
|
|
||||||
EXTRA_EXT(ARB_texture_cube_map);
|
EXTRA_EXT(ARB_texture_cube_map);
|
||||||
EXTRA_EXT(EXT_texture_array);
|
EXTRA_EXT(EXT_texture_array);
|
||||||
EXTRA_EXT(NV_fog_distance);
|
EXTRA_EXT(NV_fog_distance);
|
||||||
|
@@ -503,6 +503,14 @@ descriptor=[
|
|||||||
[ "MAX_COMBINED_SHADER_OUTPUT_RESOURCES", "CONTEXT_INT(Const.MaxCombinedShaderOutputResources), extra_ARB_shader_image_load_store_shader_storage_buffer_object_es31" ],
|
[ "MAX_COMBINED_SHADER_OUTPUT_RESOURCES", "CONTEXT_INT(Const.MaxCombinedShaderOutputResources), extra_ARB_shader_image_load_store_shader_storage_buffer_object_es31" ],
|
||||||
]},
|
]},
|
||||||
|
|
||||||
|
# Enums in OpenGL Core profile and ES 3.0
|
||||||
|
{ "apis": ["GL_CORE", "GLES3"], "params": [
|
||||||
|
# GL_ARB_gpu_shader5 / GL_OES_shader_multisample_interpolation
|
||||||
|
[ "MIN_FRAGMENT_INTERPOLATION_OFFSET", "CONTEXT_FLOAT(Const.MinFragmentInterpolationOffset), extra_ARB_gpu_shader5_or_OES_sample_variables" ],
|
||||||
|
[ "MAX_FRAGMENT_INTERPOLATION_OFFSET", "CONTEXT_FLOAT(Const.MaxFragmentInterpolationOffset), extra_ARB_gpu_shader5_or_OES_sample_variables" ],
|
||||||
|
[ "FRAGMENT_INTERPOLATION_OFFSET_BITS", "CONST(FRAGMENT_INTERPOLATION_OFFSET_BITS), extra_ARB_gpu_shader5_or_OES_sample_variables" ],
|
||||||
|
]},
|
||||||
|
|
||||||
# Enums in OpenGL Core profile and ES 3.1
|
# Enums in OpenGL Core profile and ES 3.1
|
||||||
{ "apis": ["GL_CORE", "GLES31"], "params": [
|
{ "apis": ["GL_CORE", "GLES31"], "params": [
|
||||||
# GL_ARB_draw_indirect / GLES 3.1
|
# GL_ARB_draw_indirect / GLES 3.1
|
||||||
@@ -882,9 +890,6 @@ descriptor=[
|
|||||||
|
|
||||||
# GL_ARB_gpu_shader5
|
# GL_ARB_gpu_shader5
|
||||||
[ "MAX_GEOMETRY_SHADER_INVOCATIONS", "CONST(MAX_GEOMETRY_SHADER_INVOCATIONS), extra_ARB_gpu_shader5" ],
|
[ "MAX_GEOMETRY_SHADER_INVOCATIONS", "CONST(MAX_GEOMETRY_SHADER_INVOCATIONS), extra_ARB_gpu_shader5" ],
|
||||||
[ "MIN_FRAGMENT_INTERPOLATION_OFFSET", "CONTEXT_FLOAT(Const.MinFragmentInterpolationOffset), extra_ARB_gpu_shader5" ],
|
|
||||||
[ "MAX_FRAGMENT_INTERPOLATION_OFFSET", "CONTEXT_FLOAT(Const.MaxFragmentInterpolationOffset), extra_ARB_gpu_shader5" ],
|
|
||||||
[ "FRAGMENT_INTERPOLATION_OFFSET_BITS", "CONST(FRAGMENT_INTERPOLATION_OFFSET_BITS), extra_ARB_gpu_shader5" ],
|
|
||||||
|
|
||||||
# GL_ARB_tessellation_shader
|
# GL_ARB_tessellation_shader
|
||||||
[ "PATCH_VERTICES", "CONTEXT_INT(TessCtrlProgram.patch_vertices), extra_ARB_tessellation_shader" ],
|
[ "PATCH_VERTICES", "CONTEXT_INT(TessCtrlProgram.patch_vertices), extra_ARB_tessellation_shader" ],
|
||||||
|
Reference in New Issue
Block a user