[PATCH 6/6] wined3d: Introduce get_format_internal() helper function.

Józef Kucia jkucia at codeweavers.com
Thu Dec 1 06:56:37 CST 2016


Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 dlls/wined3d/utils.c | 173 +++++++++++++--------------------------------------
 1 file changed, 43 insertions(+), 130 deletions(-)

diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 00899a1..74e7600 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -1678,6 +1678,20 @@ static inline int get_format_idx(enum wined3d_format_id format_id)
     return -1;
 }
 
+static struct wined3d_format *get_format_internal(struct wined3d_gl_info *gl_info,
+        enum wined3d_format_id format_id)
+{
+    int fmt_idx;
+
+    if ((fmt_idx = get_format_idx(format_id)) == -1)
+    {
+        ERR("Format %s (%#x) not found.\n", debug_d3dformat(format_id), format_id);
+        return NULL;
+    }
+
+    return &gl_info->formats[fmt_idx];
+}
+
 static void copy_format(struct wined3d_format *dst_format, const struct wined3d_format *src_format)
 {
     enum wined3d_format_id id = dst_format->id;
@@ -1729,6 +1743,7 @@ static enum wined3d_channel_type map_channel_type(char t)
 
 static BOOL init_format_base_info(struct wined3d_gl_info *gl_info)
 {
+    struct wined3d_format *format;
     unsigned int i, j;
 
     gl_info->format_count = WINED3D_FORMAT_COUNT;
@@ -1740,17 +1755,8 @@ static BOOL init_format_base_info(struct wined3d_gl_info *gl_info)
 
     for (i = 0; i < ARRAY_SIZE(formats); ++i)
     {
-        struct wined3d_format *format;
-        int fmt_idx;
-
-        fmt_idx = get_format_idx(formats[i].id);
-        if (fmt_idx == -1)
-        {
-            ERR("Could not allocate index for format %s %#x.\n",
-                    debug_d3dformat(formats[i].id), formats[i].id);
+        if (!(format = get_format_internal(gl_info, formats[i].id)))
             goto fail;
-        }
-        format = &gl_info->formats[fmt_idx];
 
         format->id = formats[i].id;
         format->red_size = formats[i].red_size;
@@ -1772,26 +1778,13 @@ static BOOL init_format_base_info(struct wined3d_gl_info *gl_info)
     for (i = 0; i < ARRAY_SIZE(typed_formats); ++i)
     {
         const struct wined3d_format *typeless_format;
-        struct wined3d_format *format;
         DWORD flags = 0;
-        int fmt_idx;
 
-        fmt_idx = get_format_idx(typed_formats[i].id);
-        if (fmt_idx == -1)
-        {
-            ERR("Could not allocate index for format %s %#x.\n",
-                    debug_d3dformat(typed_formats[i].id), typed_formats[i].id);
+        if (!(format = get_format_internal(gl_info, typed_formats[i].id)))
             goto fail;
-        }
-        format = &gl_info->formats[fmt_idx];
 
-        typeless_format = wined3d_get_format(gl_info, typed_formats[i].typeless_id);
-        if (typeless_format->id == WINED3DFMT_UNKNOWN)
-        {
-            ERR("Typeless format %s (%#x) not found.\n",
-                    debug_d3dformat(typed_formats[i].typeless_id), typed_formats[i].typeless_id);
+        if (!(typeless_format = get_format_internal(gl_info, typed_formats[i].typeless_id)))
             goto fail;
-        }
 
         format->id = typed_formats[i].id;
         format->red_size = typeless_format->red_size;
@@ -1830,29 +1823,18 @@ static BOOL init_format_base_info(struct wined3d_gl_info *gl_info)
 
     for (i = 0; i < ARRAY_SIZE(ddi_formats); ++i)
     {
-        int fmt_idx = get_format_idx(ddi_formats[i].id);
-
-        if (fmt_idx == -1)
-        {
-            ERR("Format %s (%#x) not found.\n", debug_d3dformat(ddi_formats[i].id), ddi_formats[i].id);
+        if (!(format = get_format_internal(gl_info, ddi_formats[i].id)))
             goto fail;
-        }
 
-        gl_info->formats[fmt_idx].ddi_format = ddi_formats[i].ddi_format;
+        format->ddi_format = ddi_formats[i].ddi_format;
     }
 
     for (i = 0; i < ARRAY_SIZE(format_base_flags); ++i)
     {
-        int fmt_idx = get_format_idx(format_base_flags[i].id);
-
-        if (fmt_idx == -1)
-        {
-            ERR("Format %s (%#x) not found.\n",
-                    debug_d3dformat(format_base_flags[i].id), format_base_flags[i].id);
+        if (!(format = get_format_internal(gl_info, format_base_flags[i].id)))
             goto fail;
-        }
 
-        format_set_flag(&gl_info->formats[fmt_idx], format_base_flags[i].flags);
+        format_set_flag(format, format_base_flags[i].flags);
     }
 
     return TRUE;
@@ -1864,27 +1846,20 @@ fail:
 
 static BOOL init_format_block_info(struct wined3d_gl_info *gl_info)
 {
+    struct wined3d_format *format;
     unsigned int i;
 
-    for (i = 0; i < (sizeof(format_block_info) / sizeof(*format_block_info)); ++i)
+    for (i = 0; i < ARRAY_SIZE(format_block_info); ++i)
     {
-        struct wined3d_format *format;
-        int fmt_idx = get_format_idx(format_block_info[i].id);
-
-        if (fmt_idx == -1)
-        {
-            ERR("Format %s (%#x) not found.\n",
-                    debug_d3dformat(format_block_info[i].id), format_block_info[i].id);
+        if (!(format = get_format_internal(gl_info, format_block_info[i].id)))
             return FALSE;
-        }
 
-        format = &gl_info->formats[fmt_idx];
         format->block_width = format_block_info[i].block_width;
         format->block_height = format_block_info[i].block_height;
         format->block_byte_count = format_block_info[i].block_byte_count;
-        format_set_flag(&gl_info->formats[fmt_idx], WINED3DFMT_FLAG_BLOCKS);
+        format_set_flag(format, WINED3DFMT_FLAG_BLOCKS);
         if (!format_block_info[i].verify)
-            format_set_flag(&gl_info->formats[fmt_idx], WINED3DFMT_FLAG_BLOCKS_NO_VERIFY);
+            format_set_flag(format, WINED3DFMT_FLAG_BLOCKS_NO_VERIFY);
     }
 
     return TRUE;
@@ -2833,6 +2808,7 @@ static void query_internal_format(struct wined3d_adapter *adapter,
 
 static BOOL init_format_texture_info(struct wined3d_adapter *adapter, struct wined3d_gl_info *gl_info)
 {
+    struct wined3d_format *format, *srgb_format;
     struct fragment_caps fragment_caps;
     struct shader_caps shader_caps;
     unsigned int i, j;
@@ -2843,21 +2819,13 @@ static BOOL init_format_texture_info(struct wined3d_adapter *adapter, struct win
     srgb_write = (fragment_caps.wined3d_caps & WINED3D_FRAGMENT_CAP_SRGB_WRITE)
             && (shader_caps.wined3d_caps & WINED3D_SHADER_CAP_SRGB_WRITE);
 
-    for (i = 0; i < sizeof(format_texture_info) / sizeof(*format_texture_info); ++i)
+    for (i = 0; i < ARRAY_SIZE(format_texture_info); ++i)
     {
-        int srgb_fmt_idx = -1, fmt_idx = get_format_idx(format_texture_info[i].id);
-        struct wined3d_format *format, *srgb_format;
-
-        if (fmt_idx == -1)
-        {
-            ERR("Format %s (%#x) not found.\n",
-                    debug_d3dformat(format_texture_info[i].id), format_texture_info[i].id);
+        if (!(format = get_format_internal(gl_info, format_texture_info[i].id)))
             return FALSE;
-        }
 
-        if (!gl_info->supported[format_texture_info[i].extension]) continue;
-
-        format = &gl_info->formats[fmt_idx];
+        if (!gl_info->supported[format_texture_info[i].extension])
+            continue;
 
         /* ARB_texture_rg defines floating point formats, but only if
          * ARB_texture_float is also supported. */
@@ -2911,27 +2879,19 @@ static BOOL init_format_texture_info(struct wined3d_adapter *adapter, struct win
         format->convert = format_texture_info[i].convert;
         format->conv_byte_count = format_texture_info[i].conv_byte_count;
 
-        for (j = 0; j < sizeof(format_srgb_info) / sizeof(*format_srgb_info); ++j)
+        srgb_format = NULL;
+        for (j = 0; j < ARRAY_SIZE(format_srgb_info); ++j)
         {
             if (format_srgb_info[j].base_format_id == format->id)
             {
-                srgb_fmt_idx = get_format_idx(format_srgb_info[j].srgb_format_id);
-                if (srgb_fmt_idx == -1)
-                {
-                    ERR("Format %s (%#x) not found.\n",
-                            debug_d3dformat(format_srgb_info[j].srgb_format_id),
-                            format_srgb_info[j].srgb_format_id);
+                if (!(srgb_format = get_format_internal(gl_info, format_srgb_info[j].srgb_format_id)))
                     return FALSE;
-                }
                 break;
             }
         }
-
-        if (srgb_fmt_idx == -1)
+        if (!srgb_format)
             continue;
 
-        srgb_format = &gl_info->formats[srgb_fmt_idx];
-
         copy_format(srgb_format, format);
 
         if (gl_info->supported[EXT_TEXTURE_SRGB]
@@ -3414,24 +3374,17 @@ static unsigned int calculate_vertex_attribute_size(GLenum type, unsigned int co
 
 static BOOL init_format_vertex_info(struct wined3d_gl_info *gl_info)
 {
+    struct wined3d_format *format;
     unsigned int i;
 
     for (i = 0; i < ARRAY_SIZE(format_vertex_info); ++i)
     {
-        struct wined3d_format *format;
-        int fmt_idx = get_format_idx(format_vertex_info[i].id);
-
-        if (fmt_idx == -1)
-        {
-            ERR("Format %s (%#x) not found.\n",
-                    debug_d3dformat(format_vertex_info[i].id), format_vertex_info[i].id);
+        if (!(format = get_format_internal(gl_info, format_vertex_info[i].id)))
             return FALSE;
-        }
 
         if (!gl_info->supported[format_vertex_info[i].extension])
             continue;
 
-        format = &gl_info->formats[fmt_idx];
         format->emit_idx = format_vertex_info[i].emit_idx;
         format->component_count = format_vertex_info[i].component_count;
         format->gl_vtx_type = format_vertex_info[i].gl_vtx_type;
@@ -3457,26 +3410,11 @@ static BOOL init_typeless_formats(struct wined3d_gl_info *gl_info)
     for (i = 0; i < ARRAY_SIZE(typed_formats); ++i)
     {
         struct wined3d_format *format, *typeless_format;
-        int fmt_idx = get_format_idx(typed_formats[i].id);
-        int typeless_fmt_idx = get_format_idx(typed_formats[i].typeless_id);
 
-        if (fmt_idx == -1)
-        {
-            ERR("Format %s (%#x) not found.\n",
-                    debug_d3dformat(typed_formats[i].id),
-                    typed_formats[i].id);
+        if (!(format = get_format_internal(gl_info, typed_formats[i].id)))
             return FALSE;
-        }
-        if (typeless_fmt_idx == -1)
-        {
-            ERR("Format %s (%#x) not found.\n",
-                    debug_d3dformat(typed_formats[i].typeless_id),
-                    typed_formats[i].typeless_id);
+        if (!(typeless_format = get_format_internal(gl_info, typed_formats[i].typeless_id)))
             return FALSE;
-        }
-
-        format = &gl_info->formats[fmt_idx];
-        typeless_format = &gl_info->formats[typeless_fmt_idx];
 
         memcpy(flags, typeless_format->flags, sizeof(flags));
         copy_format(typeless_format, format);
@@ -3487,38 +3425,13 @@ static BOOL init_typeless_formats(struct wined3d_gl_info *gl_info)
     for (i = 0; i < ARRAY_SIZE(typeless_depth_stencil_formats); ++i)
     {
         struct wined3d_format *ds_format, *depth_view_format, *stencil_view_format;
-        int ds_fmt_idx, depth_view_fmt_idx, stencil_view_fmt_idx;
 
-        ds_fmt_idx = get_format_idx(typeless_depth_stencil_formats[i].depth_stencil_id);
-        if (ds_fmt_idx == -1)
-        {
-            ERR("Format %s (%#x) not found.\n",
-                    debug_d3dformat(typeless_depth_stencil_formats[i].depth_stencil_id),
-                    typeless_depth_stencil_formats[i].depth_stencil_id);
+        if (!(ds_format = get_format_internal(gl_info, typeless_depth_stencil_formats[i].depth_stencil_id)))
             return FALSE;
-        }
-
-        depth_view_fmt_idx = get_format_idx(typeless_depth_stencil_formats[i].depth_view_id);
-        if (depth_view_fmt_idx == -1)
-        {
-            ERR("Format %s (%#x) not found.\n",
-                    debug_d3dformat(typeless_depth_stencil_formats[i].depth_view_id),
-                    typeless_depth_stencil_formats[i].depth_view_id);
+        if (!(depth_view_format = get_format_internal(gl_info, typeless_depth_stencil_formats[i].depth_view_id)))
             return FALSE;
-        }
-
-        stencil_view_fmt_idx = get_format_idx(typeless_depth_stencil_formats[i].stencil_view_id);
-        if (stencil_view_fmt_idx == -1)
-        {
-            ERR("Format %s (%#x) not found.\n",
-                    debug_d3dformat(typeless_depth_stencil_formats[i].stencil_view_id),
-                    typeless_depth_stencil_formats[i].stencil_view_id);
+        if (!(stencil_view_format = get_format_internal(gl_info, typeless_depth_stencil_formats[i].stencil_view_id)))
             return FALSE;
-        }
-
-        ds_format = &gl_info->formats[ds_fmt_idx];
-        depth_view_format = &gl_info->formats[depth_view_fmt_idx];
-        stencil_view_format = &gl_info->formats[stencil_view_fmt_idx];
 
         copy_format(depth_view_format, ds_format);
         copy_format(stencil_view_format, ds_format);
-- 
2.7.3




More information about the wine-patches mailing list