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);