Commit 18c2e09d authored by Kenneth Graunke's avatar Kenneth Graunke

gallium: Implement GL_EXT_shader_samples_identical via a new capability

This exposes the textureSamplesIdenticalEXT function in GLSL.

We enable it for iris and radeonsi, because their compilers already
have support for this.  Tested on Intel Kabylake and AMD Vega 64.
Reviewed-by: default avatarMarek Olšák <marek.olsak@amd.com>
parent adcc0a8f
Pipeline #53001 passed with stages
in 11 minutes and 30 seconds
......@@ -40,6 +40,7 @@ TBD.
<ul>
<li>GL_ARB_post_depth_coverage on radeonsi (Navi)</li>
<li>GL_EXT_shader_samples_identical on iris and radeonsi (if using NIR)</li>
<li>EGL_EXT_platform_device</li>
<li>VK_EXT_queue_family_foreign for radv</li>
<li>VK_EXT_shader_demote_to_helper_invocation on Intel.</li>
......
......@@ -335,6 +335,7 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
case PIPE_CAP_FRAGMENT_SHADER_INTERLOCK:
case PIPE_CAP_CS_DERIVED_SYSTEM_VALUES_SUPPORTED:
case PIPE_CAP_ATOMIC_FLOAT_MINMAX:
case PIPE_CAP_SHADER_SAMPLES_IDENTICAL:
return 0;
case PIPE_CAP_MAX_GS_INVOCATIONS:
......
......@@ -546,6 +546,7 @@ The integer capabilities:
modifiers in the vertex shader.
* ``PIPE_CAP_TEXTURE_SHADOW_LOD``: True if the driver supports shadow sampler
types with texture functions having interaction with LOD of texture lookup.
* ``PIPE_CAP_SHADER_SAMPLES_IDENTICAL``: True if the driver supports a shader query to tell whether all samples of a multisampled surface are definitely identical.
.. _pipe_capf:
......
......@@ -198,6 +198,7 @@ iris_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_SURFACE_REINTERPRET_BLOCKS:
case PIPE_CAP_CS_DERIVED_SYSTEM_VALUES_SUPPORTED:
case PIPE_CAP_TEXTURE_SHADOW_LOD:
case PIPE_CAP_SHADER_SAMPLES_IDENTICAL:
return true;
case PIPE_CAP_FBFETCH:
/* TODO: Support non-coherent FB fetch on Broadwell */
......
......@@ -214,6 +214,7 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
RADEON_SPARSE_PAGE_SIZE : 0;
case PIPE_CAP_PACKED_UNIFORMS:
case PIPE_CAP_SHADER_SAMPLES_IDENTICAL:
if (sscreen->options.enable_nir)
return 1;
return 0;
......
......@@ -895,6 +895,7 @@ enum pipe_cap
PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES,
PIPE_CAP_VERTEX_SHADER_SATURATE,
PIPE_CAP_TEXTURE_SHADOW_LOD,
PIPE_CAP_SHADER_SAMPLES_IDENTICAL,
};
/**
......
......@@ -752,6 +752,7 @@ void st_init_extensions(struct pipe_screen *screen,
{ o(EXT_multisampled_render_to_texture), PIPE_CAP_SURFACE_SAMPLE_COUNT },
{ o(EXT_semaphore), PIPE_CAP_FENCE_SIGNAL },
{ o(EXT_semaphore_fd), PIPE_CAP_FENCE_SIGNAL },
{ o(EXT_shader_samples_identical), PIPE_CAP_SHADER_SAMPLES_IDENTICAL },
{ o(EXT_texture_array), PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS },
{ o(EXT_texture_filter_anisotropic), PIPE_CAP_ANISOTROPIC_FILTER },
{ o(EXT_texture_mirror_clamp), PIPE_CAP_TEXTURE_MIRROR_CLAMP },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment