diff options
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-emit-cuda.cpp | 2 | ||||
| -rw-r--r-- | source/slang/slang-ir-entry-point-uniforms.cpp | 2 | ||||
| -rw-r--r-- | source/slang/slang-type-layout.cpp | 54 |
3 files changed, 52 insertions, 6 deletions
diff --git a/source/slang/slang-emit-cuda.cpp b/source/slang/slang-emit-cuda.cpp index 12807e9e2..39a25aafa 100644 --- a/source/slang/slang-emit-cuda.cpp +++ b/source/slang/slang-emit-cuda.cpp @@ -509,7 +509,7 @@ void CUDASourceEmitter::emitModuleImpl(IRModule* module) // Output all the thread locals for (auto action : actions) { - if (action.level == EmitAction::Level::Definition && _isVariable(action.inst->op)) + if (action.level == EmitAction::Level::Definition && action.inst->op == kIROp_GlobalVar) { emitGlobalInst(action.inst); } diff --git a/source/slang/slang-ir-entry-point-uniforms.cpp b/source/slang/slang-ir-entry-point-uniforms.cpp index ad535b747..388a7004d 100644 --- a/source/slang/slang-ir-entry-point-uniforms.cpp +++ b/source/slang/slang-ir-entry-point-uniforms.cpp @@ -452,6 +452,8 @@ void moveEntryPointUniformParamsToGlobalScope( case CodeGenTarget::Executable: case CodeGenTarget::SharedLibrary: case CodeGenTarget::HostCallable: + case CodeGenTarget::CUDASource: + case CodeGenTarget::PTX: { context.targetNeedsConstantBuffer = false; break; diff --git a/source/slang/slang-type-layout.cpp b/source/slang/slang-type-layout.cpp index 772686163..644f54a95 100644 --- a/source/slang/slang-type-layout.cpp +++ b/source/slang/slang-type-layout.cpp @@ -730,11 +730,55 @@ struct CPUObjectLayoutRulesImpl : ObjectLayoutRulesImpl }; -// TODO(JS): Most likely wrong! Use CPU layout for CUDA for now +// TODO(JS): Most likely wrong! Assumes largely CPU layout which is probably not right struct CUDAObjectLayoutRulesImpl : CPUObjectLayoutRulesImpl { typedef CPUObjectLayoutRulesImpl Super; + virtual SimpleLayoutInfo GetObjectLayout(ShaderParameterKind kind) override + { + switch (kind) + { + case ShaderParameterKind::ConstantBuffer: + // It's a pointer to the actual uniform data + return SimpleLayoutInfo(LayoutResourceKind::Uniform, sizeof(void*), sizeof(void*)); + + case ShaderParameterKind::MutableTexture: + case ShaderParameterKind::TextureUniformBuffer: + case ShaderParameterKind::Texture: + // It's a pointer to a texture interface + return SimpleLayoutInfo(LayoutResourceKind::Uniform, sizeof(void*), sizeof(void*)); + + case ShaderParameterKind::StructuredBuffer: + case ShaderParameterKind::MutableStructuredBuffer: + // TODO(JS): We are just storing as a pointer for now + // It's a ptr and a size of the amount of elements + return SimpleLayoutInfo(LayoutResourceKind::Uniform, sizeof(void*), sizeof(void*)); + + case ShaderParameterKind::RawBuffer: + case ShaderParameterKind::Buffer: + case ShaderParameterKind::MutableRawBuffer: + case ShaderParameterKind::MutableBuffer: + + // TODO(JS): We are storing as a pointer for now + + // It's a pointer and a size in bytes + return SimpleLayoutInfo(LayoutResourceKind::Uniform, sizeof(void*), sizeof(void*)); + + case ShaderParameterKind::SamplerState: + // It's a pointer + return SimpleLayoutInfo(LayoutResourceKind::Uniform, sizeof(void*), sizeof(void*)); + + case ShaderParameterKind::TextureSampler: + case ShaderParameterKind::MutableTextureSampler: + case ShaderParameterKind::InputRenderTarget: + // TODO: how to handle these? + default: + SLANG_UNEXPECTED("unhandled shader parameter kind"); + UNREACHABLE_RETURN(SimpleLayoutInfo()); + } + } + }; static CPUObjectLayoutRulesImpl kCPUObjectLayoutRulesImpl; @@ -747,10 +791,10 @@ LayoutRulesImpl kCPULayoutRulesImpl_ = { // CUDA static CUDAObjectLayoutRulesImpl kCUDAObjectLayoutRulesImpl; -static CUDALayoutRulesImpl kCUALayoutRulesImpl; +static CUDALayoutRulesImpl kCUDALayoutRulesImpl; LayoutRulesImpl kCUDALayoutRulesImpl_ = { - &kCPULayoutRulesFamilyImpl, &kCUALayoutRulesImpl, &kCUDAObjectLayoutRulesImpl, + &kCUDALayoutRulesFamilyImpl, &kCUDALayoutRulesImpl, &kCUDAObjectLayoutRulesImpl, }; @@ -1033,12 +1077,12 @@ LayoutRulesImpl* CPULayoutRulesFamilyImpl::getStructuredBufferRules() LayoutRulesImpl* CUDALayoutRulesFamilyImpl::getConstantBufferRules() { - return &kCPULayoutRulesImpl_; + return &kCUDALayoutRulesImpl_; } LayoutRulesImpl* CUDALayoutRulesFamilyImpl::getPushConstantBufferRules() { - return &kCPULayoutRulesImpl_; + return &kCUDALayoutRulesImpl_; } LayoutRulesImpl* CUDALayoutRulesFamilyImpl::getTextureBufferRules() |
