Browse Source

shader_recompiler: skip sampler for buffer textures (#11435)

pull/15/merge
liamwhite 2 years ago
committed by GitHub
parent
commit
eb4ddb2868
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
  2. 3
      src/shader_recompiler/backend/spirv/spirv_emit_context.cpp
  3. 1
      src/shader_recompiler/backend/spirv/spirv_emit_context.h

4
src/shader_recompiler/backend/spirv/emit_spirv_image.cpp

@ -204,9 +204,7 @@ Id TextureImage(EmitContext& ctx, IR::TextureInstInfo info, const IR::Value& ind
if (def.count > 1) {
throw NotImplementedException("Indirect texture sample");
}
const Id sampler_id{def.id};
const Id id{ctx.OpLoad(ctx.sampled_texture_buffer_type, sampler_id)};
return ctx.OpImage(ctx.image_buffer_type, id);
return ctx.OpLoad(ctx.image_buffer_type, def.id);
} else {
const TextureDefinition& def{ctx.textures.at(info.descriptor_index)};
if (def.count > 1) {

3
src/shader_recompiler/backend/spirv/spirv_emit_context.cpp

@ -1247,9 +1247,8 @@ void EmitContext::DefineTextureBuffers(const Info& info, u32& binding) {
}
const spv::ImageFormat format{spv::ImageFormat::Unknown};
image_buffer_type = TypeImage(F32[1], spv::Dim::Buffer, 0U, false, false, 1, format);
sampled_texture_buffer_type = TypeSampledImage(image_buffer_type);
const Id type{TypePointer(spv::StorageClass::UniformConstant, sampled_texture_buffer_type)};
const Id type{TypePointer(spv::StorageClass::UniformConstant, image_buffer_type)};
texture_buffers.reserve(info.texture_buffer_descriptors.size());
for (const TextureBufferDescriptor& desc : info.texture_buffer_descriptors) {
if (desc.count != 1) {

1
src/shader_recompiler/backend/spirv/spirv_emit_context.h

@ -206,7 +206,6 @@ public:
Id output_u32{};
Id image_buffer_type{};
Id sampled_texture_buffer_type{};
Id image_u32{};
std::array<UniformDefinitions, Info::MAX_CBUFS> cbufs{};

Loading…
Cancel
Save