[PATCH 1/5] wined3d: Move the FBO fields from struct wined3d_context to struct wined3d_context_gl.

Henri Verbeet hverbeet at codeweavers.com
Sun May 19 09:00:43 CDT 2019


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/wined3d/context.c         | 150 +++++++++++++++++++++--------------------
 dlls/wined3d/wined3d_private.h |  28 ++++----
 2 files changed, 90 insertions(+), 88 deletions(-)

diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 5735d02a5af..84d6f4e86ae 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -53,23 +53,23 @@ static void wined3d_context_gl_bind_fbo(struct wined3d_context_gl *context_gl, G
     switch (target)
     {
         case GL_READ_FRAMEBUFFER:
-            if (context_gl->c.fbo_read_binding == fbo)
+            if (context_gl->fbo_read_binding == fbo)
                 return;
-            context_gl->c.fbo_read_binding = fbo;
+            context_gl->fbo_read_binding = fbo;
             break;
 
         case GL_DRAW_FRAMEBUFFER:
-            if (context_gl->c.fbo_draw_binding == fbo)
+            if (context_gl->fbo_draw_binding == fbo)
                 return;
-            context_gl->c.fbo_draw_binding = fbo;
+            context_gl->fbo_draw_binding = fbo;
             break;
 
         case GL_FRAMEBUFFER:
-            if (context_gl->c.fbo_read_binding == fbo
-                    && context_gl->c.fbo_draw_binding == fbo)
+            if (context_gl->fbo_read_binding == fbo
+                    && context_gl->fbo_draw_binding == fbo)
                 return;
-            context_gl->c.fbo_read_binding = fbo;
-            context_gl->c.fbo_draw_binding = fbo;
+            context_gl->fbo_read_binding = fbo;
+            context_gl->fbo_draw_binding = fbo;
             break;
 
         default:
@@ -397,7 +397,7 @@ void wined3d_context_gl_check_fbo_status(const struct wined3d_context_gl *contex
 
         FIXME("FBO status %s (%#x).\n", debug_fbostatus(status), status);
 
-        if (!context_gl->c.current_fbo)
+        if (!context_gl->current_fbo)
         {
             ERR("FBO 0 is incomplete, driver bug?\n");
             return;
@@ -568,7 +568,7 @@ static void wined3d_context_gl_destroy_fbo_entry(struct wined3d_context_gl *cont
         TRACE("Destroy FBO %u.\n", entry->id);
         wined3d_context_gl_destroy_fbo(context_gl, entry->id);
     }
-    --context_gl->c.fbo_entry_count;
+    --context_gl->fbo_entry_count;
     list_remove(&entry->entry);
     heap_free(entry);
 }
@@ -675,29 +675,29 @@ static struct fbo_entry *wined3d_context_gl_find_fbo_entry(struct wined3d_contex
         }
     }
 
-    LIST_FOR_EACH_ENTRY(entry, &context_gl->c.fbo_list, struct fbo_entry, entry)
+    LIST_FOR_EACH_ENTRY(entry, &context_gl->fbo_list, struct fbo_entry, entry)
     {
         if (memcmp(&fbo_key, &entry->key, sizeof(fbo_key)))
             continue;
 
         list_remove(&entry->entry);
-        list_add_head(&context_gl->c.fbo_list, &entry->entry);
+        list_add_head(&context_gl->fbo_list, &entry->entry);
         return entry;
     }
 
-    if (context_gl->c.fbo_entry_count < WINED3D_MAX_FBO_ENTRIES)
+    if (context_gl->fbo_entry_count < WINED3D_MAX_FBO_ENTRIES)
     {
         entry = context_create_fbo_entry(&context_gl->c, render_targets, depth_stencil, color_location, ds_location);
-        list_add_head(&context_gl->c.fbo_list, &entry->entry);
-        ++context_gl->c.fbo_entry_count;
+        list_add_head(&context_gl->fbo_list, &entry->entry);
+        ++context_gl->fbo_entry_count;
     }
     else
     {
-        entry = LIST_ENTRY(list_tail(&context_gl->c.fbo_list), struct fbo_entry, entry);
+        entry = LIST_ENTRY(list_tail(&context_gl->fbo_list), struct fbo_entry, entry);
         wined3d_context_gl_reuse_fbo_entry(context_gl, target, render_targets,
                 depth_stencil, color_location, ds_location, entry);
         list_remove(&entry->entry);
-        list_add_head(&context_gl->c.fbo_list, &entry->entry);
+        list_add_head(&context_gl->fbo_list, &entry->entry);
     }
 
     return entry;
@@ -717,8 +717,8 @@ static void wined3d_context_gl_apply_fbo_entry(struct wined3d_context_gl *contex
         return;
     }
 
-    read_binding = context_gl->c.fbo_read_binding;
-    draw_binding = context_gl->c.fbo_draw_binding;
+    read_binding = context_gl->fbo_read_binding;
+    draw_binding = context_gl->fbo_draw_binding;
     wined3d_context_gl_bind_fbo(context_gl, GL_FRAMEBUFFER, entry->id);
 
     if (gl_info->supported[ARB_FRAMEBUFFER_NO_ATTACHMENTS])
@@ -763,27 +763,27 @@ static void wined3d_context_gl_apply_fbo_state(struct wined3d_context_gl *contex
 {
     struct fbo_entry *entry, *entry2;
 
-    LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &context_gl->c.fbo_destroy_list, struct fbo_entry, entry)
+    LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &context_gl->fbo_destroy_list, struct fbo_entry, entry)
     {
         wined3d_context_gl_destroy_fbo_entry(context_gl, entry);
     }
 
-    if (context_gl->c.rebind_fbo)
+    if (context_gl->rebind_fbo)
     {
         wined3d_context_gl_bind_fbo(context_gl, GL_FRAMEBUFFER, 0);
-        context_gl->c.rebind_fbo = FALSE;
+        context_gl->rebind_fbo = FALSE;
     }
 
     if (color_location == WINED3D_LOCATION_DRAWABLE)
     {
-        context_gl->c.current_fbo = NULL;
+        context_gl->current_fbo = NULL;
         wined3d_context_gl_bind_fbo(context_gl, target, 0);
     }
     else
     {
-        context_gl->c.current_fbo = wined3d_context_gl_find_fbo_entry(context_gl, target,
-                render_targets, depth_stencil, color_location, ds_location);
-        wined3d_context_gl_apply_fbo_entry(context_gl, target, context_gl->c.current_fbo);
+        context_gl->current_fbo = wined3d_context_gl_find_fbo_entry(context_gl,
+                target, render_targets, depth_stencil, color_location, ds_location);
+        wined3d_context_gl_apply_fbo_entry(context_gl, target, context_gl->current_fbo);
     }
 }
 
@@ -794,12 +794,12 @@ void wined3d_context_gl_apply_fbo_state_blit(struct wined3d_context_gl *context_
 {
     struct wined3d_rendertarget_info ds_info = {{0}};
 
-    memset(context_gl->c.blit_targets, 0, sizeof(context_gl->c.blit_targets));
+    memset(context_gl->blit_targets, 0, sizeof(context_gl->blit_targets));
     if (rt)
     {
-        context_gl->c.blit_targets[0].resource = rt;
-        context_gl->c.blit_targets[0].sub_resource_idx = rt_sub_resource_idx;
-        context_gl->c.blit_targets[0].layer_count = 1;
+        context_gl->blit_targets[0].resource = rt;
+        context_gl->blit_targets[0].sub_resource_idx = rt_sub_resource_idx;
+        context_gl->blit_targets[0].layer_count = 1;
     }
 
     if (ds)
@@ -809,7 +809,7 @@ void wined3d_context_gl_apply_fbo_state_blit(struct wined3d_context_gl *context_
         ds_info.layer_count = 1;
     }
 
-    wined3d_context_gl_apply_fbo_state(context_gl, target, context_gl->c.blit_targets, &ds_info, location, location);
+    wined3d_context_gl_apply_fbo_state(context_gl, target, context_gl->blit_targets, &ds_info, location, location);
 }
 
 /* Context activation is done by the caller. */
@@ -1051,7 +1051,7 @@ static void wined3d_context_gl_enum_fbo_entries(const struct wined3d_device *dev
         const struct wined3d_gl_info *gl_info = context_gl->c.gl_info;
         struct fbo_entry *entry, *entry2;
 
-        LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &context_gl->c.fbo_list, struct fbo_entry, entry)
+        LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &context_gl->fbo_list, struct fbo_entry, entry)
         {
             for (j = 0; j < gl_info->limits.buffers + 1; ++j)
             {
@@ -1070,7 +1070,7 @@ static void wined3d_context_gl_queue_fbo_entry_destruction(struct wined3d_contex
         struct fbo_entry *entry)
 {
     list_remove(&entry->entry);
-    list_add_head(&context_gl->c.fbo_destroy_list, &entry->entry);
+    list_add_head(&context_gl->fbo_destroy_list, &entry->entry);
 }
 
 void context_resource_released(const struct wined3d_device *device, struct wined3d_resource *resource)
@@ -1102,10 +1102,10 @@ void wined3d_context_gl_texture_update(struct wined3d_context_gl *context_gl,
         const struct wined3d_texture_gl *texture_gl)
 {
     const struct wined3d_gl_info *gl_info = context_gl->c.gl_info;
-    struct fbo_entry *entry = context_gl->c.current_fbo;
+    struct fbo_entry *entry = context_gl->current_fbo;
     unsigned int i;
 
-    if (!entry || context_gl->c.rebind_fbo)
+    if (!entry || context_gl->rebind_fbo)
         return;
 
     for (i = 0; i < gl_info->limits.buffers + 1; ++i)
@@ -1114,7 +1114,7 @@ void wined3d_context_gl_texture_update(struct wined3d_context_gl *context_gl,
                 || texture_gl->texture_srgb.name == entry->key.objects[i].object)
         {
             TRACE("Updated texture %p is bound as attachment %u to the current FBO.\n", texture_gl, i);
-            context_gl->c.rebind_fbo = TRUE;
+            context_gl->rebind_fbo = TRUE;
             return;
         }
     }
@@ -1325,7 +1325,6 @@ static void context_update_window(struct wined3d_context *context)
 void wined3d_context_cleanup(struct wined3d_context *context)
 {
     const struct wined3d_gl_info *gl_info = context->gl_info;
-    struct fbo_entry *entry, *entry2;
     HGLRC restore_ctx;
     HDC restore_dc;
 
@@ -1337,18 +1336,6 @@ void wined3d_context_cleanup(struct wined3d_context *context)
     else if (context->valid)
         context_set_gl_context(context);
 
-    LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &context->fbo_destroy_list, struct fbo_entry, entry)
-    {
-        if (!context->valid) entry->id = 0;
-        wined3d_context_gl_destroy_fbo_entry(wined3d_context_gl(context), entry);
-    }
-
-    LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &context->fbo_list, struct fbo_entry, entry)
-    {
-        if (!context->valid) entry->id = 0;
-        wined3d_context_gl_destroy_fbo_entry(wined3d_context_gl(context), entry);
-    }
-
     context_restore_pixel_format(context);
     if (restore_ctx)
     {
@@ -1375,6 +1362,7 @@ void wined3d_context_gl_cleanup(struct wined3d_context_gl *context_gl)
     struct wined3d_so_statistics_query *so_statistics_query;
     struct wined3d_timestamp_query *timestamp_query;
     struct wined3d_occlusion_query *occlusion_query;
+    struct fbo_entry *entry, *entry2;
     struct wined3d_fence *fence;
     HGLRC restore_ctx;
     HDC restore_dc;
@@ -1495,6 +1483,20 @@ void wined3d_context_gl_cleanup(struct wined3d_context_gl *context_gl)
         occlusion_query->context_gl = NULL;
     }
 
+    LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &context_gl->fbo_destroy_list, struct fbo_entry, entry)
+    {
+        if (!context_gl->c.valid)
+            entry->id = 0;
+        wined3d_context_gl_destroy_fbo_entry(context_gl, entry);
+    }
+
+    LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &context_gl->fbo_list, struct fbo_entry, entry)
+    {
+        if (!context_gl->c.valid)
+            entry->id = 0;
+        wined3d_context_gl_destroy_fbo_entry(context_gl, entry);
+    }
+
     heap_free(context_gl->texture_type);
 
     context_restore_pixel_format(&context_gl->c);
@@ -1911,9 +1913,6 @@ static BOOL wined3d_context_init(struct wined3d_context *context, struct wined3d
     struct wined3d_device *device = swapchain->device;
     DWORD state;
 
-    list_init(&context->fbo_list);
-    list_init(&context->fbo_destroy_list);
-
     if (!(context->hdc = GetDCEx(swapchain->win_handle, 0, DCX_USESTYLE | DCX_CACHE)))
     {
         WARN("Failed to retrieve device context, trying swapchain backup.\n");
@@ -1986,6 +1985,9 @@ HRESULT wined3d_context_gl_init(struct wined3d_context_gl *context_gl, struct wi
     gl_info = context->gl_info;
     d3d_info = context->d3d_info;
 
+    list_init(&context_gl->fbo_list);
+    list_init(&context_gl->fbo_destroy_list);
+
     list_init(&context_gl->occlusion_queries);
     list_init(&context_gl->fences);
     list_init(&context_gl->timestamp_queries);
@@ -2146,7 +2148,7 @@ HRESULT wined3d_context_gl_init(struct wined3d_context_gl *context_gl, struct wi
     }
 
     context->render_offscreen = wined3d_resource_is_offscreen(target);
-    context->draw_buffers_mask = context_generate_rt_mask(GL_BACK);
+    context_gl->draw_buffers_mask = context_generate_rt_mask(GL_BACK);
     context->valid = 1;
 
     context->glCtx = ctx;
@@ -2515,11 +2517,11 @@ static void context_apply_draw_buffers(struct wined3d_context *context, DWORD rt
 void wined3d_context_gl_set_draw_buffer(struct wined3d_context_gl *context_gl, GLenum buffer)
 {
     const struct wined3d_gl_info *gl_info = context_gl->c.gl_info;
-    struct fbo_entry *current_fbo = context_gl->c.current_fbo;
+    struct fbo_entry *current_fbo = context_gl->current_fbo;
     uint32_t new_mask = context_generate_rt_mask(buffer);
     uint32_t *current_mask;
 
-    current_mask = current_fbo ? &current_fbo->rt_mask : &context_gl->c.draw_buffers_mask;
+    current_mask = current_fbo ? &current_fbo->rt_mask : &context_gl->draw_buffers_mask;
     if (new_mask == *current_mask)
         return;
 
@@ -2778,7 +2780,7 @@ void wined3d_context_gl_apply_blit_state(struct wined3d_context_gl *context_gl,
         }
         else
         {
-            context->current_fbo = NULL;
+            context_gl->current_fbo = NULL;
             wined3d_context_gl_bind_fbo(context_gl, GL_FRAMEBUFFER, 0);
             rt_mask = context_generate_rt_mask_from_resource(&rt->resource);
         }
@@ -2788,7 +2790,7 @@ void wined3d_context_gl_apply_blit_state(struct wined3d_context_gl *context_gl,
         rt_mask = context_generate_rt_mask_no_fbo(context, &rt->resource);
     }
 
-    cur_mask = context->current_fbo ? &context->current_fbo->rt_mask : &context->draw_buffers_mask;
+    cur_mask = context_gl->current_fbo ? &context_gl->current_fbo->rt_mask : &context_gl->draw_buffers_mask;
 
     if (rt_mask != *cur_mask)
     {
@@ -3036,16 +3038,16 @@ BOOL wined3d_context_gl_apply_clear_state(struct wined3d_context_gl *context_gl,
 
             if (!rt_count || wined3d_resource_is_offscreen(rts[0]->resource))
             {
-                memset(context_gl->c.blit_targets, 0, sizeof(context_gl->c.blit_targets));
+                memset(context_gl->blit_targets, 0, sizeof(context_gl->blit_targets));
                 for (i = 0; i < rt_count; ++i)
                 {
                     if (rts[i])
                     {
                         struct wined3d_rendertarget_view_gl *rtv_gl = wined3d_rendertarget_view_gl(rts[i]);
-                        context_gl->c.blit_targets[i].gl_view = rtv_gl->gl_view;
-                        context_gl->c.blit_targets[i].resource = rtv_gl->v.resource;
-                        context_gl->c.blit_targets[i].sub_resource_idx = rtv_gl->v.sub_resource_idx;
-                        context_gl->c.blit_targets[i].layer_count = rtv_gl->v.layer_count;
+                        context_gl->blit_targets[i].gl_view = rtv_gl->gl_view;
+                        context_gl->blit_targets[i].resource = rtv_gl->v.resource;
+                        context_gl->blit_targets[i].sub_resource_idx = rtv_gl->v.sub_resource_idx;
+                        context_gl->blit_targets[i].layer_count = rtv_gl->v.layer_count;
                     }
                     if (rts[i] && rts[i]->format->id != WINED3DFMT_NULL)
                         rt_mask |= (1u << i);
@@ -3060,9 +3062,8 @@ BOOL wined3d_context_gl_apply_clear_state(struct wined3d_context_gl *context_gl,
                     ds_info.layer_count = dsv_gl->v.layer_count;
                 }
 
-                wined3d_context_gl_apply_fbo_state(context_gl, GL_FRAMEBUFFER, context_gl->c.blit_targets, &ds_info,
-                        rt_count ? rts[0]->resource->draw_binding : 0,
-                        dsv ? dsv->resource->draw_binding : 0);
+                wined3d_context_gl_apply_fbo_state(context_gl, GL_FRAMEBUFFER, context_gl->blit_targets, &ds_info,
+                        rt_count ? rts[0]->resource->draw_binding : 0, dsv ? dsv->resource->draw_binding : 0);
             }
             else
             {
@@ -3095,7 +3096,7 @@ BOOL wined3d_context_gl_apply_clear_state(struct wined3d_context_gl *context_gl,
         rt_mask = context_generate_rt_mask_no_fbo(&context_gl->c, rt_count ? rts[0]->resource : NULL);
     }
 
-    cur_mask = context_gl->c.current_fbo ? &context_gl->c.current_fbo->rt_mask : &context_gl->c.draw_buffers_mask;
+    cur_mask = context_gl->current_fbo ? &context_gl->current_fbo->rt_mask : &context_gl->draw_buffers_mask;
 
     if (rt_mask != *cur_mask)
     {
@@ -3182,17 +3183,17 @@ void context_state_fb(struct wined3d_context *context, const struct wined3d_stat
             const struct wined3d_rendertarget_view_gl *view_gl;
             unsigned int i;
 
-            memset(context->blit_targets, 0, sizeof(context->blit_targets));
+            memset(context_gl->blit_targets, 0, sizeof(context_gl->blit_targets));
             for (i = 0; i < context->gl_info->limits.buffers; ++i)
             {
                 if (!fb->render_targets[i])
                     continue;
 
                 view_gl = wined3d_rendertarget_view_gl(fb->render_targets[i]);
-                context->blit_targets[i].gl_view = view_gl->gl_view;
-                context->blit_targets[i].resource = view_gl->v.resource;
-                context->blit_targets[i].sub_resource_idx = view_gl->v.sub_resource_idx;
-                context->blit_targets[i].layer_count = view_gl->v.layer_count;
+                context_gl->blit_targets[i].gl_view = view_gl->gl_view;
+                context_gl->blit_targets[i].resource = view_gl->v.resource;
+                context_gl->blit_targets[i].sub_resource_idx = view_gl->v.sub_resource_idx;
+                context_gl->blit_targets[i].layer_count = view_gl->v.layer_count;
 
                 if (!color_location)
                     color_location = view_gl->v.resource->draw_binding;
@@ -3207,12 +3208,12 @@ void context_state_fb(struct wined3d_context *context, const struct wined3d_stat
                 ds_info.layer_count = view_gl->v.layer_count;
             }
 
-            wined3d_context_gl_apply_fbo_state(context_gl, GL_FRAMEBUFFER, context->blit_targets, &ds_info,
+            wined3d_context_gl_apply_fbo_state(context_gl, GL_FRAMEBUFFER, context_gl->blit_targets, &ds_info,
                     color_location, fb->depth_stencil ? fb->depth_stencil->resource->draw_binding : 0);
         }
     }
 
-    cur_mask = context->current_fbo ? &context->current_fbo->rt_mask : &context->draw_buffers_mask;
+    cur_mask = context_gl->current_fbo ? &context_gl->current_fbo->rt_mask : &context_gl->draw_buffers_mask;
     if (rt_mask != *cur_mask)
     {
         context_apply_draw_buffers(context, rt_mask);
@@ -3462,11 +3463,12 @@ static void wined3d_context_gl_update_tex_unit_map(struct wined3d_context_gl *co
 /* Context activation is done by the caller. */
 void context_state_drawbuf(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
 {
+    struct wined3d_context_gl *context_gl = wined3d_context_gl(context);
     DWORD rt_mask, *cur_mask;
 
     if (isStateDirty(context, STATE_FRAMEBUFFER)) return;
 
-    cur_mask = context->current_fbo ? &context->current_fbo->rt_mask : &context->draw_buffers_mask;
+    cur_mask = context_gl->current_fbo ? &context_gl->current_fbo->rt_mask : &context_gl->draw_buffers_mask;
     rt_mask = find_draw_buffers_mask(context, state);
     if (rt_mask != *cur_mask)
     {
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 34fa1d3ef33..94765cb0c3a 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1924,11 +1924,10 @@ struct wined3d_context
     DWORD fixed_function_usage_map : 8; /* WINED3D_MAX_TEXTURES, 8 */
     DWORD lowest_disabled_stage : 4;    /* Max WINED3D_MAX_TEXTURES, 8 */
     DWORD use_immediate_mode_draw : 1;
-    DWORD rebind_fbo : 1;
     DWORD needs_set : 1;
     DWORD hdc_is_private : 1;
-
     DWORD hdc_has_format : 1;           /* only meaningful if hdc_is_private */
+
     DWORD update_shader_resource_bindings : 1;
     DWORD update_compute_shader_resource_bindings : 1;
     DWORD update_unordered_access_view_bindings : 1;
@@ -1939,7 +1938,7 @@ struct wined3d_context
     DWORD shader_update_mask : 6; /* WINED3D_SHADER_TYPE_COUNT, 6 */
     DWORD clip_distance_mask : 8; /* WINED3D_MAX_CLIP_DISTANCES, 8 */
     DWORD num_untracked_materials : 2;  /* Max value 2 */
-    DWORD padding : 8;
+    DWORD padding : 9;
 
     DWORD constant_update_mask;
     DWORD numbered_array_mask;
@@ -1966,16 +1965,6 @@ struct wined3d_context
     void *shader_backend_data;
     void *fragment_pipe_data;
 
-    /* FBOs */
-    UINT                    fbo_entry_count;
-    struct list             fbo_list;
-    struct list             fbo_destroy_list;
-    struct fbo_entry        *current_fbo;
-    GLuint                  fbo_read_binding;
-    GLuint                  fbo_draw_binding;
-    struct wined3d_rendertarget_info blit_targets[MAX_RENDER_TARGET_VIEWS];
-    DWORD draw_buffers_mask; /* Enabled draw buffers, 31 max. */
-
     struct wined3d_stream_info stream_info;
 
     /* Fences for GL_APPLE_flush_buffer_range */
@@ -1997,12 +1986,23 @@ struct wined3d_context_gl
 
     uint32_t fog_enabled : 1;
     uint32_t diffuse_attrib_to_1 : 1;
-    uint32_t padding : 30;
+    uint32_t rebind_fbo : 1;
+    uint32_t padding : 29;
 
     uint32_t default_attrib_value_set;
 
     GLenum *texture_type;
 
+    /* FBOs. */
+    unsigned int fbo_entry_count;
+    struct list fbo_list;
+    struct list fbo_destroy_list;
+    struct fbo_entry *current_fbo;
+    GLuint fbo_read_binding;
+    GLuint fbo_draw_binding;
+    struct wined3d_rendertarget_info blit_targets[MAX_RENDER_TARGET_VIEWS];
+    uint32_t draw_buffers_mask; /* Enabled draw buffers, 31 max. */
+
     /* Queries. */
     struct list occlusion_queries;
     struct list fences;
-- 
2.11.0




More information about the wine-devel mailing list