summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/backend
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-04-07 01:14:55 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:26 +0200
commite9a91bc5cc2c39b476ba8946f66930f5ab5608b2 (patch)
treead75617771ba4093c5609a505e3c8926668eb533 /src/shader_recompiler/backend
parentshader: Fix F2I (diff)
downloadyuzu-e9a91bc5cc2c39b476ba8946f66930f5ab5608b2.tar
yuzu-e9a91bc5cc2c39b476ba8946f66930f5ab5608b2.tar.gz
yuzu-e9a91bc5cc2c39b476ba8946f66930f5ab5608b2.tar.bz2
yuzu-e9a91bc5cc2c39b476ba8946f66930f5ab5608b2.tar.lz
yuzu-e9a91bc5cc2c39b476ba8946f66930f5ab5608b2.tar.xz
yuzu-e9a91bc5cc2c39b476ba8946f66930f5ab5608b2.tar.zst
yuzu-e9a91bc5cc2c39b476ba8946f66930f5ab5608b2.zip
Diffstat (limited to 'src/shader_recompiler/backend')
-rw-r--r--src/shader_recompiler/backend/spirv/emit_context.cpp54
-rw-r--r--src/shader_recompiler/backend/spirv/emit_context.h2
2 files changed, 28 insertions, 28 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_context.cpp b/src/shader_recompiler/backend/spirv/emit_context.cpp
index d01633628..b738e00cc 100644
--- a/src/shader_recompiler/backend/spirv/emit_context.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_context.cpp
@@ -130,8 +130,8 @@ EmitContext::EmitContext(const Profile& profile_, IR::Program& program, u32& bin
DefineSharedMemory(program);
DefineConstantBuffers(program.info, binding);
DefineStorageBuffers(program.info, binding);
- DefineTextures(program.info, binding);
DefineTextureBuffers(program.info, binding);
+ DefineTextures(program.info, binding);
DefineAttributeMemAccess(program.info);
DefineLabels(program);
}
@@ -516,6 +516,32 @@ void EmitContext::DefineStorageBuffers(const Info& info, u32& binding) {
}
}
+void EmitContext::DefineTextureBuffers(const Info& info, u32& binding) {
+ if (info.texture_buffer_descriptors.empty()) {
+ return;
+ }
+ 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)};
+ texture_buffers.reserve(info.texture_buffer_descriptors.size());
+ for (const TextureBufferDescriptor& desc : info.texture_buffer_descriptors) {
+ if (desc.count != 1) {
+ throw NotImplementedException("Array of texture buffers");
+ }
+ const Id id{AddGlobalVariable(type, spv::StorageClass::UniformConstant)};
+ Decorate(id, spv::Decoration::Binding, binding);
+ Decorate(id, spv::Decoration::DescriptorSet, 0U);
+ Name(id, fmt::format("texbuf{}_{:02x}", desc.cbuf_index, desc.cbuf_offset));
+ texture_buffers.insert(texture_buffers.end(), desc.count, id);
+ if (profile.supported_spirv >= 0x00010400) {
+ interfaces.push_back(id);
+ }
+ binding += desc.count;
+ }
+}
+
void EmitContext::DefineTextures(const Info& info, u32& binding) {
textures.reserve(info.texture_descriptors.size());
for (const TextureDescriptor& desc : info.texture_descriptors) {
@@ -544,32 +570,6 @@ void EmitContext::DefineTextures(const Info& info, u32& binding) {
}
}
-void EmitContext::DefineTextureBuffers(const Info& info, u32& binding) {
- if (info.texture_buffer_descriptors.empty()) {
- return;
- }
- 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)};
- texture_buffers.reserve(info.texture_buffer_descriptors.size());
- for (const TextureBufferDescriptor& desc : info.texture_buffer_descriptors) {
- if (desc.count != 1) {
- throw NotImplementedException("Array of texture buffers");
- }
- const Id id{AddGlobalVariable(type, spv::StorageClass::UniformConstant)};
- Decorate(id, spv::Decoration::Binding, binding);
- Decorate(id, spv::Decoration::DescriptorSet, 0U);
- Name(id, fmt::format("texbuf{}_{:02x}", desc.cbuf_index, desc.cbuf_offset));
- texture_buffers.insert(texture_buffers.end(), desc.count, id);
- if (profile.supported_spirv >= 0x00010400) {
- interfaces.push_back(id);
- }
- binding += desc.count;
- }
-}
-
void EmitContext::DefineLabels(IR::Program& program) {
for (IR::Block* const block : program.blocks) {
block->SetDefinition(OpLabel());
diff --git a/src/shader_recompiler/backend/spirv/emit_context.h b/src/shader_recompiler/backend/spirv/emit_context.h
index 2a10e94e5..f1ac4430c 100644
--- a/src/shader_recompiler/backend/spirv/emit_context.h
+++ b/src/shader_recompiler/backend/spirv/emit_context.h
@@ -154,8 +154,8 @@ private:
void DefineSharedMemory(const IR::Program& program);
void DefineConstantBuffers(const Info& info, u32& binding);
void DefineStorageBuffers(const Info& info, u32& binding);
- void DefineTextures(const Info& info, u32& binding);
void DefineTextureBuffers(const Info& info, u32& binding);
+ void DefineTextures(const Info& info, u32& binding);
void DefineAttributeMemAccess(const Info& info);
void DefineLabels(IR::Program& program);