Henri Verbeet : vkd3d-shader/d3d-asm: Always use '.' as decimal separator when printing floats.

Alexandre Julliard julliard at winehq.org
Tue Mar 1 15:44:12 CST 2022


Module: vkd3d
Branch: master
Commit: aef9e9ea62475cccf5d00d5678e86452e4eda937
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=aef9e9ea62475cccf5d00d5678e86452e4eda937

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Tue Mar  1 13:21:33 2022 +0100

vkd3d-shader/d3d-asm: Always use '.' as decimal separator when printing floats.

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d-shader/trace.c                | 15 ++++++++++-----
 libs/vkd3d-shader/vkd3d_shader_main.c    | 16 ++++++++++++++++
 libs/vkd3d-shader/vkd3d_shader_private.h |  1 +
 3 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/libs/vkd3d-shader/trace.c b/libs/vkd3d-shader/trace.c
index f6ecf9e..57e360f 100644
--- a/libs/vkd3d-shader/trace.c
+++ b/libs/vkd3d-shader/trace.c
@@ -749,12 +749,17 @@ static void shader_dump_src_param(struct vkd3d_d3d_asm_compiler *compiler,
 static void shader_print_float_literal(struct vkd3d_d3d_asm_compiler *compiler,
         const char *prefix, float f, const char *suffix)
 {
+    const char *sign = "";
+
     if (isfinite(f) && signbit(f))
-        vkd3d_string_buffer_printf(&compiler->buffer, "%s-%s%.8e%s%s",
-                prefix, compiler->colours.literal, -f, compiler->colours.reset, suffix);
-    else
-        vkd3d_string_buffer_printf(&compiler->buffer, "%s%s%.8e%s%s",
-                prefix, compiler->colours.literal, f, compiler->colours.reset, suffix);
+    {
+        sign = "-";
+        f = -f;
+    }
+
+    vkd3d_string_buffer_printf(&compiler->buffer, "%s%s%s", prefix, sign, compiler->colours.literal);
+    vkd3d_string_buffer_print_f32(&compiler->buffer, f);
+    vkd3d_string_buffer_printf(&compiler->buffer, "%s%s", compiler->colours.reset, suffix);
 }
 
 static void shader_print_double_literal(struct vkd3d_d3d_asm_compiler *compiler,
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index b5b66e1..c5ab9a6 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -20,6 +20,7 @@
 #include "vkd3d_version.h"
 
 #include <stdio.h>
+#include <math.h>
 
 VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
 
@@ -91,6 +92,21 @@ int vkd3d_string_buffer_printf(struct vkd3d_string_buffer *buffer, const char *f
     return ret;
 }
 
+int vkd3d_string_buffer_print_f32(struct vkd3d_string_buffer *buffer, float f)
+{
+    unsigned int idx = buffer->content_size + 1;
+    int ret;
+
+    if (!(ret = vkd3d_string_buffer_printf(buffer, "%.8e", f)) && isfinite(f))
+    {
+        if (signbit(f))
+            ++idx;
+        buffer->buffer[idx] = '.';
+    }
+
+    return ret;
+}
+
 void vkd3d_string_buffer_trace_(const struct vkd3d_string_buffer *buffer, const char *function)
 {
     vkd3d_shader_trace_text_(buffer->buffer, buffer->content_size, function);
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index 60c8615..f0228c1 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -993,6 +993,7 @@ struct vkd3d_string_buffer *vkd3d_string_buffer_get(struct vkd3d_string_buffer_c
 void vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer);
 void vkd3d_string_buffer_cache_cleanup(struct vkd3d_string_buffer_cache *list);
 void vkd3d_string_buffer_cache_init(struct vkd3d_string_buffer_cache *list);
+int vkd3d_string_buffer_print_f32(struct vkd3d_string_buffer *buffer, float f);
 int vkd3d_string_buffer_printf(struct vkd3d_string_buffer *buffer, const char *format, ...) VKD3D_PRINTF_FUNC(2, 3);
 void vkd3d_string_buffer_release(struct vkd3d_string_buffer_cache *list, struct vkd3d_string_buffer *buffer);
 #define vkd3d_string_buffer_trace(buffer) \




More information about the wine-cvs mailing list