summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2019-07-31 15:47:34 -0700
committerKenneth Graunke <[email protected]>2019-08-01 23:38:54 -0700
commit18c2e09dc747bb4290e9c37bab1f8e039c6c8c7e (patch)
tree26374261df28a6cded67e474286f381f366c6360
parentadcc0a8fdcd5307f882339ed933573ef9825eb69 (diff)
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: Marek Olšák <[email protected]>
-rw-r--r--docs/relnotes/19.2.0.html1
-rw-r--r--src/gallium/auxiliary/util/u_screen.c1
-rw-r--r--src/gallium/docs/source/screen.rst1
-rw-r--r--src/gallium/drivers/iris/iris_screen.c1
-rw-r--r--src/gallium/drivers/radeonsi/si_get.c1
-rw-r--r--src/gallium/include/pipe/p_defines.h1
-rw-r--r--src/mesa/state_tracker/st_extensions.c1
7 files changed, 7 insertions, 0 deletions
diff --git a/docs/relnotes/19.2.0.html b/docs/relnotes/19.2.0.html
index 20eb8d3d04f..2d1c39a81af 100644
--- a/docs/relnotes/19.2.0.html
+++ b/docs/relnotes/19.2.0.html
@@ -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>
diff --git a/src/gallium/auxiliary/util/u_screen.c b/src/gallium/auxiliary/util/u_screen.c
index fec4a10c539..270d13a5056 100644
--- a/src/gallium/auxiliary/util/u_screen.c
+++ b/src/gallium/auxiliary/util/u_screen.c
@@ -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:
diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst
index 065eb8fd2f1..3a1bb3e02ec 100644
--- a/src/gallium/docs/source/screen.rst
+++ b/src/gallium/docs/source/screen.rst
@@ -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:
diff --git a/src/gallium/drivers/iris/iris_screen.c b/src/gallium/drivers/iris/iris_screen.c
index 9aea9e963c2..09232896701 100644
--- a/src/gallium/drivers/iris/iris_screen.c
+++ b/src/gallium/drivers/iris/iris_screen.c
@@ -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 */
diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c
index 85807db0e1c..15777392555 100644
--- a/src/gallium/drivers/radeonsi/si_get.c
+++ b/src/gallium/drivers/radeonsi/si_get.c
@@ -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;
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index c706f9819f8..9662cf63b82 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -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,
};
/**
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 72a6d843ae9..c146c8d9902 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -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 },