Skip to content

Commit 4582986

Browse files
Inject aux Slang code
1 parent 2d363dc commit 4582986

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

lvk/vulkan/VulkanClasses.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5827,6 +5827,39 @@ lvk::ShaderModuleState lvk::VulkanContext::createShaderModuleFromSlang(ShaderSta
58275827
const char* source,
58285828
const char* debugName,
58295829
Result* outResult) const {
5830+
std::string sourcePatched;
5831+
5832+
if (!source || !*source) {
5833+
Result::setResult(outResult, Result::Code::ArgumentOutOfRange, "Shader source is empty");
5834+
return {};
5835+
}
5836+
5837+
auto addCode = [source, &sourcePatched](const char* substr, const char* code) -> void {
5838+
if (strstr(source, substr)) {
5839+
sourcePatched.append(code);
5840+
}
5841+
};
5842+
5843+
// bindless texture and sampler arrays
5844+
sourcePatched +=
5845+
"[[vk::binding(0, 0)]] Texture2D kTextures2D[];\n"
5846+
"[[vk::binding(0, 1)]] Texture3D kTextures3D[];\n"
5847+
"[[vk::binding(0, 2)]] TextureCube kTexturesCube[];\n"
5848+
"[[vk::binding(1, 0)]] SamplerState kSamplers[];\n";
5849+
addCode("textureBindless2D(",
5850+
"float4 textureBindless2D(uint textureid, uint samplerid, float2 uv) {\n"
5851+
" return kTextures2D[NonUniformResourceIndex(textureid)].Sample(\n"
5852+
" kSamplers[NonUniformResourceIndex(samplerid)], uv);\n"
5853+
"}\n");
5854+
addCode("textureBindlessCube(",
5855+
"float4 textureBindlessCube(uint textureid, uint samplerid, float3 dir) {\n"
5856+
" return kTexturesCube[NonUniformResourceIndex(textureid)].Sample(\n"
5857+
" kSamplers[NonUniformResourceIndex(samplerid)], dir);\n"
5858+
"}\n");
5859+
5860+
sourcePatched += source;
5861+
source = sourcePatched.c_str();
5862+
58305863
std::vector<uint8_t> spirv;
58315864
lvk::Result::setResult(outResult, lvk::compileShaderSlang(stage, source, &spirv));
58325865

samples/009_TriplanarMapping.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,6 @@ void vertexMain(uint vertexID : SV_VertexID,
6868
output.normal = normalize(float3(v.x, v.y, v.z)); // object space normal
6969
}
7070
71-
// bindless texture and sampler arrays
72-
[[vk::binding(0, 0)]] Texture2D kTextures2D[];
73-
[[vk::binding(1, 0)]] SamplerState kSamplers[];
74-
75-
float4 textureBindless2D(uint textureid, uint samplerid, float2 uv) {
76-
return kTextures2D[NonUniformResourceIndex(textureid)].Sample(
77-
kSamplers[NonUniformResourceIndex(samplerid)], uv);
78-
}
79-
8071
float4 triplanar(uint tex, float3 worldPos, float3 normal) {
8172
// generate weights, show texture on both sides of the object (positive and negative)
8273
float3 weights = abs(normal);

0 commit comments

Comments
 (0)