[PATCH 3/6] wined3d: Implement copying for 1D textures.
Józef Kucia
jkucia at codeweavers.com
Fri Apr 27 07:52:45 CDT 2018
1D textures are handled by raw and CPU blitter.
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
dlls/wined3d/arb_program_shader.c | 3 +++
dlls/wined3d/cs.c | 12 ++++--------
dlls/wined3d/glsl_shader.c | 3 +++
dlls/wined3d/surface.c | 12 ++++++++++++
4 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index 7d3f547405a8..79883982652a 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -7701,6 +7701,9 @@ static BOOL arbfp_blit_supported(enum wined3d_blit_op blit_op, const struct wine
if (!context->gl_info->supported[ARB_FRAGMENT_PROGRAM])
return FALSE;
+ if (src_resource->type != WINED3D_RTYPE_TEXTURE_2D)
+ return FALSE;
+
if (blit_op == WINED3D_BLIT_OP_RAW_BLIT && dst_format->id == src_format->id)
{
if (dst_format->flags[WINED3D_GL_RES_TYPE_TEX_2D] & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL))
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index dc07f52723de..71de726a7af5 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -2077,13 +2077,6 @@ static void wined3d_cs_exec_blt_sub_resource(struct wined3d_cs *cs, const void *
buffer_from_resource(op->src_resource), op->src_box.left,
op->src_box.right - op->src_box.left);
}
- else if (op->dst_resource->type == WINED3D_RTYPE_TEXTURE_2D)
- {
- if (FAILED(texture2d_blt(texture_from_resource(op->dst_resource), op->dst_sub_resource_idx,
- &op->dst_box, texture_from_resource(op->src_resource), op->src_sub_resource_idx,
- &op->src_box, op->flags, &op->fx, op->filter)))
- FIXME("Blit failed.\n");
- }
else if (op->dst_resource->type == WINED3D_RTYPE_TEXTURE_3D)
{
struct wined3d_texture *src_texture, *dst_texture;
@@ -2162,7 +2155,10 @@ static void wined3d_cs_exec_blt_sub_resource(struct wined3d_cs *cs, const void *
}
else
{
- FIXME("Not implemented for %s resources.\n", debug_d3dresourcetype(op->dst_resource->type));
+ if (FAILED(texture2d_blt(texture_from_resource(op->dst_resource), op->dst_sub_resource_idx,
+ &op->dst_box, texture_from_resource(op->src_resource), op->src_sub_resource_idx,
+ &op->src_box, op->flags, &op->fx, op->filter)))
+ FIXME("Blit failed.\n");
}
error:
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 5d1f11865865..2af9b9774db8 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -12481,6 +12481,9 @@ static BOOL glsl_blitter_supported(enum wined3d_blit_op blit_op, const struct wi
return FALSE;
}
+ if (src_resource->type != WINED3D_RTYPE_TEXTURE_2D)
+ return FALSE;
+
if (src_texture->target == GL_TEXTURE_2D_MULTISAMPLE
|| dst_texture->target == GL_TEXTURE_2D_MULTISAMPLE
|| src_texture->target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 7a13b5883be1..bfee4d368a6d 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -305,6 +305,9 @@ static BOOL fbo_blitter_supported(enum wined3d_blit_op blit_op, const struct win
if (!(src_resource->access & dst_resource->access & WINED3D_RESOURCE_ACCESS_GPU))
return FALSE;
+ if (src_resource->type != WINED3D_RTYPE_TEXTURE_2D)
+ return FALSE;
+
switch (blit_op)
{
case WINED3D_BLIT_OP_COLOR_BLIT:
@@ -1509,6 +1512,12 @@ static HRESULT wined3d_texture_blt_special(struct wined3d_texture *dst_texture,
dst_texture, dst_sub_resource_idx, wine_dbgstr_rect(dst_rect), src_texture, src_sub_resource_idx,
wine_dbgstr_rect(src_rect), flags, fx, debug_d3dtexturefiltertype(filter));
+ if (dst_texture->resource.type != WINED3D_RTYPE_TEXTURE_2D)
+ {
+ FIXME("Not implemented for %s resources.\n", debug_d3dresourcetype(dst_texture->resource.type));
+ return WINED3DERR_INVALIDCALL;
+ }
+
/* Get the swapchain. One of the surfaces has to be a primary surface. */
if (!(dst_texture->resource.access & WINED3D_RESOURCE_ACCESS_GPU))
{
@@ -2171,6 +2180,9 @@ static BOOL ffp_blit_supported(enum wined3d_blit_op blit_op, const struct wined3
const struct wined3d_format *dst_format = dst_resource->format;
BOOL decompress;
+ if (src_resource->type != WINED3D_RTYPE_TEXTURE_2D)
+ return FALSE;
+
decompress = src_format && (src_format->flags[WINED3D_GL_RES_TYPE_TEX_2D] & WINED3DFMT_FLAG_COMPRESSED)
&& !(dst_format->flags[WINED3D_GL_RES_TYPE_TEX_2D] & WINED3DFMT_FLAG_COMPRESSED);
if (!decompress && !(src_resource->access & dst_resource->access & WINED3D_RESOURCE_ACCESS_GPU))
--
2.16.1
More information about the wine-devel
mailing list