Compare commits
1 Commits
android-80
...
android-79
Author | SHA1 | Date | |
---|---|---|---|
0be509b7c4 |
@ -50,7 +50,6 @@ import org.yuzu.yuzu_emu.model.TaskViewModel
|
|||||||
import org.yuzu.yuzu_emu.utils.*
|
import org.yuzu.yuzu_emu.utils.*
|
||||||
import java.io.BufferedInputStream
|
import java.io.BufferedInputStream
|
||||||
import java.io.BufferedOutputStream
|
import java.io.BufferedOutputStream
|
||||||
import java.io.FileInputStream
|
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
import java.util.zip.ZipEntry
|
import java.util.zip.ZipEntry
|
||||||
import java.util.zip.ZipInputStream
|
import java.util.zip.ZipInputStream
|
||||||
@ -640,15 +639,7 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
|
|||||||
file.path.length
|
file.path.length
|
||||||
)
|
)
|
||||||
stream.putNextEntry(ZipEntry(newPath))
|
stream.putNextEntry(ZipEntry(newPath))
|
||||||
|
stream.write(file.readBytes())
|
||||||
val buffer = ByteArray(8096)
|
|
||||||
var read: Int
|
|
||||||
FileInputStream(file).use { fis ->
|
|
||||||
while (fis.read(buffer).also { read = it } != -1) {
|
|
||||||
stream.write(buffer, 0, read)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stream.closeEntry()
|
stream.closeEntry()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,12 +7,15 @@
|
|||||||
|
|
||||||
namespace Shader::Backend::SPIRV {
|
namespace Shader::Backend::SPIRV {
|
||||||
namespace {
|
namespace {
|
||||||
Id Image(EmitContext& ctx, IR::TextureInstInfo info) {
|
Id Image(EmitContext& ctx, const IR::Value& index, IR::TextureInstInfo info) {
|
||||||
|
if (!index.IsImmediate()) {
|
||||||
|
throw NotImplementedException("Indirect image indexing");
|
||||||
|
}
|
||||||
if (info.type == TextureType::Buffer) {
|
if (info.type == TextureType::Buffer) {
|
||||||
const ImageBufferDefinition def{ctx.image_buffers.at(info.descriptor_index)};
|
const ImageBufferDefinition def{ctx.image_buffers.at(index.U32())};
|
||||||
return def.id;
|
return def.id;
|
||||||
} else {
|
} else {
|
||||||
const ImageDefinition def{ctx.images.at(info.descriptor_index)};
|
const ImageDefinition def{ctx.images.at(index.U32())};
|
||||||
return def.id;
|
return def.id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -25,12 +28,8 @@ std::pair<Id, Id> AtomicArgs(EmitContext& ctx) {
|
|||||||
|
|
||||||
Id ImageAtomicU32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords, Id value,
|
Id ImageAtomicU32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords, Id value,
|
||||||
Id (Sirit::Module::*atomic_func)(Id, Id, Id, Id, Id)) {
|
Id (Sirit::Module::*atomic_func)(Id, Id, Id, Id, Id)) {
|
||||||
if (!index.IsImmediate() || index.U32() != 0) {
|
|
||||||
// TODO: handle layers
|
|
||||||
throw NotImplementedException("Image indexing");
|
|
||||||
}
|
|
||||||
const auto info{inst->Flags<IR::TextureInstInfo>()};
|
const auto info{inst->Flags<IR::TextureInstInfo>()};
|
||||||
const Id image{Image(ctx, info)};
|
const Id image{Image(ctx, index, info)};
|
||||||
const Id pointer{ctx.OpImageTexelPointer(ctx.image_u32, image, coords, ctx.Const(0U))};
|
const Id pointer{ctx.OpImageTexelPointer(ctx.image_u32, image, coords, ctx.Const(0U))};
|
||||||
const auto [scope, semantics]{AtomicArgs(ctx)};
|
const auto [scope, semantics]{AtomicArgs(ctx)};
|
||||||
return (ctx.*atomic_func)(ctx.U32[1], pointer, scope, semantics, value);
|
return (ctx.*atomic_func)(ctx.U32[1], pointer, scope, semantics, value);
|
||||||
|
@ -74,6 +74,11 @@ spv::ImageFormat GetImageFormat(ImageFormat format) {
|
|||||||
throw InvalidArgument("Invalid image format {}", format);
|
throw InvalidArgument("Invalid image format {}", format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spv::ImageFormat GetImageFormatForBuffer(ImageFormat format) {
|
||||||
|
const auto spv_format = GetImageFormat(format);
|
||||||
|
return spv_format == spv::ImageFormat::Unknown ? spv::ImageFormat::R32ui : spv_format;
|
||||||
|
}
|
||||||
|
|
||||||
Id ImageType(EmitContext& ctx, const ImageDescriptor& desc) {
|
Id ImageType(EmitContext& ctx, const ImageDescriptor& desc) {
|
||||||
const spv::ImageFormat format{GetImageFormat(desc.format)};
|
const spv::ImageFormat format{GetImageFormat(desc.format)};
|
||||||
const Id type{ctx.U32[1]};
|
const Id type{ctx.U32[1]};
|
||||||
@ -1270,7 +1275,7 @@ void EmitContext::DefineImageBuffers(const Info& info, u32& binding) {
|
|||||||
if (desc.count != 1) {
|
if (desc.count != 1) {
|
||||||
throw NotImplementedException("Array of image buffers");
|
throw NotImplementedException("Array of image buffers");
|
||||||
}
|
}
|
||||||
const spv::ImageFormat format{GetImageFormat(desc.format)};
|
const spv::ImageFormat format{GetImageFormatForBuffer(desc.format)};
|
||||||
const Id image_type{TypeImage(U32[1], spv::Dim::Buffer, false, false, false, 2, format)};
|
const Id image_type{TypeImage(U32[1], spv::Dim::Buffer, false, false, false, 2, format)};
|
||||||
const Id pointer_type{TypePointer(spv::StorageClass::UniformConstant, image_type)};
|
const Id pointer_type{TypePointer(spv::StorageClass::UniformConstant, image_type)};
|
||||||
const Id id{AddGlobalVariable(pointer_type, spv::StorageClass::UniformConstant)};
|
const Id id{AddGlobalVariable(pointer_type, spv::StorageClass::UniformConstant)};
|
||||||
|
Reference in New Issue
Block a user