[PATCH 3/6] wined3d: Move volume data uploading into a separate function

Stefan Dösinger stefan at codeweavers.com
Thu Aug 22 07:57:56 CDT 2013


---
 dlls/wined3d/volume.c | 35 ++++++++++++++++++++++++++++-------
 1 file changed, 28 insertions(+), 7 deletions(-)

diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c
index a452e0b..14a5d5d 100644
--- a/dlls/wined3d/volume.c
+++ b/dlls/wined3d/volume.c
@@ -91,15 +91,39 @@ static void wined3d_volume_allocate_texture(const struct wined3d_volume *volume,
 }
 
 /* Context activation is done by the caller. */
-void wined3d_volume_load(struct wined3d_volume *volume, struct wined3d_context *context, BOOL srgb_mode)
+static void wined3d_volume_upload_data(struct wined3d_volume *volume, const struct wined3d_context *context,
+        const struct wined3d_bo_address *data)
 {
     const struct wined3d_gl_info *gl_info = context->gl_info;
     const struct wined3d_format *format = volume->resource.format;
 
-    TRACE("volume %p, context %p, level %u, srgb %#x, format %s (%#x).\n",
-            volume, context, volume->texture_level, srgb_mode, debug_d3dformat(format->id),
+    TRACE("volume %p, context %p, level %u, format %s (%#x).\n",
+            volume, context, volume->texture_level, debug_d3dformat(format->id),
             format->id);
 
+
+    if (data->buffer_object)
+    {
+        GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, data->buffer_object));
+        checkGLcall("glBindBufferARB");
+    }
+
+    GL_EXTCALL(glTexSubImage3DEXT(GL_TEXTURE_3D, volume->texture_level, 0, 0, 0,
+            volume->resource.width, volume->resource.height, volume->resource.depth,
+            format->glFormat, format->glType, data->addr));
+    checkGLcall("glTexSubImage3D");
+
+    if (data->buffer_object)
+    {
+        GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0));
+        checkGLcall("glBindBufferARB");
+    }
+}
+
+/* Context activation is done by the caller. */
+void wined3d_volume_load(struct wined3d_volume *volume, struct wined3d_context *context, BOOL srgb_mode)
+{
+    struct wined3d_bo_address data = {0, volume->resource.allocatedMemory};
     volume_bind_and_dirtify(volume, context);
 
     if (!(volume->flags & WINED3D_VFLAG_ALLOCATED))
@@ -108,10 +132,7 @@ void wined3d_volume_load(struct wined3d_volume *volume, struct wined3d_context *
         volume->flags |= WINED3D_VFLAG_ALLOCATED;
     }
 
-    GL_EXTCALL(glTexSubImage3DEXT(GL_TEXTURE_3D, volume->texture_level, 0, 0, 0,
-            volume->resource.width, volume->resource.height, volume->resource.depth,
-            format->glFormat, format->glType, volume->resource.allocatedMemory));
-    checkGLcall("glTexSubImage3D");
+    wined3d_volume_upload_data(volume, context, &data);
 }
 
 /* Do not call while under the GL lock. */
-- 
1.8.1.5




More information about the wine-patches mailing list