mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 13:38:06 +02:00
mesa/st: introduce PIPE_CAP_NO_CLIP_ON_COPY_TEX
If supported this means that src_x/src_y/width/height parameters of
CopyTex functions will not be clipped using the read framebuffer's dimensions.
Cc: mesa-stable
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6259>
(cherry picked from commit d94bec5c49)
This commit is contained in:
parent
321f645126
commit
73c77885de
7 changed files with 20 additions and 3 deletions
|
|
@ -49,7 +49,7 @@
|
|||
"description": "mesa/st: introduce PIPE_CAP_NO_CLIP_ON_COPY_TEX",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": null
|
||||
},
|
||||
|
|
|
|||
|
|
@ -433,6 +433,9 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
|
|||
case PIPE_CAP_ALPHA_TO_COVERAGE_DITHER_CONTROL:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_NO_CLIP_ON_COPY_TEX:
|
||||
return 0;
|
||||
|
||||
default:
|
||||
unreachable("bad PIPE_CAP_*");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -581,6 +581,7 @@ The integer capabilities:
|
|||
* ``PIPE_CAP_SYSTEM_SVM``: True if all application memory can be shared with the GPU without explicit mapping.
|
||||
* ``PIPE_CAP_VIEWPORT_MASK``: Whether ``TGSI_SEMANTIC_VIEWPORT_MASK`` and ``TGSI_PROPERTY_LAYER_VIEWPORT_RELATIVE`` are supported (see GL_NV_viewport_array2).
|
||||
* ``PIPE_CAP_MAP_UNSYNCHRONIZED_THREAD_SAFE``: Whether mapping a buffer as unsynchronized from any thread is safe.
|
||||
* ``PIPE_CAP_NO_CLIP_ON_COPY_TEX``: Driver doesn't want x/y/width/height clipped based on src size when doing a copy texture operation (eg: may want out-of-bounds reads that produce 0 instead of leaving the texture content undefined)
|
||||
|
||||
.. _pipe_capf:
|
||||
|
||||
|
|
|
|||
|
|
@ -947,6 +947,7 @@ enum pipe_cap
|
|||
PIPE_CAP_VIEWPORT_MASK,
|
||||
PIPE_CAP_ALPHA_TO_COVERAGE_DITHER_CONTROL,
|
||||
PIPE_CAP_MAP_UNSYNCHRONIZED_THREAD_SAFE,
|
||||
PIPE_CAP_NO_CLIP_ON_COPY_TEX,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -4175,6 +4175,12 @@ struct gl_constants
|
|||
|
||||
/** Buffer size used to upload vertices from glBegin/glEnd. */
|
||||
unsigned glBeginEndBufferSize;
|
||||
|
||||
/** Whether the driver doesn't want x/y/width/height clipped based on src size
|
||||
* when doing a copy texture operation (eg: may want out-of-bounds reads that
|
||||
* produce 0 instead of leaving the texture content undefined).
|
||||
*/
|
||||
bool NoClippingOnCopyTex;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -4210,7 +4210,8 @@ copy_texture_sub_image(struct gl_context *ctx, GLuint dims,
|
|||
xoffset += texImage->Border;
|
||||
}
|
||||
|
||||
if (_mesa_clip_copytexsubimage(ctx, &xoffset, &yoffset, &x, &y,
|
||||
if (ctx->Const.NoClippingOnCopyTex ||
|
||||
_mesa_clip_copytexsubimage(ctx, &xoffset, &yoffset, &x, &y,
|
||||
&width, &height)) {
|
||||
struct gl_renderbuffer *srcRb =
|
||||
get_copy_tex_image_source(ctx, texImage->TexFormat);
|
||||
|
|
@ -4416,7 +4417,8 @@ copyteximage(struct gl_context *ctx, GLuint dims, struct gl_texture_object *texO
|
|||
/* Allocate texture memory (no pixel data yet) */
|
||||
ctx->Driver.AllocTextureImageBuffer(ctx, texImage);
|
||||
|
||||
if (_mesa_clip_copytexsubimage(ctx, &dstX, &dstY, &srcX, &srcY,
|
||||
if (ctx->Const.NoClippingOnCopyTex ||
|
||||
_mesa_clip_copytexsubimage(ctx, &dstX, &dstY, &srcX, &srcY,
|
||||
&width, &height)) {
|
||||
struct gl_renderbuffer *srcRb =
|
||||
get_copy_tex_image_source(ctx, texImage->TexFormat);
|
||||
|
|
|
|||
|
|
@ -765,6 +765,10 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
|
|||
*/
|
||||
ctx->Point.MaxSize = MAX2(ctx->Const.MaxPointSize,
|
||||
ctx->Const.MaxPointSizeAA);
|
||||
|
||||
ctx->Const.NoClippingOnCopyTex = screen->get_param(screen,
|
||||
PIPE_CAP_NO_CLIP_ON_COPY_TEX);
|
||||
|
||||
/* For vertex shaders, make sure not to emit saturate when SM 3.0
|
||||
* is not supported
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue