mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-10-18 11:10:05 +00:00
add support for vulkan-shader-profiler external passes (#5512)
This commit is contained in:
parent
f74f4e74c5
commit
f20663ca7f
@ -289,6 +289,7 @@ $(eval $(call gen_spvtools_vendor_tables,$(SPVTOOLS_OUT_PATH),spv-amd-shader-bal
|
|||||||
$(eval $(call gen_spvtools_vendor_tables,$(SPVTOOLS_OUT_PATH),spv-amd-shader-explicit-vertex-parameter,""))
|
$(eval $(call gen_spvtools_vendor_tables,$(SPVTOOLS_OUT_PATH),spv-amd-shader-explicit-vertex-parameter,""))
|
||||||
$(eval $(call gen_spvtools_vendor_tables,$(SPVTOOLS_OUT_PATH),spv-amd-shader-trinary-minmax,""))
|
$(eval $(call gen_spvtools_vendor_tables,$(SPVTOOLS_OUT_PATH),spv-amd-shader-trinary-minmax,""))
|
||||||
$(eval $(call gen_spvtools_vendor_tables,$(SPVTOOLS_OUT_PATH),nonsemantic.clspvreflection,""))
|
$(eval $(call gen_spvtools_vendor_tables,$(SPVTOOLS_OUT_PATH),nonsemantic.clspvreflection,""))
|
||||||
|
$(eval $(call gen_spvtools_vendor_tables,$(SPVTOOLS_OUT_PATH),nonsemantic.vkspreflection,""))
|
||||||
|
|
||||||
define gen_spvtools_enum_string_mapping
|
define gen_spvtools_enum_string_mapping
|
||||||
$(call generate-file-dir,$(1)/extension_enum.inc.inc)
|
$(call generate-file-dir,$(1)/extension_enum.inc.inc)
|
||||||
|
@ -58,6 +58,8 @@ generate_vendor_tables(extension = "debuginfo")
|
|||||||
|
|
||||||
generate_vendor_tables(extension = "nonsemantic.clspvreflection")
|
generate_vendor_tables(extension = "nonsemantic.clspvreflection")
|
||||||
|
|
||||||
|
generate_vendor_tables(extension = "nonsemantic.vkspreflection")
|
||||||
|
|
||||||
generate_vendor_tables(
|
generate_vendor_tables(
|
||||||
extension = "opencl.debuginfo.100",
|
extension = "opencl.debuginfo.100",
|
||||||
operand_kind_prefix = "CLDEBUG100_",
|
operand_kind_prefix = "CLDEBUG100_",
|
||||||
@ -146,6 +148,7 @@ cc_library(
|
|||||||
":gen_opencl_tables_unified1",
|
":gen_opencl_tables_unified1",
|
||||||
":gen_vendor_tables_debuginfo",
|
":gen_vendor_tables_debuginfo",
|
||||||
":gen_vendor_tables_nonsemantic_clspvreflection",
|
":gen_vendor_tables_nonsemantic_clspvreflection",
|
||||||
|
":gen_vendor_tables_nonsemantic_vkspreflection",
|
||||||
":gen_vendor_tables_nonsemantic_shader_debuginfo_100",
|
":gen_vendor_tables_nonsemantic_shader_debuginfo_100",
|
||||||
":gen_vendor_tables_opencl_debuginfo_100",
|
":gen_vendor_tables_opencl_debuginfo_100",
|
||||||
":gen_vendor_tables_spv_amd_gcn_shader",
|
":gen_vendor_tables_spv_amd_gcn_shader",
|
||||||
|
4
BUILD.gn
4
BUILD.gn
@ -327,6 +327,10 @@ spvtools_vendor_tables = [
|
|||||||
"nonsemantic.clspvreflection",
|
"nonsemantic.clspvreflection",
|
||||||
"...nil...",
|
"...nil...",
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
"nonsemantic.vkspreflection",
|
||||||
|
"...nil...",
|
||||||
|
],
|
||||||
[
|
[
|
||||||
"nonsemantic.shader.debuginfo.100",
|
"nonsemantic.shader.debuginfo.100",
|
||||||
"SHDEBUG100_",
|
"SHDEBUG100_",
|
||||||
|
@ -333,6 +333,7 @@ typedef enum spv_ext_inst_type_t {
|
|||||||
SPV_EXT_INST_TYPE_OPENCL_DEBUGINFO_100,
|
SPV_EXT_INST_TYPE_OPENCL_DEBUGINFO_100,
|
||||||
SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION,
|
SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION,
|
||||||
SPV_EXT_INST_TYPE_NONSEMANTIC_SHADER_DEBUGINFO_100,
|
SPV_EXT_INST_TYPE_NONSEMANTIC_SHADER_DEBUGINFO_100,
|
||||||
|
SPV_EXT_INST_TYPE_NONSEMANTIC_VKSPREFLECTION,
|
||||||
|
|
||||||
// Multiple distinct extended instruction set types could return this
|
// Multiple distinct extended instruction set types could return this
|
||||||
// value, if they are prefixed with NonSemantic. and are otherwise
|
// value, if they are prefixed with NonSemantic. and are otherwise
|
||||||
|
@ -156,6 +156,7 @@ spvtools_vendor_tables("debuginfo" "debuginfo" "")
|
|||||||
spvtools_vendor_tables("opencl.debuginfo.100" "cldi100" "CLDEBUG100_")
|
spvtools_vendor_tables("opencl.debuginfo.100" "cldi100" "CLDEBUG100_")
|
||||||
spvtools_vendor_tables("nonsemantic.shader.debuginfo.100" "shdi100" "SHDEBUG100_")
|
spvtools_vendor_tables("nonsemantic.shader.debuginfo.100" "shdi100" "SHDEBUG100_")
|
||||||
spvtools_vendor_tables("nonsemantic.clspvreflection" "clspvreflection" "")
|
spvtools_vendor_tables("nonsemantic.clspvreflection" "clspvreflection" "")
|
||||||
|
spvtools_vendor_tables("nonsemantic.vkspreflection" "vkspreflection" "")
|
||||||
spvtools_extinst_lang_headers("DebugInfo" ${DEBUGINFO_GRAMMAR_JSON_FILE})
|
spvtools_extinst_lang_headers("DebugInfo" ${DEBUGINFO_GRAMMAR_JSON_FILE})
|
||||||
spvtools_extinst_lang_headers("OpenCLDebugInfo100" ${CLDEBUGINFO100_GRAMMAR_JSON_FILE})
|
spvtools_extinst_lang_headers("OpenCLDebugInfo100" ${CLDEBUGINFO100_GRAMMAR_JSON_FILE})
|
||||||
spvtools_extinst_lang_headers("NonSemanticShaderDebugInfo100" ${VKDEBUGINFO100_GRAMMAR_JSON_FILE})
|
spvtools_extinst_lang_headers("NonSemanticShaderDebugInfo100" ${VKDEBUGINFO100_GRAMMAR_JSON_FILE})
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "glsl.std.450.insts.inc"
|
#include "glsl.std.450.insts.inc"
|
||||||
#include "nonsemantic.clspvreflection.insts.inc"
|
#include "nonsemantic.clspvreflection.insts.inc"
|
||||||
#include "nonsemantic.shader.debuginfo.100.insts.inc"
|
#include "nonsemantic.shader.debuginfo.100.insts.inc"
|
||||||
|
#include "nonsemantic.vkspreflection.insts.inc"
|
||||||
#include "opencl.debuginfo.100.insts.inc"
|
#include "opencl.debuginfo.100.insts.inc"
|
||||||
#include "opencl.std.insts.inc"
|
#include "opencl.std.insts.inc"
|
||||||
|
|
||||||
@ -62,6 +63,9 @@ static const spv_ext_inst_group_t kGroups_1_0[] = {
|
|||||||
{SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION,
|
{SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION,
|
||||||
ARRAY_SIZE(nonsemantic_clspvreflection_entries),
|
ARRAY_SIZE(nonsemantic_clspvreflection_entries),
|
||||||
nonsemantic_clspvreflection_entries},
|
nonsemantic_clspvreflection_entries},
|
||||||
|
{SPV_EXT_INST_TYPE_NONSEMANTIC_VKSPREFLECTION,
|
||||||
|
ARRAY_SIZE(nonsemantic_vkspreflection_entries),
|
||||||
|
nonsemantic_vkspreflection_entries},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const spv_ext_inst_table_t kTable_1_0 = {ARRAY_SIZE(kGroups_1_0),
|
static const spv_ext_inst_table_t kTable_1_0 = {ARRAY_SIZE(kGroups_1_0),
|
||||||
@ -138,6 +142,9 @@ spv_ext_inst_type_t spvExtInstImportTypeGet(const char* name) {
|
|||||||
if (!strncmp("NonSemantic.ClspvReflection.", name, 28)) {
|
if (!strncmp("NonSemantic.ClspvReflection.", name, 28)) {
|
||||||
return SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION;
|
return SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION;
|
||||||
}
|
}
|
||||||
|
if (!strncmp("NonSemantic.VkspReflection.", name, 27)) {
|
||||||
|
return SPV_EXT_INST_TYPE_NONSEMANTIC_VKSPREFLECTION;
|
||||||
|
}
|
||||||
// ensure to add any known non-semantic extended instruction sets
|
// ensure to add any known non-semantic extended instruction sets
|
||||||
// above this point, and update spvExtInstIsNonSemantic()
|
// above this point, and update spvExtInstIsNonSemantic()
|
||||||
if (!strncmp("NonSemantic.", name, 12)) {
|
if (!strncmp("NonSemantic.", name, 12)) {
|
||||||
@ -149,7 +156,8 @@ spv_ext_inst_type_t spvExtInstImportTypeGet(const char* name) {
|
|||||||
bool spvExtInstIsNonSemantic(const spv_ext_inst_type_t type) {
|
bool spvExtInstIsNonSemantic(const spv_ext_inst_type_t type) {
|
||||||
if (type == SPV_EXT_INST_TYPE_NONSEMANTIC_UNKNOWN ||
|
if (type == SPV_EXT_INST_TYPE_NONSEMANTIC_UNKNOWN ||
|
||||||
type == SPV_EXT_INST_TYPE_NONSEMANTIC_SHADER_DEBUGINFO_100 ||
|
type == SPV_EXT_INST_TYPE_NONSEMANTIC_SHADER_DEBUGINFO_100 ||
|
||||||
type == SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION) {
|
type == SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION ||
|
||||||
|
type == SPV_EXT_INST_TYPE_NONSEMANTIC_VKSPREFLECTION) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -498,7 +498,7 @@ const Constant* ConstantManager::GetIntConst(uint64_t val, int32_t bitWidth,
|
|||||||
int32_t num_of_bit_to_ignore = 64 - bitWidth;
|
int32_t num_of_bit_to_ignore = 64 - bitWidth;
|
||||||
val = static_cast<int64_t>(val << num_of_bit_to_ignore) >>
|
val = static_cast<int64_t>(val << num_of_bit_to_ignore) >>
|
||||||
num_of_bit_to_ignore;
|
num_of_bit_to_ignore;
|
||||||
} else {
|
} else if (bitWidth < 64) {
|
||||||
// Clear the upper bit that are not used.
|
// Clear the upper bit that are not used.
|
||||||
uint64_t mask = ((1ull << bitWidth) - 1);
|
uint64_t mask = ((1ull << bitWidth) - 1);
|
||||||
val &= mask;
|
val &= mask;
|
||||||
@ -511,7 +511,7 @@ const Constant* ConstantManager::GetIntConst(uint64_t val, int32_t bitWidth,
|
|||||||
// If the value is more than 32-bit, we need to split the operands into two
|
// If the value is more than 32-bit, we need to split the operands into two
|
||||||
// 32-bit integers.
|
// 32-bit integers.
|
||||||
return GetConstant(
|
return GetConstant(
|
||||||
int_type, {static_cast<uint32_t>(val >> 32), static_cast<uint32_t>(val)});
|
int_type, {static_cast<uint32_t>(val), static_cast<uint32_t>(val >> 32)});
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t ConstantManager::GetUIntConstId(uint32_t val) {
|
uint32_t ConstantManager::GetUIntConstId(uint32_t val) {
|
||||||
|
@ -74,7 +74,7 @@ typedef struct spv_ext_inst_desc_t {
|
|||||||
const uint32_t ext_inst;
|
const uint32_t ext_inst;
|
||||||
const uint32_t numCapabilities;
|
const uint32_t numCapabilities;
|
||||||
const spv::Capability* capabilities;
|
const spv::Capability* capabilities;
|
||||||
const spv_operand_type_t operandTypes[16]; // TODO: Smaller/larger?
|
const spv_operand_type_t operandTypes[40]; // vksp needs at least 40
|
||||||
} spv_ext_inst_desc_t;
|
} spv_ext_inst_desc_t;
|
||||||
|
|
||||||
typedef struct spv_ext_inst_group_t {
|
typedef struct spv_ext_inst_group_t {
|
||||||
|
Loading…
Reference in New Issue
Block a user