diff --git a/Common/GPU/D3D11/thin3d_d3d11.cpp b/Common/GPU/D3D11/thin3d_d3d11.cpp index c2fef37323..515e98c1db 100644 --- a/Common/GPU/D3D11/thin3d_d3d11.cpp +++ b/Common/GPU/D3D11/thin3d_d3d11.cpp @@ -248,7 +248,6 @@ private: ComPtr curInputLayout_; ComPtr curVS_; ComPtr curPS_; - ComPtr curGS_; D3D11_PRIMITIVE_TOPOLOGY curTopology_ = D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED; ComPtr nextVertexBuffer_; @@ -847,7 +846,6 @@ public: ComPtr vs; ComPtr ps; - ComPtr gs; }; class D3D11Pipeline : public Pipeline { @@ -868,7 +866,6 @@ public: ComPtr vs; ComPtr ps; - ComPtr gs; D3D11_PRIMITIVE_TOPOLOGY topology = D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED; std::vector shaderModules; @@ -1088,11 +1085,9 @@ ShaderModule *D3D11DrawContext::CreateShaderModule(ShaderStage stage, ShaderLang const char *vertexModel = "vs_4_0"; const char *fragmentModel = "ps_4_0"; - const char *geometryModel = "gs_4_0"; if (featureLevel_ <= D3D_FEATURE_LEVEL_9_3) { vertexModel = "vs_4_0_level_9_1"; fragmentModel = "ps_4_0_level_9_1"; - geometryModel = nullptr; } std::string compiled; @@ -1101,11 +1096,6 @@ ShaderModule *D3D11DrawContext::CreateShaderModule(ShaderStage stage, ShaderLang switch (stage) { case ShaderStage::Fragment: target = fragmentModel; break; case ShaderStage::Vertex: target = vertexModel; break; - case ShaderStage::Geometry: - if (!geometryModel) - return nullptr; - target = geometryModel; - break; case ShaderStage::Compute: default: Crash(); @@ -1146,9 +1136,6 @@ ShaderModule *D3D11DrawContext::CreateShaderModule(ShaderStage stage, ShaderLang case ShaderStage::Fragment: result = device_->CreatePixelShader(data, dataSize, nullptr, &module->ps); break; - case ShaderStage::Geometry: - result = device_->CreateGeometryShader(data, dataSize, nullptr, &module->gs); - break; default: ERROR_LOG(Log::G3D, "Unsupported shader stage"); result = S_FALSE; @@ -1201,9 +1188,6 @@ Pipeline *D3D11DrawContext::CreateGraphicsPipeline(const PipelineDesc &desc, con case ShaderStage::Fragment: dPipeline->ps = module->ps; break; - case ShaderStage::Geometry: - dPipeline->gs = module->gs; - break; case ShaderStage::Compute: break; } @@ -1247,7 +1231,6 @@ void D3D11DrawContext::Invalidate(InvalidationFlags flags) { curRaster_ = nullptr; curPS_.Reset(); curVS_.Reset(); - curGS_.Reset(); curInputLayout_.Reset(); curTopology_ = D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED; curPipeline_= nullptr; @@ -1290,10 +1273,6 @@ void D3D11DrawContext::ApplyCurrentState() { context_->PSSetShader(curPipeline_->ps.Get(), nullptr, 0); curPS_ = curPipeline_->ps; } - if (curGS_ != curPipeline_->gs) { - context_->GSSetShader(curPipeline_->gs.Get(), nullptr, 0); - curGS_ = curPipeline_->gs; - } if (curTopology_ != curPipeline_->topology) { context_->IASetPrimitiveTopology(curPipeline_->topology); curTopology_ = curPipeline_->topology; @@ -1648,7 +1627,6 @@ void D3D11DrawContext::BeginFrame(DebugFlags debugFlags) { context_->IASetInputLayout(curInputLayout_.Get()); context_->VSSetShader(curVS_.Get(), nullptr, 0); context_->PSSetShader(curPS_.Get(), nullptr, 0); - context_->GSSetShader(curGS_.Get(), nullptr, 0); if (curTopology_ != D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED) { context_->IASetPrimitiveTopology(curTopology_); } diff --git a/Common/GPU/OpenGL/thin3d_gl.cpp b/Common/GPU/OpenGL/thin3d_gl.cpp index 1c27c6e2b8..2b9c3ba037 100644 --- a/Common/GPU/OpenGL/thin3d_gl.cpp +++ b/Common/GPU/OpenGL/thin3d_gl.cpp @@ -201,7 +201,6 @@ GLuint ShaderStageToOpenGL(ShaderStage stage) { case ShaderStage::Vertex: return GL_VERTEX_SHADER; #ifndef USING_GLES2 case ShaderStage::Compute: return GL_COMPUTE_SHADER; - case ShaderStage::Geometry: return GL_GEOMETRY_SHADER; #endif case ShaderStage::Fragment: default: diff --git a/Common/GPU/Shader.cpp b/Common/GPU/Shader.cpp index 19becbd320..00e6a3df48 100644 --- a/Common/GPU/Shader.cpp +++ b/Common/GPU/Shader.cpp @@ -20,7 +20,6 @@ const char *ShaderStageAsString(ShaderStage stage) { switch (stage) { case ShaderStage::Fragment: return "Fragment"; case ShaderStage::Vertex: return "Vertex"; - case ShaderStage::Geometry: return "Geometry"; case ShaderStage::Compute: return "Compute"; default: return "(unknown)"; } diff --git a/Common/GPU/Shader.h b/Common/GPU/Shader.h index 45e54cab54..ae06e9248e 100644 --- a/Common/GPU/Shader.h +++ b/Common/GPU/Shader.h @@ -29,7 +29,6 @@ const char *ShaderLanguageAsString(ShaderLanguage lang); enum class ShaderStage { Vertex, Fragment, - Geometry, Compute, }; diff --git a/Common/GPU/ShaderTranslation.cpp b/Common/GPU/ShaderTranslation.cpp index 1c1346bc81..c9a2b0029b 100644 --- a/Common/GPU/ShaderTranslation.cpp +++ b/Common/GPU/ShaderTranslation.cpp @@ -55,7 +55,6 @@ static EShLanguage GetShLanguageFromStage(const ShaderStage stage) { switch (stage) { case ShaderStage::Vertex: return EShLangVertex; - case ShaderStage::Geometry: return EShLangGeometry; case ShaderStage::Fragment: return EShLangFragment; case ShaderStage::Compute: return EShLangCompute; default: return EShLangVertex; diff --git a/Common/GPU/ShaderWriter.cpp b/Common/GPU/ShaderWriter.cpp index 25f7537ebd..2445dbea18 100644 --- a/Common/GPU/ShaderWriter.cpp +++ b/Common/GPU/ShaderWriter.cpp @@ -52,32 +52,6 @@ static const char * const vulkan_glsl_preamble_vs = "precision highp float;\n" "\n"; -static const char * const hlsl_preamble_gs = -"#define vec2 float2\n" -"#define vec3 float3\n" -"#define vec4 float4\n" -"#define ivec2 int2\n" -"#define ivec4 int4\n" -"#define mat2 float2x2\n" -"#define mat4 float4x4\n" -"#define mat3x4 float4x3\n" // note how the conventions are backwards -"#define splat3(x) vec3(x, x, x)\n" -"#define lowp\n" -"#define mediump\n" -"#define highp\n" -"#define inversesqrt rsqrt\n" -"#define floatBitsToUint asuint\n" -"#define uintBitsToFloat asfloat\n" -"\n"; - -static const char * const vulkan_glsl_preamble_gs = -"#extension GL_ARB_separate_shader_objects : enable\n" -"#extension GL_ARB_shading_language_420pack : enable\n" -"#define mul(x, y) ((x) * (y))\n" -"#define splat3(x) vec3(x)\n" -"precision highp float;\n" -"\n"; - static const char * const hlsl_preamble_vs = "#define vec2 float2\n" "#define vec3 float3\n" @@ -138,9 +112,6 @@ void ShaderWriter::Preamble(Slice extensions) { case ShaderStage::Fragment: W(vulkan_glsl_preamble_fs); break; - case ShaderStage::Geometry: - W(vulkan_glsl_preamble_gs); - break; default: break; } @@ -154,9 +125,6 @@ void ShaderWriter::Preamble(Slice extensions) { W(hlsl_preamble_fs); W(hlsl_d3d11_preamble_fs); break; - case ShaderStage::Geometry: - W(hlsl_preamble_gs); - break; default: break; } @@ -187,11 +155,6 @@ void ShaderWriter::Preamble(Slice extensions) { } C("#define gl_VertexIndex gl_VertexID\n"); break; - case ShaderStage::Geometry: - if (lang_.gles) { - C("precision highp float;\n"); - } - break; default: break; } @@ -340,43 +303,6 @@ void ShaderWriter::BeginFSMain(Slice uniforms, Slice var } } -void ShaderWriter::BeginGSMain(Slice varyings, Slice outVaryings) { - _assert_(this->stage_ == ShaderStage::Geometry); - switch (lang_.shaderLanguage) { - case HLSL_D3D11: - // Untested, but should work. - C("\nstruct GS_OUTPUT {\n"); - for (auto &varying : outVaryings) { - F(" %s %s : %s;\n", varying.type, varying.name, semanticNames[varying.semantic]); - } - F(" vec4 pos : %s;\n", lang_.shaderLanguage == HLSL_D3D11 ? "SV_Position" : "POSITION"); - C("};\n"); - C("#define EmitVertex() emit.Append(gsout)\n"); - - C("void main("); - for (auto &varying : varyings) { - F(" in %s %s : %s, ", varying.type, varying.name, semanticNames[varying.semantic]); - } - C("inout TriangleStream emit) {\n"); - C(" GS_OUTPUT gsout;\n"); - break; - case GLSL_VULKAN: - for (auto &varying : varyings) { - F("layout(location = %d) %s in %s %s[]; // %s\n", varying.index, varying.precision ? varying.precision : "", varying.type, varying.name, semanticNames[varying.semantic]); - } - for (auto &varying : outVaryings) { - F("layout(location = %d) %s out %s %s; // %s\n", varying.index, varying.precision ? varying.precision : "", varying.type, varying.name, semanticNames[varying.semantic]); - } - C("\nvoid main() {\n"); - break; - case GLSL_3xx: - C("\nvoid main() {\n"); - break; - default: - break; - } -} - void ShaderWriter::EndVSMain(Slice varyings) { _assert_(this->stage_ == ShaderStage::Vertex); switch (lang_.shaderLanguage) { @@ -419,11 +345,6 @@ void ShaderWriter::EndFSMain(const char *vec4_color_variable) { C("}\n"); } -void ShaderWriter::EndGSMain() { - _assert_(this->stage_ == ShaderStage::Geometry); - C("}\n"); -} - void ShaderWriter::HighPrecisionFloat() { if ((ShaderLanguageIsOpenGL(lang_.shaderLanguage) && lang_.gles) || lang_.shaderLanguage == GLSL_VULKAN) { C("precision highp float;\n"); diff --git a/Common/GPU/ShaderWriter.h b/Common/GPU/ShaderWriter.h index 7ebe801403..511b9cd9ef 100644 --- a/Common/GPU/ShaderWriter.h +++ b/Common/GPU/ShaderWriter.h @@ -97,12 +97,10 @@ public: // Simple shaders with no special tricks. void BeginVSMain(Slice inputs, Slice uniforms, Slice varyings); void BeginFSMain(Slice uniforms, Slice varyings); - void BeginGSMain(Slice varyings, Slice outVaryings); // For simple shaders that output a single color, we can deal with this generically. void EndVSMain(Slice varyings); void EndFSMain(const char *vec4_color_variable); - void EndGSMain(); const ShaderLanguageDesc &Lang() const { return lang_; diff --git a/Common/GPU/Vulkan/VulkanContext.cpp b/Common/GPU/Vulkan/VulkanContext.cpp index 2b1e2a6a27..4b5752ee23 100644 --- a/Common/GPU/Vulkan/VulkanContext.cpp +++ b/Common/GPU/Vulkan/VulkanContext.cpp @@ -822,7 +822,6 @@ VkResult VulkanContext::CreateDevice(int physical_device, const std::vectorCreateComputeShader(byteCode.data(), byteCode.size(), nullptr, ppComputeShader); } - -HRESULT CreateGeometryShaderD3D11(ID3D11Device *device, const char *code, size_t codeSize, D3D_FEATURE_LEVEL featureLevel, UINT flags, ID3D11GeometryShader **ppGeometryShader) { - if (ppGeometryShader) - *ppGeometryShader = nullptr; - if (featureLevel <= D3D_FEATURE_LEVEL_9_3) - return S_FALSE; - std::string errorMessage; - std::vector byteCode = CompileShaderToBytecodeD3D11(code, codeSize, "gs_5_0", flags, &errorMessage); - if (byteCode.empty()) { - if (!errorMessage.empty()) { - ERROR_LOG(Log::G3D, "%s", errorMessage.c_str()); - } - return S_FALSE; - } - - return device->CreateGeometryShader(byteCode.data(), byteCode.size(), nullptr, ppGeometryShader); -} diff --git a/GPU/D3D11/D3D11Util.h b/GPU/D3D11/D3D11Util.h index 04f0cc20d2..cae9399142 100644 --- a/GPU/D3D11/D3D11Util.h +++ b/GPU/D3D11/D3D11Util.h @@ -78,7 +78,6 @@ std::vector CompileShaderToBytecodeD3D11(const char *code, size_t codeS HRESULT CreateVertexShaderD3D11(ID3D11Device *device, const char *code, size_t codeSize, std::vector *byteCodeOut, D3D_FEATURE_LEVEL featureLevel, UINT flags, ID3D11VertexShader **); HRESULT CreatePixelShaderD3D11(ID3D11Device *device, const char *code, size_t codeSize, D3D_FEATURE_LEVEL featureLevel, UINT flags, ID3D11PixelShader **); HRESULT CreateComputeShaderD3D11(ID3D11Device *device, const char *code, size_t codeSize, D3D_FEATURE_LEVEL featureLevel, UINT flags, ID3D11ComputeShader **); -HRESULT CreateGeometryShaderD3D11(ID3D11Device *device, const char *code, size_t codeSize, D3D_FEATURE_LEVEL featureLevel, UINT flags, ID3D11GeometryShader **); #define ASSERT_SUCCESS(x) \ if (!SUCCEEDED((x))) \ diff --git a/GPU/Vulkan/PipelineManagerVulkan.h b/GPU/Vulkan/PipelineManagerVulkan.h index 6f908a1c49..6d6c57095f 100644 --- a/GPU/Vulkan/PipelineManagerVulkan.h +++ b/GPU/Vulkan/PipelineManagerVulkan.h @@ -37,7 +37,6 @@ class VulkanRenderManager; class VulkanContext; class VulkanVertexShader; class VulkanFragmentShader; -class VulkanGeometryShader; class ShaderManagerVulkan; class DrawEngineCommon; @@ -73,7 +72,6 @@ struct VulkanPipeline { bool UsesBlendConstant() const { return (pipelineFlags & PipelineFlags::USES_BLEND_CONSTANT) != 0; } bool UsesDepthStencil() const { return (pipelineFlags & PipelineFlags::USES_DEPTH_STENCIL) != 0; } - bool UsesGeometryShader() const { return (pipelineFlags & PipelineFlags::USES_GEOMETRY_SHADER) != 0; } bool UsesDiscard() const { return (pipelineFlags & PipelineFlags::USES_DISCARD) != 0; } bool UsesFlatShading() const { return (pipelineFlags & PipelineFlags::USES_FLAT_SHADING) != 0; } diff --git a/GPU/Vulkan/ShaderManagerVulkan.cpp b/GPU/Vulkan/ShaderManagerVulkan.cpp index aa6d5f4d93..60a7f17b10 100644 --- a/GPU/Vulkan/ShaderManagerVulkan.cpp +++ b/GPU/Vulkan/ShaderManagerVulkan.cpp @@ -73,7 +73,6 @@ static Promise *CompileShaderModuleAsync(VulkanContext *vulkan, switch (stage) { case VK_SHADER_STAGE_VERTEX_BIT: createTag = "game_vertex"; break; case VK_SHADER_STAGE_FRAGMENT_BIT: createTag = "game_fragment"; break; - case VK_SHADER_STAGE_GEOMETRY_BIT: createTag = "game_geometry"; break; case VK_SHADER_STAGE_COMPUTE_BIT: createTag = "game_compute"; break; default: break; } @@ -378,7 +377,7 @@ struct VulkanCacheHeader { uint32_t detectFlags; int numVertexShaders; int numFragmentShaders; - int numGeometryShaders; + int unused_numGeometryShaders; // Always 0, kept so the file format stays compatible. }; bool ShaderManagerVulkan::LoadCacheFlags(FILE *f, DrawEngineVulkan *drawEngine) { @@ -464,7 +463,7 @@ bool ShaderManagerVulkan::LoadCache(FILE *f) { } } - NOTICE_LOG(Log::G3D, "ShaderCache: Loaded %d vertex, %d fragment shaders and %d geometry shaders (failed %d)", header.numVertexShaders, header.numFragmentShaders, header.numGeometryShaders, failCount); + NOTICE_LOG(Log::G3D, "ShaderCache: Loaded %d vertex and %d fragment shaders (failed %d)", header.numVertexShaders, header.numFragmentShaders, failCount); return true; } @@ -476,7 +475,7 @@ void ShaderManagerVulkan::SaveCache(FILE *f, DrawEngineVulkan *drawEngine) { header.detectFlags = 0; header.numVertexShaders = (int)vsCache_.size(); header.numFragmentShaders = (int)fsCache_.size(); - header.numGeometryShaders = 0; + header.unused_numGeometryShaders = 0; bool writeFailed = fwrite(&header, sizeof(header), 1, f) != 1; vsCache_.Iterate([&](const VShaderID &id, VulkanVertexShader *vs) { writeFailed = writeFailed || fwrite(&id, sizeof(id), 1, f) != 1; diff --git a/unittest/TestShaderGenerators.cpp b/unittest/TestShaderGenerators.cpp index 8fbc9d2b9d..2137fbdabf 100644 --- a/unittest/TestShaderGenerators.cpp +++ b/unittest/TestShaderGenerators.cpp @@ -94,7 +94,6 @@ bool GenerateVShader(VShaderID id, char *buffer, ShaderLanguage lang, Draw::Bugs static VkShaderStageFlagBits StageToVulkan(ShaderStage stage) { switch (stage) { case ShaderStage::Vertex: return VK_SHADER_STAGE_VERTEX_BIT; - case ShaderStage::Geometry: return VK_SHADER_STAGE_GEOMETRY_BIT; case ShaderStage::Compute: return VK_SHADER_STAGE_COMPUTE_BIT; case ShaderStage::Fragment: return VK_SHADER_STAGE_FRAGMENT_BIT; } @@ -111,7 +110,6 @@ bool TestCompileShader(const char *buffer, ShaderLanguage lang, ShaderStage stag switch (stage) { case ShaderStage::Vertex: programType = "vs_4_0"; break; case ShaderStage::Fragment: programType = "ps_4_0"; break; - case ShaderStage::Geometry: programType = "gs_4_0"; break; default: *errorMessage = "Unknown shader stage"; return false;