From 743081721092f4e36be0be54035104cc09244cef Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 6 Jun 2025 19:23:58 -0400 Subject: [PATCH 1/6] "Fix" Creators-of-Create/Create#7577 --- .../flywheel/backend/gl/GlCompat.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java index 742b8770c..82e009be4 100644 --- a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java +++ b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java @@ -140,7 +140,7 @@ private static int subgroupSize() { } private static boolean isInstancingSupported() { - if (CAPABILITIES == null) { + if (CAPABILITIES == null || Workarounds.isIntelHDGraphics()) { return false; } if (CAPABILITIES.OpenGL33) { @@ -150,7 +150,7 @@ private static boolean isInstancingSupported() { } private static boolean isIndirectSupported() { - if (CAPABILITIES == null) { + if (CAPABILITIES == null || Workarounds.isIntelHDGraphics()) { return false; } if (CAPABILITIES.OpenGL46) { @@ -215,4 +215,17 @@ void main() {} return success; } + + static class Workarounds { + // Intel HD Graphics support* instancing and indirect rendering. + // * However, in reality the support is horrible and doesn't actually work + // so whenever we encounter these, we have to fall back to flywheel:off + public static boolean isIntelHDGraphics() { + if (DRIVER != Driver.INTEL) + return false; + + String vendor = GL20C.glGetString(GL20C.GL_VENDOR); + return vendor != null && vendor.contains("Intel(R) HD Graphics"); + } + } } From 76f8db738a83eb86ffa4f9c3a8bd9737d2e00aad Mon Sep 17 00:00:00 2001 From: IThundxr Date: Tue, 10 Jun 2025 18:13:47 -0400 Subject: [PATCH 2/6] Add fields containing driver info to Driver Enum --- .../engine_room/flywheel/backend/gl/Driver.java | 15 ++++++++++++++- .../engine_room/flywheel/backend/gl/GlCompat.java | 6 +----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/Driver.java b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/Driver.java index 976c7eaf9..39d2ef24c 100644 --- a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/Driver.java +++ b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/Driver.java @@ -1,9 +1,22 @@ package dev.engine_room.flywheel.backend.gl; +import org.lwjgl.opengl.GL20; +import org.lwjgl.opengl.GL20C; + public enum Driver { NVIDIA, AMD, INTEL, MESA, - UNKNOWN, + UNKNOWN; + + public final String vendor = glGetString(GL20C.GL_VENDOR); + public final String renderer = glGetString(GL20C.GL_RENDERER); + public final String version = glGetString(GL20C.GL_VERSION); + public final String extensions = glGetString(GL20C.GL_EXTENSIONS); + + private static String glGetString(int name) { + String s = GL20.glGetString(name); + return s != null ? s : ""; + } } diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java index 82e009be4..b52048316 100644 --- a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java +++ b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java @@ -221,11 +221,7 @@ static class Workarounds { // * However, in reality the support is horrible and doesn't actually work // so whenever we encounter these, we have to fall back to flywheel:off public static boolean isIntelHDGraphics() { - if (DRIVER != Driver.INTEL) - return false; - - String vendor = GL20C.glGetString(GL20C.GL_VENDOR); - return vendor != null && vendor.contains("Intel(R) HD Graphics"); + return DRIVER.vendor.contains("Intel(R) HD Graphics"); } } } From 8544de929dc8f2b7476c689e4d28a58003e6bf2b Mon Sep 17 00:00:00 2001 From: IThundxr Date: Tue, 10 Jun 2025 18:16:05 -0400 Subject: [PATCH 3/6] Remove wrapper validation --- .github/workflows/build.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index de171b355..40c8bcb25 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,14 +23,11 @@ jobs: restore-keys: "${{ runner.os }}-gradle-" - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4.2.0 + uses: gradle/actions/setup-gradle@v4 with: gradle-home-cache-cleanup: true cache-read-only: ${{ !endsWith(github.ref_name, '/dev') }} - - name: Validate Gradle Wrapper Integrity - uses: gradle/wrapper-validation-action@v2 - - name: Build # Doesn't actually publish, as no secrets are passed in, just makes sure that publishing works # Also generate the mod jars for the test job From 3b986a97686cbd81e475f1531494dcebecfec09b Mon Sep 17 00:00:00 2001 From: IThundxr Date: Sun, 20 Jul 2025 22:16:29 -0400 Subject: [PATCH 4/6] Make a few changes --- .../flywheel/backend/gl/Driver.java | 13 ---------- .../flywheel/backend/gl/GlCompat.java | 26 ++++++++++++------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/Driver.java b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/Driver.java index 39d2ef24c..94f799d65 100644 --- a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/Driver.java +++ b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/Driver.java @@ -1,22 +1,9 @@ package dev.engine_room.flywheel.backend.gl; -import org.lwjgl.opengl.GL20; -import org.lwjgl.opengl.GL20C; - public enum Driver { NVIDIA, AMD, INTEL, MESA, UNKNOWN; - - public final String vendor = glGetString(GL20C.GL_VENDOR); - public final String renderer = glGetString(GL20C.GL_RENDERER); - public final String version = glGetString(GL20C.GL_VERSION); - public final String extensions = glGetString(GL20C.GL_EXTENSIONS); - - private static String glGetString(int name) { - String s = GL20.glGetString(name); - return s != null ? s : ""; - } } diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java index b52048316..a79b58a4c 100644 --- a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java +++ b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java @@ -39,6 +39,11 @@ public final class GlCompat { public static final boolean ALLOW_DSA = true; public static final GlslVersion MAX_GLSL_VERSION = maxGlslVersion(); + public static final String VENDOR = glGetString(GL20C.GL_VENDOR); + public static final String RENDERER = glGetString(GL20C.GL_RENDERER); + public static final String VERSION = glGetString(GL20C.GL_VERSION); + public static final String EXTENSIONS = glGetString(GL20C.GL_EXTENSIONS); + public static final boolean SUPPORTS_DSA = ALLOW_DSA && isDsaSupported(); public static final boolean SUPPORTS_INSTANCING = isInstancingSupported(); @@ -140,7 +145,7 @@ private static int subgroupSize() { } private static boolean isInstancingSupported() { - if (CAPABILITIES == null || Workarounds.isIntelHDGraphics()) { + if (CAPABILITIES == null || isIntelHDGraphics()) { return false; } if (CAPABILITIES.OpenGL33) { @@ -150,7 +155,7 @@ private static boolean isInstancingSupported() { } private static boolean isIndirectSupported() { - if (CAPABILITIES == null || Workarounds.isIntelHDGraphics()) { + if (CAPABILITIES == null || isIntelHDGraphics()) { return false; } if (CAPABILITIES.OpenGL46) { @@ -216,12 +221,15 @@ void main() {} return success; } - static class Workarounds { - // Intel HD Graphics support* instancing and indirect rendering. - // * However, in reality the support is horrible and doesn't actually work - // so whenever we encounter these, we have to fall back to flywheel:off - public static boolean isIntelHDGraphics() { - return DRIVER.vendor.contains("Intel(R) HD Graphics"); - } + private static String glGetString(int name) { + String s = GL20.glGetString(name); + return s != null ? s : ""; + } + + // Intel HD Graphics support* instancing and indirect rendering. + // * However, in reality the support is horrible and doesn't actually work + // so whenever we encounter these, we have to fall back to flywheel:off + public static boolean isIntelHDGraphics() { + return VENDOR.contains("Intel(R) HD Graphics"); } } From d58684e16ca2a2f92bb38abb397b53692eff15ed Mon Sep 17 00:00:00 2001 From: IThundxr Date: Sun, 20 Jul 2025 22:17:36 -0400 Subject: [PATCH 5/6] replace vendor in readVendorString --- .../engine_room/flywheel/backend/gl/GlCompat.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java index a79b58a4c..d988c0e4e 100644 --- a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java +++ b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java @@ -108,20 +108,18 @@ private static Driver readVendorString() { return Driver.UNKNOWN; } - String vendor = GL20C.glGetString(GL20C.GL_VENDOR); - - if (vendor == null) { + if (VENDOR == null) { return Driver.UNKNOWN; } // vendor string I got was "ATI Technologies Inc." - if (vendor.contains("ATI") || vendor.contains("AMD")) { + if (VENDOR.contains("ATI") || VENDOR.contains("AMD")) { return Driver.AMD; - } else if (vendor.contains("NVIDIA")) { + } else if (VENDOR.contains("NVIDIA")) { return Driver.NVIDIA; - } else if (vendor.contains("Intel")) { + } else if (VENDOR.contains("Intel")) { return Driver.INTEL; - } else if (vendor.contains("Mesa")) { + } else if (VENDOR.contains("Mesa")) { return Driver.MESA; } From a0b4b49c940a5efabe50925a3f58819e7a4153e1 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Sun, 20 Jul 2025 22:23:23 -0400 Subject: [PATCH 6/6] Improve fix --- .../flywheel/backend/gl/GlCompat.java | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java index d988c0e4e..fb70c6f64 100644 --- a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java +++ b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/GlCompat.java @@ -39,11 +39,6 @@ public final class GlCompat { public static final boolean ALLOW_DSA = true; public static final GlslVersion MAX_GLSL_VERSION = maxGlslVersion(); - public static final String VENDOR = glGetString(GL20C.GL_VENDOR); - public static final String RENDERER = glGetString(GL20C.GL_RENDERER); - public static final String VERSION = glGetString(GL20C.GL_VERSION); - public static final String EXTENSIONS = glGetString(GL20C.GL_EXTENSIONS); - public static final boolean SUPPORTS_DSA = ALLOW_DSA && isDsaSupported(); public static final boolean SUPPORTS_INSTANCING = isInstancingSupported(); @@ -108,18 +103,20 @@ private static Driver readVendorString() { return Driver.UNKNOWN; } - if (VENDOR == null) { + String vendor = GL20C.glGetString(GL20C.GL_VENDOR); + + if (vendor == null) { return Driver.UNKNOWN; } // vendor string I got was "ATI Technologies Inc." - if (VENDOR.contains("ATI") || VENDOR.contains("AMD")) { + if (vendor.contains("ATI") || vendor.contains("AMD")) { return Driver.AMD; - } else if (VENDOR.contains("NVIDIA")) { + } else if (vendor.contains("NVIDIA")) { return Driver.NVIDIA; - } else if (VENDOR.contains("Intel")) { + } else if (vendor.contains("Intel")) { return Driver.INTEL; - } else if (VENDOR.contains("Mesa")) { + } else if (vendor.contains("Mesa")) { return Driver.MESA; } @@ -219,15 +216,11 @@ void main() {} return success; } - private static String glGetString(int name) { - String s = GL20.glGetString(name); - return s != null ? s : ""; - } - // Intel HD Graphics support* instancing and indirect rendering. // * However, in reality the support is horrible and doesn't actually work // so whenever we encounter these, we have to fall back to flywheel:off public static boolean isIntelHDGraphics() { - return VENDOR.contains("Intel(R) HD Graphics"); + String vendor = GL20C.glGetString(GL20C.GL_VENDOR); + return vendor != null && vendor.contains("Intel(R) HD Graphics"); } }