diff --git a/GPU/Common/ShaderCommon.cpp b/GPU/Common/ShaderCommon.cpp index 04c4a12d4d..5aca2bc8fd 100644 --- a/GPU/Common/ShaderCommon.cpp +++ b/GPU/Common/ShaderCommon.cpp @@ -120,3 +120,23 @@ void GLSLShaderCompat::SetupForVulkan() { forceMatrix4x4 = false; coefsFromBuffers = true; } + + +void GLSLShaderCompat::SetupForD3D11() { + fragColor0 = "fragColor0"; + fragColor1 = "fragColor1"; + varying_fs = "in"; + varying_vs = "out"; + attribute = "in"; + bitwiseOps = true; + framebufferFetchExtension = nullptr; + gles = false; + glslES30 = true; + glslVersionNumber = 450; + lastFragData = nullptr; + texture = "texture"; + texelFetch = "texelFetch"; + d3d11 = true; + forceMatrix4x4 = false; + coefsFromBuffers = true; +} diff --git a/GPU/Common/ShaderCommon.h b/GPU/Common/ShaderCommon.h index fd2703809f..230424b0e8 100644 --- a/GPU/Common/ShaderCommon.h +++ b/GPU/Common/ShaderCommon.h @@ -30,6 +30,8 @@ enum ShaderLanguage { GLSL_VULKAN, HLSL_DX9, HLSL_D3D11, + + HLSL_D3D11_TEST, // temporary }; enum DebugShaderType { @@ -155,8 +157,10 @@ struct GLSLShaderCompat { bool bitwiseOps; bool forceMatrix4x4; bool coefsFromBuffers; + bool d3d11; void SetupForVulkan(); + void SetupForD3D11(); }; // PSP vertex format. diff --git a/unittest/TestShaderGenerators.cpp b/unittest/TestShaderGenerators.cpp index 29e9b98c87..97ca5b0618 100644 --- a/unittest/TestShaderGenerators.cpp +++ b/unittest/TestShaderGenerators.cpp @@ -40,6 +40,13 @@ bool GenerateFShader(FShaderID id, char *buffer, ShaderLanguage lang, std::strin case ShaderLanguage::GLSL_300: // TODO: Need a device - except that maybe glslang could be used to verify these .... return false; + case ShaderLanguage::HLSL_D3D11_TEST: + { + GLSLShaderCompat compat{}; + compat.SetupForVulkan(); + uint64_t uniformMask; + return GenerateFragmentShaderGLSL(id, buffer, compat, &uniformMask, errorString); + } default: return false; } @@ -62,6 +69,14 @@ bool GenerateVShader(VShaderID id, char *buffer, ShaderLanguage lang, std::strin uint64_t uniformMask; return GenerateVertexShaderGLSL(id, buffer, compat, &attrMask, &uniformMask, errorString); } + case ShaderLanguage::HLSL_D3D11_TEST: + { + GLSLShaderCompat compat{}; + compat.SetupForD3D11(); + uint32_t attrMask; + uint64_t uniformMask; + return GenerateVertexShaderGLSL(id, buffer, compat, &attrMask, &uniformMask, errorString); + } default: return false; } @@ -70,6 +85,7 @@ bool GenerateVShader(VShaderID id, char *buffer, ShaderLanguage lang, std::strin bool TestCompileShader(const char *buffer, ShaderLanguage lang, bool vertex) { switch (lang) { case ShaderLanguage::HLSL_D3D11: + case ShaderLanguage::HLSL_D3D11_TEST: { auto output = CompileShaderToBytecodeD3D11(buffer, strlen(buffer), vertex ? "vs_4_0" : "ps_4_0", 0); return !output.empty(); @@ -128,8 +144,9 @@ bool TestShaderGenerators() { LoadD3DCompilerDynamic(); ShaderLanguage languages[] = { - ShaderLanguage::GLSL_VULKAN, + ShaderLanguage::HLSL_D3D11_TEST, ShaderLanguage::HLSL_D3D11, + ShaderLanguage::GLSL_VULKAN, ShaderLanguage::GLSL_140, ShaderLanguage::GLSL_300, ShaderLanguage::HLSL_DX9,