mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-11-21 16:46:54 -08:00
60 lines
2.6 KiB
Diff
60 lines
2.6 KiB
Diff
From 37d03dd2f32784e4729aabcd1cc5084c0292dc83 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
|
Date: Sat, 27 Aug 2016 22:44:14 +0200
|
|
Subject: [PATCH] wined3d: Implement converting between (s)rgb 1d textures.
|
|
|
|
---
|
|
dlls/wined3d/texture.c | 29 +++++++++++++++++++++++++++++
|
|
1 file changed, 29 insertions(+)
|
|
|
|
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
|
|
index 25219e9..6e537de 100644
|
|
--- a/dlls/wined3d/texture.c
|
|
+++ b/dlls/wined3d/texture.c
|
|
@@ -1840,6 +1840,27 @@ static void texture1d_download_data(struct wined3d_texture *texture, unsigned in
|
|
}
|
|
|
|
/* Context activation is done by the caller. */
|
|
+static void texture1d_srgb_transfer(struct wined3d_texture *texture, unsigned int sub_resource_idx,
|
|
+ struct wined3d_context *context, BOOL dest_is_srgb)
|
|
+{
|
|
+ struct wined3d_texture_sub_resource *sub_resource = &texture->sub_resources[sub_resource_idx];
|
|
+ unsigned int row_pitch, slice_pitch;
|
|
+ struct wined3d_bo_address data;
|
|
+
|
|
+ WARN_(d3d_perf)("Performing slow rgb/srgb 1d texture transfer.\n");
|
|
+ data.buffer_object = 0;
|
|
+ if (!(data.addr = HeapAlloc(GetProcessHeap(), 0, sub_resource->size)))
|
|
+ return;
|
|
+
|
|
+ wined3d_texture_get_pitch(texture, sub_resource_idx, &row_pitch, &slice_pitch);
|
|
+ wined3d_texture_bind_and_dirtify(texture, context, !dest_is_srgb);
|
|
+ texture1d_download_data(texture, sub_resource_idx, context, &data);
|
|
+ wined3d_texture_bind_and_dirtify(texture, context, dest_is_srgb);
|
|
+
|
|
+ HeapFree(GetProcessHeap(), 0, data.addr);
|
|
+}
|
|
+
|
|
+/* Context activation is done by the caller. */
|
|
static BOOL texture1d_load_location(struct wined3d_texture *texture, unsigned int sub_resource_idx,
|
|
struct wined3d_context *context, DWORD location)
|
|
{
|
|
@@ -1890,6 +1911,14 @@ static BOOL texture1d_load_location(struct wined3d_texture *texture, unsigned in
|
|
wined3d_texture_bind_and_dirtify(texture, context, location == WINED3D_LOCATION_TEXTURE_SRGB);
|
|
wined3d_texture_get_pitch(texture, sub_resource_idx, &row_pitch, &slice_pitch);
|
|
}
|
|
+ else if (sub_resource->locations & WINED3D_LOCATION_TEXTURE_RGB)
|
|
+ {
|
|
+ texture1d_srgb_transfer(texture, sub_resource_idx, context, TRUE);
|
|
+ }
|
|
+ else if (sub_resource->locations & WINED3D_LOCATION_TEXTURE_SRGB)
|
|
+ {
|
|
+ texture1d_srgb_transfer(texture, sub_resource_idx, context, FALSE);
|
|
+ }
|
|
else
|
|
{
|
|
FIXME("Implement 1d texture loading from %s.\n", wined3d_debug_location(sub_resource->locations));
|
|
--
|
|
1.9.1
|
|
|