NVIDIA Releases GLSL Generator for DescriptorSet Indexed Types

Published April 29, 2019
Advertisement

NVIDIA recently released an open source sample of a GLSL header generator for DescriptorSet-indexed types in Vulkan. The project demonstrates how to simplify usage of VK_EXT_descriptor_indexing and GL_EXT_nonuniform_qualifier within GLSL. A script generates structure and function overloads to hide the code for indexing descriptor sets of samplers and textures.

For example, the tool turns:


// BEFORE

// we use a big resource table for descriptorset indexing
layout(set = 0, binding=0) uniform sampler2D  res_tex2Ds[];

// let's make use of GL_EXT_buffer_reference2
layout(buffer_reference, scalar) buffer Material {
  // we want to be cache efficient 
  uint16_t albedoTex;
  uint16_t normalTex;
  ...
};

layout(push_constant, scalar) uniform inputData {
  Material materials;
};

  // example usage
  Material  mat = materials[idx];
  
  // if idx varies non-uniformly (e.g. raytracing)
  // our texture fetches can start to look pretty ugly
  
  vec4 albedo = texture(res_tex2Ds[nonuniformEXT(uint(mat.albedoTex))], uv);

into:


// AFTER

// where descriptorsets start that are used for indexing
#define DIT_DSET_IDX 0

// this file is generated by the lua script
#include "sampler_indexed_types.glsl"

layout(buffer_reference, scalar) buffer Material {
  // new types are available
  // for example: struct sampler2D_u16 { uint16_t idx; }
  
  sampler2D_u16 albedoTex;
  sampler2D_u16 normalTex;
  ...
};

layout(push_constant, scalar) uniform inputData {
  Material materials;
};

  // example usage
  Material  mat = materials[idx];
  
  // much nicer looking access
  vec4 albedo = texture(mat.albedoTex, uv);

Check out the blog post for more information and the Github project here.

Cancel Save
0 likes 2 comments

Comments

Emery11

NVIDIA has released a new GLSL generator for DescriptorSet indexed types. The new feature allows users to use the GLSL language to create custom shaders and then compile them into programs that can be run on NVIDIA GPUs. Try this Facebook advertising services Las Vegas for best advertising services. The new descriptor set indexed types allow developers to create more powerful and flexible vertex and fragment shaders by allowing them to access data in the GPU's registers, memory or texture at runtime.

October 25, 2022 10:15 AM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Profile
Author
Advertisement
Advertisement