Skip to content
Commits on Source (23)
......@@ -57,4 +57,12 @@ add_custom_target(install-headers
COMMAND cmake -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/include/spirv
$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/include/spirv)
option(SPIRV_HEADERS_SKIP_EXAMPLES "Skip building examples"
${SPIRV_HEADERS_SKIP_EXAMPLES})
if(NOT ${SPIRV_HEADERS_SKIP_EXAMPLES})
set(SPIRV_HEADERS_ENABLE_EXAMPLES ON)
endif()
if (SPIRV_HEADERS_ENABLE_EXAMPLES)
message(STATUS "Building SPIRV-Header examples")
add_subdirectory(example)
endif()
A reminder that this issue tracker is managed by the Khronos Group. Interactions here should follow the Khronos Code of Conduct (https://www.khronos.org/developers/code-of-conduct), which prohibits aggressive or derogatory language. Please keep the discussion friendly and civil.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
File mode changed from 100755 to 100644
......@@ -69,7 +69,8 @@
<id value="17" vendor="Khronos" tool="SPIR-V Tools Linker" comment="Contact David Neto, dneto@google.com"/>
<id value="18" vendor="Wine" tool="VKD3D Shader Compiler" comment="Contact wine-devel@winehq.org"/>
<id value="19" vendor="Clay" tool="Clay Shader Compiler" comment="Contact info@clayengine.com"/>
<unused start="20" end="0xFFFF" comment="Tool ID range reservable for future use by vendors"/>
<id value="20" vendor="W3C WebGPU Group" tool="WHLSL Shader Translator" comment="https://github.com/gpuweb/WHLSL"/>
<unused start="21" end="0xFFFF" comment="Tool ID range reservable for future use by vendors"/>
</ids>
<!-- SECTION: SPIR-V Opcodes and Enumerants -->
......
/*
** Copyright (c) 2015-2017 The Khronos Group Inc.
** Copyright (c) 2015-2019 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a copy
** of this software and/or associated documentation files (the "Materials"),
......
......@@ -339,7 +339,10 @@
{ "kind" : "IdRef", "name" : "'Pointer Type'" },
{ "kind" : "StorageClass" }
],
"capabilities" : [ "Addresses" ]
"capabilities" : [
"Addresses",
"PhysicalStorageBufferAddressesEXT"
]
},
{
"opname" : "OpConstantTrue",
......@@ -563,7 +566,8 @@
"capabilities" : [
"Addresses",
"VariablePointers",
"VariablePointersStorageBuffer"
"VariablePointersStorageBuffer",
"PhysicalStorageBufferAddressesEXT"
]
},
{
......@@ -1048,7 +1052,10 @@
{ "kind" : "IdResult" },
{ "kind" : "IdRef", "name" : "'Pointer'" }
],
"capabilities" : [ "Addresses" ]
"capabilities" : [
"Addresses",
"PhysicalStorageBufferAddressesEXT"
]
},
{
"opname" : "OpSatConvertSToU",
......@@ -1078,7 +1085,10 @@
{ "kind" : "IdResult" },
{ "kind" : "IdRef", "name" : "'Integer Value'" }
],
"capabilities" : [ "Addresses" ]
"capabilities" : [
"Addresses",
"PhysicalStorageBufferAddressesEXT"
]
},
{
"opname" : "OpPtrCastToGeneric",
......@@ -3825,7 +3835,7 @@
"version" : "None"
},
{
"opname" : "OpReportIntersectionNVX",
"opname" : "OpReportIntersectionNV",
"opcode" : 5334,
"operands" : [
{ "kind" : "IdResultType" },
......@@ -3833,25 +3843,25 @@
{ "kind" : "IdRef", "name" : "'Hit'" },
{ "kind" : "IdRef", "name" : "'HitKind'" }
],
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"opname" : "OpIgnoreIntersectionNVX",
"opname" : "OpIgnoreIntersectionNV",
"opcode" : 5335,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"opname" : "OpTerminateRayNVX",
"opname" : "OpTerminateRayNV",
"opcode" : 5336,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"opname" : "OpTraceNVX",
"opname" : "OpTraceNV",
"opcode" : 5337,
"operands" : [
......@@ -3867,17 +3877,28 @@
{ "kind" : "IdRef", "name" : "'Ray Tmax'" },
{ "kind" : "IdRef", "name" : "'PayloadId'" }
],
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"opname" : "OpTypeAccelerationStructureNVX",
"opname" : "OpTypeAccelerationStructureNV",
"opcode" : 5341,
"operands" : [
{ "kind" : "IdResult" }
],
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"opname" : "OpExecuteCallableNV",
"opcode" : 5344,
"operands" : [
{ "kind" : "IdRef", "name" : "'SBT Index'" },
{ "kind" : "IdRef", "name" : "'Callable DataId'" }
],
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"opname" : "OpSubgroupShuffleINTEL",
......@@ -4443,34 +4464,34 @@
"capabilities" : [ "MeshShadingNV" ]
},
{
"enumerant" : "RayGenerationNVX",
"enumerant" : "RayGenerationNV",
"value" : 5313,
"capabilities" : [ "RaytracingNVX" ]
"capabilities" : [ "RayTracingNV" ]
},
{
"enumerant" : "IntersectionNVX",
"enumerant" : "IntersectionNV",
"value" : 5314,
"capabilities" : [ "RaytracingNVX" ]
"capabilities" : [ "RayTracingNV" ]
},
{
"enumerant" : "AnyHitNVX",
"enumerant" : "AnyHitNV",
"value" : 5315,
"capabilities" : [ "RaytracingNVX" ]
"capabilities" : [ "RayTracingNV" ]
},
{
"enumerant" : "ClosestHitNVX",
"enumerant" : "ClosestHitNV",
"value" : 5316,
"capabilities" : [ "RaytracingNVX" ]
"capabilities" : [ "RayTracingNV" ]
},
{
"enumerant" : "MissNVX",
"enumerant" : "MissNV",
"value" : 5317,
"capabilities" : [ "RaytracingNVX" ]
"capabilities" : [ "RayTracingNV" ]
},
{
"enumerant" : "CallableNVX",
"enumerant" : "CallableNV",
"value" : 5318,
"capabilities" : [ "RaytracingNVX" ]
"capabilities" : [ "RayTracingNV" ]
}
]
},
......@@ -4491,6 +4512,12 @@
"enumerant" : "Physical64",
"value" : 2,
"capabilities" : [ "Addresses" ]
},
{
"enumerant" : "PhysicalStorageBuffer64EXT",
"value" : 5348,
"extensions" : [ "SPV_EXT_physical_storage_buffer" ],
"capabilities" : [ "PhysicalStorageBufferAddressesEXT" ]
}
]
},
......@@ -4762,6 +4789,56 @@
"extensions" : [ "SPV_KHR_post_depth_coverage" ],
"version" : "None"
},
{
"enumerant" : "DenormPreserve",
"value" : 4459,
"capabilities" : [ "DenormPreserve"],
"extensions" : [ "SPV_KHR_float_controls" ],
"parameters" : [
{ "kind" : "LiteralInteger", "name" : "'Target Width'" }
],
"version" : "None"
},
{
"enumerant" : "DenormFlushToZero",
"value" : 4460,
"capabilities" : [ "DenormFlushToZero"],
"extensions" : [ "SPV_KHR_float_controls" ],
"parameters" : [
{ "kind" : "LiteralInteger", "name" : "'Target Width'" }
],
"version" : "None"
},
{
"enumerant" : "SignedZeroInfNanPreserve",
"value" : 4461,
"capabilities" : [ "SignedZeroInfNanPreserve"],
"extensions" : [ "SPV_KHR_float_controls" ],
"parameters" : [
{ "kind" : "LiteralInteger", "name" : "'Target Width'" }
],
"version" : "None"
},
{
"enumerant" : "RoundingModeRTE",
"value" : 4462,
"capabilities" : [ "RoundingModeRTE"],
"extensions" : [ "SPV_KHR_float_controls" ],
"parameters" : [
{ "kind" : "LiteralInteger", "name" : "'Target Width'" }
],
"version" : "None"
},
{
"enumerant" : "RoundingModeRTZ",
"value" : 4463,
"capabilities" : [ "RoundingModeRTZ"],
"extensions" : [ "SPV_KHR_float_controls" ],
"parameters" : [
{ "kind" : "LiteralInteger", "name" : "'Target Width'" }
],
"version" : "None"
},
{
"enumerant" : "StencilRefReplacingEXT",
"value" : 5027,
......@@ -4878,28 +4955,46 @@
"version" : "1.3"
},
{
"enumerant" : "RayPayloadNVX",
"enumerant" : "CallableDataNV",
"value" : 5328,
"extensions" : [ "SPV_NV_ray_tracing" ],
"capabilities" : [ "RayTracingNV" ]
},
{
"enumerant" : "IncomingCallableDataNV",
"value" : 5329,
"extensions" : [ "SPV_NV_ray_tracing" ],
"capabilities" : [ "RayTracingNV" ]
},
{
"enumerant" : "RayPayloadNV",
"value" : 5338,
"extensions" : [ "SPV_NVX_raytracing" ],
"capabilities" : [ "RaytracingNVX" ]
"extensions" : [ "SPV_NV_ray_tracing" ],
"capabilities" : [ "RayTracingNV" ]
},
{
"enumerant" : "HitAttributeNVX",
"enumerant" : "HitAttributeNV",
"value" : 5339,
"extensions" : [ "SPV_NVX_raytracing" ],
"capabilities" : [ "RaytracingNVX" ]
"extensions" : [ "SPV_NV_ray_tracing" ],
"capabilities" : [ "RayTracingNV" ]
},
{
"enumerant" : "IncomingRayPayloadNVX",
"enumerant" : "IncomingRayPayloadNV",
"value" : 5342,
"extensions" : [ "SPV_NVX_raytracing" ],
"capabilities" : [ "RaytracingNVX" ]
"extensions" : [ "SPV_NV_ray_tracing" ],
"capabilities" : [ "RayTracingNV" ]
},
{
"enumerant" : "ShaderRecordBufferNVX",
"enumerant" : "ShaderRecordBufferNV",
"value" : 5343,
"extensions" : [ "SPV_NVX_raytracing" ],
"capabilities" : [ "RaytracingNVX" ]
"extensions" : [ "SPV_NV_ray_tracing" ],
"capabilities" : [ "RayTracingNV" ]
},
{
"enumerant" : "PhysicalStorageBufferEXT",
"value" : 5349,
"extensions" : [ "SPV_EXT_physical_storage_buffer" ],
"capabilities" : [ "PhysicalStorageBufferAddressesEXT" ]
}
]
},
......@@ -5793,6 +5888,18 @@
],
"version" : "1.2"
},
{
"enumerant" : "NoSignedWrap",
"value" : 4469,
"extensions" : [ "SPV_KHR_no_integer_wrap_decoration" ],
"version" : "None"
},
{
"enumerant" : "NoUnsignedWrap",
"value" : 4470,
"extensions" : [ "SPV_KHR_no_integer_wrap_decoration" ],
"version" : "None"
},
{
"enumerant" : "ExplicitInterpAMD",
"value" : 4999,
......@@ -5879,6 +5986,20 @@
],
"extensions" : [ "SPV_GOOGLE_hlsl_functionality1" ],
"version" : "None"
},
{
"enumerant" : "RestrictPointerEXT",
"value" : 5355,
"capabilities" : [ "PhysicalStorageBufferAddressesEXT" ],
"extensions" : [ "SPV_EXT_physical_storage_buffer" ],
"version" : "None"
},
{
"enumerant" : "AliasedPointerEXT",
"value" : 5356,
"capabilities" : [ "PhysicalStorageBufferAddressesEXT" ],
"extensions" : [ "SPV_EXT_physical_storage_buffer" ],
"version" : "None"
}
]
},
......@@ -5919,7 +6040,7 @@
{
"enumerant" : "PrimitiveId",
"value" : 7,
"capabilities" : [ "Geometry", "Tessellation", "RaytracingNVX" ]
"capabilities" : [ "Geometry", "Tessellation", "RayTracingNV" ]
},
{
"enumerant" : "InvocationId",
......@@ -6346,97 +6467,117 @@
"extensions" : [ "SPV_NV_fragment_shader_barycentric" ],
"version" : "None"
},
{
"enumerant" : "FragSizeEXT",
"value" : 5292 ,
"capabilities" : [ "FragmentDensityEXT", "ShadingRateNV" ],
"extensions" : [ "SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate" ],
"version" : "None"
},
{
"enumerant" : "FragmentSizeNV",
"value" : 5292 ,
"capabilities" : [ "ShadingRateNV" ],
"extensions" : [ "SPV_NV_shading_rate" ],
"capabilities" : [ "ShadingRateNV", "FragmentDensityEXT" ],
"extensions" : [ "SPV_NV_shading_rate", "SPV_EXT_fragment_invocation_density" ],
"version" : "None"
},
{
"enumerant" : "FragInvocationCountEXT",
"value" : 5293,
"capabilities" : [ "FragmentDensityEXT", "ShadingRateNV" ],
"extensions" : [ "SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate" ],
"version" : "None"
},
{
"enumerant" : "InvocationsPerPixelNV",
"value" : 5293,
"capabilities" : [ "ShadingRateNV" ],
"extensions" : [ "SPV_NV_shading_rate" ],
"capabilities" : [ "ShadingRateNV", "FragmentDensityEXT" ],
"extensions" : [ "SPV_NV_shading_rate", "SPV_EXT_fragment_invocation_density" ],
"version" : "None"
},
{
"enumerant" : "LaunchIdNVX",
"enumerant" : "LaunchIdNV",
"value" : 5319,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"enumerant" : "LaunchSizeNVX",
"enumerant" : "LaunchSizeNV",
"value" : 5320,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"enumerant" : "WorldRayOriginNVX",
"enumerant" : "WorldRayOriginNV",
"value" : 5321,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"enumerant" : "WorldRayDirectionNVX",
"enumerant" : "WorldRayDirectionNV",
"value" : 5322,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"enumerant" : "ObjectRayOriginNVX",
"enumerant" : "ObjectRayOriginNV",
"value" : 5323,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"enumerant" : "ObjectRayDirectionNVX",
"enumerant" : "ObjectRayDirectionNV",
"value" : 5324,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"enumerant" : "RayTminNVX",
"enumerant" : "RayTminNV",
"value" : 5325,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"enumerant" : "RayTmaxNVX",
"enumerant" : "RayTmaxNV",
"value" : 5326,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"enumerant" : "InstanceCustomIndexNVX",
"enumerant" : "InstanceCustomIndexNV",
"value" : 5327,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"enumerant" : "ObjectToWorldNVX",
"enumerant" : "ObjectToWorldNV",
"value" : 5330,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"enumerant" : "WorldToObjectNVX",
"enumerant" : "WorldToObjectNV",
"value" : 5331,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"enumerant" : "HitTNVX",
"enumerant" : "HitTNV",
"value" : 5332,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"enumerant" : "HitKindNVX",
"enumerant" : "HitKindNV",
"value" : 5333,
"capabilities" : [ "RaytracingNVX" ],
"extensions" : [ "SPV_NVX_raytracing" ]
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
},
{
"enumerant" : "IncomingRayFlagsNV",
"value" : 5351,
"capabilities" : [ "RayTracingNV" ],
"extensions" : [ "SPV_NV_ray_tracing" ]
}
]
},
......@@ -6998,6 +7139,36 @@
"extensions" : [ "SPV_KHR_8bit_storage" ],
"version" : "None"
},
{
"enumerant" : "DenormPreserve",
"value" : 4464,
"extensions" : [ "SPV_KHR_float_controls" ],
"version" : "None"
},
{
"enumerant" : "DenormFlushToZero",
"value" : 4465,
"extensions" : [ "SPV_KHR_float_controls" ],
"version" : "None"
},
{
"enumerant" : "SignedZeroInfNanPreserve",
"value" : 4466,
"extensions" : [ "SPV_KHR_float_controls" ],
"version" : "None"
},
{
"enumerant" : "RoundingModeRTE",
"value" : 4467,
"extensions" : [ "SPV_KHR_float_controls" ],
"version" : "None"
},
{
"enumerant" : "RoundingModeRTZ",
"value" : 4468,
"extensions" : [ "SPV_KHR_float_controls" ],
"version" : "None"
},
{
"enumerant" : "Float16ImageAMD",
"value" : 5008,
......@@ -7181,10 +7352,10 @@
"version" : "None"
},
{
"enumerant" : "RaytracingNVX",
"enumerant" : "RayTracingNV",
"value" : 5340,
"capabilities" : [ "Shader" ],
"extensions" : [ "SPV_NVX_raytracing" ],
"extensions" : [ "SPV_NV_ray_tracing" ],
"version" : "None"
},
{
......@@ -7247,11 +7418,25 @@
"extensions" : [ "SPV_NV_compute_shader_derivatives" ],
"version" : "None"
},
{
"enumerant" : "FragmentDensityEXT",
"value" : 5291,
"capabilities" : [ "Shader" ],
"extensions" : [ "SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate" ],
"version" : "None"
},
{
"enumerant" : "ShadingRateNV",
"value" : 5291,
"capabilities" : [ "Shader" ],
"extensions" : [ "SPV_NV_shading_rate" ],
"extensions" : [ "SPV_NV_shading_rate", "SPV_EXT_fragment_invocation_density" ],
"version" : "None"
},
{
"enumerant" : "PhysicalStorageBufferAddressesEXT",
"value" : 5347,
"capabilities" : [ "Shader" ],
"extensions" : [ "SPV_EXT_physical_storage_buffer" ],
"version" : "None"
}
]
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
File mode changed from 100755 to 100644
......@@ -2,4 +2,4 @@
cd ../../include/spirv/unified1
../../../tools/buildHeaders/build/install/bin/buildSpvHeaders -H spirv.core.grammar.json
dos2unix spirv.*
dos2unix spirv.* SpirV.* spv.*
// Copyright (c) 2014-2018 The Khronos Group Inc.
// Copyright (c) 2014-2019 The Khronos Group Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and/or associated documentation files (the "Materials"),
......@@ -69,8 +69,8 @@ namespace {
static const int DocMagicNumber = 0x07230203;
static const int DocVersion = 0x00010300;
static const int DocRevision = 1;
#define DocRevisionString "1"
static const int DocRevision = 6;
#define DocRevisionString "6"
static const std::string DocCopyright;
static const std::string DocComment1;
static const std::string DocComment2;
......@@ -167,7 +167,7 @@ namespace {
}
const std::string TPrinter::DocCopyright =
"Copyright (c) 2014-2018 The Khronos Group Inc.\n"
"Copyright (c) 2014-2019 The Khronos Group Inc.\n"
"\n"
"Permission is hereby granted, free of charge, to any person obtaining a copy\n"
"of this software and/or associated documentation files (the \"Materials\"),\n"
......@@ -197,13 +197,16 @@ namespace {
const std::string TPrinter::DocComment2 =
"Enumeration tokens for SPIR-V, in various styles:\n"
" C, C++, C++11, JSON, Lua, Python\n"
" C, C++, C++11, JSON, Lua, Python, C#, D\n"
"\n"
"- C will have tokens with a \"Spv\" prefix, e.g.: SpvSourceLanguageGLSL\n"
"- C++ will have tokens in the \"spv\" name space, e.g.: spv::SourceLanguageGLSL\n"
"- C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL\n"
"- Lua will use tables, e.g.: spv.SourceLanguage.GLSL\n"
"- Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']\n"
"- C# will use enum classes in the Specification class located in the \"Spv\" namespace,\n"
" e.g.: Spv.Specification.SourceLanguage.GLSL\n"
"- D will have tokens under the \"spv\" module, e.g: spv.SourceLanguage.GLSL\n"
"\n"
"Some tokens act like mask values, which can be OR'd together,\n"
"while others are mutually exclusive. The mask-like ones have\n"
......@@ -658,6 +661,76 @@ namespace {
}
};
// C# printer
class TPrinterCSharp final : public TPrinter {
private:
std::string commentBOL() const override { return "// "; }
void printPrologue(std::ostream& out) const override {
out << "namespace Spv\n{\n\n";
out << indent() << "public static class Specification\n";
out << indent() << "{\n";
}
void printEpilogue(std::ostream& out) const override {
out << indent() << "}\n";
out << "}\n";
}
std::string enumBeg(const std::string& s, enumStyle_t style) const override {
return indent(2) + "public enum " + s + styleStr(style) + "\n" + indent(2) + "{\n";
}
std::string enumEnd(const std::string& s, enumStyle_t style, bool isLast) const override {
return indent(2) + "}" + + (isLast ? "\n" : "\n\n");
}
std::string enumFmt(const std::string& s, const valpair_t& v,
enumStyle_t style, bool isLast) const override {
return indent(3) + prependIfDigit(s, v.second) + " = " + fmtStyleVal(v.first, style) + ",\n";
}
std::string fmtConstInt(unsigned val, const std::string& name,
const char* fmt, bool isLast) const override {
return indent(2) + std::string("public const uint ") + name +
" = " + fmtNum(fmt, val) + (isLast ? ";\n\n" : ";\n");
}
};
// D printer
class TPrinterD final : public TPrinter {
private:
std::string commentBeg() const override { return "/+\n"; }
std::string commentBOL() const override { return " + "; }
std::string commentEnd(bool isLast) const override { return " +/\n"; }
void printPrologue(std::ostream& out) const override {
out << "module spv;\n\n";
}
void printEpilogue(std::ostream& out) const override {
}
std::string enumBeg(const std::string& s, enumStyle_t style) const override {
return "enum " + s + styleStr(style) + " : uint\n{\n";
}
std::string enumEnd(const std::string& s, enumStyle_t style, bool isLast) const override {
return std::string("}\n\n");
}
std::string enumFmt(const std::string& s, const valpair_t& v,
enumStyle_t style, bool isLast) const override {
return indent() + prependIfDigit("_", v.second) + " = " + fmtStyleVal(v.first, style) + ",\n";
}
std::string fmtConstInt(unsigned val, const std::string& name,
const char* fmt, bool isLast) const override {
return std::string("enum uint ") + name +
" = " + fmtNum(fmt, val) + (isLast ? ";\n\n" : ";\n");
}
};
} // namespace
namespace spv {
......@@ -672,6 +745,8 @@ namespace spv {
langInfo.push_back(std::make_pair(ELangJSON, "spirv.json"));
langInfo.push_back(std::make_pair(ELangLua, "spirv.lua"));
langInfo.push_back(std::make_pair(ELangPython, "spirv.py"));
langInfo.push_back(std::make_pair(ELangCSharp, "spirv.cs"));
langInfo.push_back(std::make_pair(ELangD, "spv.d"));
for (const auto& lang : langInfo) {
std::ofstream out(lang.second, std::ios::out);
......@@ -697,6 +772,8 @@ namespace spv {
case ELangJSON: p = TPrinterPtr(new TPrinterJSON); break;
case ELangLua: p = TPrinterPtr(new TPrinterLua); break;
case ELangPython: p = TPrinterPtr(new TPrinterPython); break;
case ELangCSharp: p = TPrinterPtr(new TPrinterCSharp); break;
case ELangD: p = TPrinterPtr(new TPrinterD); break;
case ELangAll: PrintAllHeaders(); break;
default:
std::cerr << "Unknown language." << std::endl;
......