Fix storage packing qualifiers missing on "shaderRecordNV" buffers

This commit is contained in:
Patrick Mours 2019-06-05 13:29:01 +02:00
parent b1d406e481
commit 8d64d5e776
3 changed files with 7 additions and 4 deletions

View File

@ -1,7 +1,7 @@
#version 460
#extension GL_NV_ray_tracing : require
layout(shaderRecordNV) buffer sbt
layout(shaderRecordNV, std430) buffer sbt
{
vec3 direction;
float tmax;

View File

@ -1,7 +1,7 @@
#version 460
#extension GL_NV_ray_tracing : require
layout(shaderRecordNV) buffer sbt
layout(shaderRecordNV, std430) buffer sbt
{
vec3 direction;
float tmax;

View File

@ -1457,14 +1457,14 @@ string CompilerGLSL::layout_for_variable(const SPIRVariable &var)
// Do not emit set = decoration in regular GLSL output, but
// we need to preserve it in Vulkan GLSL mode.
if (var.storage != StorageClassPushConstant)
if (var.storage != StorageClassPushConstant && var.storage != StorageClassShaderRecordBufferNV)
{
if (flags.get(DecorationDescriptorSet) && options.vulkan_semantics)
attr.push_back(join("set = ", dec.set));
}
bool push_constant_block = options.vulkan_semantics && var.storage == StorageClassPushConstant;
bool ssbo_block = var.storage == StorageClassStorageBuffer ||
bool ssbo_block = var.storage == StorageClassStorageBuffer || var.storage == StorageClassShaderRecordBufferNV ||
(var.storage == StorageClassUniform && typeflags.get(DecorationBufferBlock));
bool emulated_ubo = var.storage == StorageClassPushConstant && options.emit_push_constant_as_uniform_buffer;
bool ubo_block = var.storage == StorageClassUniform && typeflags.get(DecorationBlock);
@ -1486,6 +1486,9 @@ string CompilerGLSL::layout_for_variable(const SPIRVariable &var)
if (!can_use_buffer_blocks && var.storage == StorageClassUniform)
can_use_binding = false;
if (var.storage == StorageClassShaderRecordBufferNV)
can_use_binding = false;
if (can_use_binding && flags.get(DecorationBinding))
attr.push_back(join("binding = ", dec.binding));