From 727245a67443447aeec6f7281e8e65834974fbd1 Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 26 Jul 2023 12:23:32 -0700 Subject: Fix -fvk-u-shift not applying to RWStructuredBuffer on glsl output. (#3027) * Fix -fvk-u-shift not applying to RWStructuredBuffer on glsl output. * Add `transpose` to `ObjectToWorld4x3`. --------- Co-authored-by: Yong He --- source/slang/hlsl.meta.slang | 8 ++++---- source/slang/slang-emit-glsl.cpp | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'source') diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 58ddb1401..70b1f2151 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -5457,12 +5457,12 @@ __target_intrinsic(GL_NV_ray_tracing, "transpose(gl_WorldToObjectNV)") __target_intrinsic(GL_EXT_ray_tracing, "transpose(gl_WorldToObjectEXT)") float3x4 WorldToObject3x4(); -__target_intrinsic(GL_NV_ray_tracing, "(gl_ObjectToWorldNV)") -__target_intrinsic(GL_EXT_ray_tracing, "(gl_ObjectToWorld3x4EXT)") +__target_intrinsic(GL_NV_ray_tracing, "transpose(gl_ObjectToWorldNV)") +__target_intrinsic(GL_EXT_ray_tracing, "transpose(gl_ObjectToWorld3x4EXT)") float4x3 ObjectToWorld4x3(); -__target_intrinsic(GL_NV_ray_tracing, "(gl_WorldToObjectNV)") -__target_intrinsic(GL_EXT_ray_tracing, "(gl_WorldToObject3x4EXT)") +__target_intrinsic(GL_NV_ray_tracing, "transpose(gl_WorldToObjectNV)") +__target_intrinsic(GL_EXT_ray_tracing, "transpose(gl_WorldToObject3x4EXT)") float4x3 WorldToObject4x3(); // NOTE! diff --git a/source/slang/slang-emit-glsl.cpp b/source/slang/slang-emit-glsl.cpp index c377b40c6..37c38dd95 100644 --- a/source/slang/slang-emit-glsl.cpp +++ b/source/slang/slang-emit-glsl.cpp @@ -155,13 +155,14 @@ void GLSLSourceEmitter::_emitGLSLStructuredBuffer(IRGlobalParam* varDecl, IRHLSL m_writer->emit("layout("); m_writer->emit(getTargetReq()->getForceGLSLScalarBufferLayout() ? "scalar" : "std430"); - + bool isReadOnly = (as(structuredBufferType) != nullptr); auto layout = getVarLayout(varDecl); if (layout) { // We can use ShaderResource/DescriptorSlot interchangably here. // This is possible because vk-shift-* - const LayoutResourceKindFlags kinds = LayoutResourceKindFlag::ShaderResource | LayoutResourceKindFlag::DescriptorTableSlot; + const LayoutResourceKindFlags kinds = (isReadOnly ? LayoutResourceKindFlag::ShaderResource : LayoutResourceKindFlag::UnorderedAccess) + | LayoutResourceKindFlag::DescriptorTableSlot; EmitVarChain chain(layout); -- cgit v1.2.3