From e8fdd79f2e18eebdce7a1ff0edc12dc63d7257c1 Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Wed, 23 Aug 2017 23:24:42 +0800 Subject: [PATCH] SPV: Implement extension SPV_EXT_shader_stencil_export --- SPIRV/GLSL.ext.KHR.h | 1 + SPIRV/GlslangToSpv.cpp | 5 +++-- SPIRV/doc.cpp | 3 +++ SPIRV/spirv.hpp | 7 +++++-- Test/baseResults/spv.shaderStencilExport.frag.out | 4 +++- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h index 6e025298..8a5db3e1 100644 --- a/SPIRV/GLSL.ext.KHR.h +++ b/SPIRV/GLSL.ext.KHR.h @@ -42,5 +42,6 @@ static const char* const E_SPV_KHR_shader_draw_parameters = "SPV_KHR_shade static const char* const E_SPV_KHR_16bit_storage = "SPV_KHR_16bit_storage"; static const char* const E_SPV_KHR_storage_buffer_storage_class = "SPV_KHR_storage_buffer_storage_class"; static const char* const E_SPV_KHR_post_depth_coverage = "SPV_KHR_post_depth_coverage"; +static const char* const E_SPV_EXT_shader_stencil_export = "SPV_EXT_shader_stencil_export"; #endif // #ifndef GLSLextKHR_H diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index a1677027..c8d6e44c 100755 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -522,8 +522,9 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI return spv::BuiltInPrimitiveId; case glslang::EbvFragStencilRef: - logger->missingFunctionality("shader stencil export"); - return spv::BuiltInMax; + builder.addExtension(spv::E_SPV_EXT_shader_stencil_export); + builder.addCapability(spv::CapabilityStencilExportEXT); + return spv::BuiltInFragStencilRefEXT; case glslang::EbvInvocationId: return spv::BuiltInInvocationId; case glslang::EbvTessLevelInner: return spv::BuiltInTessLevelInner; diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index b47fa488..037a9749 100755 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -331,6 +331,7 @@ const char* BuiltInString(int builtIn) case 4424: return "BaseVertex"; case 4425: return "BaseInstance"; case 4426: return "DrawIndex"; + case 5014: return "FragStencilRefEXT"; #ifdef AMD_EXTENSIONS case 4992: return "BaryCoordNoPerspAMD"; @@ -842,6 +843,8 @@ const char* CapabilityString(int info) case 4437: return "DeviceGroup"; case 4439: return "MultiView"; + case 5013: return "StencilExportEXT"; + #ifdef AMD_EXTENSIONS case 5009: return "ImageGatherBiasLodAMD"; #endif diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index 338f6a16..8bddf7e5 100755 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -47,11 +47,11 @@ namespace spv { typedef unsigned int Id; #define SPV_VERSION 0x10000 -#define SPV_REVISION 11 +#define SPV_REVISION 12 static const unsigned int MagicNumber = 0x07230203; static const unsigned int Version = 0x00010000; -static const unsigned int Revision = 11; +static const unsigned int Revision = 12; static const unsigned int OpCodeMask = 0xffff; static const unsigned int WordCountShift = 16; @@ -444,6 +444,7 @@ enum BuiltIn { BuiltInBaryCoordSmoothCentroidAMD = 4996, BuiltInBaryCoordSmoothSampleAMD = 4997, BuiltInBaryCoordPullModelAMD = 4998, + BuiltInFragStencilRefEXT = 5014, BuiltInViewportMaskNV = 5253, BuiltInSecondaryPositionNV = 5257, BuiltInSecondaryViewportMaskNV = 5258, @@ -640,8 +641,10 @@ enum Capability { CapabilityAtomicStorageOps = 4445, CapabilitySampleMaskPostDepthCoverage = 4447, CapabilityImageGatherBiasLodAMD = 5009, + CapabilityStencilExportEXT = 5013, CapabilitySampleMaskOverrideCoverageNV = 5249, CapabilityGeometryShaderPassthroughNV = 5251, + CapabilityShaderViewportIndexLayerEXT = 5254, CapabilityShaderViewportIndexLayerNV = 5254, CapabilityShaderViewportMaskNV = 5255, CapabilityShaderStereoViewNV = 5259, diff --git a/Test/baseResults/spv.shaderStencilExport.frag.out b/Test/baseResults/spv.shaderStencilExport.frag.out index c0c72095..b0774de9 100644 --- a/Test/baseResults/spv.shaderStencilExport.frag.out +++ b/Test/baseResults/spv.shaderStencilExport.frag.out @@ -1,10 +1,11 @@ spv.shaderStencilExport.frag -Missing functionality: shader stencil export // Module Version 10000 // Generated by (magic number): 80001 // Id's are bound by 10 Capability Shader + Capability StencilExportEXT + Extension "SPV_EXT_shader_stencil_export" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 8 @@ -13,6 +14,7 @@ Missing functionality: shader stencil export SourceExtension "GL_ARB_shader_stencil_export" Name 4 "main" Name 8 "gl_FragStencilRefARB" + Decorate 8(gl_FragStencilRefARB) BuiltIn FragStencilRefEXT 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1