From de5975f13eb02a0be3adcd447fc973c312ec7ccc Mon Sep 17 00:00:00 2001 From: xebra Date: Sat, 14 Jul 2018 06:40:50 +0900 Subject: [PATCH] [spline/bezier]Reduce multiplications in the shaders from 16 to 4. --- GPU/Directx9/VertexShaderGeneratorDX9.cpp | 3 ++- GPU/GLES/VertexShaderGeneratorGLES.cpp | 3 ++- GPU/Vulkan/VertexShaderGeneratorVulkan.cpp | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/GPU/Directx9/VertexShaderGeneratorDX9.cpp b/GPU/Directx9/VertexShaderGeneratorDX9.cpp index 5f5a98f1176c..c43516e55638 100644 --- a/GPU/Directx9/VertexShaderGeneratorDX9.cpp +++ b/GPU/Directx9/VertexShaderGeneratorDX9.cpp @@ -289,8 +289,9 @@ void GenerateVertexShaderHLSL(const VShaderID &id, char *buffer, ShaderLanguage WRITE(p, " float%d pos = float%d(%s);\n", i, i, init[i - 2]); WRITE(p, " int idx = 0;\n"); WRITE(p, " for (int v = 0; v < 4; ++v) {\n"); + WRITE(p, " float4 w = weights_u * weights_v[v];\n"); WRITE(p, " for (int u = 0; u < 4; ++u) {\n"); - WRITE(p, " pos += weights_u[u] * weights_v[v] * points[idx++];\n"); + WRITE(p, " pos += w[u] * points[idx++];\n"); WRITE(p, " }\n"); WRITE(p, " }\n"); WRITE(p, " return pos;\n"); diff --git a/GPU/GLES/VertexShaderGeneratorGLES.cpp b/GPU/GLES/VertexShaderGeneratorGLES.cpp index 714c8f322b98..63e83b2465f4 100644 --- a/GPU/GLES/VertexShaderGeneratorGLES.cpp +++ b/GPU/GLES/VertexShaderGeneratorGLES.cpp @@ -392,8 +392,9 @@ void GenerateVertexShader(const VShaderID &id, char *buffer, uint32_t *attrMask, WRITE(p, " vec%d pos = vec%d(0.0);\n", i, i); WRITE(p, " int idx = 0;\n"); WRITE(p, " for (int v = 0; v < 4; ++v) {\n"); + WRITE(p, " vec4 w = weights_u * weights_v[v];\n"); WRITE(p, " for (int u = 0; u < 4; ++u) {\n"); - WRITE(p, " pos += weights_u[u] * weights_v[v] * points[idx++];\n"); + WRITE(p, " pos += w[u] * points[idx++];\n"); WRITE(p, " }\n"); WRITE(p, " }\n"); WRITE(p, " return pos;\n"); diff --git a/GPU/Vulkan/VertexShaderGeneratorVulkan.cpp b/GPU/Vulkan/VertexShaderGeneratorVulkan.cpp index f1230f282977..6aa72b31b3f0 100644 --- a/GPU/Vulkan/VertexShaderGeneratorVulkan.cpp +++ b/GPU/Vulkan/VertexShaderGeneratorVulkan.cpp @@ -241,8 +241,9 @@ bool GenerateVulkanGLSLVertexShader(const VShaderID &id, char *buffer) { WRITE(p, " vec%d pos = vec%d(0.0);\n", i, i); WRITE(p, " int idx = 0;\n"); WRITE(p, " for (int v = 0; v < 4; ++v) {\n"); + WRITE(p, " vec4 w = weights_u * weights_v[v];\n"); WRITE(p, " for (int u = 0; u < 4; ++u) {\n"); - WRITE(p, " pos += weights_u[u] * weights_v[v] * points[idx++];\n"); + WRITE(p, " pos += w[u] * points[idx++];\n"); WRITE(p, " }\n"); WRITE(p, " }\n"); WRITE(p, " return pos;\n");