Rebase against 6c637ab9c6a65d5601f98545b05f413f777c444e.

This commit is contained in:
Sebastian Lackner 2016-03-02 09:49:36 +01:00
parent ab74d819f0
commit a52c90b145
178 changed files with 1136 additions and 867 deletions

View File

@ -1,4 +1,4 @@
From 78ee3e0a09735f835303b7ddd458c8852b4774fc Mon Sep 17 00:00:00 2001
From 472184e5801de5d1fb92d275d9c0c7e840c9a0bf Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Tue, 11 Nov 2014 03:11:33 +0100
Subject: ntdll: Implement emulation of SIDT instruction when using Exagear.
@ -9,7 +9,7 @@ Subject: ntdll: Implement emulation of SIDT instruction when using Exagear.
2 files changed, 231 insertions(+)
diff --git a/configure.ac b/configure.ac
index c9445e7..8a5b2d8 100644
index 1e6bba3..43bf0db 100644
--- a/configure.ac
+++ b/configure.ac
@@ -32,6 +32,7 @@ AC_ARG_ENABLE(win16, AS_HELP_STRING([--disable-win16],[do not include Win16 supp
@ -20,9 +20,9 @@ index c9445e7..8a5b2d8 100644
AC_ARG_WITH(alsa, AS_HELP_STRING([--without-alsa],[do not use the Alsa sound support]),
[if test "x$withval" = "xno"; then ac_cv_header_sys_asoundlib_h=no; ac_cv_header_alsa_asoundlib_h=no; fi])
@@ -372,6 +373,13 @@ fi
WINE_WARNING_WITH(gettext,[test "$MSGFMT" = false],
[gettext tools not found (or too old), translations won't be built.])
@@ -364,6 +365,13 @@ WINE_WARNING_WITH(gettext,[test "$MSGFMT" = false],
[gettext tools not found (or too old), translations won't be built.],
[enable_po])
+dnl **** Enable Exagear workarounds ****
+
@ -35,7 +35,7 @@ index c9445e7..8a5b2d8 100644
dnl Check for -li386 for NetBSD and OpenBSD
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index 7121267..6976709 100644
index ee8855a..4269329 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -96,6 +96,14 @@ typedef struct

View File

@ -51,7 +51,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "846155f1531207a763c099defa90fc2c41135164"
echo "6c637ab9c6a65d5601f98545b05f413f777c444e"
}
# Show version information
@ -6929,181 +6929,183 @@ fi
# | dlls/winex11.drv/opengl.c
# |
if test "$enable_wined3d_CSMT_Main" -eq 1; then
patch_apply wined3d-CSMT_Main/0001-Revert-wined3d-Introduce-wined3d_texture_check_block.patch
patch_apply wined3d-CSMT_Main/0002-Revert-wined3d-Introduce-wined3d_texture_get_pitch.patch
patch_apply wined3d-CSMT_Main/0003-Revert-wined3d-Use-wined3d_format_calculate_pitch-in.patch
patch_apply wined3d-CSMT_Main/0004-Revert-wined3d-Handle-slice-pitch-and-alignment-as-w.patch
patch_apply wined3d-CSMT_Main/0005-Revert-wined3d-Store-custom-pitches-in-the-texture-i.patch
patch_apply wined3d-CSMT_Main/0006-Revert-wined3d-Store-the-user_memory-pointer-in-the-.patch
patch_apply wined3d-CSMT_Main/0007-wined3d-Merge-get_pitch-functions.patch
patch_apply wined3d-CSMT_Main/0008-wined3d-Pass-a-context-to-surface_load_location.patch
patch_apply wined3d-CSMT_Main/0009-wined3d-Make-surface_load_location-return-nothing.patch
patch_apply wined3d-CSMT_Main/0010-wined3d-Store-volume-locations-in-the-resource.patch
patch_apply wined3d-CSMT_Main/0011-wined3d-Move-validate_location-to-resource.c.patch
patch_apply wined3d-CSMT_Main/0012-wined3d-Move-surface-locations-into-the-resource.patch
patch_apply wined3d-CSMT_Main/0013-wined3d-Remove-surface_validate_location.patch
patch_apply wined3d-CSMT_Main/0014-wined3d-Move-invalidate_location-to-resource.c.patch
patch_apply wined3d-CSMT_Main/0015-wined3d-Invalidate-containers-via-callback.patch
patch_apply wined3d-CSMT_Main/0016-wined3d-Remove-surface_invalidate_location.patch
patch_apply wined3d-CSMT_Main/0017-wined3d-Move-bitmap_data-and-user_memory-into-the-re.patch
patch_apply wined3d-CSMT_Main/0018-wined3d-Move-load_location-into-the-resource.patch
patch_apply wined3d-CSMT_Main/0019-wined3d-Replace-surface_load_location-with-resource_.patch
patch_apply wined3d-CSMT_Main/0020-wined3d-Introduce-helper-functions-for-mapping-volum.patch
patch_apply wined3d-CSMT_Main/0021-wined3d-Move-volume-PBO-infrastructure-into-the-reso.patch
patch_apply wined3d-CSMT_Main/0022-wined3d-Remove-surface-pbo.patch
patch_apply wined3d-CSMT_Main/0023-wined3d-Use-resource-buffer-mapping-facilities-in-su.patch
patch_apply wined3d-CSMT_Main/0024-wined3d-Move-buffer-creation-into-the-resource.patch
patch_apply wined3d-CSMT_Main/0025-wined3d-Handle-WINED3D_LOCATION_DISCARDED-in-surface.patch
patch_apply wined3d-CSMT_Main/0026-wined3d-Handle-LOCATION_DISCARDED-in-surface_load_dr.patch
patch_apply wined3d-CSMT_Main/0027-wined3d-Handle-WINED3D_LOCATION_DISCARDED-for-sysmem.patch
patch_apply wined3d-CSMT_Main/0028-wined3d-Discard-implicit-surfaces-on-unload.patch
patch_apply wined3d-CSMT_Main/0029-wined3d-Don-t-try-to-flip-sysmem-copies-in-swapchain.patch
patch_apply wined3d-CSMT_Main/0030-wined3d-Discard-the-backbuffer-in-discard-presents.patch
patch_apply wined3d-CSMT_Main/0031-wined3d-Introduce-a-function-to-retrieve-resource-me.patch
patch_apply wined3d-CSMT_Main/0032-wined3d-Make-surface_ops-unmap-specific-for-front-bu.patch
patch_apply wined3d-CSMT_Main/0033-wined3d-Move-check_block_align-to-resource.c.patch
patch_apply wined3d-CSMT_Main/0034-wined3d-Replace-surface-alloc-functions-with-resourc.patch
patch_apply wined3d-CSMT_Main/0035-wined3d-Don-t-delete-the-buffer-in-surface_cleanup.patch
patch_apply wined3d-CSMT_Main/0036-wined3d-Use-resource-facilities-to-destroy-PBOs.patch
patch_apply wined3d-CSMT_Main/0037-wined3d-Move-simple-location-copying-to-the-resource.patch
patch_apply wined3d-CSMT_Main/0038-wined3d-Move-most-of-volume_map-to-resource.c.patch
patch_apply wined3d-CSMT_Main/0039-wined3d-Use-resource_map-for-surface_map.patch
patch_apply wined3d-CSMT_Main/0040-wined3d-Don-t-call-the-public-map-function-in-surfac.patch
patch_apply wined3d-CSMT_Main/0001-Revert-wined3d-Get-rid-of-the-offscreenBuffer-field-.patch
patch_apply wined3d-CSMT_Main/0002-Revert-wined3d-Introduce-wined3d_texture_check_block.patch
patch_apply wined3d-CSMT_Main/0003-Revert-wined3d-Introduce-wined3d_texture_get_pitch.patch
patch_apply wined3d-CSMT_Main/0004-Revert-wined3d-Use-wined3d_format_calculate_pitch-in.patch
patch_apply wined3d-CSMT_Main/0005-Revert-wined3d-Handle-slice-pitch-and-alignment-as-w.patch
patch_apply wined3d-CSMT_Main/0006-Revert-wined3d-Store-custom-pitches-in-the-texture-i.patch
patch_apply wined3d-CSMT_Main/0007-Revert-wined3d-Store-the-user_memory-pointer-in-the-.patch
patch_apply wined3d-CSMT_Main/0008-wined3d-Merge-get_pitch-functions.patch
patch_apply wined3d-CSMT_Main/0009-wined3d-Pass-a-context-to-surface_load_location.patch
patch_apply wined3d-CSMT_Main/0010-wined3d-Make-surface_load_location-return-nothing.patch
patch_apply wined3d-CSMT_Main/0011-wined3d-Store-volume-locations-in-the-resource.patch
patch_apply wined3d-CSMT_Main/0012-wined3d-Move-validate_location-to-resource.c.patch
patch_apply wined3d-CSMT_Main/0013-wined3d-Move-surface-locations-into-the-resource.patch
patch_apply wined3d-CSMT_Main/0014-wined3d-Remove-surface_validate_location.patch
patch_apply wined3d-CSMT_Main/0015-wined3d-Move-invalidate_location-to-resource.c.patch
patch_apply wined3d-CSMT_Main/0016-wined3d-Invalidate-containers-via-callback.patch
patch_apply wined3d-CSMT_Main/0017-wined3d-Remove-surface_invalidate_location.patch
patch_apply wined3d-CSMT_Main/0018-wined3d-Move-bitmap_data-and-user_memory-into-the-re.patch
patch_apply wined3d-CSMT_Main/0019-wined3d-Move-load_location-into-the-resource.patch
patch_apply wined3d-CSMT_Main/0020-wined3d-Replace-surface_load_location-with-resource_.patch
patch_apply wined3d-CSMT_Main/0021-wined3d-Introduce-helper-functions-for-mapping-volum.patch
patch_apply wined3d-CSMT_Main/0022-wined3d-Move-volume-PBO-infrastructure-into-the-reso.patch
patch_apply wined3d-CSMT_Main/0023-wined3d-Remove-surface-pbo.patch
patch_apply wined3d-CSMT_Main/0024-wined3d-Use-resource-buffer-mapping-facilities-in-su.patch
patch_apply wined3d-CSMT_Main/0025-wined3d-Move-buffer-creation-into-the-resource.patch
patch_apply wined3d-CSMT_Main/0026-wined3d-Handle-WINED3D_LOCATION_DISCARDED-in-surface.patch
patch_apply wined3d-CSMT_Main/0027-wined3d-Handle-LOCATION_DISCARDED-in-surface_load_dr.patch
patch_apply wined3d-CSMT_Main/0028-wined3d-Handle-WINED3D_LOCATION_DISCARDED-for-sysmem.patch
patch_apply wined3d-CSMT_Main/0029-wined3d-Discard-implicit-surfaces-on-unload.patch
patch_apply wined3d-CSMT_Main/0030-wined3d-Don-t-try-to-flip-sysmem-copies-in-swapchain.patch
patch_apply wined3d-CSMT_Main/0031-wined3d-Discard-the-backbuffer-in-discard-presents.patch
patch_apply wined3d-CSMT_Main/0032-wined3d-Introduce-a-function-to-retrieve-resource-me.patch
patch_apply wined3d-CSMT_Main/0033-wined3d-Make-surface_ops-unmap-specific-for-front-bu.patch
patch_apply wined3d-CSMT_Main/0034-wined3d-Move-check_block_align-to-resource.c.patch
patch_apply wined3d-CSMT_Main/0035-wined3d-Replace-surface-alloc-functions-with-resourc.patch
patch_apply wined3d-CSMT_Main/0036-wined3d-Don-t-delete-the-buffer-in-surface_cleanup.patch
patch_apply wined3d-CSMT_Main/0037-wined3d-Use-resource-facilities-to-destroy-PBOs.patch
patch_apply wined3d-CSMT_Main/0038-wined3d-Move-simple-location-copying-to-the-resource.patch
patch_apply wined3d-CSMT_Main/0039-wined3d-Move-most-of-volume_map-to-resource.c.patch
patch_apply wined3d-CSMT_Main/0040-wined3d-Use-resource_map-for-surface_map.patch
patch_apply wined3d-CSMT_Main/0041-wined3d-Don-t-call-the-public-map-function-in-surfac.patch
patch_apply wined3d-CSMT_Main/0042-wined3d-Move-the-framebuffer-into-wined3d_state.patch
patch_apply wined3d-CSMT_Main/0043-wined3d-Get-rid-of-state-access-in-shader_generate_g.patch
patch_apply wined3d-CSMT_Main/0044-wined3d-Preload-buffers-if-streamsrc-is-not-dirty.patch
patch_apply wined3d-CSMT_Main/0045-wined3d-Hackily-introduce-a-multithreaded-command-st.patch
patch_apply wined3d-CSMT_Main/0046-wined3d-Wait-for-resource-updates-to-finish-when-usi.patch
patch_apply wined3d-CSMT_Main/0047-wined3d-Don-t-store-pointers-in-struct-wined3d_cs_pr.patch
patch_apply wined3d-CSMT_Main/0048-wined3d-Don-t-put-rectangle-pointers-into-wined3d_cs.patch
patch_apply wined3d-CSMT_Main/0049-wined3d-Store-the-color-in-clear-ops-instead-of-a-po.patch
patch_apply wined3d-CSMT_Main/0050-wined3d-Pass-the-state-to-draw_primitive.patch
patch_apply wined3d-CSMT_Main/0051-wined3d-Wait-for-the-cs-before-destroying-objects.patch
patch_apply wined3d-CSMT_Main/0052-wined3d-Give-the-cs-its-own-state.patch
patch_apply wined3d-CSMT_Main/0053-wined3d-Send-float-constant-updates-through-the-comm.patch
patch_apply wined3d-CSMT_Main/0054-wined3d-Request-a-glFinish-before-modifying-resource.patch
patch_apply wined3d-CSMT_Main/0055-wined3d-Finish-the-cs-before-changing-the-texture-lo.patch
patch_apply wined3d-CSMT_Main/0056-wined3d-Don-t-call-glFinish-after-clears.patch
patch_apply wined3d-CSMT_Main/0057-wined3d-Don-t-call-glFinish-after-draws.patch
patch_apply wined3d-CSMT_Main/0058-wined3d-Shadow-device-offscreenBuffer-in-the-context.patch
patch_apply wined3d-CSMT_Main/0059-wined3d-Don-t-access-the-stateblock-in-find_draw_buf.patch
patch_apply wined3d-CSMT_Main/0060-wined3d-Pass-the-depth-stencil-to-swapchain-present.patch
patch_apply wined3d-CSMT_Main/0061-wined3d-Don-t-store-viewport-pointers-in-the-command.patch
patch_apply wined3d-CSMT_Main/0062-wined3d-Keep-track-of-the-onscreen-depth-stencil-in-.patch
patch_apply wined3d-CSMT_Main/0063-wined3d-Send-base-vertex-index-updates-through-the-c.patch
patch_apply wined3d-CSMT_Main/0064-wined3d-Send-primitive-type-updates-through-the-comm.patch
patch_apply wined3d-CSMT_Main/0065-wined3d-Send-bool-constant-updates-through-the-comma.patch
patch_apply wined3d-CSMT_Main/0066-wined3d-Send-int-constant-updates-through-the-comman.patch
patch_apply wined3d-CSMT_Main/0067-wined3d-Send-light-updates-through-the-command-strea.patch
patch_apply wined3d-CSMT_Main/0068-wined3d-Prevent-the-command-stream-from-running-ahea.patch
patch_apply wined3d-CSMT_Main/0069-wined3d-Wait-for-the-cs-to-finish-before-destroying-.patch
patch_apply wined3d-CSMT_Main/0070-wined3d-Run-the-cs-asynchronously.patch
patch_apply wined3d-CSMT_Main/0071-wined3d-Send-blits-through-the-command-stream.patch
patch_apply wined3d-CSMT_Main/0072-wined3d-Get-rid-of-WINED3D_BUFFER_FLUSH.patch
patch_apply wined3d-CSMT_Main/0073-wined3d-Don-t-force-strict-draw-ordering-for-multith.patch
patch_apply wined3d-CSMT_Main/0074-wined3d-Send-render-target-view-clears-through-the-c.patch
patch_apply wined3d-CSMT_Main/0075-wined3d-Wait-for-the-CS-in-GetDC.patch
patch_apply wined3d-CSMT_Main/0076-wined3d-send-resource-maps-through-the-command-strea.patch
patch_apply wined3d-CSMT_Main/0077-wined3d-Get-rid-of-the-end_scene-flush-and-finish.patch
patch_apply wined3d-CSMT_Main/0078-wined3d-Replace-the-linked-lists-with-a-ringbuffer.patch
patch_apply wined3d-CSMT_Main/0079-wined3d-Don-t-preload-buffers-on-unmap.patch
patch_apply wined3d-CSMT_Main/0080-wined3d-Don-t-call-glFinish-before-swapping.patch
patch_apply wined3d-CSMT_Main/0081-wined3d-wined3d_-_query_issue-never-fails.patch
patch_apply wined3d-CSMT_Main/0082-wined3d-Add-query-support-to-the-command-stream.patch
patch_apply wined3d-CSMT_Main/0083-wined3d-Check-our-CS-state-to-find-out-if-a-query-is.patch
patch_apply wined3d-CSMT_Main/0084-wined3d-Poll-queries-automatically-in-the-CS.patch
patch_apply wined3d-CSMT_Main/0085-wined3d-Introduce-a-separate-queue-for-priority-comm.patch
patch_apply wined3d-CSMT_Main/0086-wined3d-Destroy-queries-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0087-wined3d-Separate-main-and-worker-thread-query-state.patch
patch_apply wined3d-CSMT_Main/0088-wined3d-Don-t-poll-queries-that-failed-to-start.patch
patch_apply wined3d-CSMT_Main/0089-wined3d-Remove-restated-queries-from-the-poll-list.patch
patch_apply wined3d-CSMT_Main/0090-wined3d-Don-t-reset-the-query-state-if-it-doesn-t-ha.patch
patch_apply wined3d-CSMT_Main/0091-wined3d-Put-this-into-the-query-poll-patch.patch
patch_apply wined3d-CSMT_Main/0092-wined3d-Send-texture-preloads-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0093-wined3d-Send-update_texture-calls-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0094-wined3d-Get-rid-of-the-surface_upload_data-glFinish.patch
patch_apply wined3d-CSMT_Main/0095-wined3d-Don-t-lock-the-src-volume-in-device_update_v.patch
patch_apply wined3d-CSMT_Main/0096-wined3d-Handle-evit_managed_resources-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0097-wined3d-Introduce-resource-fencing.patch
patch_apply wined3d-CSMT_Main/0098-wined3d-Fence-update_texture-and-update_surface-call.patch
patch_apply wined3d-CSMT_Main/0099-wined3d-Dirtify-resources-on-unmap.patch
patch_apply wined3d-CSMT_Main/0100-wined3d-Fence-texture-reads-in-draws.patch
patch_apply wined3d-CSMT_Main/0101-wined3d-Fence-render-targets-and-depth-stencils.patch
patch_apply wined3d-CSMT_Main/0102-wined3d-Fence-blit-operations.patch
patch_apply wined3d-CSMT_Main/0103-wined3d-Fence-color_fill-operations.patch
patch_apply wined3d-CSMT_Main/0104-wined3d-Fence-clear-calls.patch
patch_apply wined3d-CSMT_Main/0105-wined3d-Fence-present-calls.patch
patch_apply wined3d-CSMT_Main/0106-wined3d-Make-resource-maps-and-unmaps-a-priority-com.patch
patch_apply wined3d-CSMT_Main/0107-wined3d-Dirtify-changed-textures-through-the-command.patch
patch_apply wined3d-CSMT_Main/0108-wined3d-Wrap-GL-BOs-in-a-structure.patch
patch_apply wined3d-CSMT_Main/0109-wined3d-Separate-resource-map-and-draw-buffers.patch
patch_apply wined3d-CSMT_Main/0110-wined3d-Implement-DISCARD-resource-maps-with-buffers.patch
patch_apply wined3d-CSMT_Main/0111-wined3d-Implement-DISCARD-resource-maps-with-heap-me.patch
patch_apply wined3d-CSMT_Main/0112-wined3d-Unset-some-objects-in-state_init_default.patch
patch_apply wined3d-CSMT_Main/0113-wined3d-Don-t-request-the-frontbuffer-to-create-dumm.patch
patch_apply wined3d-CSMT_Main/0114-wined3d-Use-double-buffered-buffers-for-multithreade.patch
patch_apply wined3d-CSMT_Main/0115-wined3d-Don-t-synchronize-NOOVERWRITE-buffer-maps.patch
patch_apply wined3d-CSMT_Main/0116-wined3d-Separate-buffer-map-write-and-draw-read-memo.patch
patch_apply wined3d-CSMT_Main/0117-wined3d-Accelerate-DISCARD-buffer-maps.patch
patch_apply wined3d-CSMT_Main/0118-wined3d-Accelerate-READONLY-buffer-maps.patch
patch_apply wined3d-CSMT_Main/0119-wined3d-Access-the-buffer-dirty-areas-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0120-wined3d-Ignore-buffer-resource.map_count-in-the-CS.patch
patch_apply wined3d-CSMT_Main/0121-wined3d-Send-buffer-preloads-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0122-wined3d-Use-glBufferSubData-instead-of-glMapBufferRa.patch
patch_apply wined3d-CSMT_Main/0123-wined3d-Separate-GL-buffer-discard-control-from-igno.patch
patch_apply wined3d-CSMT_Main/0124-wined3d-Create-buffers-before-mapping-them.patch
patch_apply wined3d-CSMT_Main/0125-wined3d-Destroy-views-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0126-wined3d-Remove-another-glFinish.patch
patch_apply wined3d-CSMT_Main/0127-wined3d-Destroy-vertex-declarations-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0128-wined3d-Destroy-shaders-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0129-wined3d-Create-VBOs-through-the-command-stream.patch
patch_apply wined3d-CSMT_Main/0130-wined3d-Clean-up-resource-data-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0131-wined3d-Clean-up-buffer-resource-data-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0132-wined3d-Clean-up-volume-resource-data-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0133-wined3d-Clean-up-surfaces-through-the-cs.patch
patch_apply wined3d-CSMT_Main/0134-wined3d-Clean-up-texture-resources-through-the-cs.patch
patch_apply wined3d-CSMT_Main/0135-wined3d-Unload-resources-through-the-CS-in-uninit_3d.patch
patch_apply wined3d-CSMT_Main/0136-wined3d-Unload-resources-through-the-CS-in-device_re.patch
patch_apply wined3d-CSMT_Main/0137-wined3d-Don-t-glFinish-after-a-depth-buffer-blit.patch
patch_apply wined3d-CSMT_Main/0138-wined3d-Remove-software-cursor-support.patch
patch_apply wined3d-CSMT_Main/0139-wined3d-Create-dummy-textures-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0140-wined3d-Create-the-initial-context-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0141-wined3d-Recreate-ctx-and-dummy-textures-through-the-.patch
patch_apply wined3d-CSMT_Main/0142-wined3d-Ignore-WINED3D_MAP_NO_DIRTY_UPDATE-in-resour.patch
patch_apply wined3d-CSMT_Main/0143-wined3d-Delete-GL-contexts-through-the-CS-in-reset.patch
patch_apply wined3d-CSMT_Main/0144-wined3d-Delete-GL-contexts-through-the-CS-in-uninit_.patch
patch_apply wined3d-CSMT_Main/0145-wined3d-Invoke-surface_unload-through-the-CS-in-wine.patch
patch_apply wined3d-CSMT_Main/0146-wined3d-Use-an-event-to-block-the-worker-thread-when.patch
patch_apply wined3d-CSMT_Main/0147-wined3d-Fence-preload-operations.patch
patch_apply wined3d-CSMT_Main/0148-d3d8-tests-D3DLOCK_NO_DIRTY_UPDATE-on-managed-textur.patch
patch_apply wined3d-CSMT_Main/0149-d3d9-tests-D3DLOCK_NO_DIRTY_UPDATE-on-managed-textur.patch
patch_apply wined3d-CSMT_Main/0150-wined3d-Completely-reset-the-state-on-reset.patch
patch_apply wined3d-CSMT_Main/0151-wined3d-Send-getdc-and-releasedc-through-the-command.patch
patch_apply wined3d-CSMT_Main/0152-wined3d-Set-map_heap_memory-NULL-when-allocating-a-P.patch
patch_apply wined3d-CSMT_Main/0153-wined3d-Wait-only-for-the-buffer-to-be-idle.patch
patch_apply wined3d-CSMT_Main/0154-wined3d-Add-a-comment-about-worker-thread-lag.patch
patch_apply wined3d-CSMT_Main/0155-wined3d-Remove-the-texture-destroy-glFinish.patch
patch_apply wined3d-CSMT_Main/0156-wined3d-Move-FBO-destruction-into-the-worker-thread.patch
patch_apply wined3d-CSMT_Main/0157-wined3d-Don-t-incref-decref-textures-in-color-depth-.patch
patch_apply wined3d-CSMT_Main/0158-Winex11-complain-about-glfinish.patch
patch_apply wined3d-CSMT_Main/0159-wined3d-Make-sure-the-new-window-is-set-up-before-se.patch
patch_apply wined3d-CSMT_Main/0160-wined3d-Remove-the-device_reset-CS-sync-fixme.patch
patch_apply wined3d-CSMT_Main/0161-wined3d-Put-GL_APPLE_flush_buffer_range-syncing-back.patch
patch_apply wined3d-CSMT_Main/0162-wined3d-Wait-for-the-resource-to-be-idle-when-destro.patch
patch_apply wined3d-CSMT_Main/0163-wined3d-Don-t-sync-on-redundant-discard-calls.patch
patch_apply wined3d-CSMT_Main/0164-wined3d-Don-t-discard-new-buffers.patch
patch_apply wined3d-CSMT_Main/0165-wined3d-Don-t-try-to-sync-VBOs-manually-on-OSX-with-.patch
patch_apply wined3d-CSMT_Main/0166-wined3d-Render-target-lock-hack.patch
patch_apply wined3d-CSMT_Main/0167-wined3d-Avoid-calling-wined3d_surface_blt-from-surfa.patch
patch_apply wined3d-CSMT_Main/0168-wined3d-Only-discard-buffers-that-are-in-use.patch
patch_apply wined3d-CSMT_Main/0169-wined3d-Destroy-samplers-through-the-command-stream.patch
patch_apply wined3d-CSMT_Main/0170-wined3d-Hack-to-reject-unsupported-color-fills.patch
patch_apply wined3d-CSMT_Main/0171-wined3d-Alloc-the-buffer-map-array-before-mapping-th.patch
patch_apply wined3d-CSMT_Main/0172-wined3d-Send-update_sub_resource-calls-through-the-c.patch
patch_apply wined3d-CSMT_Main/0042-wined3d-Don-t-call-the-public-map-function-in-surfac.patch
patch_apply wined3d-CSMT_Main/0043-wined3d-Move-the-framebuffer-into-wined3d_state.patch
patch_apply wined3d-CSMT_Main/0044-wined3d-Get-rid-of-state-access-in-shader_generate_g.patch
patch_apply wined3d-CSMT_Main/0045-wined3d-Preload-buffers-if-streamsrc-is-not-dirty.patch
patch_apply wined3d-CSMT_Main/0046-wined3d-Hackily-introduce-a-multithreaded-command-st.patch
patch_apply wined3d-CSMT_Main/0047-wined3d-Wait-for-resource-updates-to-finish-when-usi.patch
patch_apply wined3d-CSMT_Main/0048-wined3d-Don-t-store-pointers-in-struct-wined3d_cs_pr.patch
patch_apply wined3d-CSMT_Main/0049-wined3d-Don-t-put-rectangle-pointers-into-wined3d_cs.patch
patch_apply wined3d-CSMT_Main/0050-wined3d-Store-the-color-in-clear-ops-instead-of-a-po.patch
patch_apply wined3d-CSMT_Main/0051-wined3d-Pass-the-state-to-draw_primitive.patch
patch_apply wined3d-CSMT_Main/0052-wined3d-Wait-for-the-cs-before-destroying-objects.patch
patch_apply wined3d-CSMT_Main/0053-wined3d-Give-the-cs-its-own-state.patch
patch_apply wined3d-CSMT_Main/0054-wined3d-Send-float-constant-updates-through-the-comm.patch
patch_apply wined3d-CSMT_Main/0055-wined3d-Request-a-glFinish-before-modifying-resource.patch
patch_apply wined3d-CSMT_Main/0056-wined3d-Finish-the-cs-before-changing-the-texture-lo.patch
patch_apply wined3d-CSMT_Main/0057-wined3d-Don-t-call-glFinish-after-clears.patch
patch_apply wined3d-CSMT_Main/0058-wined3d-Don-t-call-glFinish-after-draws.patch
patch_apply wined3d-CSMT_Main/0059-wined3d-Shadow-device-offscreenBuffer-in-the-context.patch
patch_apply wined3d-CSMT_Main/0060-wined3d-Don-t-access-the-stateblock-in-find_draw_buf.patch
patch_apply wined3d-CSMT_Main/0061-wined3d-Pass-the-depth-stencil-to-swapchain-present.patch
patch_apply wined3d-CSMT_Main/0062-wined3d-Don-t-store-viewport-pointers-in-the-command.patch
patch_apply wined3d-CSMT_Main/0063-wined3d-Keep-track-of-the-onscreen-depth-stencil-in-.patch
patch_apply wined3d-CSMT_Main/0064-wined3d-Send-base-vertex-index-updates-through-the-c.patch
patch_apply wined3d-CSMT_Main/0065-wined3d-Send-primitive-type-updates-through-the-comm.patch
patch_apply wined3d-CSMT_Main/0066-wined3d-Send-bool-constant-updates-through-the-comma.patch
patch_apply wined3d-CSMT_Main/0067-wined3d-Send-int-constant-updates-through-the-comman.patch
patch_apply wined3d-CSMT_Main/0068-wined3d-Send-light-updates-through-the-command-strea.patch
patch_apply wined3d-CSMT_Main/0069-wined3d-Prevent-the-command-stream-from-running-ahea.patch
patch_apply wined3d-CSMT_Main/0070-wined3d-Wait-for-the-cs-to-finish-before-destroying-.patch
patch_apply wined3d-CSMT_Main/0071-wined3d-Run-the-cs-asynchronously.patch
patch_apply wined3d-CSMT_Main/0072-wined3d-Send-blits-through-the-command-stream.patch
patch_apply wined3d-CSMT_Main/0073-wined3d-Get-rid-of-WINED3D_BUFFER_FLUSH.patch
patch_apply wined3d-CSMT_Main/0074-wined3d-Don-t-force-strict-draw-ordering-for-multith.patch
patch_apply wined3d-CSMT_Main/0075-wined3d-Send-render-target-view-clears-through-the-c.patch
patch_apply wined3d-CSMT_Main/0076-wined3d-Wait-for-the-CS-in-GetDC.patch
patch_apply wined3d-CSMT_Main/0077-wined3d-send-resource-maps-through-the-command-strea.patch
patch_apply wined3d-CSMT_Main/0078-wined3d-Get-rid-of-the-end_scene-flush-and-finish.patch
patch_apply wined3d-CSMT_Main/0079-wined3d-Replace-the-linked-lists-with-a-ringbuffer.patch
patch_apply wined3d-CSMT_Main/0080-wined3d-Don-t-preload-buffers-on-unmap.patch
patch_apply wined3d-CSMT_Main/0081-wined3d-Don-t-call-glFinish-before-swapping.patch
patch_apply wined3d-CSMT_Main/0082-wined3d-wined3d_-_query_issue-never-fails.patch
patch_apply wined3d-CSMT_Main/0083-wined3d-Add-query-support-to-the-command-stream.patch
patch_apply wined3d-CSMT_Main/0084-wined3d-Check-our-CS-state-to-find-out-if-a-query-is.patch
patch_apply wined3d-CSMT_Main/0085-wined3d-Poll-queries-automatically-in-the-CS.patch
patch_apply wined3d-CSMT_Main/0086-wined3d-Introduce-a-separate-queue-for-priority-comm.patch
patch_apply wined3d-CSMT_Main/0087-wined3d-Destroy-queries-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0088-wined3d-Separate-main-and-worker-thread-query-state.patch
patch_apply wined3d-CSMT_Main/0089-wined3d-Don-t-poll-queries-that-failed-to-start.patch
patch_apply wined3d-CSMT_Main/0090-wined3d-Remove-restated-queries-from-the-poll-list.patch
patch_apply wined3d-CSMT_Main/0091-wined3d-Don-t-reset-the-query-state-if-it-doesn-t-ha.patch
patch_apply wined3d-CSMT_Main/0092-wined3d-Put-this-into-the-query-poll-patch.patch
patch_apply wined3d-CSMT_Main/0093-wined3d-Send-texture-preloads-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0094-wined3d-Send-update_texture-calls-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0095-wined3d-Get-rid-of-the-surface_upload_data-glFinish.patch
patch_apply wined3d-CSMT_Main/0096-wined3d-Don-t-lock-the-src-volume-in-device_update_v.patch
patch_apply wined3d-CSMT_Main/0097-wined3d-Handle-evit_managed_resources-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0098-wined3d-Introduce-resource-fencing.patch
patch_apply wined3d-CSMT_Main/0099-wined3d-Fence-update_texture-and-update_surface-call.patch
patch_apply wined3d-CSMT_Main/0100-wined3d-Dirtify-resources-on-unmap.patch
patch_apply wined3d-CSMT_Main/0101-wined3d-Fence-texture-reads-in-draws.patch
patch_apply wined3d-CSMT_Main/0102-wined3d-Fence-render-targets-and-depth-stencils.patch
patch_apply wined3d-CSMT_Main/0103-wined3d-Fence-blit-operations.patch
patch_apply wined3d-CSMT_Main/0104-wined3d-Fence-color_fill-operations.patch
patch_apply wined3d-CSMT_Main/0105-wined3d-Fence-clear-calls.patch
patch_apply wined3d-CSMT_Main/0106-wined3d-Fence-present-calls.patch
patch_apply wined3d-CSMT_Main/0107-wined3d-Make-resource-maps-and-unmaps-a-priority-com.patch
patch_apply wined3d-CSMT_Main/0108-wined3d-Dirtify-changed-textures-through-the-command.patch
patch_apply wined3d-CSMT_Main/0109-wined3d-Wrap-GL-BOs-in-a-structure.patch
patch_apply wined3d-CSMT_Main/0110-wined3d-Separate-resource-map-and-draw-buffers.patch
patch_apply wined3d-CSMT_Main/0111-wined3d-Implement-DISCARD-resource-maps-with-buffers.patch
patch_apply wined3d-CSMT_Main/0112-wined3d-Implement-DISCARD-resource-maps-with-heap-me.patch
patch_apply wined3d-CSMT_Main/0113-wined3d-Unset-some-objects-in-state_init_default.patch
patch_apply wined3d-CSMT_Main/0114-wined3d-Don-t-request-the-frontbuffer-to-create-dumm.patch
patch_apply wined3d-CSMT_Main/0115-wined3d-Use-double-buffered-buffers-for-multithreade.patch
patch_apply wined3d-CSMT_Main/0116-wined3d-Don-t-synchronize-NOOVERWRITE-buffer-maps.patch
patch_apply wined3d-CSMT_Main/0117-wined3d-Separate-buffer-map-write-and-draw-read-memo.patch
patch_apply wined3d-CSMT_Main/0118-wined3d-Accelerate-DISCARD-buffer-maps.patch
patch_apply wined3d-CSMT_Main/0119-wined3d-Accelerate-READONLY-buffer-maps.patch
patch_apply wined3d-CSMT_Main/0120-wined3d-Access-the-buffer-dirty-areas-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0121-wined3d-Ignore-buffer-resource.map_count-in-the-CS.patch
patch_apply wined3d-CSMT_Main/0122-wined3d-Send-buffer-preloads-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0123-wined3d-Use-glBufferSubData-instead-of-glMapBufferRa.patch
patch_apply wined3d-CSMT_Main/0124-wined3d-Separate-GL-buffer-discard-control-from-igno.patch
patch_apply wined3d-CSMT_Main/0125-wined3d-Create-buffers-before-mapping-them.patch
patch_apply wined3d-CSMT_Main/0126-wined3d-Destroy-views-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0127-wined3d-Remove-another-glFinish.patch
patch_apply wined3d-CSMT_Main/0128-wined3d-Destroy-vertex-declarations-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0129-wined3d-Destroy-shaders-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0130-wined3d-Create-VBOs-through-the-command-stream.patch
patch_apply wined3d-CSMT_Main/0131-wined3d-Clean-up-resource-data-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0132-wined3d-Clean-up-buffer-resource-data-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0133-wined3d-Clean-up-volume-resource-data-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0134-wined3d-Clean-up-surfaces-through-the-cs.patch
patch_apply wined3d-CSMT_Main/0135-wined3d-Clean-up-texture-resources-through-the-cs.patch
patch_apply wined3d-CSMT_Main/0136-wined3d-Unload-resources-through-the-CS-in-uninit_3d.patch
patch_apply wined3d-CSMT_Main/0137-wined3d-Unload-resources-through-the-CS-in-device_re.patch
patch_apply wined3d-CSMT_Main/0138-wined3d-Don-t-glFinish-after-a-depth-buffer-blit.patch
patch_apply wined3d-CSMT_Main/0139-wined3d-Remove-software-cursor-support.patch
patch_apply wined3d-CSMT_Main/0140-wined3d-Create-dummy-textures-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0141-wined3d-Create-the-initial-context-through-the-CS.patch
patch_apply wined3d-CSMT_Main/0142-wined3d-Recreate-ctx-and-dummy-textures-through-the-.patch
patch_apply wined3d-CSMT_Main/0143-wined3d-Ignore-WINED3D_MAP_NO_DIRTY_UPDATE-in-resour.patch
patch_apply wined3d-CSMT_Main/0144-wined3d-Delete-GL-contexts-through-the-CS-in-reset.patch
patch_apply wined3d-CSMT_Main/0145-wined3d-Delete-GL-contexts-through-the-CS-in-uninit_.patch
patch_apply wined3d-CSMT_Main/0146-wined3d-Invoke-surface_unload-through-the-CS-in-wine.patch
patch_apply wined3d-CSMT_Main/0147-wined3d-Use-an-event-to-block-the-worker-thread-when.patch
patch_apply wined3d-CSMT_Main/0148-wined3d-Fence-preload-operations.patch
patch_apply wined3d-CSMT_Main/0149-d3d8-tests-D3DLOCK_NO_DIRTY_UPDATE-on-managed-textur.patch
patch_apply wined3d-CSMT_Main/0150-d3d9-tests-D3DLOCK_NO_DIRTY_UPDATE-on-managed-textur.patch
patch_apply wined3d-CSMT_Main/0151-wined3d-Completely-reset-the-state-on-reset.patch
patch_apply wined3d-CSMT_Main/0152-wined3d-Send-getdc-and-releasedc-through-the-command.patch
patch_apply wined3d-CSMT_Main/0153-wined3d-Set-map_heap_memory-NULL-when-allocating-a-P.patch
patch_apply wined3d-CSMT_Main/0154-wined3d-Wait-only-for-the-buffer-to-be-idle.patch
patch_apply wined3d-CSMT_Main/0155-wined3d-Add-a-comment-about-worker-thread-lag.patch
patch_apply wined3d-CSMT_Main/0156-wined3d-Remove-the-texture-destroy-glFinish.patch
patch_apply wined3d-CSMT_Main/0157-wined3d-Move-FBO-destruction-into-the-worker-thread.patch
patch_apply wined3d-CSMT_Main/0158-wined3d-Don-t-incref-decref-textures-in-color-depth-.patch
patch_apply wined3d-CSMT_Main/0159-Winex11-complain-about-glfinish.patch
patch_apply wined3d-CSMT_Main/0160-wined3d-Make-sure-the-new-window-is-set-up-before-se.patch
patch_apply wined3d-CSMT_Main/0161-wined3d-Remove-the-device_reset-CS-sync-fixme.patch
patch_apply wined3d-CSMT_Main/0162-wined3d-Put-GL_APPLE_flush_buffer_range-syncing-back.patch
patch_apply wined3d-CSMT_Main/0163-wined3d-Wait-for-the-resource-to-be-idle-when-destro.patch
patch_apply wined3d-CSMT_Main/0164-wined3d-Don-t-sync-on-redundant-discard-calls.patch
patch_apply wined3d-CSMT_Main/0165-wined3d-Don-t-discard-new-buffers.patch
patch_apply wined3d-CSMT_Main/0166-wined3d-Don-t-try-to-sync-VBOs-manually-on-OSX-with-.patch
patch_apply wined3d-CSMT_Main/0167-wined3d-Render-target-lock-hack.patch
patch_apply wined3d-CSMT_Main/0168-wined3d-Avoid-calling-wined3d_surface_blt-from-surfa.patch
patch_apply wined3d-CSMT_Main/0169-wined3d-Only-discard-buffers-that-are-in-use.patch
patch_apply wined3d-CSMT_Main/0170-wined3d-Destroy-samplers-through-the-command-stream.patch
patch_apply wined3d-CSMT_Main/0171-wined3d-Hack-to-reject-unsupported-color-fills.patch
patch_apply wined3d-CSMT_Main/0172-wined3d-Alloc-the-buffer-map-array-before-mapping-th.patch
patch_apply wined3d-CSMT_Main/0173-wined3d-Send-update_sub_resource-calls-through-the-c.patch
patch_apply wined3d-CSMT_Main/9998-wined3d-Enable-CSMT-by-default-print-a-winediag-mess.patch
patch_apply wined3d-CSMT_Main/9999-IfDefined.patch
(
echo '+ { "Sebastian Lackner", "Revert \"wined3d: Get rid of the offscreenBuffer field in struct wined3d_device.\".", 1 },';
echo '+ { "Sebastian Lackner", "Revert \"wined3d: Introduce wined3d_texture_check_block_align().\".", 1 },';
echo '+ { "Sebastian Lackner", "Revert \"wined3d: Introduce wined3d_texture_get_pitch().\".", 1 },';
echo '+ { "Sebastian Lackner", "Revert \"wined3d: Use wined3d_format_calculate_pitch() in surface_download_data().\".", 1 },';

View File

@ -0,0 +1,246 @@
From a51564803334f940d200b0f3f1f7a94cfc13425f Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Wed, 2 Mar 2016 16:28:44 +0100
Subject: Revert "wined3d: Get rid of the offscreenBuffer field in struct
wined3d_device."
This reverts commit 9dc89561027f32b08978b9fb75da5a0d0966f999.
---
dlls/wined3d/context.c | 37 ++++++++++++-------------------------
dlls/wined3d/device.c | 21 +++++++++++++++++++++
dlls/wined3d/surface.c | 13 +++++--------
dlls/wined3d/wined3d_private.h | 4 +++-
4 files changed, 41 insertions(+), 34 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 6f065ba..d0deff9 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -2419,30 +2419,14 @@ static void context_validate_onscreen_formats(struct wined3d_context *context,
context_set_render_offscreen(context, TRUE);
}
-GLenum context_get_offscreen_gl_buffer(const struct wined3d_context *context)
-{
- switch (wined3d_settings.offscreen_rendering_mode)
- {
- case ORM_FBO:
- return GL_COLOR_ATTACHMENT0;
-
- case ORM_BACKBUFFER:
- return context->aux_buffers > 0 ? GL_AUX0 : GL_BACK;
-
- default:
- FIXME("Unhandled offscreen rendering mode %#x.\n", wined3d_settings.offscreen_rendering_mode);
- return GL_BACK;
- }
-}
-
-static DWORD context_generate_rt_mask_no_fbo(const struct wined3d_context *context, const struct wined3d_surface *rt)
+static DWORD context_generate_rt_mask_no_fbo(const struct wined3d_device *device, const struct wined3d_surface *rt)
{
if (!rt || rt->resource.format->id == WINED3DFMT_NULL)
return 0;
else if (rt->container->swapchain)
return context_generate_rt_mask_from_surface(rt);
else
- return context_generate_rt_mask(context_get_offscreen_gl_buffer(context));
+ return context_generate_rt_mask(device->offscreenBuffer);
}
/* Context activation is done by the caller. */
@@ -2474,7 +2458,7 @@ void context_apply_blit_state(struct wined3d_context *context, const struct wine
}
else
{
- rt_mask = context_generate_rt_mask_no_fbo(context, rt);
+ rt_mask = context_generate_rt_mask_no_fbo(device, rt);
}
cur_mask = context->current_fbo ? &context->current_fbo->rt_mask : &context->draw_buffers_mask;
@@ -2563,7 +2547,7 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win
}
else
{
- rt_mask = context_generate_rt_mask_no_fbo(context,
+ rt_mask = context_generate_rt_mask_no_fbo(device,
rt_count ? wined3d_rendertarget_view_get_surface(rts[0]) : NULL);
}
}
@@ -2578,7 +2562,7 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win
}
else
{
- rt_mask = context_generate_rt_mask_no_fbo(context,
+ rt_mask = context_generate_rt_mask_no_fbo(device,
rt_count ? wined3d_rendertarget_view_get_surface(rts[0]) : NULL);
}
@@ -2622,15 +2606,16 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win
return TRUE;
}
-static DWORD find_draw_buffers_mask(const struct wined3d_context *context, const struct wined3d_state *state)
+static DWORD find_draw_buffers_mask(const struct wined3d_context *context, const struct wined3d_device *device)
{
+ const struct wined3d_state *state = &device->state;
struct wined3d_rendertarget_view **rts = state->fb->render_targets;
struct wined3d_shader *ps = state->shader[WINED3D_SHADER_TYPE_PIXEL];
DWORD rt_mask, rt_mask_bits;
unsigned int i;
if (wined3d_settings.offscreen_rendering_mode != ORM_FBO)
- return context_generate_rt_mask_no_fbo(context, wined3d_rendertarget_view_get_surface(rts[0]));
+ return context_generate_rt_mask_no_fbo(device, wined3d_rendertarget_view_get_surface(rts[0]));
else if (!context->render_offscreen)
return context_generate_rt_mask_from_surface(wined3d_rendertarget_view_get_surface(rts[0]));
@@ -2653,8 +2638,9 @@ static DWORD find_draw_buffers_mask(const struct wined3d_context *context, const
/* Context activation is done by the caller. */
void context_state_fb(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
{
- DWORD rt_mask = find_draw_buffers_mask(context, state);
+ const struct wined3d_device *device = context->swapchain->device;
const struct wined3d_fb_state *fb = state->fb;
+ DWORD rt_mask = find_draw_buffers_mask(context, device);
DWORD *cur_mask;
if (wined3d_settings.offscreen_rendering_mode == ORM_FBO)
@@ -2931,12 +2917,13 @@ static void context_update_tex_unit_map(struct wined3d_context *context, const s
/* Context activation is done by the caller. */
void context_state_drawbuf(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
{
+ const struct wined3d_device *device = context->swapchain->device;
DWORD rt_mask, *cur_mask;
if (isStateDirty(context, STATE_FRAMEBUFFER)) return;
cur_mask = context->current_fbo ? &context->current_fbo->rt_mask : &context->draw_buffers_mask;
- rt_mask = find_draw_buffers_mask(context, state);
+ rt_mask = find_draw_buffers_mask(context, device);
if (rt_mask != *cur_mask)
{
context_apply_draw_buffers(context, rt_mask);
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index ded1229..4cebcb8 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -1021,6 +1021,27 @@ HRESULT CDECL wined3d_device_init_3d(struct wined3d_device *device,
device->contexts[0]->last_was_rhw = 0;
+ switch (wined3d_settings.offscreen_rendering_mode)
+ {
+ case ORM_FBO:
+ device->offscreenBuffer = GL_COLOR_ATTACHMENT0;
+ break;
+
+ case ORM_BACKBUFFER:
+ {
+ if (context_get_current()->aux_buffers > 0)
+ {
+ TRACE("Using auxiliary buffer for offscreen rendering\n");
+ device->offscreenBuffer = GL_AUX0;
+ }
+ else
+ {
+ TRACE("Using back buffer for offscreen rendering\n");
+ device->offscreenBuffer = GL_BACK;
+ }
+ }
+ }
+
TRACE("All defaults now set up, leaving 3D init.\n");
context_release(context);
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index ee6588e..bd6be49 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -2435,7 +2435,7 @@ static void read_from_framebuffer(struct wined3d_surface *surface,
/* Mapping the primary render target which is not on a swapchain.
* Read from the back buffer. */
TRACE("Mapping offscreen render target.\n");
- gl_info->gl_ops.gl.p_glReadBuffer(context_get_offscreen_gl_buffer(context));
+ gl_info->gl_ops.gl.p_glReadBuffer(device->offscreenBuffer);
srcIsUpsideDown = TRUE;
}
else
@@ -2541,7 +2541,7 @@ void surface_load_fb_texture(struct wined3d_surface *surface, BOOL srgb, struct
TRACE("Reading back offscreen render target %p.\n", surface);
if (wined3d_resource_is_offscreen(&surface->container->resource))
- gl_info->gl_ops.gl.p_glReadBuffer(context_get_offscreen_gl_buffer(context));
+ gl_info->gl_ops.gl.p_glReadBuffer(device->offscreenBuffer);
else
gl_info->gl_ops.gl.p_glReadBuffer(surface_get_gl_buffer(surface));
checkGLcall("glReadBuffer");
@@ -2646,7 +2646,7 @@ static void fb_copy_to_texture_direct(struct wined3d_surface *dst_surface, struc
{
TRACE("Reading from an offscreen target\n");
upsidedown = !upsidedown;
- gl_info->gl_ops.gl.p_glReadBuffer(context_get_offscreen_gl_buffer(context));
+ gl_info->gl_ops.gl.p_glReadBuffer(device->offscreenBuffer);
}
else
{
@@ -2735,7 +2735,6 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, st
const struct wined3d_gl_info *gl_info;
struct wined3d_context *context;
GLenum drawBuffer = GL_BACK;
- GLenum offscreen_buffer;
GLenum texture_target;
BOOL noBackBufferBackup;
BOOL src_offscreen;
@@ -2749,8 +2748,6 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, st
context_apply_blit_state(context, device);
wined3d_texture_load(dst_surface->container, context, FALSE);
- offscreen_buffer = context_get_offscreen_gl_buffer(context);
-
src_offscreen = wined3d_resource_is_offscreen(&src_surface->container->resource);
noBackBufferBackup = src_offscreen && wined3d_settings.offscreen_rendering_mode == ORM_FBO;
if (!noBackBufferBackup && !src_surface->container->texture_rgb.name)
@@ -2767,7 +2764,7 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, st
/* Got more than one aux buffer? Use the 2nd aux buffer */
drawBuffer = GL_AUX1;
}
- else if ((!src_offscreen || offscreen_buffer == GL_BACK) && context->aux_buffers >= 1)
+ else if ((!src_offscreen || device->offscreenBuffer == GL_BACK) && context->aux_buffers >= 1)
{
/* Only one aux buffer, but it isn't used (Onscreen rendering, or non-aux orm)? Use it! */
drawBuffer = GL_AUX0;
@@ -2808,7 +2805,7 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, st
{
TRACE("Reading from an offscreen target\n");
upsidedown = !upsidedown;
- gl_info->gl_ops.gl.p_glReadBuffer(offscreen_buffer);
+ gl_info->gl_ops.gl.p_glReadBuffer(device->offscreenBuffer);
}
else
{
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 409ab36..eef58a3 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1507,7 +1507,6 @@ void context_destroy(struct wined3d_device *device, struct wined3d_context *cont
void context_free_event_query(struct wined3d_event_query *query) DECLSPEC_HIDDEN;
void context_free_occlusion_query(struct wined3d_occlusion_query *query) DECLSPEC_HIDDEN;
struct wined3d_context *context_get_current(void) DECLSPEC_HIDDEN;
-GLenum context_get_offscreen_gl_buffer(const struct wined3d_context *context) DECLSPEC_HIDDEN;
DWORD context_get_tls_idx(void) DECLSPEC_HIDDEN;
void context_gl_resource_released(struct wined3d_device *device,
GLuint name, BOOL rb_namespace) DECLSPEC_HIDDEN;
@@ -2142,6 +2141,9 @@ struct wined3d_device
LONG style;
LONG exStyle;
+ /* X and GL Information */
+ GLenum offscreenBuffer;
+
const struct wined3d_shader_backend_ops *shader_backend;
void *shader_priv;
void *fragment_priv;
--
2.7.1

View File

@ -1,101 +0,0 @@
From 89a2597787017d7bc966c2a146fa4c4fc59e9ebb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefan@codeweavers.com>
Date: Mon, 23 Sep 2013 23:58:41 +0200
Subject: wined3d: Don't call the public map function in
surface_convert_format.
TODO: Creating a helper surface and releasing it won't work with the CS.
surface_cpu_blt will be called via the CS, so it can't call external
methods that enqueue commands in the stream.
---
dlls/wined3d/surface.c | 57 +++++++++++++++++++++++++++++++++-----------------
1 file changed, 38 insertions(+), 19 deletions(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 303a0dc..045ede5 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -2253,11 +2253,14 @@ static inline const struct d3dfmt_converter_desc *find_converter(enum wined3d_fo
static struct wined3d_texture *surface_convert_format(struct wined3d_surface *source, enum wined3d_format_id to_fmt)
{
- struct wined3d_map_desc src_map, dst_map;
+ void *dst_data = NULL, *src_data = NULL;
+ UINT src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch;
const struct d3dfmt_converter_desc *conv;
struct wined3d_texture *ret = NULL;
struct wined3d_resource_desc desc;
struct wined3d_surface *dst;
+ struct wined3d_context *context = NULL;
+ struct wined3d_device *device = source->resource.device;
conv = find_converter(source->resource.format->id, to_fmt);
if (!conv)
@@ -2281,30 +2284,46 @@ static struct wined3d_texture *surface_convert_format(struct wined3d_surface *so
}
dst = surface_from_resource(wined3d_texture_get_sub_resource(ret, 0));
- memset(&src_map, 0, sizeof(src_map));
- memset(&dst_map, 0, sizeof(dst_map));
+ wined3d_resource_get_pitch(&source->resource, &src_row_pitch, &src_slice_pitch);
+ wined3d_resource_get_pitch(&ret->resource, &dst_row_pitch, &dst_slice_pitch);
- if (FAILED(wined3d_surface_map(source, &src_map, NULL, WINED3D_MAP_READONLY)))
- {
- ERR("Failed to lock the source surface.\n");
- wined3d_texture_decref(ret);
- return NULL;
- }
- if (FAILED(wined3d_surface_map(dst, &dst_map, NULL, 0)))
- {
- ERR("Failed to lock the destination surface.\n");
- wined3d_surface_unmap(source);
- wined3d_texture_decref(ret);
- return NULL;
- }
+ if (device->d3d_initialized)
+ context = context_acquire(device, NULL);
+
+ wined3d_resource_load_location(&source->resource, context, source->resource.map_binding);
+ src_data = wined3d_resource_get_map_ptr(&source->resource, context, WINED3D_MAP_READONLY);
+ if (!src_data)
+ goto error;
- conv->convert(src_map.data, dst_map.data, src_map.row_pitch, dst_map.row_pitch,
+ if (!wined3d_resource_prepare_map_memory(&dst->resource, context))
+ goto error;
+ dst_data = wined3d_resource_get_map_ptr(&dst->resource, context, 0);
+ if (!dst_data)
+ goto error;
+
+ conv->convert(src_data, dst_data, src_row_pitch, dst_row_pitch,
source->resource.width, source->resource.height);
- wined3d_surface_unmap(dst);
- wined3d_surface_unmap(source);
+ wined3d_resource_release_map_ptr(&dst->resource, context);
+ wined3d_resource_release_map_ptr(&source->resource, context);
+
+ if (context)
+ context_release(context);
return ret;
+
+error:
+ ERR("Surface conversion failed.\n");
+
+ if (src_data)
+ wined3d_resource_release_map_ptr(&source->resource, context);
+ if (dst_data)
+ wined3d_resource_release_map_ptr(&ret->resource, context);
+ if (ret)
+ wined3d_texture_decref(ret);
+ if (context)
+ context_release(context);
+ return NULL;
}
static HRESULT _Blt_ColorFill(BYTE *buf, unsigned int width, unsigned int height,
--
2.1.3

View File

@ -1,282 +1,101 @@
From 47ef978f9df066194e25874a30f54033105e520b Mon Sep 17 00:00:00 2001
From 89a2597787017d7bc966c2a146fa4c4fc59e9ebb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefan@codeweavers.com>
Date: Tue, 24 Sep 2013 00:31:39 +0200
Subject: wined3d: Don't call the public map function in surface_cpu_blt.
Date: Mon, 23 Sep 2013 23:58:41 +0200
Subject: wined3d: Don't call the public map function in
surface_convert_format.
TODO: Creating a helper surface and releasing it won't work with the CS.
surface_cpu_blt will be called via the CS, so it can't call external
methods that enqueue commands in the stream.
---
dlls/wined3d/surface.c | 108 ++++++++++++++++++++++++++++++++-----------------
1 file changed, 72 insertions(+), 36 deletions(-)
dlls/wined3d/surface.c | 57 +++++++++++++++++++++++++++++++++-----------------
1 file changed, 38 insertions(+), 19 deletions(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index ca15221..eb1397e 100644
index 303a0dc..045ede5 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -4067,26 +4067,40 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
struct wined3d_surface *src_surface, const RECT *src_rect, DWORD flags,
const struct wined3d_blt_fx *fx, enum wined3d_texture_filter_type filter)
@@ -2253,11 +2253,14 @@ static inline const struct d3dfmt_converter_desc *find_converter(enum wined3d_fo
static struct wined3d_texture *surface_convert_format(struct wined3d_surface *source, enum wined3d_format_id to_fmt)
{
- const struct wined3d_box dst_box = {dst_rect->left, dst_rect->top, dst_rect->right, dst_rect->bottom, 0, 1};
int bpp, srcheight, srcwidth, dstheight, dstwidth, width;
const struct wined3d_format *src_format, *dst_format;
unsigned int src_fmt_flags, dst_fmt_flags;
struct wined3d_texture *src_texture = NULL;
- struct wined3d_map_desc dst_map, src_map;
+ void *src_data = NULL, *dst_data = NULL;
- struct wined3d_map_desc src_map, dst_map;
+ void *dst_data = NULL, *src_data = NULL;
+ UINT src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch;
const BYTE *sbase = NULL;
HRESULT hr = WINED3D_OK;
const BYTE *sbuf;
BYTE *dbuf;
int x, y;
+ struct wined3d_device *device = dst_surface->resource.device;
const struct d3dfmt_converter_desc *conv;
struct wined3d_texture *ret = NULL;
struct wined3d_resource_desc desc;
struct wined3d_surface *dst;
+ struct wined3d_context *context = NULL;
+ struct wined3d_device *device = source->resource.device;
TRACE("dst_surface %p, dst_rect %s, src_surface %p, src_rect %s, flags %#x, fx %p, filter %s.\n",
dst_surface, wine_dbgstr_rect(dst_rect), src_surface, wine_dbgstr_rect(src_rect),
flags, fx, debug_d3dtexturefiltertype(filter));
conv = find_converter(source->resource.format->id, to_fmt);
if (!conv)
@@ -2281,30 +2284,46 @@ static struct wined3d_texture *surface_convert_format(struct wined3d_surface *so
}
dst = surface_from_resource(wined3d_texture_get_sub_resource(ret, 0));
- memset(&src_map, 0, sizeof(src_map));
- memset(&dst_map, 0, sizeof(dst_map));
+ wined3d_resource_get_pitch(&source->resource, &src_row_pitch, &src_slice_pitch);
+ wined3d_resource_get_pitch(&ret->resource, &dst_row_pitch, &dst_slice_pitch);
- if (FAILED(wined3d_surface_map(source, &src_map, NULL, WINED3D_MAP_READONLY)))
- {
- ERR("Failed to lock the source surface.\n");
- wined3d_texture_decref(ret);
- return NULL;
- }
- if (FAILED(wined3d_surface_map(dst, &dst_map, NULL, 0)))
- {
- ERR("Failed to lock the destination surface.\n");
- wined3d_surface_unmap(source);
- wined3d_texture_decref(ret);
- return NULL;
- }
+ if (device->d3d_initialized)
+ context = context_acquire(device, NULL);
+
+ if (!wined3d_resource_prepare_map_memory(&dst_surface->resource, context))
+ {
+ hr = E_OUTOFMEMORY;
+ wined3d_resource_load_location(&source->resource, context, source->resource.map_binding);
+ src_data = wined3d_resource_get_map_ptr(&source->resource, context, WINED3D_MAP_READONLY);
+ if (!src_data)
+ goto error;
- conv->convert(src_map.data, dst_map.data, src_map.row_pitch, dst_map.row_pitch,
+ if (!wined3d_resource_prepare_map_memory(&dst->resource, context))
+ goto error;
+ dst_data = wined3d_resource_get_map_ptr(&dst->resource, context, 0);
+ if (!dst_data)
+ goto error;
+ }
+ wined3d_resource_load_location(&dst_surface->resource, context, dst_surface->resource.map_binding);
+
if (src_surface == dst_surface)
{
- wined3d_surface_map(dst_surface, &dst_map, NULL, 0);
- src_map = dst_map;
+ dst_data = wined3d_resource_get_map_ptr(&dst_surface->resource, context, 0);
+ wined3d_resource_get_pitch(&dst_surface->resource, &dst_row_pitch, &dst_slice_pitch);
+ src_data = dst_data;
+ src_row_pitch = dst_row_pitch;
src_format = dst_surface->resource.format;
dst_format = src_format;
dst_fmt_flags = dst_surface->container->resource.format_flags;
@@ -4098,6 +4112,12 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
dst_fmt_flags = dst_surface->container->resource.format_flags;
if (src_surface)
{
+ if (!wined3d_resource_prepare_map_memory(&src_surface->resource, context))
+ {
+ hr = E_OUTOFMEMORY;
+ goto error;
+ }
+ conv->convert(src_data, dst_data, src_row_pitch, dst_row_pitch,
source->resource.width, source->resource.height);
- wined3d_surface_unmap(dst);
- wined3d_surface_unmap(source);
+ wined3d_resource_release_map_ptr(&dst->resource, context);
+ wined3d_resource_release_map_ptr(&source->resource, context);
+
if (dst_surface->resource.format->id != src_surface->resource.format->id)
{
if (!(src_texture = surface_convert_format(src_surface, dst_format->id)))
@@ -4108,7 +4128,9 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
}
src_surface = surface_from_resource(wined3d_texture_get_sub_resource(src_texture, 0));
}
- wined3d_surface_map(src_surface, &src_map, NULL, WINED3D_MAP_READONLY);
+ wined3d_resource_load_location(&src_surface->resource, context, src_surface->resource.map_binding);
+ wined3d_resource_get_pitch(&src_surface->resource, &src_row_pitch, &src_slice_pitch);
+ src_data = wined3d_resource_get_map_ptr(&src_surface->resource, context, 0);
src_format = src_surface->resource.format;
src_fmt_flags = src_surface->container->resource.format_flags;
}
@@ -4118,7 +4140,8 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
src_fmt_flags = dst_fmt_flags;
}
- wined3d_surface_map(dst_surface, &dst_map, &dst_box, 0);
+ wined3d_resource_get_pitch(&dst_surface->resource, &dst_row_pitch, &dst_slice_pitch);
+ dst_data = wined3d_resource_get_map_ptr(&dst_surface->resource, context, 0);
}
bpp = dst_surface->resource.format->byte_count;
@@ -4129,15 +4152,12 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
width = (dst_rect->right - dst_rect->left) * bpp;
if (src_surface)
- sbase = (BYTE *)src_map.data
- + ((src_rect->top / src_format->block_height) * src_map.row_pitch)
+ sbase = (BYTE *)src_data
+ + ((src_rect->top / src_format->block_height) * src_row_pitch)
+ ((src_rect->left / src_format->block_width) * src_format->block_byte_count);
- if (src_surface != dst_surface)
- dbuf = dst_map.data;
- else
- dbuf = (BYTE *)dst_map.data
- + ((dst_rect->top / dst_format->block_height) * dst_map.row_pitch)
- + ((dst_rect->left / dst_format->block_width) * dst_format->block_byte_count);
+ dbuf = (BYTE *)dst_data
+ + ((dst_rect->top / dst_format->block_height) * dst_row_pitch)
+ + ((dst_rect->left / dst_format->block_width) * dst_format->block_byte_count);
if (src_fmt_flags & dst_fmt_flags & WINED3DFMT_FLAG_BLOCKS)
{
@@ -4172,7 +4192,7 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
}
hr = surface_cpu_blt_compressed(sbase, dbuf,
- src_map.row_pitch, dst_map.row_pitch, dstwidth, dstheight,
+ src_row_pitch, dst_row_pitch, dstwidth, dstheight,
src_format, flags, fx);
goto release;
}
@@ -4180,7 +4200,7 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
/* First, all the 'source-less' blits */
if (flags & WINED3D_BLT_COLOR_FILL)
{
- hr = _Blt_ColorFill(dbuf, dstwidth, dstheight, bpp, dst_map.row_pitch, fx->fill_color);
+ hr = _Blt_ColorFill(dbuf, dstwidth, dstheight, bpp, dst_row_pitch, fx->fill_color);
flags &= ~WINED3D_BLT_COLOR_FILL;
}
@@ -4224,19 +4244,19 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
for (y = 0; y < dstheight; ++y)
{
memcpy(dbuf, sbuf, width);
- sbuf += src_map.row_pitch;
- dbuf += dst_map.row_pitch;
+ sbuf += src_row_pitch;
+ dbuf += dst_row_pitch;
}
}
else if (dst_rect->top > src_rect->top)
{
/* Copy from bottom upwards. */
- sbuf += src_map.row_pitch * dstheight;
- dbuf += dst_map.row_pitch * dstheight;
+ sbuf += src_row_pitch * dstheight;
+ dbuf += dst_row_pitch * dstheight;
for (y = 0; y < dstheight; ++y)
{
- sbuf -= src_map.row_pitch;
- dbuf -= dst_map.row_pitch;
+ sbuf -= src_row_pitch;
+ dbuf -= dst_row_pitch;
memcpy(dbuf, sbuf, width);
}
}
@@ -4246,8 +4266,8 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
for (y = 0; y < dstheight; ++y)
{
memmove(dbuf, sbuf, width);
- sbuf += src_map.row_pitch;
- dbuf += dst_map.row_pitch;
+ sbuf += src_row_pitch;
+ dbuf += dst_row_pitch;
}
}
}
@@ -4256,9 +4276,9 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
/* Stretching in y direction only. */
for (y = sy = 0; y < dstheight; ++y, sy += yinc)
{
- sbuf = sbase + (sy >> 16) * src_map.row_pitch;
+ sbuf = sbase + (sy >> 16) * src_row_pitch;
memcpy(dbuf, sbuf, width);
- dbuf += dst_map.row_pitch;
+ dbuf += dst_row_pitch;
}
}
}
@@ -4268,13 +4288,13 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
int last_sy = -1;
for (y = sy = 0; y < dstheight; ++y, sy += yinc)
{
- sbuf = sbase + (sy >> 16) * src_map.row_pitch;
+ sbuf = sbase + (sy >> 16) * src_row_pitch;
if ((sy >> 16) == (last_sy >> 16))
{
/* This source row is the same as last source row -
* Copy the already stretched row. */
- memcpy(dbuf, dbuf - dst_map.row_pitch, width);
+ memcpy(dbuf, dbuf - dst_row_pitch, width);
}
else
{
@@ -4321,14 +4341,14 @@ do { \
}
#undef STRETCH_ROW
}
- dbuf += dst_map.row_pitch;
+ dbuf += dst_row_pitch;
last_sy = sy;
}
}
}
else
{
- LONG dstyinc = dst_map.row_pitch, dstxinc = bpp;
+ LONG dstyinc = dst_row_pitch, dstxinc = bpp;
DWORD keylow = 0xffffffff, keyhigh = 0, keymask = 0xffffffff;
DWORD destkeylow = 0x0, destkeyhigh = 0xffffffff, destkeymask = 0xffffffff;
if (flags & (WINED3D_BLT_SRC_CKEY | WINED3D_BLT_DST_CKEY
@@ -4380,7 +4400,7 @@ do { \
LONG tmpxy;
dTopLeft = dbuf;
dTopRight = dbuf + ((dstwidth - 1) * bpp);
- dBottomLeft = dTopLeft + ((dstheight - 1) * dst_map.row_pitch);
+ dBottomLeft = dTopLeft + ((dstheight - 1) * dst_row_pitch);
dBottomRight = dBottomLeft + ((dstwidth - 1) * bpp);
if (fx->fx & WINEDDBLTFX_ARITHSTRETCHY)
@@ -4463,7 +4483,7 @@ do { \
type *d = (type *)dbuf, *dx, tmp; \
for (y = sy = 0; y < dstheight; ++y, sy += yinc) \
{ \
- s = (const type *)(sbase + (sy >> 16) * src_map.row_pitch); \
+ s = (const type *)(sbase + (sy >> 16) * src_row_pitch); \
dx = d; \
for (x = sx = 0; x < dstwidth; ++x, sx += xinc) \
{ \
@@ -4496,7 +4516,7 @@ do { \
BYTE *d = dbuf, *dx;
for (y = sy = 0; y < dstheight; ++y, sy += yinc)
{
- sbuf = sbase + (sy >> 16) * src_map.row_pitch;
+ sbuf = sbase + (sy >> 16) * src_row_pitch;
dx = d;
for (x = sx = 0; x < dstwidth; ++x, sx+= xinc)
{
@@ -4527,6 +4547,10 @@ do { \
}
}
+ wined3d_resource_invalidate_location(&dst_surface->resource, ~dst_surface->resource.map_binding);
+ if (dst_surface->container)
+ wined3d_texture_set_dirty(dst_surface->container);
+
error:
if (flags && FIXME_ON(d3d_surface))
{
@@ -4534,12 +4558,24 @@ error:
}
release:
- wined3d_surface_unmap(dst_surface);
- if (src_surface && src_surface != dst_surface)
- wined3d_surface_unmap(src_surface);
+ if (dst_data)
+ {
+ wined3d_resource_release_map_ptr(&dst_surface->resource, context);
+
+ if (dst_surface->container->swapchain
+ && dst_surface->container == dst_surface->container->swapchain->front_buffer)
+ {
+ dst_surface->lockedRect = *dst_rect;
+ dst_surface->surface_ops->surface_frontbuffer_updated(dst_surface);
+ }
+ }
+ if (src_surface && src_surface != dst_surface && src_data)
+ wined3d_resource_release_map_ptr(&src_surface->resource, context);
/* Release the converted surface, if any. */
if (src_texture)
wined3d_texture_decref(src_texture);
+ if (context)
+ context_release(context);
return hr;
return ret;
+
+error:
+ ERR("Surface conversion failed.\n");
+
+ if (src_data)
+ wined3d_resource_release_map_ptr(&source->resource, context);
+ if (dst_data)
+ wined3d_resource_release_map_ptr(&ret->resource, context);
+ if (ret)
+ wined3d_texture_decref(ret);
+ if (context)
+ context_release(context);
+ return NULL;
}
static HRESULT _Blt_ColorFill(BYTE *buf, unsigned int width, unsigned int height,
--
2.7.1
2.1.3

View File

@ -0,0 +1,282 @@
From 47ef978f9df066194e25874a30f54033105e520b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefan@codeweavers.com>
Date: Tue, 24 Sep 2013 00:31:39 +0200
Subject: wined3d: Don't call the public map function in surface_cpu_blt.
---
dlls/wined3d/surface.c | 108 ++++++++++++++++++++++++++++++++-----------------
1 file changed, 72 insertions(+), 36 deletions(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index ca15221..eb1397e 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -4067,26 +4067,40 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
struct wined3d_surface *src_surface, const RECT *src_rect, DWORD flags,
const struct wined3d_blt_fx *fx, enum wined3d_texture_filter_type filter)
{
- const struct wined3d_box dst_box = {dst_rect->left, dst_rect->top, dst_rect->right, dst_rect->bottom, 0, 1};
int bpp, srcheight, srcwidth, dstheight, dstwidth, width;
const struct wined3d_format *src_format, *dst_format;
unsigned int src_fmt_flags, dst_fmt_flags;
struct wined3d_texture *src_texture = NULL;
- struct wined3d_map_desc dst_map, src_map;
+ void *src_data = NULL, *dst_data = NULL;
+ UINT src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch;
const BYTE *sbase = NULL;
HRESULT hr = WINED3D_OK;
const BYTE *sbuf;
BYTE *dbuf;
int x, y;
+ struct wined3d_device *device = dst_surface->resource.device;
+ struct wined3d_context *context = NULL;
TRACE("dst_surface %p, dst_rect %s, src_surface %p, src_rect %s, flags %#x, fx %p, filter %s.\n",
dst_surface, wine_dbgstr_rect(dst_rect), src_surface, wine_dbgstr_rect(src_rect),
flags, fx, debug_d3dtexturefiltertype(filter));
+ if (device->d3d_initialized)
+ context = context_acquire(device, NULL);
+
+ if (!wined3d_resource_prepare_map_memory(&dst_surface->resource, context))
+ {
+ hr = E_OUTOFMEMORY;
+ goto error;
+ }
+ wined3d_resource_load_location(&dst_surface->resource, context, dst_surface->resource.map_binding);
+
if (src_surface == dst_surface)
{
- wined3d_surface_map(dst_surface, &dst_map, NULL, 0);
- src_map = dst_map;
+ dst_data = wined3d_resource_get_map_ptr(&dst_surface->resource, context, 0);
+ wined3d_resource_get_pitch(&dst_surface->resource, &dst_row_pitch, &dst_slice_pitch);
+ src_data = dst_data;
+ src_row_pitch = dst_row_pitch;
src_format = dst_surface->resource.format;
dst_format = src_format;
dst_fmt_flags = dst_surface->container->resource.format_flags;
@@ -4098,6 +4112,12 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
dst_fmt_flags = dst_surface->container->resource.format_flags;
if (src_surface)
{
+ if (!wined3d_resource_prepare_map_memory(&src_surface->resource, context))
+ {
+ hr = E_OUTOFMEMORY;
+ goto error;
+ }
+
if (dst_surface->resource.format->id != src_surface->resource.format->id)
{
if (!(src_texture = surface_convert_format(src_surface, dst_format->id)))
@@ -4108,7 +4128,9 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
}
src_surface = surface_from_resource(wined3d_texture_get_sub_resource(src_texture, 0));
}
- wined3d_surface_map(src_surface, &src_map, NULL, WINED3D_MAP_READONLY);
+ wined3d_resource_load_location(&src_surface->resource, context, src_surface->resource.map_binding);
+ wined3d_resource_get_pitch(&src_surface->resource, &src_row_pitch, &src_slice_pitch);
+ src_data = wined3d_resource_get_map_ptr(&src_surface->resource, context, 0);
src_format = src_surface->resource.format;
src_fmt_flags = src_surface->container->resource.format_flags;
}
@@ -4118,7 +4140,8 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
src_fmt_flags = dst_fmt_flags;
}
- wined3d_surface_map(dst_surface, &dst_map, &dst_box, 0);
+ wined3d_resource_get_pitch(&dst_surface->resource, &dst_row_pitch, &dst_slice_pitch);
+ dst_data = wined3d_resource_get_map_ptr(&dst_surface->resource, context, 0);
}
bpp = dst_surface->resource.format->byte_count;
@@ -4129,15 +4152,12 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
width = (dst_rect->right - dst_rect->left) * bpp;
if (src_surface)
- sbase = (BYTE *)src_map.data
- + ((src_rect->top / src_format->block_height) * src_map.row_pitch)
+ sbase = (BYTE *)src_data
+ + ((src_rect->top / src_format->block_height) * src_row_pitch)
+ ((src_rect->left / src_format->block_width) * src_format->block_byte_count);
- if (src_surface != dst_surface)
- dbuf = dst_map.data;
- else
- dbuf = (BYTE *)dst_map.data
- + ((dst_rect->top / dst_format->block_height) * dst_map.row_pitch)
- + ((dst_rect->left / dst_format->block_width) * dst_format->block_byte_count);
+ dbuf = (BYTE *)dst_data
+ + ((dst_rect->top / dst_format->block_height) * dst_row_pitch)
+ + ((dst_rect->left / dst_format->block_width) * dst_format->block_byte_count);
if (src_fmt_flags & dst_fmt_flags & WINED3DFMT_FLAG_BLOCKS)
{
@@ -4172,7 +4192,7 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
}
hr = surface_cpu_blt_compressed(sbase, dbuf,
- src_map.row_pitch, dst_map.row_pitch, dstwidth, dstheight,
+ src_row_pitch, dst_row_pitch, dstwidth, dstheight,
src_format, flags, fx);
goto release;
}
@@ -4180,7 +4200,7 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
/* First, all the 'source-less' blits */
if (flags & WINED3D_BLT_COLOR_FILL)
{
- hr = _Blt_ColorFill(dbuf, dstwidth, dstheight, bpp, dst_map.row_pitch, fx->fill_color);
+ hr = _Blt_ColorFill(dbuf, dstwidth, dstheight, bpp, dst_row_pitch, fx->fill_color);
flags &= ~WINED3D_BLT_COLOR_FILL;
}
@@ -4224,19 +4244,19 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
for (y = 0; y < dstheight; ++y)
{
memcpy(dbuf, sbuf, width);
- sbuf += src_map.row_pitch;
- dbuf += dst_map.row_pitch;
+ sbuf += src_row_pitch;
+ dbuf += dst_row_pitch;
}
}
else if (dst_rect->top > src_rect->top)
{
/* Copy from bottom upwards. */
- sbuf += src_map.row_pitch * dstheight;
- dbuf += dst_map.row_pitch * dstheight;
+ sbuf += src_row_pitch * dstheight;
+ dbuf += dst_row_pitch * dstheight;
for (y = 0; y < dstheight; ++y)
{
- sbuf -= src_map.row_pitch;
- dbuf -= dst_map.row_pitch;
+ sbuf -= src_row_pitch;
+ dbuf -= dst_row_pitch;
memcpy(dbuf, sbuf, width);
}
}
@@ -4246,8 +4266,8 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
for (y = 0; y < dstheight; ++y)
{
memmove(dbuf, sbuf, width);
- sbuf += src_map.row_pitch;
- dbuf += dst_map.row_pitch;
+ sbuf += src_row_pitch;
+ dbuf += dst_row_pitch;
}
}
}
@@ -4256,9 +4276,9 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
/* Stretching in y direction only. */
for (y = sy = 0; y < dstheight; ++y, sy += yinc)
{
- sbuf = sbase + (sy >> 16) * src_map.row_pitch;
+ sbuf = sbase + (sy >> 16) * src_row_pitch;
memcpy(dbuf, sbuf, width);
- dbuf += dst_map.row_pitch;
+ dbuf += dst_row_pitch;
}
}
}
@@ -4268,13 +4288,13 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
int last_sy = -1;
for (y = sy = 0; y < dstheight; ++y, sy += yinc)
{
- sbuf = sbase + (sy >> 16) * src_map.row_pitch;
+ sbuf = sbase + (sy >> 16) * src_row_pitch;
if ((sy >> 16) == (last_sy >> 16))
{
/* This source row is the same as last source row -
* Copy the already stretched row. */
- memcpy(dbuf, dbuf - dst_map.row_pitch, width);
+ memcpy(dbuf, dbuf - dst_row_pitch, width);
}
else
{
@@ -4321,14 +4341,14 @@ do { \
}
#undef STRETCH_ROW
}
- dbuf += dst_map.row_pitch;
+ dbuf += dst_row_pitch;
last_sy = sy;
}
}
}
else
{
- LONG dstyinc = dst_map.row_pitch, dstxinc = bpp;
+ LONG dstyinc = dst_row_pitch, dstxinc = bpp;
DWORD keylow = 0xffffffff, keyhigh = 0, keymask = 0xffffffff;
DWORD destkeylow = 0x0, destkeyhigh = 0xffffffff, destkeymask = 0xffffffff;
if (flags & (WINED3D_BLT_SRC_CKEY | WINED3D_BLT_DST_CKEY
@@ -4380,7 +4400,7 @@ do { \
LONG tmpxy;
dTopLeft = dbuf;
dTopRight = dbuf + ((dstwidth - 1) * bpp);
- dBottomLeft = dTopLeft + ((dstheight - 1) * dst_map.row_pitch);
+ dBottomLeft = dTopLeft + ((dstheight - 1) * dst_row_pitch);
dBottomRight = dBottomLeft + ((dstwidth - 1) * bpp);
if (fx->fx & WINEDDBLTFX_ARITHSTRETCHY)
@@ -4463,7 +4483,7 @@ do { \
type *d = (type *)dbuf, *dx, tmp; \
for (y = sy = 0; y < dstheight; ++y, sy += yinc) \
{ \
- s = (const type *)(sbase + (sy >> 16) * src_map.row_pitch); \
+ s = (const type *)(sbase + (sy >> 16) * src_row_pitch); \
dx = d; \
for (x = sx = 0; x < dstwidth; ++x, sx += xinc) \
{ \
@@ -4496,7 +4516,7 @@ do { \
BYTE *d = dbuf, *dx;
for (y = sy = 0; y < dstheight; ++y, sy += yinc)
{
- sbuf = sbase + (sy >> 16) * src_map.row_pitch;
+ sbuf = sbase + (sy >> 16) * src_row_pitch;
dx = d;
for (x = sx = 0; x < dstwidth; ++x, sx+= xinc)
{
@@ -4527,6 +4547,10 @@ do { \
}
}
+ wined3d_resource_invalidate_location(&dst_surface->resource, ~dst_surface->resource.map_binding);
+ if (dst_surface->container)
+ wined3d_texture_set_dirty(dst_surface->container);
+
error:
if (flags && FIXME_ON(d3d_surface))
{
@@ -4534,12 +4558,24 @@ error:
}
release:
- wined3d_surface_unmap(dst_surface);
- if (src_surface && src_surface != dst_surface)
- wined3d_surface_unmap(src_surface);
+ if (dst_data)
+ {
+ wined3d_resource_release_map_ptr(&dst_surface->resource, context);
+
+ if (dst_surface->container->swapchain
+ && dst_surface->container == dst_surface->container->swapchain->front_buffer)
+ {
+ dst_surface->lockedRect = *dst_rect;
+ dst_surface->surface_ops->surface_frontbuffer_updated(dst_surface);
+ }
+ }
+ if (src_surface && src_surface != dst_surface && src_data)
+ wined3d_resource_release_map_ptr(&src_surface->resource, context);
/* Release the converted surface, if any. */
if (src_texture)
wined3d_texture_decref(src_texture);
+ if (context)
+ context_release(context);
return hr;
}
--
2.7.1

Some files were not shown because too many files have changed in this diff Show More