Mesa (main): gallium: rename PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Nov 18 13:35:18 UTC 2021
Module: Mesa
Branch: main
Commit: c9a47c85da9538ae82445f9754192d84afc7006d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c9a47c85da9538ae82445f9754192d84afc7006d
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Mon Nov 8 12:33:57 2021 -0500
gallium: rename PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER
this is now a bitfield enum for more functionality
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Acked-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11984>
---
docs/gallium/screen.rst | 7 ++++---
src/gallium/auxiliary/util/u_screen.c | 4 ++--
src/gallium/drivers/asahi/agx_pipe.c | 2 +-
src/gallium/drivers/crocus/crocus_screen.c | 4 ++--
src/gallium/drivers/d3d12/d3d12_screen.cpp | 2 +-
src/gallium/drivers/etnaviv/etnaviv_screen.c | 2 +-
src/gallium/drivers/freedreno/freedreno_screen.c | 2 +-
src/gallium/drivers/i915/i915_screen.c | 2 +-
src/gallium/drivers/iris/iris_resource.c | 2 +-
src/gallium/drivers/iris/iris_screen.c | 4 ++--
src/gallium/drivers/lima/lima_screen.c | 2 +-
src/gallium/drivers/llvmpipe/lp_screen.c | 2 +-
src/gallium/drivers/nouveau/nv30/nv30_screen.c | 3 ++-
src/gallium/drivers/nouveau/nv50/nv50_screen.c | 3 ++-
src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 4 ++--
src/gallium/drivers/panfrost/pan_screen.c | 2 +-
src/gallium/drivers/r300/r300_screen.c | 4 +++-
src/gallium/drivers/r600/r600_pipe.c | 4 +++-
src/gallium/drivers/radeonsi/si_get.c | 4 +++-
src/gallium/drivers/softpipe/sp_screen.c | 2 +-
src/gallium/drivers/svga/svga_screen.c | 2 +-
src/gallium/drivers/swr/swr_screen.cpp | 2 +-
src/gallium/drivers/v3d/v3d_screen.c | 4 ++--
src/gallium/drivers/virgl/virgl_screen.c | 2 +-
src/gallium/drivers/zink/zink_screen.c | 4 ++--
src/gallium/include/pipe/p_defines.h | 7 ++++++-
src/mesa/state_tracker/st_context.c | 6 ++++--
27 files changed, 52 insertions(+), 36 deletions(-)
diff --git a/docs/gallium/screen.rst b/docs/gallium/screen.rst
index ab9087f68eb..c07068f76fe 100644
--- a/docs/gallium/screen.rst
+++ b/docs/gallium/screen.rst
@@ -177,10 +177,11 @@ The integer capabilities:
* ``PIPE_CAP_TEXTURE_BUFFER_SAMPLER``: Whether a sampler should still
be used for PIPE_BUFFER resources (normally a sampler is only used
if the texture target is PIPE_TEXTURE_*).
-* ``PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER``: Whether it is preferable
- to use a blit to implement a texture transfer which needs format conversions
+* ``PIPE_CAP_TEXTURE_TRANSFER_MODES``: The ``pipe_texture_transfer_mode`` modes
+ that are supported for implementing a texture transfer which needs format conversions
and swizzling in gallium frontends. Generally, all hardware drivers with
- dedicated memory should return 1 and all software rasterizers should return 0.
+ dedicated memory should return PIPE_TEXTURE_TRANSFER_BLIT and all software rasterizers
+ should return PIPE_TEXTURE_TRANSFER_DEFAULT.
* ``PIPE_CAP_QUERY_PIPELINE_STATISTICS``: Whether PIPE_QUERY_PIPELINE_STATISTICS
is supported.
* ``PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK``: Bitmask indicating whether special
diff --git a/src/gallium/auxiliary/util/u_screen.c b/src/gallium/auxiliary/util/u_screen.c
index 399c8c7c815..32b6bea7148 100644
--- a/src/gallium/auxiliary/util/u_screen.c
+++ b/src/gallium/auxiliary/util/u_screen.c
@@ -160,8 +160,8 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
case PIPE_CAP_TEXTURE_BUFFER_SAMPLER:
return 0;
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
- return 1;
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
+ return PIPE_TEXTURE_TRANSFER_BLIT;
case PIPE_CAP_QUERY_PIPELINE_STATISTICS:
case PIPE_CAP_QUERY_PIPELINE_STATISTICS_SINGLE:
diff --git a/src/gallium/drivers/asahi/agx_pipe.c b/src/gallium/drivers/asahi/agx_pipe.c
index 171acd03e43..cc8f86603ed 100644
--- a/src/gallium/drivers/asahi/agx_pipe.c
+++ b/src/gallium/drivers/asahi/agx_pipe.c
@@ -821,7 +821,7 @@ agx_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
case PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET:
return 0xffff;
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
return 0;
case PIPE_CAP_ENDIANNESS:
diff --git a/src/gallium/drivers/crocus/crocus_screen.c b/src/gallium/drivers/crocus/crocus_screen.c
index a92db345333..e766603354b 100644
--- a/src/gallium/drivers/crocus/crocus_screen.c
+++ b/src/gallium/drivers/crocus/crocus_screen.c
@@ -305,8 +305,8 @@ crocus_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
return devinfo->ver >= 7 ? (1 << 27) : 0;
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
return 16; // XXX: u_screen says 256 is the minimum value...
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
- return true;
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
+ return PIPE_TEXTURE_TRANSFER_BLIT;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
return CROCUS_MAX_TEXTURE_BUFFER_SIZE;
case PIPE_CAP_MAX_VIEWPORTS:
diff --git a/src/gallium/drivers/d3d12/d3d12_screen.cpp b/src/gallium/drivers/d3d12/d3d12_screen.cpp
index 21bdb0dd1a6..0d40569dbe4 100644
--- a/src/gallium/drivers/d3d12/d3d12_screen.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_screen.cpp
@@ -220,7 +220,7 @@ d3d12_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_TEXTURE_BUFFER_OBJECTS:
return 1;
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
return 0; /* unsure */
case PIPE_CAP_ENDIANNESS:
diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c b/src/gallium/drivers/etnaviv/etnaviv_screen.c
index 67610389aab..6def7cacd69 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_screen.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c
@@ -237,7 +237,7 @@ etna_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
return VIV_FEATURE(screen, chipMinorFeatures1, HALTI0);
/* Preferences */
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
return 0;
case PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET: {
/* etnaviv is being run on systems as small as 256MB total RAM so
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
index e2b963b8fe1..7141db9138a 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.c
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c
@@ -232,7 +232,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_COMPUTE:
return has_compute(screen);
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
case PIPE_CAP_PCI_GROUP:
case PIPE_CAP_PCI_BUS:
case PIPE_CAP_PCI_DEVICE:
diff --git a/src/gallium/drivers/i915/i915_screen.c b/src/gallium/drivers/i915/i915_screen.c
index 50a9a803129..d65d03d4231 100644
--- a/src/gallium/drivers/i915/i915_screen.c
+++ b/src/gallium/drivers/i915/i915_screen.c
@@ -399,7 +399,7 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
case PIPE_CAP_TGSI_TEXCOORD:
return 1;
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
case PIPE_CAP_PCI_GROUP:
case PIPE_CAP_PCI_BUS:
case PIPE_CAP_PCI_DEVICE:
diff --git a/src/gallium/drivers/iris/iris_resource.c b/src/gallium/drivers/iris/iris_resource.c
index 588bba900f3..3b5e95bfab7 100644
--- a/src/gallium/drivers/iris/iris_resource.c
+++ b/src/gallium/drivers/iris/iris_resource.c
@@ -2406,7 +2406,7 @@ iris_transfer_unmap(struct pipe_context *ctx, struct pipe_transfer *xfer)
* The pipe->texture_subdata() driver hook.
*
* Mesa's state tracker takes this path whenever possible, even with
- * PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER set.
+ * PIPE_CAP_TEXTURE_TRANSFER_MODES set.
*/
static void
iris_texture_subdata(struct pipe_context *ctx,
diff --git a/src/gallium/drivers/iris/iris_screen.c b/src/gallium/drivers/iris/iris_screen.c
index 167875c180d..7bd3a08f1fc 100644
--- a/src/gallium/drivers/iris/iris_screen.c
+++ b/src/gallium/drivers/iris/iris_screen.c
@@ -303,8 +303,8 @@ iris_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
return 1 << 27;
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
return 16; // XXX: u_screen says 256 is the minimum value...
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
- return true;
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
+ return PIPE_TEXTURE_TRANSFER_BLIT;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
return IRIS_MAX_TEXTURE_BUFFER_SIZE;
case PIPE_CAP_MAX_VIEWPORTS:
diff --git a/src/gallium/drivers/lima/lima_screen.c b/src/gallium/drivers/lima/lima_screen.c
index 9b78345d362..d86d37c1b11 100644
--- a/src/gallium/drivers/lima/lima_screen.c
+++ b/src/gallium/drivers/lima/lima_screen.c
@@ -146,7 +146,7 @@ lima_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_PCI_FUNCTION:
return 0;
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
case PIPE_CAP_SHAREABLE_SHADERS:
return 0;
diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c
index 1604e22f14d..22e687bb833 100644
--- a/src/gallium/drivers/llvmpipe/lp_screen.c
+++ b/src/gallium/drivers/llvmpipe/lp_screen.c
@@ -235,7 +235,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
return 134217728;
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
return 16;
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
return 0;
case PIPE_CAP_MAX_VIEWPORTS:
return PIPE_MAX_VIEWPORTS;
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
index 9ae58039118..88df41c3204 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
@@ -99,9 +99,10 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
case PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION:
return 1;
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
+ return PIPE_TEXTURE_TRANSFER_BLIT;
/* nv35 capabilities */
case PIPE_CAP_DEPTH_BOUNDS_TEST:
return eng3d->oclass == NV35_3D_CLASS || eng3d->oclass >= NV40_3D_CLASS;
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
index 6f53aa9de53..d7999285458 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
@@ -229,7 +229,6 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_START_INSTANCE:
case PIPE_CAP_USER_VERTEX_BUFFERS:
case PIPE_CAP_TEXTURE_MULTISAMPLE:
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE:
case PIPE_CAP_SAMPLER_VIEW_TARGET:
case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
@@ -265,6 +264,8 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT:
case PIPE_CAP_COMPUTE:
return 1;
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
+ return PIPE_TEXTURE_TRANSFER_BLIT;
case PIPE_CAP_SEAMLESS_CUBE_MAP:
return 1; /* class_3d >= NVA0_3D_CLASS; */
/* supported on nva0+ */
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
index d7cc7437113..9fab126bf08 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
@@ -313,8 +313,8 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_CLEAR_SCISSORED:
case PIPE_CAP_GL_CLAMP:
return 1;
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
- return nouveau_screen(pscreen)->vram_domain & NOUVEAU_BO_VRAM ? 1 : 0;
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
+ return nouveau_screen(pscreen)->vram_domain & NOUVEAU_BO_VRAM ? PIPE_TEXTURE_TRANSFER_BLIT : 0;
case PIPE_CAP_FBFETCH:
return class_3d >= NVE4_3D_CLASS ? 1 : 0; /* needs testing on fermi */
case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
diff --git a/src/gallium/drivers/panfrost/pan_screen.c b/src/gallium/drivers/panfrost/pan_screen.c
index 33d024cdf18..4a391adc8c4 100644
--- a/src/gallium/drivers/panfrost/pan_screen.c
+++ b/src/gallium/drivers/panfrost/pan_screen.c
@@ -246,7 +246,7 @@ panfrost_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET:
return 0xffff;
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
return 0;
case PIPE_CAP_ENDIANNESS:
diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c
index 0021202a366..56353c47720 100644
--- a/src/gallium/drivers/r300/r300_screen.c
+++ b/src/gallium/drivers/r300/r300_screen.c
@@ -140,12 +140,14 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
case PIPE_CAP_CONDITIONAL_RENDER:
case PIPE_CAP_TEXTURE_BARRIER:
case PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS:
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
case PIPE_CAP_CLIP_HALFZ:
case PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION:
return 1;
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
+ return PIPE_TEXTURE_TRANSFER_BLIT;
+
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
return R300_BUFFER_ALIGNMENT;
diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c
index 0deb6981145..80034ebad81 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -295,7 +295,6 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
case PIPE_CAP_START_INSTANCE:
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
case PIPE_CAP_TEXTURE_BUFFER_OBJECTS:
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
case PIPE_CAP_QUERY_PIPELINE_STATISTICS:
case PIPE_CAP_TEXTURE_MULTISAMPLE:
case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
@@ -322,6 +321,9 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
case PIPE_CAP_NIR_ATOMICS_AS_DEREF:
return 1;
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
+ return PIPE_TEXTURE_TRANSFER_BLIT;
+
case PIPE_CAP_SHAREABLE_SHADERS:
return 0;
diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c
index a8986ee0bcd..18726d2cb5d 100644
--- a/src/gallium/drivers/radeonsi/si_get.c
+++ b/src/gallium/drivers/radeonsi/si_get.c
@@ -84,7 +84,6 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_MIXED_COLOR_DEPTH_BITS:
case PIPE_CAP_VERTEX_COLOR_CLAMPED:
case PIPE_CAP_FRAGMENT_COLOR_CLAMPED:
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
case PIPE_CAP_TGSI_INSTANCEID:
case PIPE_CAP_COMPUTE:
case PIPE_CAP_TEXTURE_BUFFER_OBJECTS:
@@ -164,6 +163,9 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_TGSI_ATOMINC_WRAP:
return 1;
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
+ return PIPE_TEXTURE_TRANSFER_BLIT;
+
case PIPE_CAP_DRAW_VERTEX_STATE:
return !(sscreen->debug_flags & DBG(NO_FAST_DISPLAY_LIST));
diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c
index af1d59fbe7e..122e54e0cf5 100644
--- a/src/gallium/drivers/softpipe/sp_screen.c
+++ b/src/gallium/drivers/softpipe/sp_screen.c
@@ -219,7 +219,7 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
return 65536;
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
return 16;
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
return 0;
case PIPE_CAP_MAX_VIEWPORTS:
return PIPE_MAX_VIEWPORTS;
diff --git a/src/gallium/drivers/svga/svga_screen.c b/src/gallium/drivers/svga/svga_screen.c
index c531be8c07f..76368fb927f 100644
--- a/src/gallium/drivers/svga/svga_screen.c
+++ b/src/gallium/drivers/svga/svga_screen.c
@@ -286,7 +286,7 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY:
return sws->have_sm5 ? 410 : (sws->have_vgpu10 ? 330 : 120);
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
return 0;
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
diff --git a/src/gallium/drivers/swr/swr_screen.cpp b/src/gallium/drivers/swr/swr_screen.cpp
index aabfc2dd072..c83584b53dd 100644
--- a/src/gallium/drivers/swr/swr_screen.cpp
+++ b/src/gallium/drivers/swr/swr_screen.cpp
@@ -306,7 +306,7 @@ swr_get_param(struct pipe_screen *screen, enum pipe_cap param)
return 1;
/* unsupported features */
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
case PIPE_CAP_PCI_GROUP:
case PIPE_CAP_PCI_BUS:
case PIPE_CAP_PCI_DEVICE:
diff --git a/src/gallium/drivers/v3d/v3d_screen.c b/src/gallium/drivers/v3d/v3d_screen.c
index d693fc55ea3..1c72dc4af0d 100644
--- a/src/gallium/drivers/v3d/v3d_screen.c
+++ b/src/gallium/drivers/v3d/v3d_screen.c
@@ -155,7 +155,7 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_NIR_IMAGES_AS_DEREF:
return 0;
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
/* XXX perf: we don't want to emit these extra blits for
* glReadPixels(), since we still have to do an uncached read
* from the GPU of the result after waiting for the TFU blit
@@ -164,7 +164,7 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
* dEQP-GLES31.functional.image_load_store.early_fragment_tests.*
* and corruption in chromium's rendering.
*/
- return 1;
+ return PIPE_TEXTURE_TRANSFER_BLIT;
case PIPE_CAP_COMPUTE:
return screen->has_csd && screen->devinfo.ver >= 41;
diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c
index 45458ab1a71..c24db95b315 100644
--- a/src/gallium/drivers/virgl/virgl_screen.c
+++ b/src/gallium/drivers/virgl/virgl_screen.c
@@ -192,7 +192,7 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
case PIPE_CAP_NIR_IMAGES_AS_DEREF:
return 0;
case PIPE_CAP_QUERY_TIMESTAMP:
diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c
index fa221ce98f4..79067b26f24 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -544,8 +544,8 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
return screen->info.props.limits.minTexelBufferOffsetAlignment;
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
- return 1;
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
+ return PIPE_TEXTURE_TRANSFER_BLIT;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
return MIN2(get_smallest_buffer_heap(screen),
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index 46220b00423..c56ed799df1 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -805,7 +805,7 @@ enum pipe_cap
PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY,
PIPE_CAP_TGSI_TEXCOORD,
PIPE_CAP_TEXTURE_BUFFER_SAMPLER,
- PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER,
+ PIPE_CAP_TEXTURE_TRANSFER_MODES,
PIPE_CAP_QUERY_PIPELINE_STATISTICS,
PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK,
PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE,
@@ -1004,6 +1004,11 @@ enum pipe_cap
/* XXX do not add caps after PIPE_CAP_LAST! */
};
+enum pipe_texture_transfer_mode {
+ PIPE_TEXTURE_TRANSFER_DEFAULT = 0,
+ PIPE_TEXTURE_TRANSFER_BLIT = (1 << 0),
+};
+
/**
* Possible bits for PIPE_CAP_CONTEXT_PRIORITY_MASK param, which should
* return a bitmask of the supported priorities. If the driver does not
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index 1452baa7413..b6fe8f83ab9 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -689,8 +689,10 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
st->has_astc_5x5_ldr =
screen->is_format_supported(screen, PIPE_FORMAT_ASTC_5x5_SRGB,
PIPE_TEXTURE_2D, 0, 0, PIPE_BIND_SAMPLER_VIEW);
- st->prefer_blit_based_texture_transfer = screen->get_param(screen,
- PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER);
+ {
+ enum pipe_texture_transfer_mode val = screen->get_param(screen, PIPE_CAP_TEXTURE_TRANSFER_MODES);
+ st->prefer_blit_based_texture_transfer = (val & PIPE_TEXTURE_TRANSFER_BLIT) == PIPE_TEXTURE_TRANSFER_BLIT;
+ }
st->force_persample_in_shader =
screen->get_param(screen, PIPE_CAP_SAMPLE_SHADING) &&
!screen->get_param(screen, PIPE_CAP_FORCE_PERSAMPLE_INTERP);
More information about the mesa-commit
mailing list