summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--slang-gfx.h1
-rw-r--r--source/slang/slang-profile-defs.h4
-rw-r--r--tools/gfx/d3d12/d3d12-device.cpp72
-rw-r--r--tools/gfx/debug-layer/debug-command-encoder.cpp2
4 files changed, 43 insertions, 36 deletions
diff --git a/slang-gfx.h b/slang-gfx.h
index 18395e3f2..b4ab50517 100644
--- a/slang-gfx.h
+++ b/slang-gfx.h
@@ -2562,6 +2562,7 @@ struct D3D12DeviceExtendedDesc
StructType structType = StructType::D3D12DeviceExtendedDesc;
const char* rootParameterShaderAttributeName = nullptr;
bool debugBreakOnD3D12Error = false;
+ uint32_t highestShaderModel = 0;
};
}
diff --git a/source/slang/slang-profile-defs.h b/source/slang/slang-profile-defs.h
index 64522005a..acef8cb0a 100644
--- a/source/slang/slang-profile-defs.h
+++ b/source/slang/slang-profile-defs.h
@@ -104,6 +104,7 @@ PROFILE_VERSION(DX_6_3, DX)
PROFILE_VERSION(DX_6_4, DX)
PROFILE_VERSION(DX_6_5, DX)
PROFILE_VERSION(DX_6_6, DX)
+PROFILE_VERSION(DX_6_7, DX)
PROFILE_VERSION(GLSL_110, GLSL)
PROFILE_VERSION(GLSL_120, GLSL)
@@ -210,6 +211,7 @@ PROFILE(DX_Lib_6_3, lib_6_3, Unknown, DX_6_3)
PROFILE(DX_Lib_6_4, lib_6_4, Unknown, DX_6_4)
PROFILE(DX_Lib_6_5, lib_6_5, Unknown, DX_6_5)
PROFILE(DX_Lib_6_6, lib_6_6, Unknown, DX_6_6)
+PROFILE(DX_Lib_6_7, lib_6_7, Unknown, DX_6_7)
PROFILE_ALIAS(DX_None_6_1, DX_Lib_6_1, sm_6_1)
PROFILE_ALIAS(DX_None_6_2, DX_Lib_6_2, sm_6_2)
@@ -217,6 +219,8 @@ PROFILE_ALIAS(DX_None_6_3, DX_Lib_6_3, sm_6_3)
PROFILE_ALIAS(DX_None_6_4, DX_Lib_6_4, sm_6_4)
PROFILE_ALIAS(DX_None_6_5, DX_Lib_6_5, sm_6_5)
PROFILE_ALIAS(DX_None_6_6, DX_Lib_6_6, sm_6_6)
+PROFILE_ALIAS(DX_None_6_7, DX_Lib_6_7, sm_6_7)
+
// Define all the GLSL profiles
diff --git a/tools/gfx/d3d12/d3d12-device.cpp b/tools/gfx/d3d12/d3d12-device.cpp
index c1db6c6ba..2d9780b0f 100644
--- a/tools/gfx/d3d12/d3d12-device.cpp
+++ b/tools/gfx/d3d12/d3d12-device.cpp
@@ -33,6 +33,28 @@ using namespace Slang;
static const uint32_t D3D_FEATURE_LEVEL_12_2 = 0xc200;
+struct ShaderModelInfo
+{
+ D3D_SHADER_MODEL shaderModel;
+ SlangCompileTarget compileTarget;
+ const char* profileName;
+};
+static ShaderModelInfo kKnownShaderModels[] = {
+#define SHADER_MODEL_INFO_DXBC(major, minor) {D3D_SHADER_MODEL_##major##_##minor, SLANG_DXBC, "sm_" #major "_" #minor }
+ SHADER_MODEL_INFO_DXBC(5, 1),
+#undef SHADER_MODEL_INFO_DXBC
+#define SHADER_MODEL_INFO_DXIL(major, minor) {(D3D_SHADER_MODEL)0x##major##minor, SLANG_DXIL, "sm_" #major "_" #minor }
+ SHADER_MODEL_INFO_DXIL(6, 0),
+ SHADER_MODEL_INFO_DXIL(6, 1),
+ SHADER_MODEL_INFO_DXIL(6, 2),
+ SHADER_MODEL_INFO_DXIL(6, 3),
+ SHADER_MODEL_INFO_DXIL(6, 4),
+ SHADER_MODEL_INFO_DXIL(6, 5),
+ SHADER_MODEL_INFO_DXIL(6, 6),
+ SHADER_MODEL_INFO_DXIL(6, 7)
+#undef SHADER_MODEL_INFO_DXIL
+};
+
Result DeviceImpl::createBuffer(
const D3D12_RESOURCE_DESC& resourceDesc,
const void* srcData,
@@ -579,7 +601,10 @@ Result DeviceImpl::initialize(const Desc& desc)
}
D3D12_FEATURE_DATA_SHADER_MODEL shaderModelData = {};
- shaderModelData.HighestShaderModel = D3D_SHADER_MODEL_6_6;
+ if (m_extendedDesc.highestShaderModel != 0)
+ shaderModelData.HighestShaderModel = (D3D_SHADER_MODEL)m_extendedDesc.highestShaderModel;
+ else
+ shaderModelData.HighestShaderModel = kKnownShaderModels[SLANG_COUNT_OF(kKnownShaderModels)-1].shaderModel;
// Find what features are supported
{
@@ -744,42 +769,19 @@ Result DeviceImpl::initialize(const Desc& desc)
// Check shader model version.
SlangCompileTarget compileTarget = SLANG_DXBC;
const char* profileName = "sm_5_1";
- switch (shaderModelData.HighestShaderModel)
+ for (auto& sm : kKnownShaderModels)
{
- case D3D_SHADER_MODEL_5_1:
- compileTarget = SLANG_DXBC;
- profileName = "sm_5_1";
- break;
- case D3D_SHADER_MODEL_6_0:
- compileTarget = SLANG_DXIL;
- profileName = "sm_6_0";
- break;
- case D3D_SHADER_MODEL_6_1:
- compileTarget = SLANG_DXIL;
- profileName = "sm_6_1";
- break;
- case D3D_SHADER_MODEL_6_2:
- compileTarget = SLANG_DXIL;
- profileName = "sm_6_2";
- break;
- case D3D_SHADER_MODEL_6_3:
- compileTarget = SLANG_DXIL;
- profileName = "sm_6_3";
- break;
- case D3D_SHADER_MODEL_6_4:
- compileTarget = SLANG_DXIL;
- profileName = "sm_6_4";
- break;
- case D3D_SHADER_MODEL_6_5:
- compileTarget = SLANG_DXIL;
- profileName = "sm_6_5";
- break;
- default:
- compileTarget = SLANG_DXIL;
- profileName = "sm_6_6";
- break;
+ if (sm.shaderModel <= shaderModelData.HighestShaderModel)
+ {
+ m_features.add(sm.profileName);
+ profileName = sm.profileName;
+ compileTarget = sm.compileTarget;
+ }
+ else
+ {
+ break;
+ }
}
- m_features.add(profileName);
// If user specified a higher shader model than what the system supports, return failure.
int userSpecifiedShaderModel = D3DUtil::getShaderModelFromProfileName(desc.slang.targetProfile);
if (userSpecifiedShaderModel > shaderModelData.HighestShaderModel)
diff --git a/tools/gfx/debug-layer/debug-command-encoder.cpp b/tools/gfx/debug-layer/debug-command-encoder.cpp
index b8b005338..64ebd2b46 100644
--- a/tools/gfx/debug-layer/debug-command-encoder.cpp
+++ b/tools/gfx/debug-layer/debug-command-encoder.cpp
@@ -346,7 +346,7 @@ void DebugResourceCommandEncoderImpl::resolveQuery(
IQueryPool* queryPool, GfxIndex index, GfxCount count, IBufferResource* buffer, Offset offset)
{
SLANG_GFX_API_FUNC;
- getBaseResourceEncoder()->resolveQuery(getInnerObj(queryPool), index, count, buffer, offset);
+ getBaseResourceEncoder()->resolveQuery(getInnerObj(queryPool), index, count, getInnerObj(buffer), offset);
}
void DebugResourceCommandEncoderImpl::copyTextureToBuffer(