From 0b4f5ef2865faeef5ca7fd35960f26392d15f0e9 Mon Sep 17 00:00:00 2001 From: Triang3l Date: Sat, 3 Dec 2022 14:27:43 +0300 Subject: [PATCH] [SPIR-V] Decorate whole gl_PerVertex with Invariant Block members can be decorated with Invariant only since SPIR-V 1.5 Revision 2. In earlier versions, Invariant can be used only for variables. Mesa warns about this. --- src/xenia/gpu/spirv_shader_translator.cc | 4 +--- src/xenia/gpu/vulkan/vulkan_pipeline_cache.cc | 7 +------ 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/xenia/gpu/spirv_shader_translator.cc b/src/xenia/gpu/spirv_shader_translator.cc index eb31e13b9..95517cfba 100644 --- a/src/xenia/gpu/spirv_shader_translator.cc +++ b/src/xenia/gpu/spirv_shader_translator.cc @@ -1226,15 +1226,13 @@ void SpirvShaderTranslator::StartVertexOrTessEvalShaderBeforeMain() { builder_->makeStructType(struct_per_vertex_members, "gl_PerVertex"); builder_->addMemberName(type_struct_per_vertex, kOutputPerVertexMemberPosition, "gl_Position"); - builder_->addMemberDecoration(type_struct_per_vertex, - kOutputPerVertexMemberPosition, - spv::DecorationInvariant); builder_->addMemberDecoration(type_struct_per_vertex, kOutputPerVertexMemberPosition, spv::DecorationBuiltIn, spv::BuiltInPosition); builder_->addDecoration(type_struct_per_vertex, spv::DecorationBlock); output_per_vertex_ = builder_->createVariable( spv::NoPrecision, spv::StorageClassOutput, type_struct_per_vertex, ""); + builder_->addDecoration(output_per_vertex_, spv::DecorationInvariant); main_interface_.push_back(output_per_vertex_); } diff --git a/src/xenia/gpu/vulkan/vulkan_pipeline_cache.cc b/src/xenia/gpu/vulkan/vulkan_pipeline_cache.cc index 296969959..667228f93 100644 --- a/src/xenia/gpu/vulkan/vulkan_pipeline_cache.cc +++ b/src/xenia/gpu/vulkan/vulkan_pipeline_cache.cc @@ -1178,9 +1178,6 @@ VkShaderModule VulkanPipelineCache::GetGeometryShader(GeometryShaderKey key) { builder.makeStructType(id_vector_temp, "gl_PerVertex"); builder.addMemberName(type_struct_out_gl_per_vertex, member_out_gl_per_vertex_position, "gl_Position"); - builder.addMemberDecoration(type_struct_out_gl_per_vertex, - member_out_gl_per_vertex_position, - spv::DecorationInvariant); builder.addMemberDecoration(type_struct_out_gl_per_vertex, member_out_gl_per_vertex_position, spv::DecorationBuiltIn, spv::BuiltInPosition); @@ -1188,9 +1185,6 @@ VkShaderModule VulkanPipelineCache::GetGeometryShader(GeometryShaderKey key) { builder.addMemberName(type_struct_out_gl_per_vertex, member_out_gl_per_vertex_clip_distance, "gl_ClipDistance"); - builder.addMemberDecoration(type_struct_out_gl_per_vertex, - member_out_gl_per_vertex_clip_distance, - spv::DecorationInvariant); builder.addMemberDecoration( type_struct_out_gl_per_vertex, member_out_gl_per_vertex_clip_distance, spv::DecorationBuiltIn, spv::BuiltInClipDistance); @@ -1199,6 +1193,7 @@ VkShaderModule VulkanPipelineCache::GetGeometryShader(GeometryShaderKey key) { spv::Id out_gl_per_vertex = builder.createVariable(spv::NoPrecision, spv::StorageClassOutput, type_struct_out_gl_per_vertex, ""); + builder.addDecoration(out_gl_per_vertex, spv::DecorationInvariant); main_interface.push_back(out_gl_per_vertex); // Begin the main function.