From 61e1ef8f7a0d3346ae5e3fa4ec190341ca247c34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 14 Jul 2026 17:02:38 +0200 Subject: [PATCH] Remove the "Software skinning" option. Now always on. --- Core/Config.cpp | 1 - Core/Config.h | 1 - GPU/Common/DrawEngineCommon.cpp | 9 +- GPU/Common/DrawEngineCommon.h | 6 +- GPU/Common/ShaderId.cpp | 15 +-- GPU/Common/ShaderId.h | 6 +- GPU/Common/SoftwareTransformCommon.cpp | 2 +- GPU/Common/SplineCommon.cpp | 4 +- GPU/Common/VertexDecoderCommon.cpp | 3 +- GPU/Common/VertexDecoderCommon.h | 4 +- GPU/Common/VertexShaderGenerator.cpp | 148 +------------------------ GPU/D3D11/DrawEngineD3D11.cpp | 4 +- GPU/D3D11/ShaderManagerD3D11.cpp | 4 +- GPU/D3D11/ShaderManagerD3D11.h | 2 +- GPU/GLES/DrawEngineGLES.cpp | 4 +- GPU/GLES/ShaderManagerGLES.cpp | 18 +-- GPU/GLES/ShaderManagerGLES.h | 2 +- GPU/GPUCommon.cpp | 9 +- GPU/GPUCommonHW.cpp | 75 +++---------- GPU/GPUCommonHW.h | 1 - GPU/Software/TransformUnit.cpp | 8 +- GPU/Vulkan/DrawEngineVulkan.cpp | 8 +- GPU/Vulkan/ShaderManagerVulkan.cpp | 4 +- GPU/Vulkan/ShaderManagerVulkan.h | 2 +- UI/GameSettingsScreen.cpp | 4 - Windows/GEDebugger/TabVertices.cpp | 2 +- assets/lang/ar_AE.ini | 2 - assets/lang/az_AZ.ini | 2 - assets/lang/be_BY.ini | 2 - assets/lang/bg_BG.ini | 2 - assets/lang/ca_ES.ini | 2 - assets/lang/cz_CZ.ini | 2 - assets/lang/da_DK.ini | 2 - assets/lang/de_DE.ini | 2 - assets/lang/dr_ID.ini | 2 - assets/lang/en_US.ini | 2 - assets/lang/es_ES.ini | 2 - assets/lang/es_LA.ini | 2 - assets/lang/fa_IR.ini | 2 - assets/lang/fi_FI.ini | 2 - assets/lang/fr_FR.ini | 2 - assets/lang/gl_ES.ini | 2 - assets/lang/gr_EL.ini | 2 - assets/lang/he_IL.ini | 2 - assets/lang/he_IL_invert.ini | 2 - assets/lang/hr_HR.ini | 2 - assets/lang/hu_HU.ini | 2 - assets/lang/id_ID.ini | 2 - assets/lang/it_IT.ini | 2 - assets/lang/ja_JP.ini | 2 - assets/lang/jv_ID.ini | 2 - assets/lang/km_KH.ini | 2 - assets/lang/ko_KR.ini | 2 - assets/lang/ku_SO.ini | 2 - assets/lang/lo_LA.ini | 2 - assets/lang/lt-LT.ini | 2 - assets/lang/ms_MY.ini | 2 - assets/lang/nl_NL.ini | 2 - assets/lang/nn_NO.ini | 2 - assets/lang/no_NO.ini | 2 - assets/lang/pl_PL.ini | 2 - assets/lang/pt_BR.ini | 2 - assets/lang/pt_PT.ini | 2 - assets/lang/ro_RO.ini | 2 - assets/lang/ru_RU.ini | 2 - assets/lang/sv_SE.ini | 2 - assets/lang/tg_PH.ini | 2 - assets/lang/th_TH.ini | 2 - assets/lang/tr_TR.ini | 2 - assets/lang/uk_UA.ini | 2 - assets/lang/vi_VN.ini | 2 - assets/lang/zh_CN.ini | 2 - assets/lang/zh_TW.ini | 2 - headless/Headless.cpp | 1 - unittest/TestShaderGenerators.cpp | 5 - unittest/TestVertexJit.cpp | 6 +- 76 files changed, 62 insertions(+), 390 deletions(-) diff --git a/Core/Config.cpp b/Core/Config.cpp index 772543cab1..8ce26e1ffb 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -721,7 +721,6 @@ static const ConfigSetting graphicsSettings[] = { ConfigSetting("SoftwareRenderer", SETTING(g_Config, bSoftwareRendering), false, CfgFlag::PER_GAME), ConfigSetting("SoftwareRendererJit", SETTING(g_Config, bSoftwareRenderingJit), true, CfgFlag::PER_GAME), ConfigSetting("HardwareTransform", SETTING(g_Config, bHardwareTransform), true, CfgFlag::PER_GAME | CfgFlag::REPORT), - ConfigSetting("SoftwareSkinning", SETTING(g_Config, bSoftwareSkinning), true, CfgFlag::PER_GAME | CfgFlag::REPORT), ConfigSetting("TextureFiltering", SETTING(g_Config, iTexFiltering), 1, CfgFlag::PER_GAME | CfgFlag::REPORT), ConfigSetting("Smart2DTexFiltering", SETTING(g_Config, bSmart2DTexFiltering), false, CfgFlag::PER_GAME | CfgFlag::REPORT), ConfigSetting("InternalResolution", SETTING(g_Config, iInternalResolution), &DefaultInternalResolution, CfgFlag::PER_GAME | CfgFlag::REPORT), diff --git a/Core/Config.h b/Core/Config.h index ea4480c8aa..104863dba7 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -285,7 +285,6 @@ public: bool bSoftwareRendering; bool bSoftwareRenderingJit; bool bHardwareTransform; - bool bSoftwareSkinning; bool bVendorBugChecksEnabled; // Speedhacks (more will be moved here): diff --git a/GPU/Common/DrawEngineCommon.cpp b/GPU/Common/DrawEngineCommon.cpp index 1d6e6ce83c..06ec795633 100644 --- a/GPU/Common/DrawEngineCommon.cpp +++ b/GPU/Common/DrawEngineCommon.cpp @@ -158,7 +158,7 @@ void DrawEngineCommon::DispatchSubmitImm(GEPrimitiveType prim, TransformedVertex } int bytesRead; - uint32_t vertTypeID = GetVertTypeID(vtype, 0, applySkinInDecode_); + uint32_t vertTypeID = GetVertTypeID(vtype, 0); bool clockwise = !gstate.isCullEnabled() || gstate.getCullMode() == cullMode; VertexDecoder *dec = GetVertexDecoder(vertTypeID); @@ -230,8 +230,7 @@ bool DrawEngineCommon::TestBoundingBox(const void *vdata, const void *inds, int GetIndexBounds(inds, vertexCount, vertType, &indexLowerBound, &indexUpperBound); } // TODO: Avoid normalization if just plain skinning. - // Force software skinning. - const u32 vertTypeID = GetVertTypeID(vertType, gstate.getUVGenMode(), true); + const u32 vertTypeID = GetVertTypeID(vertType, gstate.getUVGenMode()); UVScale uvScale{}; // We don't care about UV. ::NormalizeVertices(corners, temp_buffer, (const u8 *)vdata, indexLowerBound, indexUpperBound, uvScale, dec, vertType); IndexConverter conv(vertType, inds); @@ -908,10 +907,6 @@ bool DrawEngineCommon::SubmitPrim(const void *verts, const void *inds, GEPrimiti return true; } -void DrawEngineCommon::BeginFrame() { - applySkinInDecode_ = g_Config.bSoftwareSkinning; -} - void DrawEngineCommon::DecodeVerts(const VertexDecoder *dec, u8 *dest) { const int numDrawVerts = numDrawVerts_; if (!numDrawVerts) { diff --git a/GPU/Common/DrawEngineCommon.h b/GPU/Common/DrawEngineCommon.h index bdeca83a83..556d2e4ea3 100644 --- a/GPU/Common/DrawEngineCommon.h +++ b/GPU/Common/DrawEngineCommon.h @@ -73,7 +73,7 @@ public: void Init(); - virtual void BeginFrame(); + virtual void BeginFrame() {} void SetGPUCommon(GPUCommon *gpuCommon) { gpuCommon_ = gpuCommon; @@ -282,7 +282,7 @@ protected: TransformedVertex *transformed_ = nullptr; TransformedVertex *transformedExpanded_ = nullptr; - // Defer all vertex decoding to a "Flush" (except when software skinning) + // Defer all vertex decoding to a "Flush" (except when skinning, when we decode per draw) struct DeferredVerts { const void *verts; UVScale uvScale; @@ -320,8 +320,6 @@ protected: bool anyCCWOrIndexed_ = 0; bool anyIndexed_ = 0; - bool applySkinInDecode_ = false; - // Vertex collector state IndexGenerator indexGen; int numDecodedVerts_ = 0; diff --git a/GPU/Common/ShaderId.cpp b/GPU/Common/ShaderId.cpp index e05e976a9f..4f2dae4230 100644 --- a/GPU/Common/ShaderId.cpp +++ b/GPU/Common/ShaderId.cpp @@ -45,9 +45,6 @@ std::string VShaderID::Description(bool includeID) const { desc.W(uvprojModes[uvprojMode]); } - if (Bit(VS_BIT_ENABLE_BONES)) desc.F("Bones:%d ", Bits(VS_BIT_BONES, 3) + 1); - if (Bits(VS_BIT_WEIGHT_FMTSCALE, 2)) desc.F("WScale:%d ", Bits(VS_BIT_WEIGHT_FMTSCALE, 2)); - int ls0 = Bits(VS_BIT_LS0, 2); int ls1 = Bits(VS_BIT_LS1, 2); @@ -75,7 +72,7 @@ std::string VShaderID::Description(bool includeID) const { return desc.as_string(); } -void ComputeVertexShaderID(VShaderID *id_out, u32 vertType, bool useHWTransform, bool weightsAsFloat, bool useSkinInDecode, ClipInfoFlags clipInfoFlags) { +void ComputeVertexShaderID(VShaderID *id_out, u32 vertType, bool useHWTransform, ClipInfoFlags clipInfoFlags) { const bool isModeThrough = (vertType & GE_VTYPE_THROUGH) != 0; bool doTexture = gstate.isTextureMapEnabled() && !gstate.isModeClear(); bool doShadeMapping = doTexture && (gstate.getUVGenMode() == GE_TEXMAP_ENVIRONMENT_MAP); @@ -119,16 +116,6 @@ void ComputeVertexShaderID(VShaderID *id_out, u32 vertType, bool useHWTransform, id.SetBits(VS_BIT_LS1, 2, gstate.getUVLS1()); } - // Bones. - bool enableBones = !useSkinInDecode && vertTypeIsSkinningEnabled(vertType); - id.SetBit(VS_BIT_ENABLE_BONES, enableBones); - if (enableBones) { - id.SetBits(VS_BIT_BONES, 3, TranslateNumBones(vertTypeGetNumBoneWeights(vertType)) - 1); - // 2 bits. We should probably send in the weight scalefactor as a uniform instead, - // or simply preconvert all weights to floats. - id.SetBits(VS_BIT_WEIGHT_FMTSCALE, 2, weightsAsFloat ? 0 : (vertType & GE_VTYPE_WEIGHT_MASK) >> GE_VTYPE_WEIGHT_SHIFT); - } - if (gstate.isLightingEnabled()) { // doShadeMapping is stored as UVGenMode, and light type doesn't matter for shade mapping. id.SetBit(VS_BIT_LIGHTING_ENABLE); diff --git a/GPU/Common/ShaderId.h b/GPU/Common/ShaderId.h index eb206151f6..5c15970d09 100644 --- a/GPU/Common/ShaderId.h +++ b/GPU/Common/ShaderId.h @@ -36,9 +36,7 @@ enum VShaderBit : uint8_t { // Free bit: 11 VS_BIT_UVGEN_MODE = 12, // 2 bits VS_BIT_UVPROJ_MODE = 14, // 2 bits - VS_BIT_ENABLE_BONES = 16, - VS_BIT_WEIGHT_FMTSCALE = 17, // only two bits - VS_BIT_BONES = 19, // 3 should be enough to represent 1-8 bones. + // Free bits: 16-21 VS_BIT_FS_MINMAX_DISCARD = 22, // Do min/max and/or depth clamp in the fragment shader. It just means we need to forward Z and W to the fragment shader. VS_BIT_FS_DEPTH_CLAMP = 23, // Do depth clamp in the fragment shader. VS_BIT_LIGHTING_ENABLE = 24, @@ -245,7 +243,7 @@ namespace Draw { class Bugs; } -void ComputeVertexShaderID(VShaderID *id, u32 vertType, bool useHWTransform, bool weightsAsFloat, bool useSkinInDecode, ClipInfoFlags clipInfoFlags); +void ComputeVertexShaderID(VShaderID *id, u32 vertType, bool useHWTransform, ClipInfoFlags clipInfoFlags); struct ComputedPipelineState; void ComputeFragmentShaderID(FShaderID *id, const ComputedPipelineState &pipelineState, const Draw::Bugs &bugs, ClipInfoFlags clipInfoFlags); diff --git a/GPU/Common/SoftwareTransformCommon.cpp b/GPU/Common/SoftwareTransformCommon.cpp index 605ba87481..5132734f2b 100644 --- a/GPU/Common/SoftwareTransformCommon.cpp +++ b/GPU/Common/SoftwareTransformCommon.cpp @@ -1508,7 +1508,7 @@ bool GetCurrentDrawAsDebugVertices(DrawEngineCommon *drawEngine, GECommand cmd, return false; } - const u32 vertTypeID = GetVertTypeID(gstate.vertType, gstate.getUVGenMode(), true); + const u32 vertTypeID = GetVertTypeID(gstate.vertType, gstate.getUVGenMode()); const bool throughMode = (vertTypeID & GE_VTYPE_THROUGH) != 0; // Points is the only primitive that generates 6x as many vertices as input indices (2 triangles per point). diff --git a/GPU/Common/SplineCommon.cpp b/GPU/Common/SplineCommon.cpp index 6f4bf6ccc4..bc93bb5308 100644 --- a/GPU/Common/SplineCommon.cpp +++ b/GPU/Common/SplineCommon.cpp @@ -469,7 +469,7 @@ void DrawEngineCommon::SubmitCurve(const void *control_points, const void *indic GetIndexBounds(indices, num_points, vertType, &index_lower_bound, &index_upper_bound); } - u32 vertTypeID = GetVertTypeID(vertType, gstate.getUVGenMode(), applySkinInDecode_); + u32 vertTypeID = GetVertTypeID(vertType, gstate.getUVGenMode()); VertexDecoder *origVDecoder = GetVertexDecoder(vertTypeID); *bytesRead = num_points * origVDecoder->VertexSize(); @@ -527,7 +527,7 @@ void DrawEngineCommon::SubmitCurve(const void *control_points, const void *indic u32 vertTypeWithIndex16 = (vertType & ~GE_VTYPE_IDX_MASK) | GE_VTYPE_IDX_16BIT; - vertTypeID = GetVertTypeID(vertTypeWithIndex16, gstate.getUVGenMode(), applySkinInDecode_); + vertTypeID = GetVertTypeID(vertTypeWithIndex16, gstate.getUVGenMode()); int generatedBytesRead; if (output.count) { ClipInfoFlags flags{}; // Don't need any special processing. diff --git a/GPU/Common/VertexDecoderCommon.cpp b/GPU/Common/VertexDecoderCommon.cpp index 5673abf00c..b1bdd64871 100644 --- a/GPU/Common/VertexDecoderCommon.cpp +++ b/GPU/Common/VertexDecoderCommon.cpp @@ -48,8 +48,7 @@ static const u8 wtsize[4] = { 0, 1, 2, 4 }, wtalign[4] = { 0, 1, 2, 4 }; static constexpr bool validateJit = false; -// When software skinning. This array is only used when non-jitted - when jitted, the matrix -// is kept in registers. +// This array might only be used when non-jitted - when jitted, the matrix is kept in registers whenever possible. alignas(16) static float skinMatrix[12]; inline int align(int n, int align) { diff --git a/GPU/Common/VertexDecoderCommon.h b/GPU/Common/VertexDecoderCommon.h index a7c1513114..4fdeacc797 100644 --- a/GPU/Common/VertexDecoderCommon.h +++ b/GPU/Common/VertexDecoderCommon.h @@ -143,10 +143,10 @@ struct VertexDecoderOptions { bool expand8BitNormalsToFloat; }; -inline uint32_t GetVertTypeID(uint32_t vertType, int uvGenMode, bool skinInDecode) { +inline uint32_t GetVertTypeID(uint32_t vertType, int uvGenMode) { // As the decoder depends on the UVGenMode when we use UV prescale, we simply mash it // into the top of the verttype where there are unused bits. - return (vertType & 0xFFFFFF) | (uvGenMode << 24) | (skinInDecode << 26); + return (vertType & 0xFFFFFF) | (uvGenMode << 24) | (1 << 26); } inline bool VertTypeIDSkinInDecode(uint32_t vertType) { diff --git a/GPU/Common/VertexShaderGenerator.cpp b/GPU/Common/VertexShaderGenerator.cpp index ae0603382c..d798db6c63 100644 --- a/GPU/Common/VertexShaderGenerator.cpp +++ b/GPU/Common/VertexShaderGenerator.cpp @@ -32,54 +32,6 @@ #define WRITE(p, ...) p.F(__VA_ARGS__) -static const char * const boneWeightAttrDecl[9] = { - "#ERROR#", - "attribute mediump float w1;\n", - "attribute mediump vec2 w1;\n", - "attribute mediump vec3 w1;\n", - "attribute mediump vec4 w1;\n", - "attribute mediump vec4 w1;\nattribute mediump float w2;\n", - "attribute mediump vec4 w1;\nattribute mediump vec2 w2;\n", - "attribute mediump vec4 w1;\nattribute mediump vec3 w2;\n", - "attribute mediump vec4 w1, w2;\n", -}; - -static const char * const boneWeightInDecl[9] = { - "#ERROR#", - "in mediump float w1;\n", - "in mediump vec2 w1;\n", - "in mediump vec3 w1;\n", - "in mediump vec4 w1;\n", - "in mediump vec4 w1;\nin mediump float w2;\n", - "in mediump vec4 w1;\nin mediump vec2 w2;\n", - "in mediump vec4 w1;\nin mediump vec3 w2;\n", - "in mediump vec4 w1, w2;\n", -}; - -const char *boneWeightAttrDeclHLSL[9] = { - "#ERROR boneWeightAttrDecl#\n", - "float a_w1:TEXCOORD1;\n", - "vec2 a_w1:TEXCOORD1;\n", - "vec3 a_w1:TEXCOORD1;\n", - "vec4 a_w1:TEXCOORD1;\n", - "vec4 a_w1:TEXCOORD1;\n float a_w2:TEXCOORD2;\n", - "vec4 a_w1:TEXCOORD1;\n vec2 a_w2:TEXCOORD2;\n", - "vec4 a_w1:TEXCOORD1;\n vec3 a_w2:TEXCOORD2;\n", - "vec4 a_w1:TEXCOORD1;\n vec4 a_w2:TEXCOORD2;\n", -}; - -const char *boneWeightAttrInitHLSL[9] = { - " #ERROR#\n", - " vec4 w1 = vec4(In.a_w1, 0.0, 0.0, 0.0);\n", - " vec4 w1 = vec4(In.a_w1.xy, 0.0, 0.0);\n", - " vec4 w1 = vec4(In.a_w1.xyz, 0.0);\n", - " vec4 w1 = In.a_w1;\n", - " vec4 w1 = In.a_w1;\n vec4 w2 = vec4(In.a_w2, 0.0, 0.0, 0.0);\n", - " vec4 w1 = In.a_w1;\n vec4 w2 = vec4(In.a_w2.xy, 0.0, 0.0);\n", - " vec4 w1 = In.a_w1;\n vec4 w2 = vec4(In.a_w2.xyz, 0.0);\n", - " vec4 w1 = In.a_w1;\n vec4 w2 = In.a_w2;\n", -}; - // Depth range and viewport // // After the multiplication with the projection matrix, we have a 4D vector in clip space. @@ -111,18 +63,6 @@ const char *boneWeightAttrInitHLSL[9] = { // TODO: Skip all this if we can actually get a 16-bit depth buffer along with stencil, which // is a bit of a rare configuration, although quite common on mobile. -static const char * const boneWeightDecl[9] = { - "#ERROR#", - "layout(location = 3) in float w1;\n", - "layout(location = 3) in vec2 w1;\n", - "layout(location = 3) in vec3 w1;\n", - "layout(location = 3) in vec4 w1;\n", - "layout(location = 3) in vec4 w1;\nlayout(location = 4) in float w2;\n", - "layout(location = 3) in vec4 w1;\nlayout(location = 4) in vec2 w2;\n", - "layout(location = 3) in vec4 w1;\nlayout(location = 4) in vec3 w2;\n", - "layout(location = 3) in vec4 w1;\nlayout(location = 4) in vec4 w2;\n", -}; - bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguageDesc &compat, Draw::Bugs bugs, uint32_t *attrMask, uint64_t *uniformMask, VertexShaderFlags *vertexShaderFlags, std::string *errorString) { *attrMask = 0; *uniformMask = 0; @@ -192,7 +132,6 @@ bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguag bool flipNormal = id.Bit(VS_BIT_NORM_REVERSE); int ls0 = id.Bits(VS_BIT_LS0, 2); int ls1 = id.Bits(VS_BIT_LS1, 2); - bool enableBones = id.Bit(VS_BIT_ENABLE_BONES) && useHWTransform; bool enableLighting = id.Bit(VS_BIT_LIGHTING_ENABLE); int matUpdate = id.Bits(VS_BIT_MATERIAL_UPDATE, 3); @@ -223,11 +162,6 @@ bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguag } } - int numBoneWeights = 0; - int boneWeightScale = id.Bits(VS_BIT_WEIGHT_FMTSCALE, 2); - if (enableBones) { - numBoneWeights = 1 + id.Bits(VS_BIT_BONES, 3); - } bool texCoordInVec3 = false; const char *minZClipPlaneSuffix = "[0]"; @@ -243,12 +177,6 @@ bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguag WRITE(p, "layout (std140, set = 0, binding = %d) uniform baseVars {\n%s};\n", DRAW_BINDING_DYNUBO_BASE, ub_baseStr); if (enableLighting || doShadeMapping) WRITE(p, "layout (std140, set = 0, binding = %d) uniform lightVars {\n%s};\n", DRAW_BINDING_DYNUBO_LIGHT, ub_vs_lightsStr); - if (enableBones) - WRITE(p, "layout (std140, set = 0, binding = %d) uniform boneVars {\n%s};\n", DRAW_BINDING_DYNUBO_BONE, ub_vs_bonesStr); - - if (enableBones) { - WRITE(p, "%s", boneWeightDecl[numBoneWeights]); - } if (useHWTransform) WRITE(p, "layout (location = %d) in vec3 position;\n", (int)PspAttributeLocation::POSITION); @@ -292,14 +220,10 @@ bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguag // Note: These two share some code after this hellishly large if/else. WRITE(p, "cbuffer base : register(b0) {\n%s};\n", ub_baseStr); WRITE(p, "cbuffer lights: register(b1) {\n%s};\n", ub_vs_lightsStr); - WRITE(p, "cbuffer bones : register(b2) {\n%s};\n", ub_vs_bonesStr); // And the "varyings". if (useHWTransform) { WRITE(p, "struct VS_IN {\n"); - if (enableBones) { - WRITE(p, " %s", boneWeightAttrDeclHLSL[numBoneWeights]); - } if (hasTexcoord) { WRITE(p, " vec2 texcoord : TEXCOORD0;\n"); } @@ -359,17 +283,7 @@ bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguag } WRITE(p, "};\n"); } else { - // Non-Vulkan GLSL. - if (enableBones) { - const char * const * boneWeightDecl = boneWeightAttrDecl; - if (!strcmp(compat.attribute, "in")) { - boneWeightDecl = boneWeightInDecl; - } - WRITE(p, "%s", boneWeightDecl[numBoneWeights]); - *attrMask |= 1 << ATTR_W1; - if (numBoneWeights >= 5) - *attrMask |= 1 << ATTR_W2; - } + // Non-Vulkan GLSL if (useHWTransform) WRITE(p, "%s vec3 position;\n", compat.attribute); @@ -433,12 +347,6 @@ bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguag WRITE(p, "uniform mediump mat4 u_texmtx;\n"); *uniformMask |= DIRTY_TEXMATRIX; } - if (enableBones) { - for (int i = 0; i < numBoneWeights; i++) { - WRITE(p, "uniform mat4 u_bone%i;\n", i); - *uniformMask |= DIRTY_BONEMATRIX0 << i; - } - } WRITE(p, "uniform vec4 u_uvscaleoffset;\n"); *uniformMask |= DIRTY_UVSCALEOFFSET; @@ -552,9 +460,6 @@ bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguag if (!useHWTransform) { WRITE(p, " float fog = In.fog;\n"); } - if (enableBones) { - WRITE(p, "%s", boneWeightAttrInitHLSL[numBoneWeights]); - } } WRITE(p, " bool zClipped = false;\n"); @@ -579,53 +484,12 @@ bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguag WRITE(p, " %sv_zw = vec2(outPos.z * outPos.w, outPos.w);\n", compat.vsOutPrefix); } } else { - // Step 1: World Transform / Skinning - if (!enableBones) { - // No skinning, just standard T&L. - WRITE(p, " vec3 worldpos = mul(vec4(position, 1.0), u_world).xyz;\n"); - if (hasNormal) { - WRITE(p, " mediump vec3 worldnormal = normalizeOr001(mul(vec4(%snormal, 0.0), u_world).xyz);\n", flipNormal ? "-" : ""); - } else { - WRITE(p, " mediump vec3 worldnormal = normalizeOr001(mul(vec4(0.0, 0.0, %s1.0, 0.0), u_world).xyz);\n", flipNormal ? "-" : ""); - } + // Step 1: World Transform (bones/skinning is now always handled in decode) + WRITE(p, " vec3 worldpos = mul(vec4(position, 1.0), u_world).xyz;\n"); + if (hasNormal) { + WRITE(p, " mediump vec3 worldnormal = normalizeOr001(mul(vec4(%snormal, 0.0), u_world).xyz);\n", flipNormal ? "-" : ""); } else { - static const char * const rescale[4] = {"", " * 1.9921875", " * 1.999969482421875", ""}; // 2*127.5f/128.f, 2*32767.5f/32768.f, 1.0f}; - const char *factor = rescale[boneWeightScale]; - - static const char * const boneWeightAttr[8] = { - "w1.x", "w1.y", "w1.z", "w1.w", - "w2.x", "w2.y", "w2.z", "w2.w", - }; - - const char *boneMatrix = compat.forceMatrix4x4 ? "mat4" : "mat3x4"; - - // Uncomment this to screw up bone shaders to check the vertex shader software fallback - // WRITE(p, "THIS SHOULD ERROR! #error"); - if (numBoneWeights == 1 && ShaderLanguageIsOpenGL(compat.shaderLanguage)) - WRITE(p, " %s skinMatrix = mul(w1, u_bone0)", boneMatrix); - else - WRITE(p, " %s skinMatrix = mul(w1.x, u_bone0)", boneMatrix); - for (int i = 1; i < numBoneWeights; i++) { - const char *weightAttr = boneWeightAttr[i]; - // workaround for "cant do .x of scalar" issue. - if (ShaderLanguageIsOpenGL(compat.shaderLanguage)) { - if (numBoneWeights == 1 && i == 0) weightAttr = "w1"; - if (numBoneWeights == 5 && i == 4) weightAttr = "w2"; - } - WRITE(p, " + mul(%s, u_bone%i)", weightAttr, i); - } - - WRITE(p, ";\n"); - - WRITE(p, " vec3 skinnedpos = mul(vec4(position, 1.0), skinMatrix).xyz%s;\n", factor); - WRITE(p, " vec3 worldpos = mul(vec4(skinnedpos, 1.0), u_world).xyz;\n"); - - if (hasNormal) { - WRITE(p, " mediump vec3 skinnednormal = mul(vec4(%snormal, 0.0), skinMatrix).xyz%s;\n", flipNormal ? "-" : "", factor); - } else { - WRITE(p, " mediump vec3 skinnednormal = mul(vec4(0.0, 0.0, %s1.0, 0.0), skinMatrix).xyz%s;\n", flipNormal ? "-" : "", factor); - } - WRITE(p, " mediump vec3 worldnormal = normalizeOr001(mul(vec4(skinnednormal, 0.0), u_world).xyz);\n"); + WRITE(p, " mediump vec3 worldnormal = normalizeOr001(mul(vec4(0.0, 0.0, %s1.0, 0.0), u_world).xyz);\n", flipNormal ? "-" : ""); } WRITE(p, " vec4 viewPos = vec4(mul(vec4(worldpos, 1.0), u_view).xyz, 1.0);\n"); diff --git a/GPU/D3D11/DrawEngineD3D11.cpp b/GPU/D3D11/DrawEngineD3D11.cpp index c3f26c325e..b6c8f2b81f 100644 --- a/GPU/D3D11/DrawEngineD3D11.cpp +++ b/GPU/D3D11/DrawEngineD3D11.cpp @@ -340,7 +340,7 @@ void DrawEngineD3D11::Flush() { D3D11VertexShader *vshader; D3D11FragmentShader *fshader; - shaderManager_->GetShaders(prim, dec_->VertexType(), &vshader, &fshader, pipelineState_, useHWTransform, decOptions_.expandAllWeightsToFloat, applySkinInDecode_, clipInfoFlags_); + shaderManager_->GetShaders(prim, dec_->VertexType(), &vshader, &fshader, pipelineState_, useHWTransform, clipInfoFlags_); ID3D11InputLayout *inputLayout; SetupDecFmtForDraw(vshader, dec_->GetDecVtxFmt(), dec_->VertexType(), &inputLayout); context_->PSSetShader(fshader->GetShader(), nullptr, 0); @@ -452,7 +452,7 @@ void DrawEngineD3D11::Flush() { if (action == SW_DRAW_INDEXED) { D3D11VertexShader *vshader; D3D11FragmentShader *fshader; - shaderManager_->GetShaders(prim, swDec->VertexType(), &vshader, &fshader, pipelineState_, false, decOptions_.expandAllWeightsToFloat, true, clipInfoFlags_); + shaderManager_->GetShaders(prim, swDec->VertexType(), &vshader, &fshader, pipelineState_, false, clipInfoFlags_); context_->PSSetShader(fshader->GetShader(), nullptr, 0); context_->VSSetShader(vshader->GetShader(), nullptr, 0); shaderManager_->UpdateUniforms(framebufferManager_->UseBufferedRendering()); diff --git a/GPU/D3D11/ShaderManagerD3D11.cpp b/GPU/D3D11/ShaderManagerD3D11.cpp index f0a5233fc7..cddd5d8285 100644 --- a/GPU/D3D11/ShaderManagerD3D11.cpp +++ b/GPU/D3D11/ShaderManagerD3D11.cpp @@ -186,13 +186,13 @@ void ShaderManagerD3D11::BindUniforms() { context_->PSSetConstantBuffers(0, 1, ps_cbs); } -void ShaderManagerD3D11::GetShaders(int prim, u32 vertexType, D3D11VertexShader **vshader, D3D11FragmentShader **fshader, const ComputedPipelineState &pipelineState, bool useHWTransform, bool weightsAsFloat, bool useSkinInDecode, ClipInfoFlags clipInfoFlags) { +void ShaderManagerD3D11::GetShaders(int prim, u32 vertexType, D3D11VertexShader **vshader, D3D11FragmentShader **fshader, const ComputedPipelineState &pipelineState, bool useHWTransform, ClipInfoFlags clipInfoFlags) { VShaderID VSID; FShaderID FSID; if (gstate_c.IsDirty(DIRTY_VERTEXSHADER_STATE)) { gstate_c.Clean(DIRTY_VERTEXSHADER_STATE); - ComputeVertexShaderID(&VSID, vertexType, useHWTransform, weightsAsFloat, useSkinInDecode, clipInfoFlags); + ComputeVertexShaderID(&VSID, vertexType, useHWTransform, clipInfoFlags); } else { VSID = lastVSID_; } diff --git a/GPU/D3D11/ShaderManagerD3D11.h b/GPU/D3D11/ShaderManagerD3D11.h index da4f3d8899..16591d99b1 100644 --- a/GPU/D3D11/ShaderManagerD3D11.h +++ b/GPU/D3D11/ShaderManagerD3D11.h @@ -88,7 +88,7 @@ public: ShaderManagerD3D11(Draw::DrawContext *draw, ID3D11Device *device, ID3D11DeviceContext *context, D3D_FEATURE_LEVEL featureLevel); ~ShaderManagerD3D11(); - void GetShaders(int prim, u32 vertexType, D3D11VertexShader **vshader, D3D11FragmentShader **fshader, const ComputedPipelineState &pipelineState, bool useHWTransform, bool weightsAsFloat, bool useSkinInDecode, ClipInfoFlags clipInfoFlags); + void GetShaders(int prim, u32 vertexType, D3D11VertexShader **vshader, D3D11FragmentShader **fshader, const ComputedPipelineState &pipelineState, bool useHWTransform, ClipInfoFlags clipInfoFlags); void ClearShaders() override; void DirtyLastShader() override; diff --git a/GPU/GLES/DrawEngineGLES.cpp b/GPU/GLES/DrawEngineGLES.cpp index 97bf678982..760a8ffd34 100644 --- a/GPU/GLES/DrawEngineGLES.cpp +++ b/GPU/GLES/DrawEngineGLES.cpp @@ -269,7 +269,7 @@ void DrawEngineGLES::Flush() { lastUseHwTransform_ = useHWTransform; } - Shader *vshader = shaderManager_->ApplyVertexShader(useHWTransform, dec_->VertexType(), decOptions_.expandAllWeightsToFloat, applySkinInDecode_ || !useHWTransform, clipInfoFlags_, &vsid); + Shader *vshader = shaderManager_->ApplyVertexShader(useHWTransform, dec_->VertexType(), clipInfoFlags_, &vsid); useHWTransform = vshader->UseHWTransform(); // In case shader compilation failed and it fell back. However, this can no longer really happen... Need to fix this. @@ -279,7 +279,7 @@ void DrawEngineGLES::Flush() { uint32_t indexBufferOffset = 0; if (useHWTransform) { - if (applySkinInDecode_ && (lastVType_ & GE_VTYPE_WEIGHT_MASK)) { + if (lastVType_ & GE_VTYPE_WEIGHT_MASK) { // If software skinning, we're predecoding into "decoded". So make sure we're done, then push that content. DecodeVerts(dec_, decoded_); uint32_t size = numDecodedVerts_ * dec_->GetDecVtxFmt().stride; diff --git a/GPU/GLES/ShaderManagerGLES.cpp b/GPU/GLES/ShaderManagerGLES.cpp index ac3b72b8df..3b42becdbd 100644 --- a/GPU/GLES/ShaderManagerGLES.cpp +++ b/GPU/GLES/ShaderManagerGLES.cpp @@ -127,11 +127,6 @@ LinkedShader::LinkedShader(GLRenderManager *render, VShaderID VSID, Shader *vs, queries.push_back({ &u_world, "u_world" }); queries.push_back({ &u_texmtx, "u_texmtx" }); - if (VSID.Bit(VS_BIT_ENABLE_BONES)) - numBones = TranslateNumBones(VSID.Bits(VS_BIT_BONES, 3) + 1); - else - numBones = 0; - // These two are only used for VR, but let's always query them for simplicity. queries.push_back({ &u_scaleX, "u_scaleX" }); queries.push_back({ &u_scaleY, "u_scaleY" }); @@ -543,13 +538,6 @@ void LinkedShader::UpdateUniforms(const ShaderID &vsid, const ShaderLanguageDesc float f = (float)gstate.getStencilTestRef() * (1.0f / 255.0f); render_->SetUniformF(&u_stencilReplaceValue, 1, &f); } - float bonetemp[16]; - for (int i = 0; i < numBones; i++) { - if (dirty & (DIRTY_BONEMATRIX0 << i)) { - ConvertMatrix4x3To4x4Transposed(bonetemp, gstate.boneMatrix + 12 * i); - render_->SetUniformM4x4(&u_bone[i], bonetemp); - } - } if (dirty & DIRTY_SHADERBLEND) { if (u_blendFixA != -1) { @@ -701,10 +689,10 @@ Shader *ShaderManagerGLES::CompileVertexShader(VShaderID VSID) { return new Shader(render_, codeBuffer_, desc, params); } -Shader *ShaderManagerGLES::ApplyVertexShader(bool useHWTransform, u32 vertexType, bool weightsAsFloat, bool useSkinInDecode, ClipInfoFlags clipInfoFlags, VShaderID *VSID) { +Shader *ShaderManagerGLES::ApplyVertexShader(bool useHWTransform, u32 vertexType, ClipInfoFlags clipInfoFlags, VShaderID *VSID) { if (gstate_c.IsDirty(DIRTY_VERTEXSHADER_STATE)) { gstate_c.Clean(DIRTY_VERTEXSHADER_STATE); - ComputeVertexShaderID(VSID, vertexType, useHWTransform, weightsAsFloat, useSkinInDecode, clipInfoFlags); + ComputeVertexShaderID(VSID, vertexType, useHWTransform, clipInfoFlags); } else { *VSID = lastVSID_; } @@ -737,7 +725,7 @@ Shader *ShaderManagerGLES::ApplyVertexShader(bool useHWTransform, u32 vertexType // Can still work with software transform. VShaderID vsidTemp; - ComputeVertexShaderID(&vsidTemp, vertexType, false, weightsAsFloat, true, clipInfoFlags); + ComputeVertexShaderID(&vsidTemp, vertexType, false, clipInfoFlags); vs = CompileVertexShader(vsidTemp); } diff --git a/GPU/GLES/ShaderManagerGLES.h b/GPU/GLES/ShaderManagerGLES.h index db35142c8d..4c95ad1543 100644 --- a/GPU/GLES/ShaderManagerGLES.h +++ b/GPU/GLES/ShaderManagerGLES.h @@ -172,7 +172,7 @@ public: // This is the old ApplyShader split into two parts, because of annoying information dependencies. // If you call ApplyVertexShader, you MUST call ApplyFragmentShader soon afterwards. - Shader *ApplyVertexShader(bool useHWTransform, u32 vertexType, bool weightsAsFloat, bool useSkinInDecode, ClipInfoFlags clipInfoFlags, VShaderID *VSID); + Shader *ApplyVertexShader(bool useHWTransform, u32 vertexType, ClipInfoFlags clipInfoFlags, VShaderID *VSID); LinkedShader *ApplyFragmentShader(VShaderID VSID, Shader *vs, const ComputedPipelineState &pipelineState, ClipInfoFlags clipInfoFlags); void DeviceLost() override; diff --git a/GPU/GPUCommon.cpp b/GPU/GPUCommon.cpp index 4f748f885a..9666b66376 100644 --- a/GPU/GPUCommon.cpp +++ b/GPU/GPUCommon.cpp @@ -1394,14 +1394,7 @@ void GPUCommon::FastLoadBoneMatrix(u32 target) { uniformsToDirty |= DIRTY_BONEMATRIX0 << ((mtxNum + 1) & 7); } - if (!g_Config.bSoftwareSkinning) { - if (flushOnParams_) { - Flush(); - } - gstate_c.Dirty(uniformsToDirty); - } else { - gstate_c.deferredVertTypeDirty |= uniformsToDirty; - } + gstate_c.deferredVertTypeDirty |= uniformsToDirty; gstate.FastLoadBoneMatrix(target); cyclesExecuted += 2 * 14; // one to reset the counter, 12 to load the matrix, and a return. diff --git a/GPU/GPUCommonHW.cpp b/GPU/GPUCommonHW.cpp index 1330f1aff7..52af490d8b 100644 --- a/GPU/GPUCommonHW.cpp +++ b/GPU/GPUCommonHW.cpp @@ -54,8 +54,8 @@ const CommonCommandTableEntry commonCommandTable[] = { { GE_CMD_BEZIER, FLAG_EXECUTE, 0, &GPUCommonHW::Execute_Bezier }, { GE_CMD_SPLINE, FLAG_EXECUTE, 0, &GPUCommonHW::Execute_Spline }, - // Changing the vertex type requires us to flush. - { GE_CMD_VERTEXTYPE, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE, 0, &GPUCommonHW::Execute_VertexType }, + // Changing the vertex type requires us to flush - except if we're soft skinning. So handled it in the execute function if needed. + { GE_CMD_VERTEXTYPE, FLAG_EXECUTEONCHANGE, 0, &GPUCommonHW::Execute_VertexTypeSkinning }, { GE_CMD_LOADCLUT, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTE, 0, &GPUCommonHW::Execute_LoadClut}, @@ -465,13 +465,7 @@ void GPUCommonHW::DeviceRestore(Draw::DrawContext *draw) { } void GPUCommonHW::UpdateCmdInfo() { - if (g_Config.bSoftwareSkinning) { - cmdInfo_[GE_CMD_VERTEXTYPE].flags &= ~FLAG_FLUSHBEFOREONCHANGE; - cmdInfo_[GE_CMD_VERTEXTYPE].func = &GPUCommonHW::Execute_VertexTypeSkinning; - } else { - cmdInfo_[GE_CMD_VERTEXTYPE].flags |= FLAG_FLUSHBEFOREONCHANGE; - cmdInfo_[GE_CMD_VERTEXTYPE].func = &GPUCommonHW::Execute_VertexType; - } + // Reconfigure for light ubershader or not. for (int i = 0; i < 4; i++) { @@ -843,18 +837,6 @@ void GPUCommonHW::FastRunLoop(DisplayList &list) { downcount = 0; } -void GPUCommonHW::Execute_VertexType(u32 op, u32 diff) { - if (diff) { - // TODO: We only need to dirty vshader-state here if the output format will be different. - gstate_c.Dirty(DIRTY_VERTEXSHADER_STATE); - - if (diff & GE_VTYPE_THROUGH_MASK) { - // Switching between through and non-through, we need to invalidate a bunch of stuff. - gstate_c.Dirty(DIRTY_RASTER_STATE | DIRTY_VERTEXSHADER_STATE | DIRTY_VIEWPORTSCISSOR_STATE | DIRTY_FRAGMENTSHADER_STATE); - } - } -} - void GPUCommonHW::Execute_VertexTypeSkinning(u32 op, u32 diff) { // Don't flush when weight count changes. if (diff & ~GE_VTYPE_WEIGHTCOUNT_MASK) { @@ -977,7 +959,7 @@ void GPUCommonHW::Execute_Prim(u32 op, u32 diff) { // cull mode int cullMode = gstate.getCullMode(); - uint32_t vertTypeID = GetVertTypeID(vertexType, gstate.getUVGenMode(), g_Config.bSoftwareSkinning); + uint32_t vertTypeID = GetVertTypeID(vertexType, gstate.getUVGenMode()); VertexDecoder *decoder = drawEngineCommon_->GetVertexDecoder(vertTypeID); // This is the check from #21678 for Evangelion JO. @@ -1064,8 +1046,7 @@ void GPUCommonHW::Execute_Prim(u32 op, u32 diff) { // above for each one. This can be expanded to support additional games that intersperse // PRIM commands with other commands. A special case is Earth Defence Force 2 that changes culling mode // between each prim, we just change the triangle winding right here to still be able to join draw calls. - - const uint32_t vtypeCheckMask = g_Config.bSoftwareSkinning ? (~GE_VTYPE_WEIGHTCOUNT_MASK) : 0xFFFFFFFF; + constexpr uint32_t vtypeCheckMask = ~GE_VTYPE_WEIGHTCOUNT_MASK; if (!useFastRunLoop_) goto bail; // we're either recording or stepping. @@ -1146,7 +1127,7 @@ void GPUCommonHW::Execute_Prim(u32 op, u32 diff) { drawEngineCommon_->FlushSkin(); canExtend = false; // TODO: Might support extending between some vertex types in the future. vertexType = (GEVertexType)(data); - vertTypeID = GetVertTypeID(vertexType, gstate.getUVGenMode(), g_Config.bSoftwareSkinning); + vertTypeID = GetVertTypeID(vertexType, gstate.getUVGenMode()); decoder = drawEngineCommon_->GetVertexDecoder(vertTypeID); } break; @@ -1700,35 +1681,16 @@ void GPUCommonHW::Execute_BoneMtxNum(u32 op, u32 diff) { } if (fastLoad) { - // If we can't use software skinning, we have to flush and dirty. - if (!g_Config.bSoftwareSkinning) { - while ((src[i] >> 24) == GE_CMD_BONEMATRIXDATA) { - const u32 newVal = src[i] << 8; - if (dst[i] != newVal) { - Flush(); - dst[i] = newVal; - } - if (++i >= end) { - break; - } + while ((src[i] >> 24) == GE_CMD_BONEMATRIXDATA) { + dst[i] = src[i] << 8; + if (++i >= end) { + break; } + } - const unsigned int numPlusCount = (op & 0x7F) + i; - for (unsigned int num = op & 0x7F; num < numPlusCount; num += 12) { - gstate_c.Dirty(DIRTY_BONEMATRIX0 << (num / 12)); - } - } else { - while ((src[i] >> 24) == GE_CMD_BONEMATRIXDATA) { - dst[i] = src[i] << 8; - if (++i >= end) { - break; - } - } - - const unsigned int numPlusCount = (op & 0x7F) + i; - for (unsigned int num = op & 0x7F; num < numPlusCount; num += 12) { - gstate_c.deferredVertTypeDirty |= DIRTY_BONEMATRIX0 << (num / 12); - } + const unsigned int numPlusCount = (op & 0x7F) + i; + for (unsigned int num = op & 0x7F; num < numPlusCount; num += 12) { + gstate_c.deferredVertTypeDirty |= DIRTY_BONEMATRIX0 << (num / 12); } } @@ -1745,13 +1707,8 @@ void GPUCommonHW::Execute_BoneMtxData(u32 op, u32 diff) { int num = gstate.boneMatrixNumber & 0x00FFFFFF; u32 newVal = op << 8; if (num < 96 && newVal != ((const u32 *)gstate.boneMatrix)[num]) { - // Bone matrices should NOT flush when software skinning is enabled! - if (!g_Config.bSoftwareSkinning) { - Flush(); - gstate_c.Dirty(DIRTY_BONEMATRIX0 << (num / 12)); - } else { - gstate_c.deferredVertTypeDirty |= DIRTY_BONEMATRIX0 << (num / 12); - } + // Bone matrices should NOT flush, as we're always doing skinning in decode nowadays! + gstate_c.deferredVertTypeDirty |= DIRTY_BONEMATRIX0 << (num / 12); ((u32 *)gstate.boneMatrix)[num] = newVal; } num++; diff --git a/GPU/GPUCommonHW.h b/GPU/GPUCommonHW.h index 897f9569b7..69640402f5 100644 --- a/GPU/GPUCommonHW.h +++ b/GPU/GPUCommonHW.h @@ -50,7 +50,6 @@ public: bool FramebufferDirty() override; bool FramebufferReallyDirty() override; - void Execute_VertexType(u32 op, u32 diff); void Execute_VertexTypeSkinning(u32 op, u32 diff); void Execute_Prim(u32 op, u32 diff); diff --git a/GPU/Software/TransformUnit.cpp b/GPU/Software/TransformUnit.cpp index 706bac6bab..13e53c7841 100644 --- a/GPU/Software/TransformUnit.cpp +++ b/GPU/Software/TransformUnit.cpp @@ -63,7 +63,6 @@ SoftwareDrawEngine::~SoftwareDrawEngine() {} void SoftwareDrawEngine::NotifyConfigChanged() { DrawEngineCommon::NotifyConfigChanged(); - applySkinInDecode_ = true; } void SoftwareDrawEngine::Flush() { @@ -76,7 +75,7 @@ void SoftwareDrawEngine::DispatchSubmitPrim(const void *verts, const void *inds, } void SoftwareDrawEngine::DispatchSubmitImm(GEPrimitiveType prim, TransformedVertex *buffer, int vertexCount, int cullMode, bool continuation) { - uint32_t vertTypeID = GetVertTypeID(gstate.vertType | GE_VTYPE_POS_FLOAT, gstate.getUVGenMode(), true); + uint32_t vertTypeID = GetVertTypeID(gstate.vertType | GE_VTYPE_POS_FLOAT, gstate.getUVGenMode()); int flipCull = cullMode != gstate.getCullMode() ? 1 : 0; // TODO: For now, just setting all dirty. @@ -141,7 +140,7 @@ void SoftwareDrawEngine::DispatchSubmitImm(GEPrimitiveType prim, TransformedVert } VertexDecoder *SoftwareDrawEngine::FindVertexDecoder(u32 vtype) { - const u32 vertTypeID = GetVertTypeID(vtype, gstate.getUVGenMode(), true); + const u32 vertTypeID = GetVertTypeID(vtype, gstate.getUVGenMode()); return DrawEngineCommon::GetVertexDecoder(vertTypeID); } @@ -865,7 +864,8 @@ void TransformUnit::SubmitImmVertex(const ClipVertexData &vert, SoftwareDrawEngi break; } - uint32_t vertTypeID = GetVertTypeID(gstate.vertType | GE_VTYPE_POS_FLOAT, gstate.getUVGenMode(), true); + // Hm, shouldn't we mask away the position bits of the vertType? + uint32_t vertTypeID = GetVertTypeID(gstate.vertType | GE_VTYPE_POS_FLOAT, gstate.getUVGenMode()); // This now processes the step with shared logic, given the existing data_. isImmDraw_ = true; SubmitPrimitive(nullptr, nullptr, GE_PRIM_KEEP_PREVIOUS, 0, vertTypeID, nullptr, drawEngine); diff --git a/GPU/Vulkan/DrawEngineVulkan.cpp b/GPU/Vulkan/DrawEngineVulkan.cpp index 16ead2e9f2..91d7e0cf44 100644 --- a/GPU/Vulkan/DrawEngineVulkan.cpp +++ b/GPU/Vulkan/DrawEngineVulkan.cpp @@ -260,8 +260,8 @@ void DrawEngineVulkan::Flush() { uint32_t vbOffset; VkBuffer vbuf = VK_NULL_HANDLE; - if (applySkinInDecode_ && (lastVType_ & GE_VTYPE_WEIGHT_MASK)) { - // If software skinning, we're predecoding into "decoded". So make sure we're done, then push that content. + if (lastVType_ & GE_VTYPE_WEIGHT_MASK) { + // If skinning, we're predecoding into "decoded". So make sure we're done, then push that content. DecodeVerts(dec_, decoded_); VkDeviceSize size = numDecodedVerts_ * dec_->GetDecVtxFmt().stride; u8 *dest = (u8 *)pushVertex_->Allocate(size, 4, &vbuf, &vbOffset); @@ -304,7 +304,7 @@ void DrawEngineVulkan::Flush() { VShaderID vshaderID; FShaderID fshaderID; - shaderManager_->GetShaderIDs(prim, dec_->VertexType(), &vshaderID, &fshaderID, pipelineState_, true, decOptions_.expandAllWeightsToFloat, applySkinInDecode_, clipInfoFlags_); + shaderManager_->GetShaderIDs(prim, dec_->VertexType(), &vshaderID, &fshaderID, pipelineState_, true, clipInfoFlags_); _dbg_assert_msg_(vshaderID.Bit(VS_BIT_USE_HW_TRANSFORM) == true, "Bad vshader ID"); VulkanPipeline *pipeline = pipelineManager_->GetOrCreatePipeline(renderManager, shaderManager_, pipelineLayout_, pipelineKey_, &dec_->decFmt, vshaderID, fshaderID, true, 0, framebufferManager_->GetMSAALevel(), false); if (!pipeline || !pipeline->pipeline) { @@ -462,7 +462,7 @@ void DrawEngineVulkan::Flush() { VShaderID vshaderID; FShaderID fshaderID; - shaderManager_->GetShaderIDs(prim, swDec->VertexType(), &vshaderID, &fshaderID, pipelineState_, false, decOptions_.expandAllWeightsToFloat, true, clipInfoFlags_); + shaderManager_->GetShaderIDs(prim, swDec->VertexType(), &vshaderID, &fshaderID, pipelineState_, false, clipInfoFlags_); _dbg_assert_msg_(vshaderID.Bit(VS_BIT_USE_HW_TRANSFORM) == false, "Bad vshader ID"); VulkanPipeline *pipeline = pipelineManager_->GetOrCreatePipeline(renderManager, shaderManager_, pipelineLayout_, pipelineKey_, &swDec->decFmt, vshaderID, fshaderID, false, 0, framebufferManager_->GetMSAALevel(), false); if (!pipeline || !pipeline->pipeline) { diff --git a/GPU/Vulkan/ShaderManagerVulkan.cpp b/GPU/Vulkan/ShaderManagerVulkan.cpp index b37c696ab0..f77b5d4653 100644 --- a/GPU/Vulkan/ShaderManagerVulkan.cpp +++ b/GPU/Vulkan/ShaderManagerVulkan.cpp @@ -278,14 +278,14 @@ const VulkanFragmentShader *ShaderManagerVulkan::GetFragmentShaderFromID(FShader return fs; } -void ShaderManagerVulkan::GetShaderIDs(int prim, u32 vertexType, VShaderID *vshader, FShaderID *fshader, const ComputedPipelineState &pipelineState, bool useHWTransform, bool weightsAsFloat, bool useSkinInDecode, ClipInfoFlags clipInfoFlags) { +void ShaderManagerVulkan::GetShaderIDs(int prim, u32 vertexType, VShaderID *vshader, FShaderID *fshader, const ComputedPipelineState &pipelineState, bool useHWTransform, ClipInfoFlags clipInfoFlags) { VulkanContext *vulkan = (VulkanContext *)draw_->GetNativeObject(Draw::NativeObject::CONTEXT); bool recomputedVS = false; VShaderID VSID; if (gstate_c.IsDirty(DIRTY_VERTEXSHADER_STATE)) { gstate_c.Clean(DIRTY_VERTEXSHADER_STATE); - ComputeVertexShaderID(&VSID, vertexType, useHWTransform, weightsAsFloat, useSkinInDecode, clipInfoFlags); + ComputeVertexShaderID(&VSID, vertexType, useHWTransform, clipInfoFlags); lastVSID_ = VSID; *vshader = VSID; recomputedVS = true; diff --git a/GPU/Vulkan/ShaderManagerVulkan.h b/GPU/Vulkan/ShaderManagerVulkan.h index 35822c5d00..6feb73087c 100644 --- a/GPU/Vulkan/ShaderManagerVulkan.h +++ b/GPU/Vulkan/ShaderManagerVulkan.h @@ -102,7 +102,7 @@ public: void DeviceLost() override; void DeviceRestore(Draw::DrawContext *draw) override; - void GetShaderIDs(int prim, u32 vertexType, VShaderID *vshader, FShaderID *fshader, const ComputedPipelineState &pipelineState, bool useHWTransform, bool weightsAsFloat, bool useSkinInDecode, ClipInfoFlags clipInfoFlags); + void GetShaderIDs(int prim, u32 vertexType, VShaderID *vshader, FShaderID *fshader, const ComputedPipelineState &pipelineState, bool useHWTransform, ClipInfoFlags clipInfoFlags); void ClearShaders() override; void DirtyLastShader() override; diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index 7c8945fe9a..ca97df34f3 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -521,10 +521,6 @@ void GameSettingsScreen::CreateGraphicsSettings(UI::ViewGroup *graphicsSettings) hwTransform->SetDisabledPtr(&g_Config.bSoftwareRendering); } - CheckBox *swSkin = graphicsSettings->Add(new CheckBox(&g_Config.bSoftwareSkinning, gr->T("Software Skinning"))); - swSkin->SetDisabledPtr(&g_Config.bSoftwareRendering); - graphicsSettings->Add(new SettingHint(gr->T("SoftwareSkinning Tip", "Combine skinned model draws on the CPU, faster in most games"), swSkin)); - graphicsSettings->Add(new ItemHeader(gr->T("Texture upscaling"))); if (GetGPUBackend() == GPUBackend::VULKAN) { diff --git a/Windows/GEDebugger/TabVertices.cpp b/Windows/GEDebugger/TabVertices.cpp index feecf3b626..3feaf56c21 100644 --- a/Windows/GEDebugger/TabVertices.cpp +++ b/Windows/GEDebugger/TabVertices.cpp @@ -228,7 +228,7 @@ int CtrlVertexList::GetRowCount() { VertexDecoderOptions options{}; // TODO: Maybe an option? - u32 vertTypeID = GetVertTypeID(state.vertType, state.getUVGenMode(), true); + u32 vertTypeID = GetVertTypeID(state.vertType, state.getUVGenMode()); decoder->SetVertexType(vertTypeID, options); return rowCount_; } diff --git a/assets/lang/ar_AE.ini b/assets/lang/ar_AE.ini index eba6826f83..78ce239175 100644 --- a/assets/lang/ar_AE.ini +++ b/assets/lang/ar_AE.ini @@ -770,8 +770,6 @@ Show FPS Counter = ‎أظهر عداد الـFPS Skip GPU Readbacks = تخطي القراءة الراجعة من GPU # AI translated Smart 2D texture filtering = فلترة ذكية للرسوم ثنائية الأبعاد # AI translated Software Rendering = ‎تصيير السوفت وير (slow) -Software Skinning = ‎طلاء برمجي -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = ‎السرعة Speed Hacks = Speed Hacks (can cause rendering errors!) Stereo display shader = رسوميات العرض المجسم # AI translated diff --git a/assets/lang/az_AZ.ini b/assets/lang/az_AZ.ini index d69743024e..ca3b1f9cba 100644 --- a/assets/lang/az_AZ.ini +++ b/assets/lang/az_AZ.ini @@ -762,8 +762,6 @@ Show FPS Counter = FPS sayğacını göstər Skip GPU Readbacks = GİB Gerioxumalarını burax Smart 2D texture filtering = Ağıllı 2D toxuma süzgüsü Software Rendering = Yazılımlı işləniş (sınanışlı) -Software Skinning = Yazılımlı üzləmə -SoftwareSkinning Tip = Üzlənmiş model çizimlərini OİB'də birləşdirir, çox oyunda sürətləndirir Speed = Sürət Speed Hacks = Sürət Qırılışları (işləniş yanlışlarına yol aça bilər!) Stereo display shader = Stereo görüntü kölgələndiricisi diff --git a/assets/lang/be_BY.ini b/assets/lang/be_BY.ini index 981867f705..2726a7af37 100644 --- a/assets/lang/be_BY.ini +++ b/assets/lang/be_BY.ini @@ -762,8 +762,6 @@ Show FPS Counter = Паказаць лічыльнік FPS Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Праграмны рэндэрынг (павольны, дакладны) -Software Skinning = Праграмнае заліванне -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = Хуткасць Speed Hacks = Speed Hacks (can cause rendering errors!) Stereo display shader = Stereo display shader diff --git a/assets/lang/bg_BG.ini b/assets/lang/bg_BG.ini index e99dc92b1b..127be46edd 100644 --- a/assets/lang/bg_BG.ini +++ b/assets/lang/bg_BG.ini @@ -762,8 +762,6 @@ Show FPS Counter = Покажи брояча за кадри в сек. Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Софтуерно рендиране (бавно, по-точно) -Software Skinning = Софтуерно запълване -SoftwareSkinning Tip = Моделът с комбинирана обработка използва процесора, по-бърз е в повечето игри Speed = Скорост Speed Hacks = Скоростни хакове (могат да причинят грешки при рендиране!) Stereo display shader = Шейдър за стерео дисплей diff --git a/assets/lang/ca_ES.ini b/assets/lang/ca_ES.ini index 79a1b8068c..369eb24709 100644 --- a/assets/lang/ca_ES.ini +++ b/assets/lang/ca_ES.ini @@ -762,8 +762,6 @@ Show FPS Counter = Mostra comptador de FPS Skip GPU Readbacks = Saltar la lectura de GPU Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Renderitzat per programari -Software Skinning = "Skinning" per programari -SoftwareSkinning Tip = Redueix la càrrega de dibuixat, ràpid en jocs amb tècniques de skinning avançades, però lent en altres. Speed = Velocitat Speed Hacks = Speed Hacks (causaran errors gràfics) Stereo display shader = Shader de pantalla estèreo diff --git a/assets/lang/cz_CZ.ini b/assets/lang/cz_CZ.ini index bcfb77a0f0..140dde310c 100644 --- a/assets/lang/cz_CZ.ini +++ b/assets/lang/cz_CZ.ini @@ -762,8 +762,6 @@ Show FPS Counter = Zobrazit počítadlo Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Softwarové vykreslování (experimentální) -Software Skinning = Textury aplikuje software -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = Rychlost Speed Hacks = Speed Hacks (Mohou způsobit problémy) Stereo display shader = Stereo display shader diff --git a/assets/lang/da_DK.ini b/assets/lang/da_DK.ini index 6bc7112d03..f112724eb1 100644 --- a/assets/lang/da_DK.ini +++ b/assets/lang/da_DK.ini @@ -762,8 +762,6 @@ Show FPS Counter = Vis FPS Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Software rendering (eksperiment) -Software Skinning = Software skinning -SoftwareSkinning Tip = Kombiner begrænset model tegning af CPU, hurtigere i fleste spil Speed = Hastighed Speed Hacks = Speed Hacks (kan give fejl) Stereo display shader = Stereo display shader diff --git a/assets/lang/de_DE.ini b/assets/lang/de_DE.ini index b2c90aaa12..6e4f9894c4 100644 --- a/assets/lang/de_DE.ini +++ b/assets/lang/de_DE.ini @@ -761,8 +761,6 @@ Show FPS Counter = BpS anzeigen Skip GPU Readbacks = GPU-Rücklesungen überspringen Smart 2D texture filtering = Intelligente 2D-Texturfilterung Software Rendering = Software-Renderer (langsam, präzise) -Software Skinning = Software Skinning -SoftwareSkinning Tip = Reduziert Grafikbefehle und schneller in Spielen mit erweiterter Skinning-Technik, in anderen Spielen langsamer Speed = Geschwindigkeit Speed Hacks = Geschwindigkeits-Hacks (Kann zu Fehlern führen) Stereo display shader = Stereo-Anzeige-Schattierer diff --git a/assets/lang/dr_ID.ini b/assets/lang/dr_ID.ini index 28db6976f5..6cabb4fc74 100644 --- a/assets/lang/dr_ID.ini +++ b/assets/lang/dr_ID.ini @@ -762,8 +762,6 @@ Show FPS Counter = Padenni FPSna Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Pakeanni Software Tampilkan (dicoba-cobara) -Software Skinning = Software skinning -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = Lassinna Speed Hacks = Speed Hacks (can cause rendering errors!) Stereo display shader = Stereo display shader diff --git a/assets/lang/en_US.ini b/assets/lang/en_US.ini index 932e692895..46e3be58b3 100644 --- a/assets/lang/en_US.ini +++ b/assets/lang/en_US.ini @@ -786,8 +786,6 @@ Show FPS Counter = Show FPS counter Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Software rendering (slow, accurate) -Software Skinning = Software skinning -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = Speed Speed Hacks = Speed Hacks (can cause rendering errors!) Stereo display shader = Stereo display shader diff --git a/assets/lang/es_ES.ini b/assets/lang/es_ES.ini index 3f05aeb6a2..f3a2de26e9 100644 --- a/assets/lang/es_ES.ini +++ b/assets/lang/es_ES.ini @@ -763,8 +763,6 @@ Skip Buffer Effects = Omitir efectos del búfer Skip GPU Readbacks = Omitir lecturas de GPU Smart 2D texture filtering = Filtrado inteligente de texturas 2D Software Rendering = Renderizado por software (lento, preciso) -Software Skinning = "Skinning" por software -SoftwareSkinning Tip = Reduce la carga de dibujado, rápido en juegos con técnicas de skinning avanzadas, pero lento en otros. Speed = Velocidad Speed Hacks = Hacks de velocidad (¡puede causar errores gráficos!) Stereo display shader = Sombreador de pantalla estéreo diff --git a/assets/lang/es_LA.ini b/assets/lang/es_LA.ini index e0304a8d13..da3b4743ae 100644 --- a/assets/lang/es_LA.ini +++ b/assets/lang/es_LA.ini @@ -762,8 +762,6 @@ Show FPS Counter = Mostrar contador de FPS Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Renderizado por software (experimental) -Software Skinning = Skineado por software -SoftwareSkinning Tip = Combina dibujados de modelo de skineado en la CPU. Acelera muchos juegos pero ralentiza otros. Speed = Velocidad Speed Hacks = Hacks de Velocidad (pueden causar glitches) Stereo display shader = Stereo display shader diff --git a/assets/lang/fa_IR.ini b/assets/lang/fa_IR.ini index 204efe8652..7ddba806db 100644 --- a/assets/lang/fa_IR.ini +++ b/assets/lang/fa_IR.ini @@ -762,8 +762,6 @@ Show FPS Counter = ‎نمایش شمارنده فریم بر ثانیه Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = ‎(رندر نرم افزاری (آزمایشی -Software Skinning = Software skinning -SoftwareSkinning Tip = ‎در اکثر بازی‌ها سریع تر ،CPU دار در skin ترکیب رسم مدل‌های Speed = ‎سرعت Speed Hacks = Speed Hacks ‎(میتواند باعث باگ شود) Stereo display shader = Stereo display shader diff --git a/assets/lang/fi_FI.ini b/assets/lang/fi_FI.ini index 399e95350f..9e2eaa3a1f 100644 --- a/assets/lang/fi_FI.ini +++ b/assets/lang/fi_FI.ini @@ -762,8 +762,6 @@ Show FPS Counter = Näytä kuvalaskuri (FPS) Skip GPU Readbacks = Ohita GPU-lukemat Smart 2D texture filtering = Älykäs 2D-tekstuurien suodatus Software Rendering = Ohjelmistopohjainen renderointi (kokeellinen) -Software Skinning = Ohjelmistopohjainen muokkaus (skinning) -SoftwareSkinning Tip = Yhdistää skinnattujen mallien piirtämisen prosessorilla, nopeampi useimmissa peleissä Speed = Nopeus Speed Hacks = Nopeuskikat (saattaa aiheuttaa renderöinti virheitä!) Stereo display shader = Stereo display shader diff --git a/assets/lang/fr_FR.ini b/assets/lang/fr_FR.ini index 6c467c6a0d..ceb864b234 100644 --- a/assets/lang/fr_FR.ini +++ b/assets/lang/fr_FR.ini @@ -786,8 +786,6 @@ Show FPS Counter = Montrer les compteurs Skip GPU Readbacks = Ignorer les lectures du GPU Smart 2D texture filtering = Filtrage intelligent des textures 2D Software Rendering = Rendu logiciel (expérimental) -Software Skinning = Enveloppe logicielle -SoftwareSkinning Tip = Combine l'affichage des modèles enveloppés sur le CPU, plus rapide dans la plupart des jeux Speed = Vitesse Speed Hacks = Hacks de vitesse (crée des bugs graphiques) Stereo display shader = Shader d'affichage stéréo diff --git a/assets/lang/gl_ES.ini b/assets/lang/gl_ES.ini index ebdaf4d7ad..e0b337c496 100644 --- a/assets/lang/gl_ES.ini +++ b/assets/lang/gl_ES.ini @@ -762,8 +762,6 @@ Show FPS Counter = Mostrar contador de FPS Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Renderizado por software (beta) -Software Skinning = «Skinning» por software -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = Velocidade Speed Hacks = Speed Hacks (causarán erros gráficos) Stereo display shader = Stereo display shader diff --git a/assets/lang/gr_EL.ini b/assets/lang/gr_EL.ini index e0adc28cdf..7476b1c20c 100644 --- a/assets/lang/gr_EL.ini +++ b/assets/lang/gr_EL.ini @@ -762,8 +762,6 @@ Show FPS Counter = Εμφάνιση μετρητή FPS Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Απεικόνιση Λογισμικού (πειραματικό) -Software Skinning = Εκδορά Λογισμικού -SoftwareSkinning Tip = Συνδυασμός μοντέλου στην CPU, γρηγορότερο στα περισσότερα παιχνίδια Speed = Ταχύτητα Speed Hacks = Speed Hacks (can cause rendering errors!) Stereo display shader = Stereo display shader diff --git a/assets/lang/he_IL.ini b/assets/lang/he_IL.ini index 89d37e72c9..b8a2208078 100644 --- a/assets/lang/he_IL.ini +++ b/assets/lang/he_IL.ini @@ -762,8 +762,6 @@ Show FPS Counter = הצג מונה Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = עיבוד תוכנה (ניסיוני) -Software Skinning = Software skinning -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = מהירות Speed Hacks = Speed Hacks (can cause rendering errors!) Stereo display shader = Stereo display shader diff --git a/assets/lang/he_IL_invert.ini b/assets/lang/he_IL_invert.ini index c17c0fdcf1..1b160fd03b 100644 --- a/assets/lang/he_IL_invert.ini +++ b/assets/lang/he_IL_invert.ini @@ -762,8 +762,6 @@ Show FPS Counter = הנומ גצה Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = )ינויסינ( הנכות דוביע -Software Skinning = Software skinning -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = תוריהמ Speed Hacks = Speed Hacks (can cause rendering errors!) Stereo display shader = Stereo display shader diff --git a/assets/lang/hr_HR.ini b/assets/lang/hr_HR.ini index 84a94c84cf..710ebf9dde 100644 --- a/assets/lang/hr_HR.ini +++ b/assets/lang/hr_HR.ini @@ -762,8 +762,6 @@ Show FPS Counter = Pokaži FPS counter Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Žbukanje softvera (sporo) -Software Skinning = Skiniranje softvera -SoftwareSkinning Tip = Kombiniraj skinirane modele crteža na CPU, brže u većini igara Speed = Brzina Speed Hacks = Speed Hacks (može uzrokovati glitcheve) Stereo display shader = Stereo display shader diff --git a/assets/lang/hu_HU.ini b/assets/lang/hu_HU.ini index b4ce3eccb7..fee0da379b 100644 --- a/assets/lang/hu_HU.ini +++ b/assets/lang/hu_HU.ini @@ -762,8 +762,6 @@ Show FPS Counter = FPS számláló mutatása Skip GPU Readbacks = GPU visszaolvasások átugrása Smart 2D texture filtering = Okos 2D textúra szűrés Software Rendering = Szoftveres renderelés (lassú) -Software Skinning = Szoftveres skinning -SoftwareSkinning Tip = Skinning művelet elvégzése a processzoron. Sok játék esetében gyorsabb. Speed = Sebesség Speed Hacks = Speed hackek (HIBÁKAT OKOZHATNAK) Stereo display shader = Sztereó megjelenítés shader diff --git a/assets/lang/id_ID.ini b/assets/lang/id_ID.ini index 0cb136a9bd..a7f53a0c06 100644 --- a/assets/lang/id_ID.ini +++ b/assets/lang/id_ID.ini @@ -762,8 +762,6 @@ Show FPS Counter = Tampilkan penghitung FPS Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Penyaringan tekstur 2D yang cerdas Software Rendering = Rendering perangkat lunak (eksperimental) -Software Skinning = Pengkulitan perangkat lunak -SoftwareSkinning Tip = Menggabungkan model berkulit pada CPU, lebih cepat di kebanyakan game Speed = Kecepatan Speed Hacks = Peretasan Kecepatan (menyebabkan kecacatan) Stereo display shader = Shader tampilan stereo diff --git a/assets/lang/it_IT.ini b/assets/lang/it_IT.ini index b89afac1ca..7cb1c3e087 100644 --- a/assets/lang/it_IT.ini +++ b/assets/lang/it_IT.ini @@ -763,8 +763,6 @@ Show FPS Counter = Mostra FPS Skip GPU Readbacks = Salta le letture della GPU Smart 2D texture filtering = Filtro texture 2D intelligente Software Rendering = Rendering tramite Software (sperimentale) -Software Skinning = Screpolatura software -SoftwareSkinning Tip = Combina la visualizzazione di modelli disegnati dalla CPU, più veloce nella maggior parte dei giochi Speed = Velocità Speed Hacks = Hack velocità (causerà dei problemi) Stereo display shader = Shader di visualizzazione stereo diff --git a/assets/lang/ja_JP.ini b/assets/lang/ja_JP.ini index 837824b525..7a32e349b5 100644 --- a/assets/lang/ja_JP.ini +++ b/assets/lang/ja_JP.ini @@ -762,8 +762,6 @@ Show FPS Counter = FPSを表示する Skip GPU Readbacks = GPUリードバックのスキップ Smart 2D texture filtering = Smart 2Dテクスチャフィルタリング Software Rendering = ソフトウェアレンダリング (実験的) -Software Skinning = ソフトウェアスキニング -SoftwareSkinning Tip = スキンモデルの描画をCPUでまとめて行う。ほとんどのゲームが高速化します Speed = 速度 Speed Hacks = スピードハック (不具合あり) Stereo display shader = ステレオディスプレイシェーダー diff --git a/assets/lang/jv_ID.ini b/assets/lang/jv_ID.ini index 9256931708..715dd7c218 100644 --- a/assets/lang/jv_ID.ini +++ b/assets/lang/jv_ID.ini @@ -762,8 +762,6 @@ Show FPS Counter = Tampilno penghitung FPS Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Software rendering (jajalan) -Software Skinning = Software skinning -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = Kacepetan Speed Hacks = Speed Hacks (nyebabake glitches) Stereo display shader = Stereo display shader diff --git a/assets/lang/km_KH.ini b/assets/lang/km_KH.ini index 1213c7f243..8bca6bbe02 100644 --- a/assets/lang/km_KH.ini +++ b/assets/lang/km_KH.ini @@ -759,8 +759,6 @@ Show FPS Counter =បង្ហាញការរាប់ FPS Skip GPU Readbacks =រំលង GPU Readbacks Smart 2D texture filtering =តម្រងវាយនភាព 2D ឆ្លាតវៃ Software Rendering =ការបង្ហាញកម្មវិធី (យឺត ត្រឹមត្រូវ) -Software Skinning =កម្មវិធីស្បែក -SoftwareSkinning Tip =រួមបញ្ចូលគ្នានូវគំរូដែលគូរនៅលើស៊ីភីយូ ដែលលឿនជាងមុននៅក្នុងហ្គេមភាគច្រើន Speed =ល្បឿន Speed Hacks =Speed ​​Hacks (អាចបណ្តាលឱ្យមានកំហុសក្នុងការបង្ហាញ!) Stereo display shader =ឧបករណ៍បញ្ចាំងស្តេរ៉េអូ diff --git a/assets/lang/ko_KR.ini b/assets/lang/ko_KR.ini index 5abeae7287..391f580fd7 100644 --- a/assets/lang/ko_KR.ini +++ b/assets/lang/ko_KR.ini @@ -762,8 +762,6 @@ Show FPS Counter = FPS 카운터 표시 Skip GPU Readbacks = GPU 다시 읽기 건너뛰기 Smart 2D texture filtering = 스마트 2D 텍스처 필터링 Software Rendering = 소프트웨어 렌더링 (느림) -Software Skinning = 소프트웨어 스키닝 -SoftwareSkinning Tip = CPU에서 스킨 처리된 모델 그리기를 결합하면, 대부분의 게임에서 더 빠르게 작업할 수 있음 Speed = 속도 Speed Hacks = 속도 핵 (렌더링 오류가 발생할 수 있음!) Stereo display shader = 스트레오 디스플레이 쉐이더 diff --git a/assets/lang/ku_SO.ini b/assets/lang/ku_SO.ini index c9bceb6076..6200d4751c 100644 --- a/assets/lang/ku_SO.ini +++ b/assets/lang/ku_SO.ini @@ -776,8 +776,6 @@ Show FPS Counter = Show FPS counter Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Software rendering (slow, accurate) -Software Skinning = Software skinning -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = Speed Speed Hacks = Speed Hacks (can cause rendering errors!) Stereo display shader = Stereo display shader diff --git a/assets/lang/lo_LA.ini b/assets/lang/lo_LA.ini index 2f13df6b9a..d1b8c5cdbe 100644 --- a/assets/lang/lo_LA.ini +++ b/assets/lang/lo_LA.ini @@ -762,8 +762,6 @@ Show FPS Counter = ສະແດງຄ່າເຟຣມເຣດ ແລະ ຄ Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = ໃຊ້ຊອບແວຣ໌ສະແດງຜົນ (ລຸ້ນທົດລອງ) -Software Skinning = ຊ໋ອບແວຣ໌ສກິນນິງ -SoftwareSkinning Tip = ປະສານໂມເດລພື້ນຜິວໃຫ້ຂຽນຜ່ານ CPU, ເກມສ່ວນໃຫຍ່ໃຊ້ແລ້ວໄວຂຶ້ນ Speed = ຄວາມໄວ Speed Hacks = Speed Hacks (can cause rendering errors!) Stereo display shader = Stereo display shader diff --git a/assets/lang/lt-LT.ini b/assets/lang/lt-LT.ini index 19d8a4195a..ea02a48526 100644 --- a/assets/lang/lt-LT.ini +++ b/assets/lang/lt-LT.ini @@ -762,8 +762,6 @@ Show FPS Counter = Rodyti kadrų per sekundę rodmenis Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Programinės įrangos rodymas(ekspermentalus) -Software Skinning = Programinės įrangos "nulupimas" -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = Greitis Speed Hacks = Speed Hacks (gali sukelti problemų) Stereo display shader = Stereo display shader diff --git a/assets/lang/ms_MY.ini b/assets/lang/ms_MY.ini index eef5480da0..5de6e45f07 100644 --- a/assets/lang/ms_MY.ini +++ b/assets/lang/ms_MY.ini @@ -762,8 +762,6 @@ Show FPS Counter = Papar penghitung FPS Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Render perisian (eksperimen) -Software Skinning = Pembalutan Perisian -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = Laju Speed Hacks = Speed Hacks (mungkin menyebabkan gangguan) Stereo display shader = Stereo display shader diff --git a/assets/lang/nl_NL.ini b/assets/lang/nl_NL.ini index 69272753f8..ac0c1b8bb0 100644 --- a/assets/lang/nl_NL.ini +++ b/assets/lang/nl_NL.ini @@ -762,8 +762,6 @@ Show FPS Counter = FPS-teller weergeven Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Renderen via software (experimenteel) -Software Skinning = Skinning via software -SoftwareSkinning Tip = Vermindert aantal renders en is sneller in games die de geavanceerde skinningtechniek gebruiken, maar voor sommige games trager Speed = Snelheid Speed Hacks = Speed Hacks (kan glitches veroorzaken) Stereo display shader = Stereo display shader diff --git a/assets/lang/nn_NO.ini b/assets/lang/nn_NO.ini index 588cc92fd3..7103b940a2 100644 --- a/assets/lang/nn_NO.ini +++ b/assets/lang/nn_NO.ini @@ -786,8 +786,6 @@ Show FPS Counter = Vis FPS-teljar Skip GPU Readbacks = Hopp over GPU-tilbakelesingar Smart 2D texture filtering = Smart 2D-teksturfiltrering Software Rendering = Programvaregjengiving (treg, nøyaktig) -Software Skinning = Programvarebasert skinning -SoftwareSkinning Tip = Kombiner teikning av skinna modellar på CPU-en, raskare i dei fleste spel Speed = Fart Speed Hacks = Fartstriks (kan forårsake gjengivingsfeil!) Stereo display shader = Shader for stereovising diff --git a/assets/lang/no_NO.ini b/assets/lang/no_NO.ini index e667c30dcd..56dc648f46 100644 --- a/assets/lang/no_NO.ini +++ b/assets/lang/no_NO.ini @@ -786,8 +786,6 @@ Show FPS Counter = Vis FPS-teller Skip GPU Readbacks = Hopp over GPU-tilbakelesinger Smart 2D texture filtering = Smart 2D-teksturfiltrering Software Rendering = Programvare gjengivelse (eksperiment) -Software Skinning = Programvarebasert skinning -SoftwareSkinning Tip = Kombiner tegning av skinnede modeller på CPU-en, raskere i de fleste spill Speed = Hastighet Speed Hacks = Hastighetstriks (kan forårsake gjengivelsesfeil!) Stereo display shader = Shader for stereovisning diff --git a/assets/lang/pl_PL.ini b/assets/lang/pl_PL.ini index 5caeca9d45..79e0df485b 100644 --- a/assets/lang/pl_PL.ini +++ b/assets/lang/pl_PL.ini @@ -766,8 +766,6 @@ Show FPS Counter = Pokaż licznik FPS Skip GPU Readbacks = Pomiń odczyty zwrotne GPU Smart 2D texture filtering = Inteligentne filtrowanie tekstur 2D Software Rendering = Renderowanie programowe (wolne) -Software Skinning = Programowy skinning -SoftwareSkinning Tip = Łączy na CPU wywołania rysujące modele z animacjami, przyspieszenie w większości gier Speed = Prędkość (procentowo) Speed Hacks = Haki Prędkościowe (powodują problemy) Stereo display shader = Stereoskopowe wyświetlanie shaderów diff --git a/assets/lang/pt_BR.ini b/assets/lang/pt_BR.ini index 2bd40a1e4b..9098d028bc 100644 --- a/assets/lang/pt_BR.ini +++ b/assets/lang/pt_BR.ini @@ -786,8 +786,6 @@ Show FPS Counter = Mostrar contador dos FPS Skip GPU Readbacks = Ignorar leituras da GPU Smart 2D texture filtering = Filtragem inteligente das texturas 2D Software Rendering = Renderização por software (lento, preciso) -Software Skinning = Esfolamento por software -SoftwareSkinning Tip = Combina os desenhos dos modelos de esfolamento na CPU, mais rápido na maioria dos jogos Speed = Velocidade Speed Hacks = Hacks de Velocidade (podem causar erros de renderização!) Stereo display shader = Shader de exbição do estéreo diff --git a/assets/lang/pt_PT.ini b/assets/lang/pt_PT.ini index d69df1da5a..3a03a74f55 100644 --- a/assets/lang/pt_PT.ini +++ b/assets/lang/pt_PT.ini @@ -787,8 +787,6 @@ Show FPS Counter = Mostrar contador de FPS Skip GPU Readbacks = Saltar readbacks da GPU Smart 2D texture filtering = Filtração inteligente de texturas 2D Software Rendering = Renderização por software (lento, mais preciso) -Software Skinning = Skinning por software -SoftwareSkinning Tip = Combina os desenhos dos modelos de skinning na CPU, mais rápido na maioria dos jogos Speed = Velocidade Speed Hacks = Hacks de velocidade (podem causar problemas visuais no jogo) Stereo display shader = Shader estéreo da tela diff --git a/assets/lang/ro_RO.ini b/assets/lang/ro_RO.ini index 9938d8e675..1960b2c857 100644 --- a/assets/lang/ro_RO.ini +++ b/assets/lang/ro_RO.ini @@ -763,8 +763,6 @@ Show FPS Counter = Arată FPS Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Afișare cu sofware (experimental) -Software Skinning = Skinning cu software -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = Viteză Speed Hacks = Speed Hacks (pot cauza stricăciuni) Stereo display shader = Stereo display shader diff --git a/assets/lang/ru_RU.ini b/assets/lang/ru_RU.ini index e0a15d6f10..860fe9f5bf 100644 --- a/assets/lang/ru_RU.ini +++ b/assets/lang/ru_RU.ini @@ -762,8 +762,6 @@ Show FPS Counter = Показывать счётчик FPS Skip GPU Readbacks = Пропускать чтение данных ГП Smart 2D texture filtering = Умная фильтрация 2D-текстур Software Rendering = Программный рендеринг (медленно) -Software Skinning = Программная заливка -SoftwareSkinning Tip = Объединяет вызовы отрисовки моделей с заливкой на ЦП, быстрее во многих играх Speed = Скорость Speed Hacks = Speed Hacks (могут вызывать глюки) Stereo display shader = Шейдер стереодисплея diff --git a/assets/lang/sv_SE.ini b/assets/lang/sv_SE.ini index 8301a2070e..bdf5e8ffcb 100644 --- a/assets/lang/sv_SE.ini +++ b/assets/lang/sv_SE.ini @@ -763,8 +763,6 @@ Show FPS Counter = Visa FPS-räknare Skip GPU Readbacks = Skippa dataläsningar från GPU:n Smart 2D texture filtering = Smart 2D texturfiltrering Software Rendering = Mjukvarurendering (långsam men ofta mer korrekt) -Software Skinning = Software Skinning -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = Hastighet Speed Hacks = Speed-hacks (kan orsaka renderingsproblem) Stereo display shader = Stereo-displayshader diff --git a/assets/lang/tg_PH.ini b/assets/lang/tg_PH.ini index bca004a60e..ef6d150231 100644 --- a/assets/lang/tg_PH.ini +++ b/assets/lang/tg_PH.ini @@ -763,8 +763,6 @@ Show FPS Counter = Ipakita ang FPS Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Software Rendering (Expiremental) -Software Skinning = Software skinning -SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games Speed = Bilis Speed Hacks = Speed Hacks (maaring magdulot ng pagloloko sa laro) Stereo display shader = Stereo display shader diff --git a/assets/lang/th_TH.ini b/assets/lang/th_TH.ini index c21345e249..5d00f6f8ff 100644 --- a/assets/lang/th_TH.ini +++ b/assets/lang/th_TH.ini @@ -779,8 +779,6 @@ Skip Buffer Effects = ข้ามการใช้บัฟเฟอร์เ Skip GPU Readbacks = ข้ามการอ่านข้อมูลส่งกลับไปยัง GPU Smart 2D texture filtering = ตัวกรองพื้นผิวแบบ 2D อย่างชาญฉลาด Software Rendering = ใช้ซอฟต์แวร์ในการแสดงผล (ช้า แต่แม่นยำ) -Software Skinning = ซอฟต์แวร์ สกินนิ่ง -SoftwareSkinning Tip = ผสานโมเดลพื้นผิวให้เขียนผ่านซีพียู ซึ่งเกมส่วนใหญ่ปรับใช้แล้วไวขึ้น Speed = ความเร็ว Speed Hacks = แฮ็คความเร็ว (อาจแสดงผลผิดพลาด!) Stereo display shader = เฉดแสงสีของภาพแบบสามมิติ diff --git a/assets/lang/tr_TR.ini b/assets/lang/tr_TR.ini index 0278ed2244..35db70b735 100644 --- a/assets/lang/tr_TR.ini +++ b/assets/lang/tr_TR.ini @@ -764,8 +764,6 @@ Show FPS Counter = FPS Sayacını Göster Skip GPU Readbacks = GPU Okumalarını Atla Smart 2D texture filtering = Akıllı 2D Doku Filtresi Software Rendering = Yazılımsal İşleme -Software Skinning = Yazılımsal Kaplama -SoftwareSkinning Tip = Kaplamalı model çizimlerini CPU ile birleştirin, çoğu oyunu hızlandırır Speed = Hız Speed Hacks = Hızlandırma Geliştirmeleri Stereo display shader = Stereo Ekran Gölgelendirici diff --git a/assets/lang/uk_UA.ini b/assets/lang/uk_UA.ini index 988a0512cd..df577a45cd 100644 --- a/assets/lang/uk_UA.ini +++ b/assets/lang/uk_UA.ini @@ -762,8 +762,6 @@ Show FPS Counter = Показати лічильник FPS Skip GPU Readbacks = Пропустити зворотні зчитування GPU Smart 2D texture filtering = Розумна 2D фільтрація текстур Software Rendering = Програмний рендеринг (експериментально) -Software Skinning = Програмна заливка -SoftwareSkinning Tip = Комбінована модель розібраної моделі яка притягується до процесора, швидше в більшості ігор Speed = Швидкість Speed Hacks = Швидкі хаки (можуть викликати глюки) Stereo display shader = Шейдер стереодисплея diff --git a/assets/lang/vi_VN.ini b/assets/lang/vi_VN.ini index c6187cbdaa..6f719116df 100644 --- a/assets/lang/vi_VN.ini +++ b/assets/lang/vi_VN.ini @@ -762,8 +762,6 @@ Show FPS Counter = Hiện thông số FPS Skip GPU Readbacks = Skip GPU Readbacks Smart 2D texture filtering = Smart 2D texture filtering Software Rendering = Dựng hình bằng phần mềm -Software Skinning = phủ lớp bằng phần mềm -SoftwareSkinning Tip = Mô hình kết hợp vẽ trên CPU, nhanh hơn trong hầu hết các trò chơi Speed = Tốc độ Speed Hacks = Tốc độ Hacks (sẽ bị lỗi) Stereo display shader = Stereo display shader diff --git a/assets/lang/zh_CN.ini b/assets/lang/zh_CN.ini index 80566af8f8..86780c7f79 100644 --- a/assets/lang/zh_CN.ini +++ b/assets/lang/zh_CN.ini @@ -762,8 +762,6 @@ Show FPS Counter = 显示帧率 Skip GPU Readbacks = 跳过GPU块传输 Smart 2D texture filtering = 自动保留2D纹理像素风格 Software Rendering = 软件渲染 (慢) -Software Skinning = 软件蒙皮 -SoftwareSkinning Tip = 使用CPU处理模型绘制,此选项对多数游戏是优化。对一些游戏可能会造成减速。 Speed = 运行速度 Speed Hacks = 提速修改 (影响渲染精度) Stereo display shader = 立体显示模式 diff --git a/assets/lang/zh_TW.ini b/assets/lang/zh_TW.ini index 6aea3059e5..1c63657cb8 100644 --- a/assets/lang/zh_TW.ini +++ b/assets/lang/zh_TW.ini @@ -762,8 +762,6 @@ Show FPS Counter = 顯示 FPS 計數器 Skip GPU Readbacks = 跳過 GPU 讀回 Smart 2D texture filtering = 智慧 2D 紋理過濾 Software Rendering = 軟體轉譯 (慢) -Software Skinning = 軟體除皮 -SoftwareSkinning Tip = 結合除皮模組在 CPU 上繪製,在多數遊戲上更快 Speed = 速度 Speed Hacks = 速度駭客 (可能會造成轉譯錯誤!) Stereo display shader = 立體顯示著色器 diff --git a/headless/Headless.cpp b/headless/Headless.cpp index 293878d511..59af8430b6 100644 --- a/headless/Headless.cpp +++ b/headless/Headless.cpp @@ -541,7 +541,6 @@ int main(int argc, const char* argv[]) g_Config.iLockParentalLevel = 9; g_Config.iInternalResolution = 1; g_Config.bEnableLogging = (fullLog || outputDebugStringLog); - g_Config.bSoftwareSkinning = true; g_Config.bVertexDecoderJit = true; g_Config.bSoftwareRendering = coreParameter.gpuCore == GPUCORE_SOFTWARE; g_Config.bSoftwareRenderingJit = true; diff --git a/unittest/TestShaderGenerators.cpp b/unittest/TestShaderGenerators.cpp index bd3e9372dc..8fbc9d2b9d 100644 --- a/unittest/TestShaderGenerators.cpp +++ b/unittest/TestShaderGenerators.cpp @@ -374,15 +374,10 @@ bool TestVertexShaders() { // The generated bits need some adjustment: - // We don't use these bits in the HLSL shader generator. - id.SetBits(VS_BIT_WEIGHT_FMTSCALE, 2, 0); // If mode is through, we won't do hardware transform. if (id.Bit(VS_BIT_IS_THROUGH)) { id.SetBit(VS_BIT_USE_HW_TRANSFORM, 0); } - if (!id.Bit(VS_BIT_USE_HW_TRANSFORM)) { - id.SetBit(VS_BIT_ENABLE_BONES, 0); - } if (id.Bit(VS_BIT_VERTEX_RANGE_CULLING)) { continue; } diff --git a/unittest/TestVertexJit.cpp b/unittest/TestVertexJit.cpp index 119c6394bb..264567b821 100644 --- a/unittest/TestVertexJit.cpp +++ b/unittest/TestVertexJit.cpp @@ -547,7 +547,7 @@ static bool TestVertex8Skin() { gstate.boneMatrix[20] = 5.0f; int vtype = GE_VTYPE_POS_8BIT | GE_VTYPE_NRM_8BIT | GE_VTYPE_WEIGHT_8BIT | (1 << GE_VTYPE_WEIGHTCOUNT_SHIFT); - u32 vertTypeID = GetVertTypeID(vtype, 0, true); // enable skinning in decode + u32 vertTypeID = GetVertTypeID(vtype, 0); dec.Add8(128 + 64, 128 - 64); dec.Add8(127, 0, 128); @@ -579,7 +579,7 @@ static bool TestVertex16Skin() { gstate.boneMatrix[20] = 5.0f; int vtype = GE_VTYPE_POS_16BIT | GE_VTYPE_NRM_16BIT | GE_VTYPE_WEIGHT_16BIT | (1 << GE_VTYPE_WEIGHTCOUNT_SHIFT); - u32 vertTypeID = GetVertTypeID(vtype, 0, true); // enable skinning in decode + u32 vertTypeID = GetVertTypeID(vtype, 0); dec.Add16(32768 + 16384, 32768 - 16384); dec.Add16(32767, 0, 32768); @@ -611,7 +611,7 @@ static bool TestVertexFloatSkin() { gstate.boneMatrix[20] = 5.0f; int vtype = GE_VTYPE_POS_FLOAT | GE_VTYPE_NRM_FLOAT | GE_VTYPE_WEIGHT_FLOAT | (1 << GE_VTYPE_WEIGHTCOUNT_SHIFT); - u32 vertTypeID = GetVertTypeID(vtype, 0, true); // enable skinning in decode + u32 vertTypeID = GetVertTypeID(vtype, 0); dec.AddFloat(1.5f, 0.5f); dec.AddFloat(1.0f, 0, -1.0f);