From: Ilia Mirkin Date: Mon, 20 Jul 2015 19:19:53 +0000 (-0400) Subject: st/mesa: add fake ARB_copy_image support in Gallium X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f33a7ab150ea01f3550904fe3c56fcad32ce85e0;p=mesa.git st/mesa: add fake ARB_copy_image support in Gallium This support should be removed in favor of something that actually works in all the weird cases. However this is simple and is enough to allow Bioshock Infinite to render properly on nvc0. Since the functionality is not implemented correctly, the extension will not appear in the extension string and mesa will still return INVALID_OPERATION for any glCopyImageSubData calls. In order to make use of this functionality, run with MESA_EXTENSION_OVERRIDE=GL_ARB_copy_image Signed-off-by: Ilia Mirkin Reviewed-by: Marek Olšák --- diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index 4f2ef6b0137..40bc29e9c99 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -1873,6 +1873,31 @@ st_TextureView(struct gl_context *ctx, return GL_TRUE; } +/* HACK: this is only enough for the most basic uses of CopyImage. Must fix + * before actually exposing the extension. + */ +static void +st_CopyImageSubData(struct gl_context *ctx, + struct gl_texture_image *src_image, + int src_x, int src_y, int src_z, + struct gl_texture_image *dst_image, + int dst_x, int dst_y, int dst_z, + int src_width, int src_height) +{ + struct st_context *st = st_context(ctx); + struct pipe_context *pipe = st->pipe; + struct st_texture_image *src = st_texture_image(src_image); + struct st_texture_image *dst = st_texture_image(dst_image); + + struct pipe_box box; + + u_box_2d_zslice(src_x, src_y, src_z, src_width, src_height, &box); + pipe->resource_copy_region(pipe, dst->pt, dst_image->Level, + dst_x, dst_y, dst_z, + src->pt, src_image->Level, + &box); +} + void st_init_texture_functions(struct dd_function_table *functions) @@ -1905,4 +1930,6 @@ st_init_texture_functions(struct dd_function_table *functions) functions->AllocTextureStorage = st_AllocTextureStorage; functions->TextureView = st_TextureView; + + functions->CopyImageSubData = st_CopyImageSubData; }