summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Faye-Lund <[email protected]>2019-07-05 15:46:38 +0200
committerErik Faye-Lund <[email protected]>2019-07-10 15:49:57 +0200
commit66ee6661e9968ea146d2ad0d606e1a35a17587dd (patch)
tree0d091fe7975b94afdfe2ab3f4ba0c229c1b8a403
parentffbd0046863add97bb4ef9250abd4d4dc1639e4b (diff)
gallium: give fragment-shader texture-lod its own cap
Shader Model 3.0 is a big promise to make to the state-tracker, and for instance mobile hardware might support texture lod but not some of the other features of SM3. So let's give this its own cap for simplicity. Signed-off-by: Erik Faye-Lund <[email protected]> Reviewed-by: Marek Olšák <[email protected]>
-rw-r--r--src/gallium/auxiliary/util/u_screen.c3
-rw-r--r--src/gallium/docs/source/screen.rst2
-rw-r--r--src/gallium/include/pipe/p_defines.h1
-rw-r--r--src/mesa/state_tracker/st_extensions.c2
4 files changed, 7 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/util/u_screen.c b/src/gallium/auxiliary/util/u_screen.c
index 3feb0b5f37c..5baf7d72fb1 100644
--- a/src/gallium/auxiliary/util/u_screen.c
+++ b/src/gallium/auxiliary/util/u_screen.c
@@ -370,6 +370,9 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
return 0;
#endif
+ case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
+ return pscreen->get_param(pscreen, PIPE_CAP_SM3);
+
default:
unreachable("bad PIPE_CAP_*");
}
diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst
index 596a17f32eb..59fa82b427f 100644
--- a/src/gallium/docs/source/screen.rst
+++ b/src/gallium/docs/source/screen.rst
@@ -534,6 +534,8 @@ The integer capabilities:
* ``PIPE_CAP_ATOMIC_FLOAT_MINMAX``: Atomic float point minimum,
maximum, exchange and compare-and-swap support to buffer and shared variables.
* ``PIPE_CAP_TGSI_DIV``: Whether opcode DIV is supported
+* ``PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD``: Whether texture lookups with
+ explicit LOD is supported in the fragment shader.
.. _pipe_capf:
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index 536f321edfd..8092fca4df1 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -888,6 +888,7 @@ enum pipe_cap
PIPE_CAP_CS_DERIVED_SYSTEM_VALUES_SUPPORTED,
PIPE_CAP_ATOMIC_FLOAT_MINMAX,
PIPE_CAP_TGSI_DIV,
+ PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD,
};
/**
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index f423136929f..3611cdcd5fd 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -725,7 +725,7 @@ void st_init_extensions(struct pipe_screen *screen,
{ o(EXT_shader_image_load_formatted), PIPE_CAP_IMAGE_LOAD_FORMATTED },
{ o(ARB_shader_stencil_export), PIPE_CAP_SHADER_STENCIL_EXPORT },
{ o(ARB_shader_texture_image_samples), PIPE_CAP_TGSI_TXQS },
- { o(ARB_shader_texture_lod), PIPE_CAP_SM3 },
+ { o(ARB_shader_texture_lod), PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD },
{ o(ARB_sparse_buffer), PIPE_CAP_SPARSE_BUFFER_PAGE_SIZE },
{ o(ARB_texture_buffer_object), PIPE_CAP_TEXTURE_BUFFER_OBJECTS },
{ o(ARB_texture_cube_map_array), PIPE_CAP_CUBE_MAP_ARRAY },