gl: use real texture names when fixing bindings

This commit is contained in:
chyyran 2022-11-24 02:08:58 -05:00
parent daea19b5a2
commit 6d11323520
3 changed files with 7 additions and 8 deletions

View file

@ -7,7 +7,7 @@ use crate::reflect::ReflectShader;
pub type GlVersion = spirv_cross::glsl::Version;
pub struct GlslangGlslContext {
pub sampler_bindings: Vec<u32>,
pub sampler_bindings: Vec<(String, u32)>,
pub compiler: CompiledAst<spirv_cross::glsl::Target>,
}

View file

@ -792,15 +792,15 @@ impl CompileShader<GLSL> for CrossReflect<glsl::Target> {
}
let mut texture_fixups = Vec::new();
for res in &fragment_resources.sampled_images {
for res in fragment_resources.sampled_images {
let binding = self.fragment.get_decoration(res.id, Decoration::Binding)?;
self.fragment
.set_name(res.id, &format!("LIBRA_TEXTURE_{binding}"))?;
self.fragment
.unset_decoration(res.id, Decoration::DescriptorSet)?;
self.fragment
.unset_decoration(res.id, Decoration::Binding)?;
texture_fixups.push(binding);
let mut name = res.name;
name.push('\0');
texture_fixups.push((name, binding));
}
Ok(ShaderCompilerOutput {

View file

@ -402,10 +402,9 @@ impl FilterChain {
gl::UseProgram(program);
for binding in &glsl.context.sampler_bindings {
let loc_name = format!("LIBRA_TEXTURE_{}\0", *binding);
for (name, binding) in &glsl.context.sampler_bindings {
let location =
gl::GetUniformLocation(program, loc_name.as_str().as_ptr().cast());
gl::GetUniformLocation(program, name.as_str().as_ptr().cast());
if location >= 0 {
// eprintln!("setting sampler {location} to sample from {binding}");
gl::Uniform1i(location, *binding as GLint);