From 0e471ac45771393ea74178eb98f41b904168cf64 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Tue, 27 Jan 2009 11:28:29 +0000 Subject: [PATCH 01/18] wgl: relocate wgl code to state_trackers/wgl Similar to the GLX state trackers for DRI and xlib. --- src/gallium/SConscript | 3 +++ .../state_tracker => gallium/state_trackers}/wgl/SConscript | 0 .../state_tracker => gallium/state_trackers}/wgl/opengl32.def | 0 .../state_tracker => gallium/state_trackers}/wgl/stw_device.c | 0 .../state_tracker => gallium/state_trackers}/wgl/stw_device.h | 0 .../state_trackers}/wgl/stw_framebuffer.c | 0 .../state_trackers}/wgl/stw_framebuffer.h | 0 .../state_tracker => gallium/state_trackers}/wgl/stw_icd.c | 0 .../state_tracker => gallium/state_trackers}/wgl/stw_icd.h | 0 .../state_trackers}/wgl/stw_pixelformat.c | 0 .../state_trackers}/wgl/stw_pixelformat.h | 0 .../state_tracker => gallium/state_trackers}/wgl/stw_quirks.c | 0 .../state_tracker => gallium/state_trackers}/wgl/stw_wgl.c | 0 .../state_tracker => gallium/state_trackers}/wgl/stw_wgl.h | 0 .../state_trackers}/wgl/stw_wgl_arbextensionsstring.c | 0 .../state_trackers}/wgl/stw_wgl_arbextensionsstring.h | 0 .../state_trackers}/wgl/stw_wgl_arbmultisample.c | 0 .../state_trackers}/wgl/stw_wgl_arbmultisample.h | 0 .../state_trackers}/wgl/stw_wgl_arbpixelformat.c | 0 .../state_trackers}/wgl/stw_wgl_arbpixelformat.h | 0 .../state_trackers}/wgl/stw_wgl_context.c | 0 .../state_trackers}/wgl/stw_wgl_context.h | 0 .../state_trackers}/wgl/stw_wgl_getprocaddress.c | 0 .../state_trackers}/wgl/stw_wgl_pixelformat.c | 0 .../state_trackers}/wgl/stw_wgl_swapbuffers.c | 0 .../state_tracker => gallium/state_trackers}/wgl/stw_winsys.h | 0 src/mesa/SConscript | 2 -- 27 files changed, 3 insertions(+), 2 deletions(-) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/SConscript (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/opengl32.def (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_device.c (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_device.h (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_framebuffer.c (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_framebuffer.h (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_icd.c (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_icd.h (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_pixelformat.c (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_pixelformat.h (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_quirks.c (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_wgl.c (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_wgl.h (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_wgl_arbextensionsstring.c (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_wgl_arbextensionsstring.h (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_wgl_arbmultisample.c (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_wgl_arbmultisample.h (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_wgl_arbpixelformat.c (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_wgl_arbpixelformat.h (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_wgl_context.c (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_wgl_context.h (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_wgl_getprocaddress.c (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_wgl_pixelformat.c (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_wgl_swapbuffers.c (100%) rename src/{mesa/state_tracker => gallium/state_trackers}/wgl/stw_winsys.h (100%) diff --git a/src/gallium/SConscript b/src/gallium/SConscript index 6a3e7e77ed8..9e4596a647f 100644 --- a/src/gallium/SConscript +++ b/src/gallium/SConscript @@ -27,3 +27,6 @@ for driver in env['drivers']: SConscript(os.path.join('drivers', driver, 'SConscript')) SConscript('state_trackers/python/SConscript') + +if platform == 'windows': + SConscript('state_trackers/wgl/SConscript') diff --git a/src/mesa/state_tracker/wgl/SConscript b/src/gallium/state_trackers/wgl/SConscript similarity index 100% rename from src/mesa/state_tracker/wgl/SConscript rename to src/gallium/state_trackers/wgl/SConscript diff --git a/src/mesa/state_tracker/wgl/opengl32.def b/src/gallium/state_trackers/wgl/opengl32.def similarity index 100% rename from src/mesa/state_tracker/wgl/opengl32.def rename to src/gallium/state_trackers/wgl/opengl32.def diff --git a/src/mesa/state_tracker/wgl/stw_device.c b/src/gallium/state_trackers/wgl/stw_device.c similarity index 100% rename from src/mesa/state_tracker/wgl/stw_device.c rename to src/gallium/state_trackers/wgl/stw_device.c diff --git a/src/mesa/state_tracker/wgl/stw_device.h b/src/gallium/state_trackers/wgl/stw_device.h similarity index 100% rename from src/mesa/state_tracker/wgl/stw_device.h rename to src/gallium/state_trackers/wgl/stw_device.h diff --git a/src/mesa/state_tracker/wgl/stw_framebuffer.c b/src/gallium/state_trackers/wgl/stw_framebuffer.c similarity index 100% rename from src/mesa/state_tracker/wgl/stw_framebuffer.c rename to src/gallium/state_trackers/wgl/stw_framebuffer.c diff --git a/src/mesa/state_tracker/wgl/stw_framebuffer.h b/src/gallium/state_trackers/wgl/stw_framebuffer.h similarity index 100% rename from src/mesa/state_tracker/wgl/stw_framebuffer.h rename to src/gallium/state_trackers/wgl/stw_framebuffer.h diff --git a/src/mesa/state_tracker/wgl/stw_icd.c b/src/gallium/state_trackers/wgl/stw_icd.c similarity index 100% rename from src/mesa/state_tracker/wgl/stw_icd.c rename to src/gallium/state_trackers/wgl/stw_icd.c diff --git a/src/mesa/state_tracker/wgl/stw_icd.h b/src/gallium/state_trackers/wgl/stw_icd.h similarity index 100% rename from src/mesa/state_tracker/wgl/stw_icd.h rename to src/gallium/state_trackers/wgl/stw_icd.h diff --git a/src/mesa/state_tracker/wgl/stw_pixelformat.c b/src/gallium/state_trackers/wgl/stw_pixelformat.c similarity index 100% rename from src/mesa/state_tracker/wgl/stw_pixelformat.c rename to src/gallium/state_trackers/wgl/stw_pixelformat.c diff --git a/src/mesa/state_tracker/wgl/stw_pixelformat.h b/src/gallium/state_trackers/wgl/stw_pixelformat.h similarity index 100% rename from src/mesa/state_tracker/wgl/stw_pixelformat.h rename to src/gallium/state_trackers/wgl/stw_pixelformat.h diff --git a/src/mesa/state_tracker/wgl/stw_quirks.c b/src/gallium/state_trackers/wgl/stw_quirks.c similarity index 100% rename from src/mesa/state_tracker/wgl/stw_quirks.c rename to src/gallium/state_trackers/wgl/stw_quirks.c diff --git a/src/mesa/state_tracker/wgl/stw_wgl.c b/src/gallium/state_trackers/wgl/stw_wgl.c similarity index 100% rename from src/mesa/state_tracker/wgl/stw_wgl.c rename to src/gallium/state_trackers/wgl/stw_wgl.c diff --git a/src/mesa/state_tracker/wgl/stw_wgl.h b/src/gallium/state_trackers/wgl/stw_wgl.h similarity index 100% rename from src/mesa/state_tracker/wgl/stw_wgl.h rename to src/gallium/state_trackers/wgl/stw_wgl.h diff --git a/src/mesa/state_tracker/wgl/stw_wgl_arbextensionsstring.c b/src/gallium/state_trackers/wgl/stw_wgl_arbextensionsstring.c similarity index 100% rename from src/mesa/state_tracker/wgl/stw_wgl_arbextensionsstring.c rename to src/gallium/state_trackers/wgl/stw_wgl_arbextensionsstring.c diff --git a/src/mesa/state_tracker/wgl/stw_wgl_arbextensionsstring.h b/src/gallium/state_trackers/wgl/stw_wgl_arbextensionsstring.h similarity index 100% rename from src/mesa/state_tracker/wgl/stw_wgl_arbextensionsstring.h rename to src/gallium/state_trackers/wgl/stw_wgl_arbextensionsstring.h diff --git a/src/mesa/state_tracker/wgl/stw_wgl_arbmultisample.c b/src/gallium/state_trackers/wgl/stw_wgl_arbmultisample.c similarity index 100% rename from src/mesa/state_tracker/wgl/stw_wgl_arbmultisample.c rename to src/gallium/state_trackers/wgl/stw_wgl_arbmultisample.c diff --git a/src/mesa/state_tracker/wgl/stw_wgl_arbmultisample.h b/src/gallium/state_trackers/wgl/stw_wgl_arbmultisample.h similarity index 100% rename from src/mesa/state_tracker/wgl/stw_wgl_arbmultisample.h rename to src/gallium/state_trackers/wgl/stw_wgl_arbmultisample.h diff --git a/src/mesa/state_tracker/wgl/stw_wgl_arbpixelformat.c b/src/gallium/state_trackers/wgl/stw_wgl_arbpixelformat.c similarity index 100% rename from src/mesa/state_tracker/wgl/stw_wgl_arbpixelformat.c rename to src/gallium/state_trackers/wgl/stw_wgl_arbpixelformat.c diff --git a/src/mesa/state_tracker/wgl/stw_wgl_arbpixelformat.h b/src/gallium/state_trackers/wgl/stw_wgl_arbpixelformat.h similarity index 100% rename from src/mesa/state_tracker/wgl/stw_wgl_arbpixelformat.h rename to src/gallium/state_trackers/wgl/stw_wgl_arbpixelformat.h diff --git a/src/mesa/state_tracker/wgl/stw_wgl_context.c b/src/gallium/state_trackers/wgl/stw_wgl_context.c similarity index 100% rename from src/mesa/state_tracker/wgl/stw_wgl_context.c rename to src/gallium/state_trackers/wgl/stw_wgl_context.c diff --git a/src/mesa/state_tracker/wgl/stw_wgl_context.h b/src/gallium/state_trackers/wgl/stw_wgl_context.h similarity index 100% rename from src/mesa/state_tracker/wgl/stw_wgl_context.h rename to src/gallium/state_trackers/wgl/stw_wgl_context.h diff --git a/src/mesa/state_tracker/wgl/stw_wgl_getprocaddress.c b/src/gallium/state_trackers/wgl/stw_wgl_getprocaddress.c similarity index 100% rename from src/mesa/state_tracker/wgl/stw_wgl_getprocaddress.c rename to src/gallium/state_trackers/wgl/stw_wgl_getprocaddress.c diff --git a/src/mesa/state_tracker/wgl/stw_wgl_pixelformat.c b/src/gallium/state_trackers/wgl/stw_wgl_pixelformat.c similarity index 100% rename from src/mesa/state_tracker/wgl/stw_wgl_pixelformat.c rename to src/gallium/state_trackers/wgl/stw_wgl_pixelformat.c diff --git a/src/mesa/state_tracker/wgl/stw_wgl_swapbuffers.c b/src/gallium/state_trackers/wgl/stw_wgl_swapbuffers.c similarity index 100% rename from src/mesa/state_tracker/wgl/stw_wgl_swapbuffers.c rename to src/gallium/state_trackers/wgl/stw_wgl_swapbuffers.c diff --git a/src/mesa/state_tracker/wgl/stw_winsys.h b/src/gallium/state_trackers/wgl/stw_winsys.h similarity index 100% rename from src/mesa/state_tracker/wgl/stw_winsys.h rename to src/gallium/state_trackers/wgl/stw_winsys.h diff --git a/src/mesa/SConscript b/src/mesa/SConscript index 01620ee6147..a878d31dbb5 100644 --- a/src/mesa/SConscript +++ b/src/mesa/SConscript @@ -341,5 +341,3 @@ if env['platform'] != 'winddk': ) Export('glapi') - if platform == 'windows': - SConscript('state_tracker/wgl/SConscript') From 19d06f4e1692070afc7b3cab0ea1d78044820b0a Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 11:40:54 +0000 Subject: [PATCH 02/18] wgl: split into shared, (fake)wgl and icd directories --- src/gallium/state_trackers/wgl/SConscript | 27 ++++++++++--------- .../state_trackers/wgl/{ => icd}/stw_icd.c | 6 ++--- .../state_trackers/wgl/{ => icd}/stw_icd.h | 0 .../wgl/{ => shared}/stw_device.c | 6 ++--- .../wgl/{ => shared}/stw_device.h | 2 +- .../wgl/{ => shared}/stw_framebuffer.c | 0 .../wgl/{ => shared}/stw_framebuffer.h | 0 .../wgl/{ => shared}/stw_pixelformat.c | 0 .../wgl/{ => shared}/stw_pixelformat.h | 0 .../wgl/{ => shared}/stw_quirks.c | 0 .../wgl/{ => shared}/stw_winsys.h | 0 .../state_trackers/wgl/{ => wgl}/stw_wgl.c | 0 .../state_trackers/wgl/{ => wgl}/stw_wgl.h | 0 .../{ => wgl}/stw_wgl_arbextensionsstring.c | 0 .../{ => wgl}/stw_wgl_arbextensionsstring.h | 0 .../wgl/{ => wgl}/stw_wgl_arbmultisample.c | 0 .../wgl/{ => wgl}/stw_wgl_arbmultisample.h | 0 .../wgl/{ => wgl}/stw_wgl_arbpixelformat.c | 2 +- .../wgl/{ => wgl}/stw_wgl_arbpixelformat.h | 0 .../wgl/{ => wgl}/stw_wgl_context.c | 8 +++--- .../wgl/{ => wgl}/stw_wgl_context.h | 0 .../wgl/{ => wgl}/stw_wgl_getprocaddress.c | 0 .../wgl/{ => wgl}/stw_wgl_pixelformat.c | 2 +- .../wgl/{ => wgl}/stw_wgl_swapbuffers.c | 6 ++--- 24 files changed, 30 insertions(+), 29 deletions(-) rename src/gallium/state_trackers/wgl/{ => icd}/stw_icd.c (99%) rename src/gallium/state_trackers/wgl/{ => icd}/stw_icd.h (100%) rename src/gallium/state_trackers/wgl/{ => shared}/stw_device.c (96%) rename src/gallium/state_trackers/wgl/{ => shared}/stw_device.h (98%) rename src/gallium/state_trackers/wgl/{ => shared}/stw_framebuffer.c (100%) rename src/gallium/state_trackers/wgl/{ => shared}/stw_framebuffer.h (100%) rename src/gallium/state_trackers/wgl/{ => shared}/stw_pixelformat.c (100%) rename src/gallium/state_trackers/wgl/{ => shared}/stw_pixelformat.h (100%) rename src/gallium/state_trackers/wgl/{ => shared}/stw_quirks.c (100%) rename src/gallium/state_trackers/wgl/{ => shared}/stw_winsys.h (100%) rename src/gallium/state_trackers/wgl/{ => wgl}/stw_wgl.c (100%) rename src/gallium/state_trackers/wgl/{ => wgl}/stw_wgl.h (100%) rename src/gallium/state_trackers/wgl/{ => wgl}/stw_wgl_arbextensionsstring.c (100%) rename src/gallium/state_trackers/wgl/{ => wgl}/stw_wgl_arbextensionsstring.h (100%) rename src/gallium/state_trackers/wgl/{ => wgl}/stw_wgl_arbmultisample.c (100%) rename src/gallium/state_trackers/wgl/{ => wgl}/stw_wgl_arbmultisample.h (100%) rename src/gallium/state_trackers/wgl/{ => wgl}/stw_wgl_arbpixelformat.c (99%) rename src/gallium/state_trackers/wgl/{ => wgl}/stw_wgl_arbpixelformat.h (100%) rename src/gallium/state_trackers/wgl/{ => wgl}/stw_wgl_context.c (98%) rename src/gallium/state_trackers/wgl/{ => wgl}/stw_wgl_context.h (100%) rename src/gallium/state_trackers/wgl/{ => wgl}/stw_wgl_getprocaddress.c (100%) rename src/gallium/state_trackers/wgl/{ => wgl}/stw_wgl_pixelformat.c (99%) rename src/gallium/state_trackers/wgl/{ => wgl}/stw_wgl_swapbuffers.c (95%) diff --git a/src/gallium/state_trackers/wgl/SConscript b/src/gallium/state_trackers/wgl/SConscript index bb579930f52..9516dc5a3c2 100644 --- a/src/gallium/state_trackers/wgl/SConscript +++ b/src/gallium/state_trackers/wgl/SConscript @@ -8,6 +8,7 @@ if env['platform'] in ['windows']: env.Append(CPPPATH = [ '#src/mesa', + '.', ]) env.Append(CPPDEFINES = [ @@ -18,19 +19,19 @@ if env['platform'] in ['windows']: ]) sources = [ - 'stw_device.c', - 'stw_framebuffer.c', - 'stw_icd.c', - 'stw_pixelformat.c', - 'stw_quirks.c', - 'stw_wgl_arbextensionsstring.c', - 'stw_wgl_arbmultisample.c', - 'stw_wgl_arbpixelformat.c', - #'stw_wgl.c', - 'stw_wgl_context.c', - 'stw_wgl_getprocaddress.c', - 'stw_wgl_pixelformat.c', - 'stw_wgl_swapbuffers.c', + 'icd/stw_icd.c', + 'shared/stw_device.c', + 'shared/stw_framebuffer.c', + 'shared/stw_pixelformat.c', + 'shared/stw_quirks.c', + 'wgl/stw_wgl_arbextensionsstring.c', + 'wgl/stw_wgl_arbmultisample.c', + 'wgl/stw_wgl_arbpixelformat.c', + #'wgl/stw_wgl.c', + 'wgl/stw_wgl_context.c', + 'wgl/stw_wgl_getprocaddress.c', + 'wgl/stw_wgl_pixelformat.c', + 'wgl/stw_wgl_swapbuffers.c', ] wgl = env.ConvenienceLibrary( diff --git a/src/gallium/state_trackers/wgl/stw_icd.c b/src/gallium/state_trackers/wgl/icd/stw_icd.c similarity index 99% rename from src/gallium/state_trackers/wgl/stw_icd.c rename to src/gallium/state_trackers/wgl/icd/stw_icd.c index 1dddc242097..bf057eb83bd 100644 --- a/src/gallium/state_trackers/wgl/stw_icd.c +++ b/src/gallium/state_trackers/wgl/icd/stw_icd.c @@ -32,9 +32,9 @@ #include "pipe/p_debug.h" -#include "stw_device.h" -#include "stw_icd.h" -#include "stw_wgl.h" +#include "shared/stw_device.h" +#include "icd/stw_icd.h" +#include "wgl/stw_wgl.h" static HGLRC diff --git a/src/gallium/state_trackers/wgl/stw_icd.h b/src/gallium/state_trackers/wgl/icd/stw_icd.h similarity index 100% rename from src/gallium/state_trackers/wgl/stw_icd.h rename to src/gallium/state_trackers/wgl/icd/stw_icd.h diff --git a/src/gallium/state_trackers/wgl/stw_device.c b/src/gallium/state_trackers/wgl/shared/stw_device.c similarity index 96% rename from src/gallium/state_trackers/wgl/stw_device.c rename to src/gallium/state_trackers/wgl/shared/stw_device.c index 129b24ce777..63ee066824e 100644 --- a/src/gallium/state_trackers/wgl/stw_device.c +++ b/src/gallium/state_trackers/wgl/shared/stw_device.c @@ -31,9 +31,9 @@ #include "pipe/p_winsys.h" #include "pipe/p_screen.h" -#include "stw_device.h" -#include "stw_winsys.h" -#include "stw_pixelformat.h" +#include "shared/stw_device.h" +#include "shared/stw_winsys.h" +#include "shared/stw_pixelformat.h" struct stw_device *stw_dev = NULL; diff --git a/src/gallium/state_trackers/wgl/stw_device.h b/src/gallium/state_trackers/wgl/shared/stw_device.h similarity index 98% rename from src/gallium/state_trackers/wgl/stw_device.h rename to src/gallium/state_trackers/wgl/shared/stw_device.h index e2020bf0554..2babc654daf 100644 --- a/src/gallium/state_trackers/wgl/stw_device.h +++ b/src/gallium/state_trackers/wgl/shared/stw_device.h @@ -29,7 +29,7 @@ #define ST_DEVICE_H_ -#include "stw_icd.h" +#include "icd/stw_icd.h" struct pipe_screen; diff --git a/src/gallium/state_trackers/wgl/stw_framebuffer.c b/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c similarity index 100% rename from src/gallium/state_trackers/wgl/stw_framebuffer.c rename to src/gallium/state_trackers/wgl/shared/stw_framebuffer.c diff --git a/src/gallium/state_trackers/wgl/stw_framebuffer.h b/src/gallium/state_trackers/wgl/shared/stw_framebuffer.h similarity index 100% rename from src/gallium/state_trackers/wgl/stw_framebuffer.h rename to src/gallium/state_trackers/wgl/shared/stw_framebuffer.h diff --git a/src/gallium/state_trackers/wgl/stw_pixelformat.c b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.c similarity index 100% rename from src/gallium/state_trackers/wgl/stw_pixelformat.c rename to src/gallium/state_trackers/wgl/shared/stw_pixelformat.c diff --git a/src/gallium/state_trackers/wgl/stw_pixelformat.h b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h similarity index 100% rename from src/gallium/state_trackers/wgl/stw_pixelformat.h rename to src/gallium/state_trackers/wgl/shared/stw_pixelformat.h diff --git a/src/gallium/state_trackers/wgl/stw_quirks.c b/src/gallium/state_trackers/wgl/shared/stw_quirks.c similarity index 100% rename from src/gallium/state_trackers/wgl/stw_quirks.c rename to src/gallium/state_trackers/wgl/shared/stw_quirks.c diff --git a/src/gallium/state_trackers/wgl/stw_winsys.h b/src/gallium/state_trackers/wgl/shared/stw_winsys.h similarity index 100% rename from src/gallium/state_trackers/wgl/stw_winsys.h rename to src/gallium/state_trackers/wgl/shared/stw_winsys.h diff --git a/src/gallium/state_trackers/wgl/stw_wgl.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c similarity index 100% rename from src/gallium/state_trackers/wgl/stw_wgl.c rename to src/gallium/state_trackers/wgl/wgl/stw_wgl.c diff --git a/src/gallium/state_trackers/wgl/stw_wgl.h b/src/gallium/state_trackers/wgl/wgl/stw_wgl.h similarity index 100% rename from src/gallium/state_trackers/wgl/stw_wgl.h rename to src/gallium/state_trackers/wgl/wgl/stw_wgl.h diff --git a/src/gallium/state_trackers/wgl/stw_wgl_arbextensionsstring.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbextensionsstring.c similarity index 100% rename from src/gallium/state_trackers/wgl/stw_wgl_arbextensionsstring.c rename to src/gallium/state_trackers/wgl/wgl/stw_wgl_arbextensionsstring.c diff --git a/src/gallium/state_trackers/wgl/stw_wgl_arbextensionsstring.h b/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbextensionsstring.h similarity index 100% rename from src/gallium/state_trackers/wgl/stw_wgl_arbextensionsstring.h rename to src/gallium/state_trackers/wgl/wgl/stw_wgl_arbextensionsstring.h diff --git a/src/gallium/state_trackers/wgl/stw_wgl_arbmultisample.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbmultisample.c similarity index 100% rename from src/gallium/state_trackers/wgl/stw_wgl_arbmultisample.c rename to src/gallium/state_trackers/wgl/wgl/stw_wgl_arbmultisample.c diff --git a/src/gallium/state_trackers/wgl/stw_wgl_arbmultisample.h b/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbmultisample.h similarity index 100% rename from src/gallium/state_trackers/wgl/stw_wgl_arbmultisample.h rename to src/gallium/state_trackers/wgl/wgl/stw_wgl_arbmultisample.h diff --git a/src/gallium/state_trackers/wgl/stw_wgl_arbpixelformat.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.c similarity index 99% rename from src/gallium/state_trackers/wgl/stw_wgl_arbpixelformat.c rename to src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.c index 344bb15d3c1..a1e6fc2ca4b 100644 --- a/src/gallium/state_trackers/wgl/stw_wgl_arbpixelformat.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.c @@ -29,7 +29,7 @@ #include "pipe/p_compiler.h" #include "util/u_memory.h" -#include "stw_pixelformat.h" +#include "shared/stw_pixelformat.h" #include "stw_wgl_arbmultisample.h" #include "stw_wgl_arbpixelformat.h" diff --git a/src/gallium/state_trackers/wgl/stw_wgl_arbpixelformat.h b/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.h similarity index 100% rename from src/gallium/state_trackers/wgl/stw_wgl_arbpixelformat.h rename to src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.h diff --git a/src/gallium/state_trackers/wgl/stw_wgl_context.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_context.c similarity index 98% rename from src/gallium/state_trackers/wgl/stw_wgl_context.c rename to src/gallium/state_trackers/wgl/wgl/stw_wgl_context.c index 890d97fd72a..da4688bcb17 100644 --- a/src/gallium/state_trackers/wgl/stw_wgl_context.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl_context.c @@ -33,10 +33,10 @@ #include "pipe/p_context.h" #include "state_tracker/st_context.h" #include "state_tracker/st_public.h" -#include "stw_device.h" -#include "stw_winsys.h" -#include "stw_framebuffer.h" -#include "stw_pixelformat.h" +#include "shared/stw_device.h" +#include "shared/stw_winsys.h" +#include "shared/stw_framebuffer.h" +#include "shared/stw_pixelformat.h" #include "stw_wgl_arbmultisample.h" #include "stw_wgl_context.h" #include "stw_wgl.h" diff --git a/src/gallium/state_trackers/wgl/stw_wgl_context.h b/src/gallium/state_trackers/wgl/wgl/stw_wgl_context.h similarity index 100% rename from src/gallium/state_trackers/wgl/stw_wgl_context.h rename to src/gallium/state_trackers/wgl/wgl/stw_wgl_context.h diff --git a/src/gallium/state_trackers/wgl/stw_wgl_getprocaddress.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_getprocaddress.c similarity index 100% rename from src/gallium/state_trackers/wgl/stw_wgl_getprocaddress.c rename to src/gallium/state_trackers/wgl/wgl/stw_wgl_getprocaddress.c diff --git a/src/gallium/state_trackers/wgl/stw_wgl_pixelformat.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c similarity index 99% rename from src/gallium/state_trackers/wgl/stw_wgl_pixelformat.c rename to src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c index 7a8a2e22e49..4646f57a198 100644 --- a/src/gallium/state_trackers/wgl/stw_wgl_pixelformat.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c @@ -29,7 +29,7 @@ #include "pipe/p_compiler.h" #include "pipe/p_debug.h" -#include "stw_pixelformat.h" +#include "shared/stw_pixelformat.h" #include "stw_wgl.h" static uint currentpixelformat = 0; diff --git a/src/gallium/state_trackers/wgl/stw_wgl_swapbuffers.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_swapbuffers.c similarity index 95% rename from src/gallium/state_trackers/wgl/stw_wgl_swapbuffers.c rename to src/gallium/state_trackers/wgl/wgl/stw_wgl_swapbuffers.c index 002bcc64e72..c0af8bc4f6f 100644 --- a/src/gallium/state_trackers/wgl/stw_wgl_swapbuffers.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl_swapbuffers.c @@ -32,9 +32,9 @@ #include "pipe/p_context.h" #include "state_tracker/st_context.h" #include "state_tracker/st_public.h" -#include "stw_winsys.h" -#include "stw_device.h" -#include "stw_framebuffer.h" +#include "shared/stw_winsys.h" +#include "shared/stw_device.h" +#include "shared/stw_framebuffer.h" #include "stw_wgl.h" WINGDIAPI BOOL APIENTRY From f17eb0b13c6a2e70746edd1d882bf71adec129fb Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 12:25:25 +0000 Subject: [PATCH 03/18] wgl: move context functions to shared --- src/gallium/state_trackers/wgl/SConscript | 4 +- src/gallium/state_trackers/wgl/icd/stw_icd.c | 58 ++++++++++--------- .../stw_context.c} | 48 +++++++-------- .../stw_context.h} | 27 +++++++++ src/gallium/state_trackers/wgl/wgl/stw_wgl.c | 57 ++++++++++++++++++ 5 files changed, 138 insertions(+), 56 deletions(-) rename src/gallium/state_trackers/wgl/{wgl/stw_wgl_context.c => shared/stw_context.c} (92%) rename src/gallium/state_trackers/wgl/{wgl/stw_wgl_context.h => shared/stw_context.h} (80%) diff --git a/src/gallium/state_trackers/wgl/SConscript b/src/gallium/state_trackers/wgl/SConscript index 9516dc5a3c2..37eb650c87f 100644 --- a/src/gallium/state_trackers/wgl/SConscript +++ b/src/gallium/state_trackers/wgl/SConscript @@ -20,6 +20,7 @@ if env['platform'] in ['windows']: sources = [ 'icd/stw_icd.c', + 'shared/stw_context.c', 'shared/stw_device.c', 'shared/stw_framebuffer.c', 'shared/stw_pixelformat.c', @@ -27,8 +28,7 @@ if env['platform'] in ['windows']: 'wgl/stw_wgl_arbextensionsstring.c', 'wgl/stw_wgl_arbmultisample.c', 'wgl/stw_wgl_arbpixelformat.c', - #'wgl/stw_wgl.c', - 'wgl/stw_wgl_context.c', + 'wgl/stw_wgl.c', 'wgl/stw_wgl_getprocaddress.c', 'wgl/stw_wgl_pixelformat.c', 'wgl/stw_wgl_swapbuffers.c', diff --git a/src/gallium/state_trackers/wgl/icd/stw_icd.c b/src/gallium/state_trackers/wgl/icd/stw_icd.c index bf057eb83bd..94c6dfe1081 100644 --- a/src/gallium/state_trackers/wgl/icd/stw_icd.c +++ b/src/gallium/state_trackers/wgl/icd/stw_icd.c @@ -33,15 +33,18 @@ #include "pipe/p_debug.h" #include "shared/stw_device.h" +#include "shared/stw_context.h" #include "icd/stw_icd.h" #include "wgl/stw_wgl.h" static HGLRC -_drv_lookup_hglrc( DHGLRC dhglrc ) +lookup_hglrc( DHGLRC dhglrc ) { - if (dhglrc == 0 || dhglrc >= DRV_CONTEXT_MAX) + if (dhglrc == 0 || + dhglrc >= DRV_CONTEXT_MAX) return NULL; + return stw_dev->ctx_array[dhglrc - 1].hglrc; } @@ -51,9 +54,14 @@ DrvCopyContext( DHGLRC dhrcDest, UINT fuMask ) { - debug_printf( "%s\n", __FUNCTION__ ); + HGLRC src = lookup_hglrc( dhrcSource ); + HGLRC dst = lookup_hglrc( dhrcDest ); + + if (src == NULL || + dst == NULL) + return FALSE; - return FALSE; + return stw_wgl_copy_context( src, dst, fuMask ); } DHGLRC APIENTRY @@ -61,26 +69,23 @@ DrvCreateLayerContext( HDC hdc, INT iLayerPlane ) { - DHGLRC dhglrc = 0; - - if (iLayerPlane == 0) { - DWORD i; - - for (i = 0; i < DRV_CONTEXT_MAX; i++) { - if (stw_dev->ctx_array[i].hglrc == NULL) - break; - } - - if (i < DRV_CONTEXT_MAX) { - stw_dev->ctx_array[i].hglrc = wglCreateContext( hdc ); - if (stw_dev->ctx_array[i].hglrc != NULL) - dhglrc = i + 1; - } + DWORD i; + + for (i = 0; i < DRV_CONTEXT_MAX; i++) { + if (stw_dev->ctx_array[i].hglrc == NULL) + goto found_slot; } + + /* No slot available, fail: + */ + return 0; - debug_printf( "%s( 0x%p, %d ) = %u\n", __FUNCTION__, hdc, iLayerPlane, dhglrc ); +found_slot: + stw_dev->ctx_array[i].hglrc = stw_wgl_create_context( hdc, iLayerPlane ); + if (stw_dev->ctx_array[i].hglrc == NULL) + return 0; - return dhglrc; + return (DHGLRC) i + 1; } DHGLRC APIENTRY @@ -94,11 +99,11 @@ BOOL APIENTRY DrvDeleteContext( DHGLRC dhglrc ) { - HGLRC hglrc = _drv_lookup_hglrc( dhglrc ); + HGLRC hglrc = lookup_hglrc( dhglrc ); BOOL success = FALSE; if (hglrc != NULL) { - success = wglDeleteContext( hglrc ); + success = stw_wgl_delete_context( hglrc ); if (success) stw_dev->ctx_array[dhglrc - 1].hglrc = NULL; } @@ -132,7 +137,8 @@ DrvDescribePixelFormat( r = wglDescribePixelFormat( hdc, iPixelFormat, cjpfd, ppfd ); - debug_printf( "%s( 0x%p, %d, %u, 0x%p ) = %d\n", __FUNCTION__, hdc, iPixelFormat, cjpfd, ppfd, r ); + debug_printf( "%s( 0x%p, %d, %u, 0x%p ) = %d\n", + __FUNCTION__, hdc, iPixelFormat, cjpfd, ppfd, r ); return r; } @@ -181,7 +187,7 @@ DrvReleaseContext( BOOL success = FALSE; if (dhglrc == stw_dev->ctx_current) { - HGLRC hglrc = _drv_lookup_hglrc( dhglrc ); + HGLRC hglrc = lookup_hglrc( dhglrc ); if (hglrc != NULL) { success = wglMakeCurrent( NULL, NULL ); @@ -215,7 +221,7 @@ DrvSetContext( DHGLRC dhglrc, PFN_SETPROCTABLE pfnSetProcTable ) { - HGLRC hglrc = _drv_lookup_hglrc( dhglrc ); + HGLRC hglrc = lookup_hglrc( dhglrc ); GLDISPATCHTABLE *disp = &cpt.glDispatchTable; debug_printf( "%s( 0x%p, %u, 0x%p )\n", __FUNCTION__, hdc, dhglrc, pfnSetProcTable ); diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_context.c b/src/gallium/state_trackers/wgl/shared/stw_context.c similarity index 92% rename from src/gallium/state_trackers/wgl/wgl/stw_wgl_context.c rename to src/gallium/state_trackers/wgl/shared/stw_context.c index da4688bcb17..b54e084230f 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_context.c +++ b/src/gallium/state_trackers/wgl/shared/stw_context.c @@ -37,17 +37,17 @@ #include "shared/stw_winsys.h" #include "shared/stw_framebuffer.h" #include "shared/stw_pixelformat.h" -#include "stw_wgl_arbmultisample.h" -#include "stw_wgl_context.h" -#include "stw_wgl.h" +#include "wgl/stw_wgl_arbmultisample.h" +#include "stw_context.h" +//#include "stw_wgl.h" static struct wgl_context *ctx_head = NULL; static HDC current_hdc = NULL; static HGLRC current_hrc = NULL; -WINGDIAPI BOOL APIENTRY -wglCopyContext( +BOOL +stw_wgl_copy_context( HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask ) @@ -59,9 +59,10 @@ wglCopyContext( return FALSE; } -WINGDIAPI HGLRC APIENTRY -wglCreateContext( - HDC hdc ) +HGLRC +stw_wgl_create_context( + HDC hdc, + int iLayerPlane ) { uint pfi; const struct pixelformat_info *pf; @@ -69,6 +70,9 @@ wglCreateContext( GLvisual *visual; struct pipe_context *pipe; + if (iLayerPlane != 0) + return NULL; + pfi = wglGetPixelFormat( hdc ); if (pfi == 0) return NULL; @@ -130,19 +134,9 @@ wglCreateContext( return (HGLRC) ctx; } -WINGDIAPI HGLRC APIENTRY -wglCreateLayerContext( - HDC hdc, - int iLayerPlane ) -{ - (void) hdc; - (void) iLayerPlane; - return NULL; -} - -WINGDIAPI BOOL APIENTRY -wglDeleteContext( +BOOL +stw_wgl_delete_context( HGLRC hglrc ) { struct wgl_context **link = &ctx_head; @@ -198,20 +192,20 @@ get_window_size( HDC hdc, GLuint *width, GLuint *height ) } } -WINGDIAPI HGLRC APIENTRY -wglGetCurrentContext( VOID ) +HGLRC +stw_wgl_get_current_context( void ) { return current_hrc; } -WINGDIAPI HDC APIENTRY -wglGetCurrentDC( VOID ) +HDC +stw_wgl_get_current_dc( void ) { return current_hdc; } -WINGDIAPI BOOL APIENTRY -wglMakeCurrent( +BOOL +stw_wgl_make_current( HDC hdc, HGLRC hglrc ) { @@ -292,5 +286,3 @@ wgl_context_from_hdc( } return NULL; } - -#include "stw_wgl.c" diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_context.h b/src/gallium/state_trackers/wgl/shared/stw_context.h similarity index 80% rename from src/gallium/state_trackers/wgl/wgl/stw_wgl_context.h rename to src/gallium/state_trackers/wgl/shared/stw_context.h index d87b3bdce23..b418e4e02a7 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_context.h +++ b/src/gallium/state_trackers/wgl/shared/stw_context.h @@ -43,4 +43,31 @@ struct wgl_context struct wgl_context * wgl_context_from_hdc(HDC hdc ); +////////////////// + + +BOOL stw_wgl_copy_context( HGLRC hglrcSrc, + HGLRC hglrcDst, + UINT mask ); + +HGLRC stw_wgl_create_context( HDC hdc, int iLayerPlane ); + +BOOL stw_wgl_delete_context( HGLRC hglrc ); + +HGLRC stw_wgl_get_current_context( void ); + +HDC stw_wgl_get_current_dc( void ); + +BOOL stw_wgl_make_current( HDC hdc, HGLRC hglrc ); + + + + + + + + + + + #endif /* WGL_CONTEXT_H */ diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c index 0528c369fc8..92fd3406586 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c @@ -28,6 +28,63 @@ #include #include "pipe/p_debug.h" +#include "shared/stw_context.h" +#include "stw_wgl.h" + + +WINGDIAPI BOOL APIENTRY +wglCopyContext( + HGLRC hglrcSrc, + HGLRC hglrcDst, + UINT mask ) +{ + return stw_wgl_copy_context( hglrcSrc, hglrcDst, mask ); +} + +WINGDIAPI HGLRC APIENTRY +wglCreateContext( + HDC hdc ) +{ + return (HGLRC) stw_wgl_create_context( hdc, 0 ); +} + +WINGDIAPI HGLRC APIENTRY +wglCreateLayerContext( + HDC hdc, + int iLayerPlane ) +{ + return (HGLRC) stw_wgl_create_context( hdc, iLayerPlane ); +} + +WINGDIAPI BOOL APIENTRY +wglDeleteContext( + HGLRC hglrc ) +{ + return stw_wgl_delete_context( hglrc ); +} + + +WINGDIAPI HGLRC APIENTRY +wglGetCurrentContext( VOID ) +{ + return stw_wgl_get_current_context(); +} + +WINGDIAPI HDC APIENTRY +wglGetCurrentDC( VOID ) +{ + return stw_wgl_get_current_dc(); +} + +WINGDIAPI BOOL APIENTRY +wglMakeCurrent( + HDC hdc, + HGLRC hglrc ) +{ + return stw_wgl_make_current( hdc, hglrc ); +} + + WINGDIAPI BOOL APIENTRY wglUseFontBitmapsA( From cb70d27dd1b04ae7dc146d06a21fb32004265539 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 13:35:18 +0000 Subject: [PATCH 04/18] stw: move pixelformat_describe to shared --- src/gallium/state_trackers/wgl/icd/stw_icd.c | 6 +- .../state_trackers/wgl/shared/stw_context.c | 57 +++++++++++++++++++ .../wgl/shared/stw_pixelformat.h | 11 ++++ .../wgl/wgl/stw_wgl_pixelformat.c | 47 +-------------- 4 files changed, 73 insertions(+), 48 deletions(-) diff --git a/src/gallium/state_trackers/wgl/icd/stw_icd.c b/src/gallium/state_trackers/wgl/icd/stw_icd.c index 94c6dfe1081..5504ac19b10 100644 --- a/src/gallium/state_trackers/wgl/icd/stw_icd.c +++ b/src/gallium/state_trackers/wgl/icd/stw_icd.c @@ -34,6 +34,7 @@ #include "shared/stw_device.h" #include "shared/stw_context.h" +#include "shared/stw_pixelformat.h" #include "icd/stw_icd.h" #include "wgl/stw_wgl.h" @@ -135,7 +136,7 @@ DrvDescribePixelFormat( { LONG r; - r = wglDescribePixelFormat( hdc, iPixelFormat, cjpfd, ppfd ); + r = stw_pixelformat_describe( hdc, iPixelFormat, cjpfd, ppfd ); debug_printf( "%s( 0x%p, %d, %u, 0x%p ) = %d\n", __FUNCTION__, hdc, iPixelFormat, cjpfd, ppfd, r ); @@ -596,7 +597,8 @@ DrvSetPixelFormat( PIXELFORMATDESCRIPTOR pfd; BOOL r; - wglDescribePixelFormat( hdc, iPixelFormat, sizeof( pfd ), &pfd ); + stw_pixelformat_describe( hdc, iPixelFormat, sizeof( pfd ), &pfd ); + r = wglSetPixelFormat( hdc, iPixelFormat, &pfd ); debug_printf( "%s( 0x%p, %d ) = %s\n", __FUNCTION__, hdc, iPixelFormat, r ? "TRUE" : "FALSE" ); diff --git a/src/gallium/state_trackers/wgl/shared/stw_context.c b/src/gallium/state_trackers/wgl/shared/stw_context.c index b54e084230f..e89438557de 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_context.c +++ b/src/gallium/state_trackers/wgl/shared/stw_context.c @@ -286,3 +286,60 @@ wgl_context_from_hdc( } return NULL; } + + + +int +stw_pixelformat_describe( + HDC hdc, + int iPixelFormat, + UINT nBytes, + LPPIXELFORMATDESCRIPTOR ppfd ) +{ + uint count; + uint index; + const struct pixelformat_info *pf; + + (void) hdc; + + count = pixelformat_get_extended_count(); + index = (uint) iPixelFormat - 1; + + if (ppfd == NULL) + return count; + if (index >= count || nBytes != sizeof( PIXELFORMATDESCRIPTOR )) + return 0; + + pf = pixelformat_get_info( index ); + + ppfd->nSize = sizeof( PIXELFORMATDESCRIPTOR ); + ppfd->nVersion = 1; + ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; + if (pf->flags & PF_FLAG_DOUBLEBUFFER) + ppfd->dwFlags |= PFD_DOUBLEBUFFER | PFD_SWAP_COPY; + ppfd->iPixelType = PFD_TYPE_RGBA; + ppfd->cColorBits = pf->color.redbits + pf->color.greenbits + pf->color.bluebits; + ppfd->cRedBits = pf->color.redbits; + ppfd->cRedShift = pf->color.redshift; + ppfd->cGreenBits = pf->color.greenbits; + ppfd->cGreenShift = pf->color.greenshift; + ppfd->cBlueBits = pf->color.bluebits; + ppfd->cBlueShift = pf->color.blueshift; + ppfd->cAlphaBits = pf->alpha.alphabits; + ppfd->cAlphaShift = pf->alpha.alphashift; + ppfd->cAccumBits = 0; + ppfd->cAccumRedBits = 0; + ppfd->cAccumGreenBits = 0; + ppfd->cAccumBlueBits = 0; + ppfd->cAccumAlphaBits = 0; + ppfd->cDepthBits = pf->depth.depthbits; + ppfd->cStencilBits = pf->depth.stencilbits; + ppfd->cAuxBuffers = 0; + ppfd->iLayerType = 0; + ppfd->bReserved = 0; + ppfd->dwLayerMask = 0; + ppfd->dwVisibleMask = 0; + ppfd->dwDamageMask = 0; + + return count; +} diff --git a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h index 0b67da8d25c..da26df5c648 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h +++ b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h @@ -28,6 +28,8 @@ #ifndef PIXELFORMAT_H #define PIXELFORMAT_H +#include + #define PF_FLAG_DOUBLEBUFFER 0x00000001 #define PF_FLAG_MULTISAMPLED 0x00000002 @@ -73,4 +75,13 @@ pixelformat_get_extended_count( void ); const struct pixelformat_info * pixelformat_get_info( uint index ); + +int +stw_pixelformat_describe( + HDC hdc, + int iPixelFormat, + UINT nBytes, + LPPIXELFORMATDESCRIPTOR ppfd ); + + #endif /* PIXELFORMAT_H */ diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c index 4646f57a198..20d7adc6645 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c @@ -108,52 +108,7 @@ wglDescribePixelFormat( UINT nBytes, LPPIXELFORMATDESCRIPTOR ppfd ) { - uint count; - uint index; - const struct pixelformat_info *pf; - - (void) hdc; - - count = pixelformat_get_extended_count(); - index = (uint) iPixelFormat - 1; - - if (ppfd == NULL) - return count; - if (index >= count || nBytes != sizeof( PIXELFORMATDESCRIPTOR )) - return 0; - - pf = pixelformat_get_info( index ); - - ppfd->nSize = sizeof( PIXELFORMATDESCRIPTOR ); - ppfd->nVersion = 1; - ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; - if (pf->flags & PF_FLAG_DOUBLEBUFFER) - ppfd->dwFlags |= PFD_DOUBLEBUFFER | PFD_SWAP_COPY; - ppfd->iPixelType = PFD_TYPE_RGBA; - ppfd->cColorBits = pf->color.redbits + pf->color.greenbits + pf->color.bluebits; - ppfd->cRedBits = pf->color.redbits; - ppfd->cRedShift = pf->color.redshift; - ppfd->cGreenBits = pf->color.greenbits; - ppfd->cGreenShift = pf->color.greenshift; - ppfd->cBlueBits = pf->color.bluebits; - ppfd->cBlueShift = pf->color.blueshift; - ppfd->cAlphaBits = pf->alpha.alphabits; - ppfd->cAlphaShift = pf->alpha.alphashift; - ppfd->cAccumBits = 0; - ppfd->cAccumRedBits = 0; - ppfd->cAccumGreenBits = 0; - ppfd->cAccumBlueBits = 0; - ppfd->cAccumAlphaBits = 0; - ppfd->cDepthBits = pf->depth.depthbits; - ppfd->cStencilBits = pf->depth.stencilbits; - ppfd->cAuxBuffers = 0; - ppfd->iLayerType = 0; - ppfd->bReserved = 0; - ppfd->dwLayerMask = 0; - ppfd->dwVisibleMask = 0; - ppfd->dwDamageMask = 0; - - return count; + return stw_pixelformat_describe( hdc, iPixelFormat, nBytes, ppfd ); } WINGDIAPI int APIENTRY From c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 13:43:10 +0000 Subject: [PATCH 05/18] stw: move pixelformat_get/set to shared --- src/gallium/state_trackers/wgl/icd/stw_icd.c | 5 +- .../state_trackers/wgl/shared/stw_context.c | 54 ------------ .../wgl/shared/stw_pixelformat.c | 87 +++++++++++++++++++ .../wgl/shared/stw_pixelformat.h | 9 ++ .../wgl/wgl/stw_wgl_pixelformat.c | 19 +--- 5 files changed, 100 insertions(+), 74 deletions(-) diff --git a/src/gallium/state_trackers/wgl/icd/stw_icd.c b/src/gallium/state_trackers/wgl/icd/stw_icd.c index 5504ac19b10..0c1cfade781 100644 --- a/src/gallium/state_trackers/wgl/icd/stw_icd.c +++ b/src/gallium/state_trackers/wgl/icd/stw_icd.c @@ -594,12 +594,9 @@ DrvSetPixelFormat( HDC hdc, LONG iPixelFormat ) { - PIXELFORMATDESCRIPTOR pfd; BOOL r; - stw_pixelformat_describe( hdc, iPixelFormat, sizeof( pfd ), &pfd ); - - r = wglSetPixelFormat( hdc, iPixelFormat, &pfd ); + r = stw_pixelformat_set( hdc, iPixelFormat ); debug_printf( "%s( 0x%p, %d ) = %s\n", __FUNCTION__, hdc, iPixelFormat, r ? "TRUE" : "FALSE" ); diff --git a/src/gallium/state_trackers/wgl/shared/stw_context.c b/src/gallium/state_trackers/wgl/shared/stw_context.c index e89438557de..75cfcda35df 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_context.c +++ b/src/gallium/state_trackers/wgl/shared/stw_context.c @@ -289,57 +289,3 @@ wgl_context_from_hdc( -int -stw_pixelformat_describe( - HDC hdc, - int iPixelFormat, - UINT nBytes, - LPPIXELFORMATDESCRIPTOR ppfd ) -{ - uint count; - uint index; - const struct pixelformat_info *pf; - - (void) hdc; - - count = pixelformat_get_extended_count(); - index = (uint) iPixelFormat - 1; - - if (ppfd == NULL) - return count; - if (index >= count || nBytes != sizeof( PIXELFORMATDESCRIPTOR )) - return 0; - - pf = pixelformat_get_info( index ); - - ppfd->nSize = sizeof( PIXELFORMATDESCRIPTOR ); - ppfd->nVersion = 1; - ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; - if (pf->flags & PF_FLAG_DOUBLEBUFFER) - ppfd->dwFlags |= PFD_DOUBLEBUFFER | PFD_SWAP_COPY; - ppfd->iPixelType = PFD_TYPE_RGBA; - ppfd->cColorBits = pf->color.redbits + pf->color.greenbits + pf->color.bluebits; - ppfd->cRedBits = pf->color.redbits; - ppfd->cRedShift = pf->color.redshift; - ppfd->cGreenBits = pf->color.greenbits; - ppfd->cGreenShift = pf->color.greenshift; - ppfd->cBlueBits = pf->color.bluebits; - ppfd->cBlueShift = pf->color.blueshift; - ppfd->cAlphaBits = pf->alpha.alphabits; - ppfd->cAlphaShift = pf->alpha.alphashift; - ppfd->cAccumBits = 0; - ppfd->cAccumRedBits = 0; - ppfd->cAccumGreenBits = 0; - ppfd->cAccumBlueBits = 0; - ppfd->cAccumAlphaBits = 0; - ppfd->cDepthBits = pf->depth.depthbits; - ppfd->cStencilBits = pf->depth.stencilbits; - ppfd->cAuxBuffers = 0; - ppfd->iLayerType = 0; - ppfd->bReserved = 0; - ppfd->dwLayerMask = 0; - ppfd->dwVisibleMask = 0; - ppfd->dwDamageMask = 0; - - return count; -} diff --git a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.c b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.c index 7a054af3d3e..76fe7cb9fe3 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.c +++ b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.c @@ -34,6 +34,9 @@ static struct pixelformat_info pixelformats[MAX_PIXELFORMATS]; static uint pixelformat_count = 0; static uint pixelformat_extended_count = 0; +static uint currentpixelformat = 0; + + static void add_standard_pixelformats( struct pixelformat_info **ppf, @@ -118,3 +121,87 @@ pixelformat_get_info( uint index ) return &pixelformats[index]; } + + +int +stw_pixelformat_describe( + HDC hdc, + int iPixelFormat, + UINT nBytes, + LPPIXELFORMATDESCRIPTOR ppfd ) +{ + uint count; + uint index; + const struct pixelformat_info *pf; + + (void) hdc; + + count = pixelformat_get_extended_count(); + index = (uint) iPixelFormat - 1; + + if (ppfd == NULL) + return count; + if (index >= count || nBytes != sizeof( PIXELFORMATDESCRIPTOR )) + return 0; + + pf = pixelformat_get_info( index ); + + ppfd->nSize = sizeof( PIXELFORMATDESCRIPTOR ); + ppfd->nVersion = 1; + ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; + if (pf->flags & PF_FLAG_DOUBLEBUFFER) + ppfd->dwFlags |= PFD_DOUBLEBUFFER | PFD_SWAP_COPY; + ppfd->iPixelType = PFD_TYPE_RGBA; + ppfd->cColorBits = pf->color.redbits + pf->color.greenbits + pf->color.bluebits; + ppfd->cRedBits = pf->color.redbits; + ppfd->cRedShift = pf->color.redshift; + ppfd->cGreenBits = pf->color.greenbits; + ppfd->cGreenShift = pf->color.greenshift; + ppfd->cBlueBits = pf->color.bluebits; + ppfd->cBlueShift = pf->color.blueshift; + ppfd->cAlphaBits = pf->alpha.alphabits; + ppfd->cAlphaShift = pf->alpha.alphashift; + ppfd->cAccumBits = 0; + ppfd->cAccumRedBits = 0; + ppfd->cAccumGreenBits = 0; + ppfd->cAccumBlueBits = 0; + ppfd->cAccumAlphaBits = 0; + ppfd->cDepthBits = pf->depth.depthbits; + ppfd->cStencilBits = pf->depth.stencilbits; + ppfd->cAuxBuffers = 0; + ppfd->iLayerType = 0; + ppfd->bReserved = 0; + ppfd->dwLayerMask = 0; + ppfd->dwVisibleMask = 0; + ppfd->dwDamageMask = 0; + + return count; +} + + +int +stw_pixelformat_get( + HDC hdc ) +{ + return currentpixelformat; +} + + +BOOL +stw_pixelformat_set( + HDC hdc, + int iPixelFormat ) +{ + uint count; + uint index; + + (void) hdc; + + index = (uint) iPixelFormat - 1; + count = pixelformat_get_extended_count(); + if (index >= count) + return FALSE; + + currentpixelformat = iPixelFormat; + return TRUE; +} diff --git a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h index da26df5c648..982de226664 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h +++ b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h @@ -83,5 +83,14 @@ stw_pixelformat_describe( UINT nBytes, LPPIXELFORMATDESCRIPTOR ppfd ); +int +stw_pixelformat_get( + HDC hdc ); + +BOOL +stw_pixelformat_set( + HDC hdc, + int iPixelFormat ); + #endif /* PIXELFORMAT_H */ diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c index 20d7adc6645..40c6eaf5942 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c @@ -32,8 +32,6 @@ #include "shared/stw_pixelformat.h" #include "stw_wgl.h" -static uint currentpixelformat = 0; - WINGDIAPI int APIENTRY wglChoosePixelFormat( HDC hdc, @@ -115,9 +113,7 @@ WINGDIAPI int APIENTRY wglGetPixelFormat( HDC hdc ) { - (void) hdc; - - return currentpixelformat; + return stw_pixelformat_get( hdc ); } WINGDIAPI BOOL APIENTRY @@ -126,17 +122,8 @@ wglSetPixelFormat( int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd ) { - uint count; - uint index; - - (void) hdc; - - count = pixelformat_get_extended_count(); - index = (uint) iPixelFormat - 1; - - if (index >= count || ppfd->nSize != sizeof( PIXELFORMATDESCRIPTOR )) + if (ppfd->nSize != sizeof( PIXELFORMATDESCRIPTOR )) return FALSE; - currentpixelformat = index + 1; - return TRUE; + return stw_pixelformat_set( hdc, iPixelFormat ); } From 507498af1077390c684ca24e6ce6e0ee6ddcc479 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 13:45:01 +0000 Subject: [PATCH 06/18] stw: rename stw_wgl_ --> stw_ --- src/gallium/state_trackers/wgl/icd/stw_icd.c | 6 +++--- .../state_trackers/wgl/shared/stw_context.c | 12 ++++++------ .../state_trackers/wgl/shared/stw_context.h | 12 ++++++------ src/gallium/state_trackers/wgl/wgl/stw_wgl.c | 14 +++++++------- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/gallium/state_trackers/wgl/icd/stw_icd.c b/src/gallium/state_trackers/wgl/icd/stw_icd.c index 0c1cfade781..9c28442c1f9 100644 --- a/src/gallium/state_trackers/wgl/icd/stw_icd.c +++ b/src/gallium/state_trackers/wgl/icd/stw_icd.c @@ -62,7 +62,7 @@ DrvCopyContext( dst == NULL) return FALSE; - return stw_wgl_copy_context( src, dst, fuMask ); + return stw_copy_context( src, dst, fuMask ); } DHGLRC APIENTRY @@ -82,7 +82,7 @@ DrvCreateLayerContext( return 0; found_slot: - stw_dev->ctx_array[i].hglrc = stw_wgl_create_context( hdc, iLayerPlane ); + stw_dev->ctx_array[i].hglrc = stw_create_context( hdc, iLayerPlane ); if (stw_dev->ctx_array[i].hglrc == NULL) return 0; @@ -104,7 +104,7 @@ DrvDeleteContext( BOOL success = FALSE; if (hglrc != NULL) { - success = stw_wgl_delete_context( hglrc ); + success = stw_delete_context( hglrc ); if (success) stw_dev->ctx_array[dhglrc - 1].hglrc = NULL; } diff --git a/src/gallium/state_trackers/wgl/shared/stw_context.c b/src/gallium/state_trackers/wgl/shared/stw_context.c index 75cfcda35df..b2cb6124168 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_context.c +++ b/src/gallium/state_trackers/wgl/shared/stw_context.c @@ -47,7 +47,7 @@ static HDC current_hdc = NULL; static HGLRC current_hrc = NULL; BOOL -stw_wgl_copy_context( +stw_copy_context( HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask ) @@ -60,7 +60,7 @@ stw_wgl_copy_context( } HGLRC -stw_wgl_create_context( +stw_create_context( HDC hdc, int iLayerPlane ) { @@ -136,7 +136,7 @@ stw_wgl_create_context( BOOL -stw_wgl_delete_context( +stw_delete_context( HGLRC hglrc ) { struct wgl_context **link = &ctx_head; @@ -193,19 +193,19 @@ get_window_size( HDC hdc, GLuint *width, GLuint *height ) } HGLRC -stw_wgl_get_current_context( void ) +stw_get_current_context( void ) { return current_hrc; } HDC -stw_wgl_get_current_dc( void ) +stw_get_current_dc( void ) { return current_hdc; } BOOL -stw_wgl_make_current( +stw_make_current( HDC hdc, HGLRC hglrc ) { diff --git a/src/gallium/state_trackers/wgl/shared/stw_context.h b/src/gallium/state_trackers/wgl/shared/stw_context.h index b418e4e02a7..91e71cf087f 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_context.h +++ b/src/gallium/state_trackers/wgl/shared/stw_context.h @@ -46,19 +46,19 @@ wgl_context_from_hdc(HDC hdc ); ////////////////// -BOOL stw_wgl_copy_context( HGLRC hglrcSrc, +BOOL stw_copy_context( HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask ); -HGLRC stw_wgl_create_context( HDC hdc, int iLayerPlane ); +HGLRC stw_create_context( HDC hdc, int iLayerPlane ); -BOOL stw_wgl_delete_context( HGLRC hglrc ); +BOOL stw_delete_context( HGLRC hglrc ); -HGLRC stw_wgl_get_current_context( void ); +HGLRC stw_get_current_context( void ); -HDC stw_wgl_get_current_dc( void ); +HDC stw_get_current_dc( void ); -BOOL stw_wgl_make_current( HDC hdc, HGLRC hglrc ); +BOOL stw_make_current( HDC hdc, HGLRC hglrc ); diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c index 92fd3406586..f6a4f66dd7d 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c @@ -38,14 +38,14 @@ wglCopyContext( HGLRC hglrcDst, UINT mask ) { - return stw_wgl_copy_context( hglrcSrc, hglrcDst, mask ); + return stw_copy_context( hglrcSrc, hglrcDst, mask ); } WINGDIAPI HGLRC APIENTRY wglCreateContext( HDC hdc ) { - return (HGLRC) stw_wgl_create_context( hdc, 0 ); + return (HGLRC) stw_create_context( hdc, 0 ); } WINGDIAPI HGLRC APIENTRY @@ -53,27 +53,27 @@ wglCreateLayerContext( HDC hdc, int iLayerPlane ) { - return (HGLRC) stw_wgl_create_context( hdc, iLayerPlane ); + return (HGLRC) stw_create_context( hdc, iLayerPlane ); } WINGDIAPI BOOL APIENTRY wglDeleteContext( HGLRC hglrc ) { - return stw_wgl_delete_context( hglrc ); + return stw_delete_context( hglrc ); } WINGDIAPI HGLRC APIENTRY wglGetCurrentContext( VOID ) { - return stw_wgl_get_current_context(); + return stw_get_current_context(); } WINGDIAPI HDC APIENTRY wglGetCurrentDC( VOID ) { - return stw_wgl_get_current_dc(); + return stw_get_current_dc(); } WINGDIAPI BOOL APIENTRY @@ -81,7 +81,7 @@ wglMakeCurrent( HDC hdc, HGLRC hglrc ) { - return stw_wgl_make_current( hdc, hglrc ); + return stw_make_current( hdc, hglrc ); } From 67b6e5b907096ce9eee32c36c164acd38574cf14 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 16:11:46 +0000 Subject: [PATCH 07/18] wgl: split device structs, move swapbuffers to shared Each of icd, shared and wgl now have the opportunity to maintain their own per-device structs, which should reduce the need for these modules to be looking into each others structures. --- src/gallium/state_trackers/wgl/SConscript | 1 + src/gallium/state_trackers/wgl/icd/stw_icd.c | 64 ++++++++++++++++--- .../state_trackers/wgl/shared/stw_device.c | 16 ++--- .../state_trackers/wgl/shared/stw_device.h | 16 ----- .../wgl/shared/stw_framebuffer.c | 31 +++++++++ .../wgl/shared/stw_pixelformat.h | 1 + src/gallium/state_trackers/wgl/stw.c | 57 +++++++++++++++++ src/gallium/state_trackers/wgl/stw.h | 53 +++++++++++++++ src/gallium/state_trackers/wgl/wgl/stw_wgl.c | 13 +++- .../wgl/wgl/stw_wgl_arbpixelformat.c | 2 +- .../wgl/wgl/stw_wgl_pixelformat.c | 2 +- .../wgl/wgl/stw_wgl_swapbuffers.c | 29 +-------- 12 files changed, 217 insertions(+), 68 deletions(-) create mode 100644 src/gallium/state_trackers/wgl/stw.c create mode 100644 src/gallium/state_trackers/wgl/stw.h diff --git a/src/gallium/state_trackers/wgl/SConscript b/src/gallium/state_trackers/wgl/SConscript index 37eb650c87f..1accc26d395 100644 --- a/src/gallium/state_trackers/wgl/SConscript +++ b/src/gallium/state_trackers/wgl/SConscript @@ -19,6 +19,7 @@ if env['platform'] in ['windows']: ]) sources = [ + 'stw.c', 'icd/stw_icd.c', 'shared/stw_context.c', 'shared/stw_device.c', diff --git a/src/gallium/state_trackers/wgl/icd/stw_icd.c b/src/gallium/state_trackers/wgl/icd/stw_icd.c index 9c28442c1f9..8cc0932de9b 100644 --- a/src/gallium/state_trackers/wgl/icd/stw_icd.c +++ b/src/gallium/state_trackers/wgl/icd/stw_icd.c @@ -32,11 +32,55 @@ #include "pipe/p_debug.h" -#include "shared/stw_device.h" -#include "shared/stw_context.h" -#include "shared/stw_pixelformat.h" +#include "shared/stw_public.h" #include "icd/stw_icd.h" #include "wgl/stw_wgl.h" +#include "stw.h" + + +#define DRV_CONTEXT_MAX 32 + +struct stw_icd +{ + struct { + HGLRC hglrc; + } ctx_array[DRV_CONTEXT_MAX]; + + DHGLRC ctx_current; +}; + + +static struct stw_icd *stw_icd = NULL; + + +boolean +stw_icd_init( void ) +{ + static struct stw_icd stw_icd_storage; + + assert(!stw_icd); + + stw_icd = &stw_icd_storage; + memset(stw_icd, 0, sizeof(*stw_icd)); + + return TRUE; +} + +void +stw_icd_cleanup(void) +{ + DHGLRC dhglrc; + + if(!stw_icd) + return; + + /* Ensure all contexts are destroyed */ + for (dhglrc = 1; dhglrc <= DRV_CONTEXT_MAX; dhglrc++) + if (stw_icd->ctx_array[dhglrc - 1].hglrc) + DrvDeleteContext( dhglrc ); + + stw_icd = NULL; +} static HGLRC @@ -46,7 +90,7 @@ lookup_hglrc( DHGLRC dhglrc ) dhglrc >= DRV_CONTEXT_MAX) return NULL; - return stw_dev->ctx_array[dhglrc - 1].hglrc; + return stw_icd->ctx_array[dhglrc - 1].hglrc; } BOOL APIENTRY @@ -73,7 +117,7 @@ DrvCreateLayerContext( DWORD i; for (i = 0; i < DRV_CONTEXT_MAX; i++) { - if (stw_dev->ctx_array[i].hglrc == NULL) + if (stw_icd->ctx_array[i].hglrc == NULL) goto found_slot; } @@ -82,8 +126,8 @@ DrvCreateLayerContext( return 0; found_slot: - stw_dev->ctx_array[i].hglrc = stw_create_context( hdc, iLayerPlane ); - if (stw_dev->ctx_array[i].hglrc == NULL) + stw_icd->ctx_array[i].hglrc = stw_create_context( hdc, iLayerPlane ); + if (stw_icd->ctx_array[i].hglrc == NULL) return 0; return (DHGLRC) i + 1; @@ -106,7 +150,7 @@ DrvDeleteContext( if (hglrc != NULL) { success = stw_delete_context( hglrc ); if (success) - stw_dev->ctx_array[dhglrc - 1].hglrc = NULL; + stw_icd->ctx_array[dhglrc - 1].hglrc = NULL; } debug_printf( "%s( %u ) = %s\n", __FUNCTION__, dhglrc, success ? "TRUE" : "FALSE" ); @@ -187,13 +231,13 @@ DrvReleaseContext( { BOOL success = FALSE; - if (dhglrc == stw_dev->ctx_current) { + if (dhglrc == stw_icd->ctx_current) { HGLRC hglrc = lookup_hglrc( dhglrc ); if (hglrc != NULL) { success = wglMakeCurrent( NULL, NULL ); if (success) - stw_dev->ctx_current = 0; + stw_icd->ctx_current = 0; } } diff --git a/src/gallium/state_trackers/wgl/shared/stw_device.c b/src/gallium/state_trackers/wgl/shared/stw_device.c index 63ee066824e..88eeae7de7c 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_device.c +++ b/src/gallium/state_trackers/wgl/shared/stw_device.c @@ -34,6 +34,8 @@ #include "shared/stw_device.h" #include "shared/stw_winsys.h" #include "shared/stw_pixelformat.h" +#include "shared/stw_public.h" +#include "stw.h" struct stw_device *stw_dev = NULL; @@ -57,7 +59,7 @@ st_flush_frontbuffer(struct pipe_winsys *ws, boolean -st_init(const struct stw_winsys *stw_winsys) +stw_shared_init(const struct stw_winsys *stw_winsys) { static struct stw_device stw_dev_storage; @@ -86,17 +88,7 @@ error1: void -st_cleanup(void) +stw_shared_cleanup(void) { - DHGLRC dhglrc; - - if(!stw_dev) - return; - - /* Ensure all contexts are destroyed */ - for (dhglrc = 1; dhglrc <= DRV_CONTEXT_MAX; dhglrc++) - if (stw_dev->ctx_array[dhglrc - 1].hglrc) - DrvDeleteContext( dhglrc ); - stw_dev = NULL; } diff --git a/src/gallium/state_trackers/wgl/shared/stw_device.h b/src/gallium/state_trackers/wgl/shared/stw_device.h index 2babc654daf..bc0bce37c6e 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_device.h +++ b/src/gallium/state_trackers/wgl/shared/stw_device.h @@ -29,28 +29,12 @@ #define ST_DEVICE_H_ -#include "icd/stw_icd.h" - struct pipe_screen; - -struct drv_context -{ - HGLRC hglrc; -}; - -#define DRV_CONTEXT_MAX 32 - - struct stw_device { const struct stw_winsys *stw_winsys; - struct pipe_screen *screen; - - struct drv_context ctx_array[DRV_CONTEXT_MAX]; - - DHGLRC ctx_current; }; diff --git a/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c b/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c index 1ecafa451ee..50edf7306d6 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c +++ b/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c @@ -29,9 +29,14 @@ #include "main/context.h" #include "pipe/p_format.h" +#include "pipe/p_screen.h" #include "state_tracker/st_context.h" #include "state_tracker/st_public.h" #include "stw_framebuffer.h" +#include "stw_device.h" +#include "stw_public.h" +#include "stw_winsys.h" + void framebuffer_resize( @@ -179,3 +184,29 @@ framebuffer_from_hdc( return fb; return NULL; } + + +BOOL +stw_swap_buffers( + HDC hdc ) +{ + struct stw_framebuffer *fb; + struct pipe_surface *surf; + + fb = framebuffer_from_hdc( hdc ); + if (fb == NULL) + return FALSE; + + /* If we're swapping the buffer associated with the current context + * we have to flush any pending rendering commands first. + */ + st_notify_swapbuffers( fb->stfb ); + + st_get_framebuffer_surface( fb->stfb, ST_SURFACE_BACK_LEFT, &surf ); + + stw_dev->stw_winsys->flush_frontbuffer(stw_dev->screen->winsys, + surf, + hdc ); + + return TRUE; +} diff --git a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h index 982de226664..ab5dcfc6726 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h +++ b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h @@ -29,6 +29,7 @@ #define PIXELFORMAT_H #include +#include "pipe/p_compiler.h" #define PF_FLAG_DOUBLEBUFFER 0x00000001 #define PF_FLAG_MULTISAMPLED 0x00000002 diff --git a/src/gallium/state_trackers/wgl/stw.c b/src/gallium/state_trackers/wgl/stw.c new file mode 100644 index 00000000000..8bccdad2211 --- /dev/null +++ b/src/gallium/state_trackers/wgl/stw.c @@ -0,0 +1,57 @@ +/************************************************************************** + * + * Copyright 2009, VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "stw.h" +#include "shared/stw_winsys.h" + +boolean +st_init(const struct stw_winsys *stw_winsys) +{ + if (!stw_shared_init( stw_winsys )) + goto fail; + + if (!stw_icd_init()) + goto fail; + + if (!stw_wgl_init()) + goto fail; + + return TRUE; + +fail: + st_cleanup(); + return FALSE; +} + + +void +st_cleanup(void) +{ + stw_icd_cleanup(); + stw_shared_cleanup(); + stw_wgl_cleanup(); +} diff --git a/src/gallium/state_trackers/wgl/stw.h b/src/gallium/state_trackers/wgl/stw.h new file mode 100644 index 00000000000..450af4ccb6f --- /dev/null +++ b/src/gallium/state_trackers/wgl/stw.h @@ -0,0 +1,53 @@ +/************************************************************************** + * + * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#ifndef STW_H +#define STW_H + +#include "pipe/p_compiler.h" + +struct stw_winsys; + +/* Public interface: + */ +boolean stw_init( const struct stw_winsys *stw_winsys ); +void stw_cleanup( void ); + + + +/* Internal functions + */ +boolean stw_shared_init( const struct stw_winsys *stw_winsys ); +boolean stw_icd_init( void ); +boolean stw_wgl_init( void ); + +void stw_shared_cleanup( void ); +void stw_icd_cleanup( void ); +void stw_wgl_cleanup( void ); + + +#endif /* STW_H */ diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c index f6a4f66dd7d..8f7ec8ddd48 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c @@ -28,8 +28,19 @@ #include #include "pipe/p_debug.h" -#include "shared/stw_context.h" +#include "shared/stw_public.h" #include "stw_wgl.h" +#include "stw.h" + +boolean stw_wgl_init( void ) +{ + debug_printf("%s\n", __FUNCTION__); + return TRUE; +} + +void stw_wgl_cleanup( void ) +{ +} WINGDIAPI BOOL APIENTRY diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.c index a1e6fc2ca4b..6adb05ea1fc 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.c @@ -29,7 +29,7 @@ #include "pipe/p_compiler.h" #include "util/u_memory.h" -#include "shared/stw_pixelformat.h" +#include "shared/stw_public.h" #include "stw_wgl_arbmultisample.h" #include "stw_wgl_arbpixelformat.h" diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c index 40c6eaf5942..11438172e69 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c @@ -29,7 +29,7 @@ #include "pipe/p_compiler.h" #include "pipe/p_debug.h" -#include "shared/stw_pixelformat.h" +#include "shared/stw_public.h" #include "stw_wgl.h" WINGDIAPI int APIENTRY diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_swapbuffers.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_swapbuffers.c index c0af8bc4f6f..9984f9860c2 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_swapbuffers.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl_swapbuffers.c @@ -27,39 +27,14 @@ #include -#include "pipe/p_winsys.h" -#include "pipe/p_screen.h" -#include "pipe/p_context.h" -#include "state_tracker/st_context.h" -#include "state_tracker/st_public.h" -#include "shared/stw_winsys.h" -#include "shared/stw_device.h" -#include "shared/stw_framebuffer.h" +#include "shared/stw_public.h" #include "stw_wgl.h" WINGDIAPI BOOL APIENTRY wglSwapBuffers( HDC hdc ) { - struct stw_framebuffer *fb; - struct pipe_surface *surf; - - fb = framebuffer_from_hdc( hdc ); - if (fb == NULL) - return FALSE; - - /* If we're swapping the buffer associated with the current context - * we have to flush any pending rendering commands first. - */ - st_notify_swapbuffers( fb->stfb ); - - st_get_framebuffer_surface( fb->stfb, ST_SURFACE_BACK_LEFT, &surf ); - - stw_dev->stw_winsys->flush_frontbuffer(stw_dev->screen->winsys, - surf, - hdc ); - - return TRUE; + return stw_swap_buffers( hdc ); } WINGDIAPI BOOL APIENTRY From cfb3fdfcb1aeb22c62a850795a7351ec9594e74d Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 16:23:52 +0000 Subject: [PATCH 08/18] stw: more swapbuffers refactoring --- src/gallium/state_trackers/wgl/SConscript | 1 - src/gallium/state_trackers/wgl/icd/stw_icd.c | 2 +- src/gallium/state_trackers/wgl/wgl/stw_wgl.c | 20 ++++++++ .../wgl/wgl/stw_wgl_swapbuffers.c | 49 ------------------- 4 files changed, 21 insertions(+), 51 deletions(-) delete mode 100644 src/gallium/state_trackers/wgl/wgl/stw_wgl_swapbuffers.c diff --git a/src/gallium/state_trackers/wgl/SConscript b/src/gallium/state_trackers/wgl/SConscript index 1accc26d395..18ccc5ad41c 100644 --- a/src/gallium/state_trackers/wgl/SConscript +++ b/src/gallium/state_trackers/wgl/SConscript @@ -32,7 +32,6 @@ if env['platform'] in ['windows']: 'wgl/stw_wgl.c', 'wgl/stw_wgl_getprocaddress.c', 'wgl/stw_wgl_pixelformat.c', - 'wgl/stw_wgl_swapbuffers.c', ] wgl = env.ConvenienceLibrary( diff --git a/src/gallium/state_trackers/wgl/icd/stw_icd.c b/src/gallium/state_trackers/wgl/icd/stw_icd.c index 8cc0932de9b..51967bfc28b 100644 --- a/src/gallium/state_trackers/wgl/icd/stw_icd.c +++ b/src/gallium/state_trackers/wgl/icd/stw_icd.c @@ -663,7 +663,7 @@ DrvSwapBuffers( { debug_printf( "%s( 0x%p )\n", __FUNCTION__, hdc ); - return wglSwapBuffers( hdc ); + return stw_swap_buffers( hdc ); } BOOL APIENTRY diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c index 8f7ec8ddd48..1a33c7f4538 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c @@ -96,6 +96,26 @@ wglMakeCurrent( } +WINGDIAPI BOOL APIENTRY +wglSwapBuffers( + HDC hdc ) +{ + return stw_swap_buffers( hdc ); +} + + +WINGDIAPI BOOL APIENTRY +wglSwapLayerBuffers( + HDC hdc, + UINT fuPlanes ) +{ + (void) hdc; + (void) fuPlanes; + + return FALSE; +} + + WINGDIAPI BOOL APIENTRY wglUseFontBitmapsA( diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_swapbuffers.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_swapbuffers.c deleted file mode 100644 index 9984f9860c2..00000000000 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_swapbuffers.c +++ /dev/null @@ -1,49 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **************************************************************************/ - -#include - -#include "shared/stw_public.h" -#include "stw_wgl.h" - -WINGDIAPI BOOL APIENTRY -wglSwapBuffers( - HDC hdc ) -{ - return stw_swap_buffers( hdc ); -} - -WINGDIAPI BOOL APIENTRY -wglSwapLayerBuffers( - HDC hdc, - UINT fuPlanes ) -{ - (void) hdc; - (void) fuPlanes; - - return FALSE; -} From 54688ebdb259c5e8878817a411e24bd98efb8012 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 16:47:31 +0000 Subject: [PATCH 09/18] stw: use shared version of make current in icd code --- src/gallium/state_trackers/wgl/icd/stw_icd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/wgl/icd/stw_icd.c b/src/gallium/state_trackers/wgl/icd/stw_icd.c index 51967bfc28b..e8ddefccf87 100644 --- a/src/gallium/state_trackers/wgl/icd/stw_icd.c +++ b/src/gallium/state_trackers/wgl/icd/stw_icd.c @@ -235,7 +235,7 @@ DrvReleaseContext( HGLRC hglrc = lookup_hglrc( dhglrc ); if (hglrc != NULL) { - success = wglMakeCurrent( NULL, NULL ); + success = stw_make_current( NULL, NULL ); if (success) stw_icd->ctx_current = 0; } @@ -274,7 +274,7 @@ DrvSetContext( if (hglrc == NULL) return NULL; - if (!wglMakeCurrent( hdc, hglrc )) + if (!stw_make_current( hdc, hglrc )) return NULL; memset( &cpt, 0, sizeof( cpt ) ); From 66059cd3c95bf5eba7922a4a09c2596514e5e956 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 17:07:15 +0000 Subject: [PATCH 10/18] stw: move get_proc_address and extension functions to shared --- src/gallium/state_trackers/wgl/SConscript | 14 ++++--- src/gallium/state_trackers/wgl/icd/stw_icd.c | 2 +- .../stw_arbextensionsstring.c} | 2 +- .../stw_arbextensionsstring.h} | 0 .../stw_arbpixelformat.c} | 13 ++++-- .../stw_arbpixelformat.h} | 3 ++ .../state_trackers/wgl/shared/stw_context.c | 3 +- .../stw_getprocaddress.c} | 9 ++-- .../wgl/shared/stw_pixelformat.c | 18 ++++++++ .../wgl/shared/stw_pixelformat.h | 3 ++ src/gallium/state_trackers/wgl/wgl/stw_wgl.c | 6 +++ .../wgl/wgl/stw_wgl_arbmultisample.c | 41 ------------------- .../wgl/wgl/stw_wgl_arbmultisample.h | 40 ------------------ 13 files changed, 55 insertions(+), 99 deletions(-) rename src/gallium/state_trackers/wgl/{wgl/stw_wgl_arbextensionsstring.c => shared/stw_arbextensionsstring.c} (97%) rename src/gallium/state_trackers/wgl/{wgl/stw_wgl_arbextensionsstring.h => shared/stw_arbextensionsstring.h} (100%) rename src/gallium/state_trackers/wgl/{wgl/stw_wgl_arbpixelformat.c => shared/stw_arbpixelformat.c} (98%) rename src/gallium/state_trackers/wgl/{wgl/stw_wgl_arbpixelformat.h => shared/stw_arbpixelformat.h} (97%) rename src/gallium/state_trackers/wgl/{wgl/stw_wgl_getprocaddress.c => shared/stw_getprocaddress.c} (94%) delete mode 100644 src/gallium/state_trackers/wgl/wgl/stw_wgl_arbmultisample.c delete mode 100644 src/gallium/state_trackers/wgl/wgl/stw_wgl_arbmultisample.h diff --git a/src/gallium/state_trackers/wgl/SConscript b/src/gallium/state_trackers/wgl/SConscript index 18ccc5ad41c..1915e3921af 100644 --- a/src/gallium/state_trackers/wgl/SConscript +++ b/src/gallium/state_trackers/wgl/SConscript @@ -20,18 +20,20 @@ if env['platform'] in ['windows']: sources = [ 'stw.c', + 'icd/stw_icd.c', + + 'wgl/stw_wgl.c', + 'wgl/stw_wgl_pixelformat.c', + 'shared/stw_context.c', 'shared/stw_device.c', 'shared/stw_framebuffer.c', 'shared/stw_pixelformat.c', 'shared/stw_quirks.c', - 'wgl/stw_wgl_arbextensionsstring.c', - 'wgl/stw_wgl_arbmultisample.c', - 'wgl/stw_wgl_arbpixelformat.c', - 'wgl/stw_wgl.c', - 'wgl/stw_wgl_getprocaddress.c', - 'wgl/stw_wgl_pixelformat.c', + 'shared/stw_arbextensionsstring.c', + 'shared/stw_getprocaddress.c', + 'shared/stw_arbpixelformat.c', ] wgl = env.ConvenienceLibrary( diff --git a/src/gallium/state_trackers/wgl/icd/stw_icd.c b/src/gallium/state_trackers/wgl/icd/stw_icd.c index e8ddefccf87..62d6adc7347 100644 --- a/src/gallium/state_trackers/wgl/icd/stw_icd.c +++ b/src/gallium/state_trackers/wgl/icd/stw_icd.c @@ -207,7 +207,7 @@ DrvGetProcAddress( { PROC r; - r = wglGetProcAddress( lpszProc ); + r = stw_get_proc_address( lpszProc ); debug_printf( "%s( \", __FUNCTION__%s\" ) = 0x%p\n", lpszProc, r ); diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbextensionsstring.c b/src/gallium/state_trackers/wgl/shared/stw_arbextensionsstring.c similarity index 97% rename from src/gallium/state_trackers/wgl/wgl/stw_wgl_arbextensionsstring.c rename to src/gallium/state_trackers/wgl/shared/stw_arbextensionsstring.c index 04865796ec8..b3934cb4643 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbextensionsstring.c +++ b/src/gallium/state_trackers/wgl/shared/stw_arbextensionsstring.c @@ -27,7 +27,7 @@ #include -#include "stw_wgl_arbextensionsstring.h" +#include "stw_arbextensionsstring.h" WINGDIAPI const char * APIENTRY wglGetExtensionsStringARB( diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbextensionsstring.h b/src/gallium/state_trackers/wgl/shared/stw_arbextensionsstring.h similarity index 100% rename from src/gallium/state_trackers/wgl/wgl/stw_wgl_arbextensionsstring.h rename to src/gallium/state_trackers/wgl/shared/stw_arbextensionsstring.h diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.c b/src/gallium/state_trackers/wgl/shared/stw_arbpixelformat.c similarity index 98% rename from src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.c rename to src/gallium/state_trackers/wgl/shared/stw_arbpixelformat.c index 6adb05ea1fc..d373ed0809b 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.c +++ b/src/gallium/state_trackers/wgl/shared/stw_arbpixelformat.c @@ -30,8 +30,7 @@ #include "pipe/p_compiler.h" #include "util/u_memory.h" #include "shared/stw_public.h" -#include "stw_wgl_arbmultisample.h" -#include "stw_wgl_arbpixelformat.h" +#include "stw_arbpixelformat.h" #define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 #define WGL_DRAW_TO_WINDOW_ARB 0x2001 @@ -86,6 +85,12 @@ #define WGL_TYPE_RGBA_ARB 0x202B #define WGL_TYPE_COLORINDEX_ARB 0x202C +/* From arb_multisample: + */ +#define WGL_SAMPLE_BUFFERS_ARB 0x2041 +#define WGL_SAMPLES_ARB 0x2042 + + static boolean query_attrib( int iPixelFormat, @@ -253,14 +258,14 @@ query_attrib( case WGL_SAMPLE_BUFFERS_ARB: if (pf->flags & PF_FLAG_MULTISAMPLED) - *pvalue = wgl_query_sample_buffers(); + *pvalue = stw_query_sample_buffers(); else *pvalue = 0; break; case WGL_SAMPLES_ARB: if (pf->flags & PF_FLAG_MULTISAMPLED) - *pvalue = wgl_query_samples(); + *pvalue = stw_query_samples(); else *pvalue = 0; break; diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.h b/src/gallium/state_trackers/wgl/shared/stw_arbpixelformat.h similarity index 97% rename from src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.h rename to src/gallium/state_trackers/wgl/shared/stw_arbpixelformat.h index 5e480b822b3..a6c42599424 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbpixelformat.h +++ b/src/gallium/state_trackers/wgl/shared/stw_arbpixelformat.h @@ -28,6 +28,9 @@ #ifndef WGL_ARBPIXELFORMAT_H #define WGL_ARBPIXELFORMAT_H + +/* Extension functions for get_proc_address: + */ WINGDIAPI BOOL APIENTRY wglChoosePixelFormatARB( HDC hdc, diff --git a/src/gallium/state_trackers/wgl/shared/stw_context.c b/src/gallium/state_trackers/wgl/shared/stw_context.c index b2cb6124168..e17abd73f51 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_context.c +++ b/src/gallium/state_trackers/wgl/shared/stw_context.c @@ -37,7 +37,6 @@ #include "shared/stw_winsys.h" #include "shared/stw_framebuffer.h" #include "shared/stw_pixelformat.h" -#include "wgl/stw_wgl_arbmultisample.h" #include "stw_context.h" //#include "stw_wgl.h" @@ -103,7 +102,7 @@ stw_create_context( 0, 0, 0, - (pf->flags & PF_FLAG_MULTISAMPLED) ? wgl_query_samples() : 0 ); + (pf->flags & PF_FLAG_MULTISAMPLED) ? stw_query_samples() : 0 ); if (visual == NULL) { FREE( ctx ); return NULL; diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_getprocaddress.c b/src/gallium/state_trackers/wgl/shared/stw_getprocaddress.c similarity index 94% rename from src/gallium/state_trackers/wgl/wgl/stw_wgl_getprocaddress.c rename to src/gallium/state_trackers/wgl/shared/stw_getprocaddress.c index ec92d2dfce2..ac2d6fc2605 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_getprocaddress.c +++ b/src/gallium/state_trackers/wgl/shared/stw_getprocaddress.c @@ -28,8 +28,9 @@ #include #include "glapi/glapi.h" -#include "stw_wgl_arbextensionsstring.h" -#include "stw_wgl_arbpixelformat.h" +#include "stw_arbextensionsstring.h" +#include "stw_arbpixelformat.h" +#include "stw_public.h" struct extension_entry { @@ -52,8 +53,8 @@ static struct extension_entry extension_entries[] = { { NULL, NULL } }; -WINGDIAPI PROC APIENTRY -wglGetProcAddress( +PROC +stw_get_proc_address( LPCSTR lpszProc ) { struct extension_entry *entry; diff --git a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.c b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.c index 76fe7cb9fe3..4ba763d9336 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.c +++ b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.c @@ -205,3 +205,21 @@ stw_pixelformat_set( currentpixelformat = iPixelFormat; return TRUE; } + + + +/* XXX: this needs to be turned into queries on pipe_screen or + * stw_winsys. + */ +int +stw_query_sample_buffers( void ) +{ + return 1; +} + +int +stw_query_samples( void ) +{ + return 4; +} + diff --git a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h index ab5dcfc6726..ed855f08fd1 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h +++ b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h @@ -93,5 +93,8 @@ stw_pixelformat_set( HDC hdc, int iPixelFormat ); +int stw_query_sample_buffers( void ); +int stw_query_samples( void ); + #endif /* PIXELFORMAT_H */ diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c index 1a33c7f4538..d89d0898220 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c @@ -115,6 +115,12 @@ wglSwapLayerBuffers( return FALSE; } +WINGDIAPI PROC APIENTRY +wglGetProcAddress( + LPCSTR lpszProc ) +{ + return stw_get_proc_address( lpszProc ); +} WINGDIAPI BOOL APIENTRY diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbmultisample.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbmultisample.c deleted file mode 100644 index aad04e3e8a2..00000000000 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbmultisample.c +++ /dev/null @@ -1,41 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **************************************************************************/ - -#include -#include "stw_wgl_arbmultisample.h" - -int -wgl_query_sample_buffers( void ) -{ - return 1; -} - -int -wgl_query_samples( void ) -{ - return 4; -} diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbmultisample.h b/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbmultisample.h deleted file mode 100644 index de3e2cc6a33..00000000000 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_arbmultisample.h +++ /dev/null @@ -1,40 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **************************************************************************/ - -#ifndef WGL_ARBMULTISAMPLE_H -#define WGL_ARBMULTISAMPLE_H - -#define WGL_SAMPLE_BUFFERS_ARB 0x2041 -#define WGL_SAMPLES_ARB 0x2042 - -int -wgl_query_sample_buffers( void ); - -int -wgl_query_samples( void ); - -#endif /* WGL_ARBMULTISAMPLE_H */ From 906230d16e8950004cb5e1deed14c78f7d9f2817 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 18:25:46 +0000 Subject: [PATCH 11/18] svga: remove pixelformat helpers from stw shared interface Keep these internal structs private to wgl/shared. Pull in some pixelformat choosing code from wgl/wgl to avoid exporting them more generally. --- src/gallium/state_trackers/wgl/SConscript | 1 - src/gallium/state_trackers/wgl/icd/stw_icd.c | 1 - .../wgl/shared/stw_arbpixelformat.c | 3 +- .../wgl/shared/stw_pixelformat.c | 53 +++++++ .../wgl/shared/stw_pixelformat.h | 17 --- src/gallium/state_trackers/wgl/wgl/stw_wgl.c | 53 +++++++ .../wgl/wgl/stw_wgl_pixelformat.c | 129 ------------------ 7 files changed, 108 insertions(+), 149 deletions(-) delete mode 100644 src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c diff --git a/src/gallium/state_trackers/wgl/SConscript b/src/gallium/state_trackers/wgl/SConscript index 1915e3921af..c72f495735d 100644 --- a/src/gallium/state_trackers/wgl/SConscript +++ b/src/gallium/state_trackers/wgl/SConscript @@ -24,7 +24,6 @@ if env['platform'] in ['windows']: 'icd/stw_icd.c', 'wgl/stw_wgl.c', - 'wgl/stw_wgl_pixelformat.c', 'shared/stw_context.c', 'shared/stw_device.c', diff --git a/src/gallium/state_trackers/wgl/icd/stw_icd.c b/src/gallium/state_trackers/wgl/icd/stw_icd.c index 62d6adc7347..35a8eee2206 100644 --- a/src/gallium/state_trackers/wgl/icd/stw_icd.c +++ b/src/gallium/state_trackers/wgl/icd/stw_icd.c @@ -34,7 +34,6 @@ #include "shared/stw_public.h" #include "icd/stw_icd.h" -#include "wgl/stw_wgl.h" #include "stw.h" diff --git a/src/gallium/state_trackers/wgl/shared/stw_arbpixelformat.c b/src/gallium/state_trackers/wgl/shared/stw_arbpixelformat.c index d373ed0809b..f5636354202 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_arbpixelformat.c +++ b/src/gallium/state_trackers/wgl/shared/stw_arbpixelformat.c @@ -29,7 +29,8 @@ #include "pipe/p_compiler.h" #include "util/u_memory.h" -#include "shared/stw_public.h" +#include "stw_public.h" +#include "stw_pixelformat.h" #include "stw_arbpixelformat.h" #define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 diff --git a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.c b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.c index 4ba763d9336..12b5ac6d91e 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.c +++ b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.c @@ -27,6 +27,7 @@ #include "pipe/p_debug.h" #include "stw_pixelformat.h" +#include "stw_public.h" #define MAX_PIXELFORMATS 16 @@ -178,6 +179,58 @@ stw_pixelformat_describe( return count; } +/* Only used by the wgl code, but have it here to avoid exporting the + * pixelformat.h functionality. + */ +int stw_pixelformat_choose( HDC hdc, + CONST PIXELFORMATDESCRIPTOR *ppfd ) +{ + uint count; + uint index; + uint bestindex; + uint bestdelta; + + (void) hdc; + + count = pixelformat_get_count(); + bestindex = count; + bestdelta = 0xffffffff; + + for (index = 0; index < count; index++) { + uint delta = 0; + const struct pixelformat_info *pf = pixelformat_get_info( index ); + + if (!(ppfd->dwFlags & PFD_DOUBLEBUFFER_DONTCARE) && + !!(ppfd->dwFlags & PFD_DOUBLEBUFFER) != + !!(pf->flags & PF_FLAG_DOUBLEBUFFER)) + continue; + + if (ppfd->cColorBits != pf->color.redbits + pf->color.greenbits + pf->color.bluebits) + delta += 8; + + if (ppfd->cDepthBits != pf->depth.depthbits) + delta += 4; + + if (ppfd->cStencilBits != pf->depth.stencilbits) + delta += 2; + + if (ppfd->cAlphaBits != pf->alpha.alphabits) + delta++; + + if (delta < bestdelta) { + bestindex = index; + bestdelta = delta; + if (bestdelta == 0) + break; + } + } + + if (bestindex == count) + return 0; + + return bestindex + 1; +} + int stw_pixelformat_get( diff --git a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h index ed855f08fd1..7ca4194a2ae 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h +++ b/src/gallium/state_trackers/wgl/shared/stw_pixelformat.h @@ -76,23 +76,6 @@ pixelformat_get_extended_count( void ); const struct pixelformat_info * pixelformat_get_info( uint index ); - -int -stw_pixelformat_describe( - HDC hdc, - int iPixelFormat, - UINT nBytes, - LPPIXELFORMATDESCRIPTOR ppfd ); - -int -stw_pixelformat_get( - HDC hdc ); - -BOOL -stw_pixelformat_set( - HDC hdc, - int iPixelFormat ); - int stw_query_sample_buffers( void ); int stw_query_samples( void ); diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c index d89d0898220..d03341815e6 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c @@ -123,6 +123,59 @@ wglGetProcAddress( } +WINGDIAPI int APIENTRY +wglChoosePixelFormat( + HDC hdc, + CONST PIXELFORMATDESCRIPTOR *ppfd ) +{ + if (ppfd->nSize != sizeof( PIXELFORMATDESCRIPTOR ) || ppfd->nVersion != 1) + return 0; + if (ppfd->iPixelType != PFD_TYPE_RGBA) + return 0; + if (!(ppfd->dwFlags & PFD_DRAW_TO_WINDOW)) + return 0; + if (!(ppfd->dwFlags & PFD_SUPPORT_OPENGL)) + return 0; + if (ppfd->dwFlags & PFD_DRAW_TO_BITMAP) + return 0; + if (ppfd->dwFlags & PFD_SUPPORT_GDI) + return 0; + if (!(ppfd->dwFlags & PFD_STEREO_DONTCARE) && (ppfd->dwFlags & PFD_STEREO)) + return 0; + + return stw_pixelformat_choose( hdc, ppfd ); +} + +WINGDIAPI int APIENTRY +wglDescribePixelFormat( + HDC hdc, + int iPixelFormat, + UINT nBytes, + LPPIXELFORMATDESCRIPTOR ppfd ) +{ + return stw_pixelformat_describe( hdc, iPixelFormat, nBytes, ppfd ); +} + +WINGDIAPI int APIENTRY +wglGetPixelFormat( + HDC hdc ) +{ + return stw_pixelformat_get( hdc ); +} + +WINGDIAPI BOOL APIENTRY +wglSetPixelFormat( + HDC hdc, + int iPixelFormat, + const PIXELFORMATDESCRIPTOR *ppfd ) +{ + if (ppfd->nSize != sizeof( PIXELFORMATDESCRIPTOR )) + return FALSE; + + return stw_pixelformat_set( hdc, iPixelFormat ); +} + + WINGDIAPI BOOL APIENTRY wglUseFontBitmapsA( HDC hdc, diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c deleted file mode 100644 index 11438172e69..00000000000 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl_pixelformat.c +++ /dev/null @@ -1,129 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **************************************************************************/ - -#include - -#include "pipe/p_compiler.h" -#include "pipe/p_debug.h" -#include "shared/stw_public.h" -#include "stw_wgl.h" - -WINGDIAPI int APIENTRY -wglChoosePixelFormat( - HDC hdc, - CONST PIXELFORMATDESCRIPTOR *ppfd ) -{ - uint count; - uint index; - uint bestindex; - uint bestdelta; - - (void) hdc; - - count = pixelformat_get_count(); - bestindex = count; - bestdelta = 0xffffffff; - - if (ppfd->nSize != sizeof( PIXELFORMATDESCRIPTOR ) || ppfd->nVersion != 1) - return 0; - if (ppfd->iPixelType != PFD_TYPE_RGBA) - return 0; - if (!(ppfd->dwFlags & PFD_DRAW_TO_WINDOW)) - return 0; - if (!(ppfd->dwFlags & PFD_SUPPORT_OPENGL)) - return 0; - if (ppfd->dwFlags & PFD_DRAW_TO_BITMAP) - return 0; - if (ppfd->dwFlags & PFD_SUPPORT_GDI) - return 0; - if (!(ppfd->dwFlags & PFD_STEREO_DONTCARE) && (ppfd->dwFlags & PFD_STEREO)) - return 0; - - for (index = 0; index < count; index++) { - uint delta = 0; - const struct pixelformat_info *pf = pixelformat_get_info( index ); - - if (!(ppfd->dwFlags & PFD_DOUBLEBUFFER_DONTCARE)) { - if ((ppfd->dwFlags & PFD_DOUBLEBUFFER) && !(pf->flags & PF_FLAG_DOUBLEBUFFER)) - continue; - if (!(ppfd->dwFlags & PFD_DOUBLEBUFFER) && (pf->flags & PF_FLAG_DOUBLEBUFFER)) - continue; - } - - if (ppfd->cColorBits != pf->color.redbits + pf->color.greenbits + pf->color.bluebits) - delta += 8; - - if (ppfd->cDepthBits != pf->depth.depthbits) - delta += 4; - - if (ppfd->cStencilBits != pf->depth.stencilbits) - delta += 2; - - if (ppfd->cAlphaBits != pf->alpha.alphabits) - delta++; - - if (delta < bestdelta) { - bestindex = index; - bestdelta = delta; - if (bestdelta == 0) - break; - } - } - - if (bestindex == count) - return 0; - return bestindex + 1; -} - -WINGDIAPI int APIENTRY -wglDescribePixelFormat( - HDC hdc, - int iPixelFormat, - UINT nBytes, - LPPIXELFORMATDESCRIPTOR ppfd ) -{ - return stw_pixelformat_describe( hdc, iPixelFormat, nBytes, ppfd ); -} - -WINGDIAPI int APIENTRY -wglGetPixelFormat( - HDC hdc ) -{ - return stw_pixelformat_get( hdc ); -} - -WINGDIAPI BOOL APIENTRY -wglSetPixelFormat( - HDC hdc, - int iPixelFormat, - const PIXELFORMATDESCRIPTOR *ppfd ) -{ - if (ppfd->nSize != sizeof( PIXELFORMATDESCRIPTOR )) - return FALSE; - - return stw_pixelformat_set( hdc, iPixelFormat ); -} From c7e38bc7fe00e9042897639fcd524beeeca29555 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 19:10:50 +0000 Subject: [PATCH 12/18] stw: remove header --- src/gallium/state_trackers/wgl/shared/stw_context.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gallium/state_trackers/wgl/shared/stw_context.c b/src/gallium/state_trackers/wgl/shared/stw_context.c index e17abd73f51..6c1f353f962 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_context.c +++ b/src/gallium/state_trackers/wgl/shared/stw_context.c @@ -38,7 +38,6 @@ #include "shared/stw_framebuffer.h" #include "shared/stw_pixelformat.h" #include "stw_context.h" -//#include "stw_wgl.h" static struct wgl_context *ctx_head = NULL; From ef3fe78478d1ce8f70a36eefb6739103358ecb54 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 19:13:58 +0000 Subject: [PATCH 13/18] stw: fix comment --- src/gallium/state_trackers/wgl/shared/stw_framebuffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c b/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c index 50edf7306d6..90f181e28b0 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c +++ b/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c @@ -171,7 +171,7 @@ framebuffer_destroy( } } -/* Given an hdc, return the corresponding wgl_context. +/* Given an hdc, return the corresponding stw_framebuffer. */ struct stw_framebuffer * framebuffer_from_hdc( From 7dbd95618f3e50fe2818d4152527092a96e70474 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 19:14:57 +0000 Subject: [PATCH 14/18] stw: remove duplicate function declarations --- .../state_trackers/wgl/shared/stw_context.c | 1 + .../state_trackers/wgl/shared/stw_context.h | 20 ------------------- 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/src/gallium/state_trackers/wgl/shared/stw_context.c b/src/gallium/state_trackers/wgl/shared/stw_context.c index 6c1f353f962..bf1f0f83c48 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_context.c +++ b/src/gallium/state_trackers/wgl/shared/stw_context.c @@ -37,6 +37,7 @@ #include "shared/stw_winsys.h" #include "shared/stw_framebuffer.h" #include "shared/stw_pixelformat.h" +#include "stw_public.h" #include "stw_context.h" static struct wgl_context *ctx_head = NULL; diff --git a/src/gallium/state_trackers/wgl/shared/stw_context.h b/src/gallium/state_trackers/wgl/shared/stw_context.h index 91e71cf087f..5e84fc28e6f 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_context.h +++ b/src/gallium/state_trackers/wgl/shared/stw_context.h @@ -43,26 +43,6 @@ struct wgl_context struct wgl_context * wgl_context_from_hdc(HDC hdc ); -////////////////// - - -BOOL stw_copy_context( HGLRC hglrcSrc, - HGLRC hglrcDst, - UINT mask ); - -HGLRC stw_create_context( HDC hdc, int iLayerPlane ); - -BOOL stw_delete_context( HGLRC hglrc ); - -HGLRC stw_get_current_context( void ); - -HDC stw_get_current_dc( void ); - -BOOL stw_make_current( HDC hdc, HGLRC hglrc ); - - - - From 9a58a9d6ca19a2933b9fddfa3c870786f35183b0 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 20:08:07 +0000 Subject: [PATCH 15/18] stw: don't call out to wglGetPixelFormat() --- src/gallium/state_trackers/wgl/shared/stw_context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gallium/state_trackers/wgl/shared/stw_context.c b/src/gallium/state_trackers/wgl/shared/stw_context.c index bf1f0f83c48..6a26c163a97 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_context.c +++ b/src/gallium/state_trackers/wgl/shared/stw_context.c @@ -72,7 +72,7 @@ stw_create_context( if (iLayerPlane != 0) return NULL; - pfi = wglGetPixelFormat( hdc ); + pfi = stw_pixelformat_get( hdc ); if (pfi == 0) return NULL; From 866587942c7053cdcb7443ed00ce6d902c010631 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 20:19:17 +0000 Subject: [PATCH 16/18] stw: clean up error paths --- .../state_trackers/wgl/shared/stw_context.c | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/gallium/state_trackers/wgl/shared/stw_context.c b/src/gallium/state_trackers/wgl/shared/stw_context.c index 6a26c163a97..62e26ab5da8 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_context.c +++ b/src/gallium/state_trackers/wgl/shared/stw_context.c @@ -64,10 +64,10 @@ stw_create_context( int iLayerPlane ) { uint pfi; - const struct pixelformat_info *pf; - struct wgl_context *ctx; - GLvisual *visual; - struct pipe_context *pipe; + const struct pixelformat_info *pf = NULL; + struct wgl_context *ctx = NULL; + GLvisual *visual = NULL; + struct pipe_context *pipe = NULL; if (iLayerPlane != 0) return NULL; @@ -103,34 +103,36 @@ stw_create_context( 0, 0, (pf->flags & PF_FLAG_MULTISAMPLED) ? stw_query_samples() : 0 ); - if (visual == NULL) { - FREE( ctx ); - return NULL; - } + if (visual == NULL) + goto fail; pipe = stw_dev->stw_winsys->create_context( stw_dev->screen ); - if (!pipe) { - _mesa_destroy_visual( visual ); - FREE( ctx ); - return NULL; - } - + if (pipe == NULL) + goto fail; + assert(!pipe->priv); pipe->priv = hdc; ctx->st = st_create_context( pipe, visual, NULL ); - if (ctx->st == NULL) { - pipe->destroy( pipe ); - _mesa_destroy_visual( visual ); - FREE( ctx ); - return NULL; - } + if (ctx->st == NULL) + goto fail; + ctx->st->ctx->DriverCtx = ctx; ctx->next = ctx_head; ctx_head = ctx; return (HGLRC) ctx; + +fail: + if (visual) + _mesa_destroy_visual( visual ); + + if (pipe) + pipe->destroy( pipe ); + + FREE( ctx ); + return NULL; } From cbd368e91be121f1381ef132b64839f5638009f7 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 20:39:06 +0000 Subject: [PATCH 17/18] stw: use proper stw_context pointers in shared interface Move away from hglrc. --- src/gallium/state_trackers/wgl/icd/stw_icd.c | 79 ++++++++++--------- .../state_trackers/wgl/shared/stw_context.c | 44 +++++------ .../state_trackers/wgl/shared/stw_context.h | 14 ++-- src/gallium/state_trackers/wgl/wgl/stw_wgl.c | 15 +++- 4 files changed, 82 insertions(+), 70 deletions(-) diff --git a/src/gallium/state_trackers/wgl/icd/stw_icd.c b/src/gallium/state_trackers/wgl/icd/stw_icd.c index 35a8eee2206..70e346a5394 100644 --- a/src/gallium/state_trackers/wgl/icd/stw_icd.c +++ b/src/gallium/state_trackers/wgl/icd/stw_icd.c @@ -42,7 +42,7 @@ struct stw_icd { struct { - HGLRC hglrc; + struct stw_context *ctx; } ctx_array[DRV_CONTEXT_MAX]; DHGLRC ctx_current; @@ -60,7 +60,7 @@ stw_icd_init( void ) assert(!stw_icd); stw_icd = &stw_icd_storage; - memset(stw_icd, 0, sizeof(*stw_icd)); + memset(stw_icd, 0, sizeof *stw_icd); return TRUE; } @@ -68,28 +68,28 @@ stw_icd_init( void ) void stw_icd_cleanup(void) { - DHGLRC dhglrc; + int i; if(!stw_icd) return; /* Ensure all contexts are destroyed */ - for (dhglrc = 1; dhglrc <= DRV_CONTEXT_MAX; dhglrc++) - if (stw_icd->ctx_array[dhglrc - 1].hglrc) - DrvDeleteContext( dhglrc ); + for (i = 0; i < DRV_CONTEXT_MAX; i++) + if (stw_icd->ctx_array[i].ctx) + stw_delete_context( stw_icd->ctx_array[i].ctx ); stw_icd = NULL; } -static HGLRC -lookup_hglrc( DHGLRC dhglrc ) +static struct stw_context * +lookup_context( DHGLRC dhglrc ) { if (dhglrc == 0 || dhglrc >= DRV_CONTEXT_MAX) return NULL; - return stw_icd->ctx_array[dhglrc - 1].hglrc; + return stw_icd->ctx_array[dhglrc - 1].ctx; } BOOL APIENTRY @@ -98,8 +98,8 @@ DrvCopyContext( DHGLRC dhrcDest, UINT fuMask ) { - HGLRC src = lookup_hglrc( dhrcSource ); - HGLRC dst = lookup_hglrc( dhrcDest ); + struct stw_context *src = lookup_context( dhrcSource ); + struct stw_context *dst = lookup_context( dhrcDest ); if (src == NULL || dst == NULL) @@ -116,7 +116,7 @@ DrvCreateLayerContext( DWORD i; for (i = 0; i < DRV_CONTEXT_MAX; i++) { - if (stw_icd->ctx_array[i].hglrc == NULL) + if (stw_icd->ctx_array[i].ctx == NULL) goto found_slot; } @@ -125,8 +125,8 @@ DrvCreateLayerContext( return 0; found_slot: - stw_icd->ctx_array[i].hglrc = stw_create_context( hdc, iLayerPlane ); - if (stw_icd->ctx_array[i].hglrc == NULL) + stw_icd->ctx_array[i].ctx = stw_create_context( hdc, iLayerPlane ); + if (stw_icd->ctx_array[i].ctx == NULL) return 0; return (DHGLRC) i + 1; @@ -143,18 +143,20 @@ BOOL APIENTRY DrvDeleteContext( DHGLRC dhglrc ) { - HGLRC hglrc = lookup_hglrc( dhglrc ); - BOOL success = FALSE; + struct stw_context *ctx; - if (hglrc != NULL) { - success = stw_delete_context( hglrc ); - if (success) - stw_icd->ctx_array[dhglrc - 1].hglrc = NULL; - } + ctx = lookup_context( dhglrc ); + if (ctx == NULL) + goto fail; - debug_printf( "%s( %u ) = %s\n", __FUNCTION__, dhglrc, success ? "TRUE" : "FALSE" ); + if (stw_delete_context( ctx ) == FALSE) + goto fail; - return success; + stw_icd->ctx_array[dhglrc - 1].ctx = NULL; + return TRUE; + +fail: + return FALSE; } BOOL APIENTRY @@ -228,21 +230,23 @@ BOOL APIENTRY DrvReleaseContext( DHGLRC dhglrc ) { - BOOL success = FALSE; + struct stw_context *ctx; - if (dhglrc == stw_icd->ctx_current) { - HGLRC hglrc = lookup_hglrc( dhglrc ); + if (dhglrc != stw_icd->ctx_current) + goto fail; - if (hglrc != NULL) { - success = stw_make_current( NULL, NULL ); - if (success) - stw_icd->ctx_current = 0; - } - } + ctx = lookup_context( dhglrc ); + if (ctx == NULL) + goto fail; - debug_printf( "%s( %u ) = %s\n", __FUNCTION__, dhglrc, success ? "TRUE" : "FALSE" ); + if (stw_make_current( NULL, NULL ) == FALSE) + goto fail; - return success; + stw_icd->ctx_current = 0; + return TRUE; + +fail: + return FALSE; } void APIENTRY @@ -265,15 +269,16 @@ DrvSetContext( DHGLRC dhglrc, PFN_SETPROCTABLE pfnSetProcTable ) { - HGLRC hglrc = lookup_hglrc( dhglrc ); + struct stw_context *ctx; GLDISPATCHTABLE *disp = &cpt.glDispatchTable; debug_printf( "%s( 0x%p, %u, 0x%p )\n", __FUNCTION__, hdc, dhglrc, pfnSetProcTable ); - if (hglrc == NULL) + ctx = lookup_context( dhglrc ); + if (ctx == NULL) return NULL; - if (!stw_make_current( hdc, hglrc )) + if (!stw_make_current( hdc, ctx )) return NULL; memset( &cpt, 0, sizeof( cpt ) ); diff --git a/src/gallium/state_trackers/wgl/shared/stw_context.c b/src/gallium/state_trackers/wgl/shared/stw_context.c index 62e26ab5da8..2abf97b5adb 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_context.c +++ b/src/gallium/state_trackers/wgl/shared/stw_context.c @@ -40,32 +40,32 @@ #include "stw_public.h" #include "stw_context.h" -static struct wgl_context *ctx_head = NULL; +static struct stw_context *ctx_head = NULL; static HDC current_hdc = NULL; -static HGLRC current_hrc = NULL; +static struct stw_context *current_hrc = NULL; BOOL stw_copy_context( - HGLRC hglrcSrc, - HGLRC hglrcDst, + struct stw_context *src, + struct stw_context *dst, UINT mask ) { - (void) hglrcSrc; - (void) hglrcDst; + (void) src; + (void) dst; (void) mask; return FALSE; } -HGLRC +struct stw_context * stw_create_context( HDC hdc, int iLayerPlane ) { uint pfi; const struct pixelformat_info *pf = NULL; - struct wgl_context *ctx = NULL; + struct stw_context *ctx = NULL; GLvisual *visual = NULL; struct pipe_context *pipe = NULL; @@ -78,7 +78,7 @@ stw_create_context( pf = pixelformat_get_info( pfi - 1 ); - ctx = CALLOC_STRUCT( wgl_context ); + ctx = CALLOC_STRUCT( stw_context ); if (ctx == NULL) return NULL; @@ -122,7 +122,7 @@ stw_create_context( ctx->next = ctx_head; ctx_head = ctx; - return (HGLRC) ctx; + return ctx; fail: if (visual) @@ -138,13 +138,13 @@ fail: BOOL stw_delete_context( - HGLRC hglrc ) + struct stw_context *hglrc ) { - struct wgl_context **link = &ctx_head; - struct wgl_context *ctx = ctx_head; + struct stw_context **link = &ctx_head; + struct stw_context *ctx = ctx_head; while (ctx != NULL) { - if (ctx == (struct wgl_context *) hglrc) { + if (ctx == hglrc) { GLcontext *glctx = ctx->st->ctx; GET_CURRENT_CONTEXT( glcurctx ); struct stw_framebuffer *fb; @@ -193,7 +193,7 @@ get_window_size( HDC hdc, GLuint *width, GLuint *height ) } } -HGLRC +struct stw_context * stw_get_current_context( void ) { return current_hrc; @@ -208,9 +208,9 @@ stw_get_current_dc( void ) BOOL stw_make_current( HDC hdc, - HGLRC hglrc ) + struct stw_context *hglrc ) { - struct wgl_context *ctx = ctx_head; + struct stw_context *ctx = ctx_head; GET_CURRENT_CONTEXT( glcurctx ); struct stw_framebuffer *fb; GLuint width = 0; @@ -225,7 +225,7 @@ stw_make_current( } while (ctx != NULL) { - if (ctx == (struct wgl_context *) hglrc) + if (ctx == hglrc) break; ctx = ctx->next; } @@ -235,7 +235,7 @@ stw_make_current( /* Return if already current. */ if (glcurctx != NULL) { - struct wgl_context *curctx = (struct wgl_context *) glcurctx->DriverCtx; + struct stw_context *curctx = (struct stw_context *) glcurctx->DriverCtx; if (curctx != NULL && curctx == ctx && ctx->hdc == hdc) return TRUE; @@ -274,11 +274,11 @@ stw_make_current( return TRUE; } -struct wgl_context * -wgl_context_from_hdc( +struct stw_context * +stw_context_from_hdc( HDC hdc ) { - struct wgl_context *ctx = ctx_head; + struct stw_context *ctx = ctx_head; while (ctx != NULL) { if (ctx->hdc == hdc) diff --git a/src/gallium/state_trackers/wgl/shared/stw_context.h b/src/gallium/state_trackers/wgl/shared/stw_context.h index 5e84fc28e6f..89a8f900d81 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_context.h +++ b/src/gallium/state_trackers/wgl/shared/stw_context.h @@ -25,23 +25,23 @@ * **************************************************************************/ -#ifndef WGL_CONTEXT_H -#define WGL_CONTEXT_H +#ifndef STW_CONTEXT_H +#define STW_CONTEXT_H #include struct st_context; -struct wgl_context +struct stw_context { struct st_context *st; HDC hdc; DWORD color_bits; - struct wgl_context *next; + struct stw_context *next; }; -struct wgl_context * -wgl_context_from_hdc(HDC hdc ); +struct stw_context * +stw_context_from_hdc(HDC hdc ); @@ -50,4 +50,4 @@ wgl_context_from_hdc(HDC hdc ); -#endif /* WGL_CONTEXT_H */ +#endif /* STW_CONTEXT_H */ diff --git a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c index d03341815e6..f50b79b4e11 100644 --- a/src/gallium/state_trackers/wgl/wgl/stw_wgl.c +++ b/src/gallium/state_trackers/wgl/wgl/stw_wgl.c @@ -42,6 +42,11 @@ void stw_wgl_cleanup( void ) { } +static INLINE struct stw_context *stw_context( HGLRC hglrc ) +{ + return (struct stw_context *)hglrc; +} + WINGDIAPI BOOL APIENTRY wglCopyContext( @@ -49,7 +54,9 @@ wglCopyContext( HGLRC hglrcDst, UINT mask ) { - return stw_copy_context( hglrcSrc, hglrcDst, mask ); + return stw_copy_context( stw_context(hglrcSrc), + stw_context(hglrcDst), + mask ); } WINGDIAPI HGLRC APIENTRY @@ -71,14 +78,14 @@ WINGDIAPI BOOL APIENTRY wglDeleteContext( HGLRC hglrc ) { - return stw_delete_context( hglrc ); + return stw_delete_context( stw_context(hglrc) ); } WINGDIAPI HGLRC APIENTRY wglGetCurrentContext( VOID ) { - return stw_get_current_context(); + return (HGLRC) stw_get_current_context(); } WINGDIAPI HDC APIENTRY @@ -92,7 +99,7 @@ wglMakeCurrent( HDC hdc, HGLRC hglrc ) { - return stw_make_current( hdc, hglrc ); + return stw_make_current( hdc, stw_context(hglrc) ); } From a38b8213ff1b99b73aae884e7b90be3d1999e3bf Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 28 Jan 2009 20:41:00 +0000 Subject: [PATCH 18/18] wgl: add missing header --- .../state_trackers/wgl/shared/stw_public.h | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/gallium/state_trackers/wgl/shared/stw_public.h diff --git a/src/gallium/state_trackers/wgl/shared/stw_public.h b/src/gallium/state_trackers/wgl/shared/stw_public.h new file mode 100644 index 00000000000..75b504a50f6 --- /dev/null +++ b/src/gallium/state_trackers/wgl/shared/stw_public.h @@ -0,0 +1,75 @@ +/************************************************************************** + * + * Copyright 2009 VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#ifndef STW_PUBLIC_H +#define STW_PUBLIC_H + +#include +#include "pipe/p_compiler.h" + +struct stw_winsys; +struct stw_context; + +boolean +st_shared_init(const struct stw_winsys *stw_winsys); + +void +st_shared_cleanup(void); + + +BOOL stw_copy_context( struct stw_context *src, + struct stw_context *dst, + UINT mask ); + +struct stw_context *stw_create_context( HDC hdc, int iLayerPlane ); + +BOOL stw_delete_context( struct stw_context *ctx ); + +struct stw_context *stw_get_current_context( void ); + +HDC stw_get_current_dc( void ); + +BOOL stw_make_current( HDC hdc, struct stw_context *ctx ); + +BOOL stw_swap_buffers( HDC hdc ); + +PROC stw_get_proc_address( LPCSTR lpszProc ); + +int stw_pixelformat_describe( HDC hdc, + int iPixelFormat, + UINT nBytes, + LPPIXELFORMATDESCRIPTOR ppfd ); + +int stw_pixelformat_get( HDC hdc ); + +BOOL stw_pixelformat_set( HDC hdc, + int iPixelFormat ); + +int stw_pixelformat_choose( HDC hdc, + CONST PIXELFORMATDESCRIPTOR *ppfd ); + +#endif