st/wgl: re-implement stw_device::ctx_mutex with CRITICAL_SECTION
[mesa.git] / src / gallium / state_trackers / wgl / stw_device.h
index e2020bf055444b419415a57e487b5862d369ceb0..f271762f6b16a09e98fff24994990dd5b48b2015 100644 (file)
@@ -1,6 +1,6 @@
 /**************************************************************************
  *
- * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * Copyright 2008 VMware, Inc.
  * All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * 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
+ * IN NO EVENT SHALL VMWARE 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 ST_DEVICE_H_
-#define ST_DEVICE_H_
+#ifndef STW_DEVICE_H_
+#define STW_DEVICE_H_
 
 
+#include "pipe/p_compiler.h"
+#include "os/os_thread.h"
+#include "util/u_handle_table.h"
 #include "stw_icd.h"
+#include "stw_pixelformat.h"
 
-struct pipe_screen;
 
+#define STW_MAX_PIXELFORMATS   256
 
-struct drv_context
-{
-   HGLRC hglrc;
-};
-
-#define DRV_CONTEXT_MAX 32
 
+struct pipe_screen;
+struct st_api;
+struct st_manager;
+struct stw_framebuffer;
 
 struct stw_device
 {
    const struct stw_winsys *stw_winsys;
    
    struct pipe_screen *screen;
+   
+   /* Cache some PIPE_CAP_* */
+   unsigned max_2d_levels;
+   unsigned max_2d_length;
+
+   struct st_api *stapi;
+   struct st_manager *smapi;
+
+   LUID AdapterLuid;
 
-   struct drv_context ctx_array[DRV_CONTEXT_MAX];
+   struct stw_pixelformat_info pixelformats[STW_MAX_PIXELFORMATS];
+   unsigned pixelformat_count;
+   unsigned pixelformat_extended_count;
 
-   DHGLRC ctx_current;
+   GLCALLBACKTABLE callbacks;
+
+   CRITICAL_SECTION ctx_mutex;
+   struct handle_table *ctx_table;
+   
+   pipe_mutex fb_mutex;
+   struct stw_framebuffer *fb_head;
+   
+#ifdef DEBUG
+   unsigned long memdbg_no;
+#endif
 };
 
 
 extern struct stw_device *stw_dev;
 
 
-#endif /* ST_DEVICE_H_ */
+static inline struct stw_context *
+stw_lookup_context_locked( DHGLRC dhglrc )
+{
+   if (dhglrc == 0 || stw_dev == NULL)
+      return NULL;
+   return (struct stw_context *) handle_table_get(stw_dev->ctx_table, dhglrc);
+}
+
+
+static inline void
+stw_lock_contexts(struct stw_device *stw_dev)
+{
+   EnterCriticalSection(&stw_dev->ctx_mutex);
+}
+
+
+static inline void
+stw_unlock_contexts(struct stw_device *stw_dev)
+{
+   LeaveCriticalSection(&stw_dev->ctx_mutex);
+}
+
+
+#endif /* STW_DEVICE_H_ */