mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-07-11 01:25:07 +02:00
Remove old vestiges of geometry shader support
This commit is contained in:
@@ -52,9 +52,8 @@ bool VKRGraphicsPipeline::Create(VulkanContext *vulkan, VkRenderPass compatibleR
|
||||
// Fill in the last part of the desc since now it's time to block.
|
||||
VkShaderModule vs = desc->vertexShader->BlockUntilReady();
|
||||
VkShaderModule fs = desc->fragmentShader->BlockUntilReady();
|
||||
VkShaderModule gs = desc->geometryShader ? desc->geometryShader->BlockUntilReady() : VK_NULL_HANDLE;
|
||||
|
||||
if (!vs || !fs || (!gs && desc->geometryShader)) {
|
||||
if (!vs || !fs) {
|
||||
ERROR_LOG(Log::G3D, "Failed creating graphics pipeline - missing shader modules");
|
||||
pipeline[(size_t)rpType]->Post(VK_NULL_HANDLE);
|
||||
return false;
|
||||
@@ -66,8 +65,8 @@ bool VKRGraphicsPipeline::Create(VulkanContext *vulkan, VkRenderPass compatibleR
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t stageCount = 2;
|
||||
VkPipelineShaderStageCreateInfo ss[3]{};
|
||||
constexpr uint32_t stageCount = 2;
|
||||
VkPipelineShaderStageCreateInfo ss[stageCount]{};
|
||||
ss[0].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
|
||||
ss[0].stage = VK_SHADER_STAGE_VERTEX_BIT;
|
||||
ss[0].pSpecializationInfo = nullptr;
|
||||
@@ -78,14 +77,6 @@ bool VKRGraphicsPipeline::Create(VulkanContext *vulkan, VkRenderPass compatibleR
|
||||
ss[1].pSpecializationInfo = nullptr;
|
||||
ss[1].module = fs;
|
||||
ss[1].pName = "main";
|
||||
if (gs) {
|
||||
stageCount++;
|
||||
ss[2].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
|
||||
ss[2].stage = VK_SHADER_STAGE_GEOMETRY_BIT;
|
||||
ss[2].pSpecializationInfo = nullptr;
|
||||
ss[2].module = gs;
|
||||
ss[2].pName = "main";
|
||||
}
|
||||
|
||||
VkGraphicsPipelineCreateInfo pipe{ VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO };
|
||||
pipe.pStages = ss;
|
||||
@@ -242,9 +233,6 @@ u32 VKRGraphicsPipeline::GetVariantsBitmask() const {
|
||||
void VKRGraphicsPipeline::LogCreationFailure() const {
|
||||
ERROR_LOG(Log::G3D, "vs: %s\n[END VS]", desc->vertexShaderSource.c_str());
|
||||
ERROR_LOG(Log::G3D, "fs: %s\n[END FS]", desc->fragmentShaderSource.c_str());
|
||||
if (desc->geometryShader) {
|
||||
ERROR_LOG(Log::G3D, "gs: %s\n[END GS]", desc->geometryShaderSource.c_str());
|
||||
}
|
||||
// TODO: Maybe log various other state?
|
||||
ERROR_LOG(Log::G3D, "======== END OF PIPELINE ==========");
|
||||
}
|
||||
@@ -1738,7 +1726,7 @@ void VulkanRenderManager::ResetStats() {
|
||||
renderCPUTimeMs_.Reset();
|
||||
}
|
||||
|
||||
VKRPipelineLayout *VulkanRenderManager::CreatePipelineLayout(BindingType *bindingTypes, size_t bindingTypesCount, bool geoShadersEnabled, const char *tag) {
|
||||
VKRPipelineLayout *VulkanRenderManager::CreatePipelineLayout(BindingType *bindingTypes, size_t bindingTypesCount, const char *tag) {
|
||||
VKRPipelineLayout *layout = new VKRPipelineLayout();
|
||||
layout->SetTag(tag);
|
||||
layout->bindingTypesCount = (uint32_t)bindingTypesCount;
|
||||
@@ -1764,9 +1752,6 @@ VKRPipelineLayout *VulkanRenderManager::CreatePipelineLayout(BindingType *bindin
|
||||
case BindingType::UNIFORM_BUFFER_DYNAMIC_ALL:
|
||||
bindings[i].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC;
|
||||
bindings[i].stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;
|
||||
if (geoShadersEnabled) {
|
||||
bindings[i].stageFlags |= VK_SHADER_STAGE_GEOMETRY_BIT;
|
||||
}
|
||||
break;
|
||||
case BindingType::STORAGE_BUFFER_VERTEX:
|
||||
bindings[i].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
|
||||
|
||||
@@ -94,13 +94,11 @@ public:
|
||||
// Replaced the ShaderStageInfo with promises here so we can wait for compiles to finish.
|
||||
Promise<VkShaderModule> *vertexShader = nullptr;
|
||||
Promise<VkShaderModule> *fragmentShader = nullptr;
|
||||
Promise<VkShaderModule> *geometryShader = nullptr;
|
||||
|
||||
// These are for pipeline creation failure logging.
|
||||
// TODO: Store pointers to the string instead? Feels iffy but will probably work.
|
||||
std::string vertexShaderSource;
|
||||
std::string fragmentShaderSource;
|
||||
std::string geometryShaderSource;
|
||||
|
||||
VkPrimitiveTopology topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
|
||||
VkVertexInputAttributeDescription attrs[8]{};
|
||||
@@ -282,7 +280,7 @@ public:
|
||||
// WARNING: desc must stick around during the lifetime of the pipeline! It's not enough to build it on the stack and drop it.
|
||||
VKRGraphicsPipeline *CreateGraphicsPipeline(VKRGraphicsPipelineDesc *desc, PipelineFlags pipelineFlags, uint32_t variantBitmask, VkSampleCountFlagBits sampleCount, bool cacheLoad, const char *tag);
|
||||
|
||||
VKRPipelineLayout *CreatePipelineLayout(BindingType *bindingTypes, size_t bindingCount, bool geoShadersEnabled, const char *tag);
|
||||
VKRPipelineLayout *CreatePipelineLayout(BindingType *bindingTypes, size_t bindingCount, const char *tag);
|
||||
void DestroyPipelineLayout(VKRPipelineLayout *pipelineLayout);
|
||||
|
||||
void ReportBadStateForDraw();
|
||||
|
||||
@@ -921,7 +921,6 @@ VKContext::VKContext(VulkanContext *vulkan, bool useRenderThread)
|
||||
caps_.coordConvention = CoordConvention::Vulkan;
|
||||
caps_.setMaxFrameLatencySupported = true;
|
||||
caps_.anisoSupported = vulkan->GetDeviceFeatures().enabled.standard.samplerAnisotropy != 0;
|
||||
caps_.geometryShaderSupported = vulkan->GetDeviceFeatures().enabled.standard.geometryShader != 0;
|
||||
caps_.tesselationShaderSupported = vulkan->GetDeviceFeatures().enabled.standard.tessellationShader != 0;
|
||||
caps_.dualSourceBlend = vulkan->GetDeviceFeatures().enabled.standard.dualSrcBlend != 0;
|
||||
caps_.depthClampSupported = vulkan->GetDeviceFeatures().enabled.standard.depthClamp != 0;
|
||||
@@ -1070,12 +1069,6 @@ VKContext::VKContext(VulkanContext *vulkan, bool useRenderThread)
|
||||
bugs_.Infest(Bugs::EMPTY_RENDERPASS_BROKEN_MALI);
|
||||
}
|
||||
|
||||
// Older ARM devices have very slow geometry shaders, not worth using. At least before 15.
|
||||
// Also seen to cause weird issues on 18, so let's lump it in.
|
||||
if (majorVersion <= 18 || isOldVersion) {
|
||||
bugs_.Infest(Bugs::GEOMETRY_SHADERS_SLOW_OR_BROKEN);
|
||||
}
|
||||
|
||||
// Attempt to workaround #17386
|
||||
if (isOldVersion) {
|
||||
if (!strcmp(deviceProps.deviceName, "Mali-T880") ||
|
||||
@@ -1143,7 +1136,7 @@ VKContext::VKContext(VulkanContext *vulkan, bool useRenderThread)
|
||||
for (int i = 0; i < MAX_BOUND_TEXTURES; ++i) {
|
||||
bindings[1 + i] = BindingType::COMBINED_IMAGE_SAMPLER;
|
||||
}
|
||||
pipelineLayout_ = renderManager_.CreatePipelineLayout(bindings, ARRAY_SIZE(bindings), caps_.geometryShaderSupported, "thin3d_layout");
|
||||
pipelineLayout_ = renderManager_.CreatePipelineLayout(bindings, ARRAY_SIZE(bindings), "thin3d_layout");
|
||||
|
||||
VkPipelineCacheCreateInfo pc{ VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO };
|
||||
VkResult res = vkCreatePipelineCache(vulkan_->GetDevice(), &pc, nullptr, &pipelineCache_);
|
||||
|
||||
@@ -530,7 +530,6 @@ const char *Bugs::GetBugName(uint32_t bug) {
|
||||
case RASPBERRY_SHADER_COMP_HANG: return "RASPBERRY_SHADER_COMP_HANG";
|
||||
case MALI_CONSTANT_LOAD_BUG: return "MALI_CONSTANT_LOAD_BUG";
|
||||
case SUBPASS_FEEDBACK_BROKEN: return "SUBPASS_FEEDBACK_BROKEN";
|
||||
case GEOMETRY_SHADERS_SLOW_OR_BROKEN: return "GEOMETRY_SHADERS_SLOW_OR_BROKEN";
|
||||
case ADRENO_RESOURCE_DEADLOCK: return "ADRENO_RESOURCE_DEADLOCK";
|
||||
case PVR_BAD_16BIT_TEXFORMATS: return "PVR_BAD_16BIT_TEXFORMATS";
|
||||
case EMPTY_RENDERPASS_BROKEN_MALI: return "EMPTY_RENDERPASS_BROKEN_MALI";
|
||||
|
||||
@@ -133,14 +133,6 @@ enum class Primitive {
|
||||
TRIANGLE_LIST,
|
||||
TRIANGLE_STRIP,
|
||||
TRIANGLE_FAN,
|
||||
// Tesselation shader only
|
||||
PATCH_LIST,
|
||||
// These are for geometry shaders only.
|
||||
LINE_LIST_ADJ,
|
||||
LINE_STRIP_ADJ,
|
||||
TRIANGLE_LIST_ADJ,
|
||||
TRIANGLE_STRIP_ADJ,
|
||||
|
||||
UNDEFINED,
|
||||
PRIMITIVE_TYPE_COUNT,
|
||||
};
|
||||
@@ -351,7 +343,6 @@ public:
|
||||
RASPBERRY_SHADER_COMP_HANG = 8,
|
||||
MALI_CONSTANT_LOAD_BUG = 9,
|
||||
SUBPASS_FEEDBACK_BROKEN = 10,
|
||||
GEOMETRY_SHADERS_SLOW_OR_BROKEN = 11,
|
||||
ADRENO_RESOURCE_DEADLOCK = 12,
|
||||
UNIFORM_INDEXING_BROKEN = 13, // not a properly diagnosed issue, a workaround attempt: #17386
|
||||
PVR_BAD_16BIT_TEXFORMATS = 14,
|
||||
@@ -609,7 +600,6 @@ struct DeviceCaps {
|
||||
|
||||
bool anisoSupported;
|
||||
bool depthRangeMinusOneToOne; // OpenGL style depth
|
||||
bool geometryShaderSupported;
|
||||
bool tesselationShaderSupported;
|
||||
bool dualSourceBlend;
|
||||
bool logicOpSupported;
|
||||
|
||||
@@ -716,7 +716,6 @@ static const ConfigSetting graphicsSettings[] = {
|
||||
ConfigSetting("CameraMirrorHorizontal", SETTING(g_Config, bCameraMirrorHorizontal), false, CfgFlag::DEFAULT),
|
||||
ConfigSetting("AndroidFramerateMode", SETTING(g_Config, iDisplayFramerateMode), 1, CfgFlag::DEFAULT),
|
||||
ConfigSetting("VendorBugChecksEnabled", SETTING(g_Config, bVendorBugChecksEnabled), true, CfgFlag::DONT_SAVE),
|
||||
ConfigSetting("UseGeometryShader", SETTING(g_Config, bUseGeometryShader), false, CfgFlag::PER_GAME),
|
||||
ConfigSetting("SkipBufferEffects", SETTING(g_Config, bSkipBufferEffects), false, CfgFlag::PER_GAME | CfgFlag::REPORT),
|
||||
ConfigSetting("DepthRasterMode", SETTING(g_Config, iDepthRasterMode), &DefaultDepthRaster, CfgFlag::PER_GAME | CfgFlag::REPORT),
|
||||
ConfigSetting("SoftwareRenderer", SETTING(g_Config, bSoftwareRendering), false, CfgFlag::PER_GAME),
|
||||
|
||||
@@ -287,7 +287,6 @@ public:
|
||||
bool bHardwareTransform;
|
||||
bool bSoftwareSkinning;
|
||||
bool bVendorBugChecksEnabled;
|
||||
bool bUseGeometryShader;
|
||||
|
||||
// Speedhacks (more will be moved here):
|
||||
bool bSkipBufferEffects;
|
||||
|
||||
@@ -70,7 +70,7 @@ void DrawEngineVulkan::InitDeviceObjects() {
|
||||
VkDevice device = vulkan->GetDevice();
|
||||
|
||||
VulkanRenderManager *renderManager = (VulkanRenderManager *)draw_->GetNativeObject(Draw::NativeObject::RENDER_MANAGER);
|
||||
pipelineLayout_ = renderManager->CreatePipelineLayout(bindingTypes, ARRAY_SIZE(bindingTypes), draw_->GetDeviceCaps().geometryShaderSupported, "drawengine_layout");
|
||||
pipelineLayout_ = renderManager->CreatePipelineLayout(bindingTypes, ARRAY_SIZE(bindingTypes), "drawengine_layout");
|
||||
|
||||
pushUBO_ = (VulkanPushPool *)draw_->GetNativeObject(Draw::NativeObject::PUSH_POOL);
|
||||
pushVertex_ = new VulkanPushPool(vulkan, "pushVertex", 4 * 1024 * 1024, 256, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
|
||||
|
||||
@@ -205,7 +205,6 @@ static VulkanPipeline *CreateVulkanPipeline(VulkanRenderManager *renderManager,
|
||||
|
||||
desc->fragmentShader = fs->GetModule();
|
||||
desc->vertexShader = vs->GetModule();
|
||||
desc->geometryShader = nullptr;
|
||||
|
||||
PROFILE_THIS_SCOPE("pipelinebuild");
|
||||
bool useBlendConstant = false;
|
||||
|
||||
@@ -516,15 +516,6 @@ void GameSettingsScreen::CreateGraphicsSettings(UI::ViewGroup *graphicsSettings)
|
||||
graphicsSettings->Add(new SettingHint(gr->T("Faster, input lag"), inflightChoice)); // TODO: This hint could use improvement.
|
||||
}
|
||||
|
||||
if (GetGPUBackend() == GPUBackend::VULKAN) {
|
||||
const bool usable = draw->GetDeviceCaps().geometryShaderSupported && !draw->GetBugs().Has(Draw::Bugs::GEOMETRY_SHADERS_SLOW_OR_BROKEN);
|
||||
const bool vertexSupported = draw->GetDeviceCaps().maxClipDistances >= 2 && draw->GetDeviceCaps().maxCullDistances >= 1;
|
||||
if (usable && !vertexSupported) {
|
||||
CheckBox *geometryCulling = graphicsSettings->Add(new CheckBox(&g_Config.bUseGeometryShader, gr->T("Geometry shader culling")));
|
||||
geometryCulling->SetDisabledPtr(&g_Config.bSoftwareRendering);
|
||||
}
|
||||
}
|
||||
|
||||
if (deviceType != DEVICE_TYPE_VR) {
|
||||
CheckBox *hwTransform = graphicsSettings->Add(new CheckBox(&g_Config.bHardwareTransform, gr->T("Hardware Transform")));
|
||||
hwTransform->SetDisabledPtr(&g_Config.bSoftwareRendering);
|
||||
|
||||
Reference in New Issue
Block a user