early-access version 3805
This commit is contained in:
parent
1c590ac5e9
commit
276173afdd
7 changed files with 489 additions and 582 deletions
|
@ -1,7 +1,7 @@
|
||||||
yuzu emulator early access
|
yuzu emulator early access
|
||||||
=============
|
=============
|
||||||
|
|
||||||
This is the source code for early-access 3804.
|
This is the source code for early-access 3805.
|
||||||
|
|
||||||
## Legal Notice
|
## Legal Notice
|
||||||
|
|
||||||
|
|
|
@ -449,6 +449,7 @@ Status BufferQueueProducer::QueueBuffer(s32 slot, const QueueBufferInput& input,
|
||||||
case NativeWindowScalingMode::ScaleToWindow:
|
case NativeWindowScalingMode::ScaleToWindow:
|
||||||
case NativeWindowScalingMode::ScaleCrop:
|
case NativeWindowScalingMode::ScaleCrop:
|
||||||
case NativeWindowScalingMode::NoScaleCrop:
|
case NativeWindowScalingMode::NoScaleCrop:
|
||||||
|
case NativeWindowScalingMode::PreserveAspectRatio:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG_ERROR(Service_Nvnflinger, "unknown scaling mode {}", scaling_mode);
|
LOG_ERROR(Service_Nvnflinger, "unknown scaling mode {}", scaling_mode);
|
||||||
|
|
|
@ -41,6 +41,7 @@ enum class NativeWindowScalingMode : s32 {
|
||||||
ScaleToWindow = 1,
|
ScaleToWindow = 1,
|
||||||
ScaleCrop = 2,
|
ScaleCrop = 2,
|
||||||
NoScaleCrop = 3,
|
NoScaleCrop = 3,
|
||||||
|
PreserveAspectRatio = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Transform parameter for QueueBuffer
|
/// Transform parameter for QueueBuffer
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -220,7 +220,8 @@ GraphicsPipeline::GraphicsPipeline(const Device& device, TextureCache& texture_c
|
||||||
ASSERT(num_textures <= MAX_TEXTURES);
|
ASSERT(num_textures <= MAX_TEXTURES);
|
||||||
ASSERT(num_images <= MAX_IMAGES);
|
ASSERT(num_images <= MAX_IMAGES);
|
||||||
|
|
||||||
const bool assembly_shaders{assembly_programs[0].handle != 0};
|
const auto backend = device.GetShaderBackend();
|
||||||
|
const bool assembly_shaders{backend == Settings::ShaderBackend::Glasm};
|
||||||
use_storage_buffers =
|
use_storage_buffers =
|
||||||
!assembly_shaders || num_storage_buffers <= device.GetMaxGLASMStorageBufferBlocks();
|
!assembly_shaders || num_storage_buffers <= device.GetMaxGLASMStorageBufferBlocks();
|
||||||
writes_global_memory &= !use_storage_buffers;
|
writes_global_memory &= !use_storage_buffers;
|
||||||
|
@ -230,7 +231,6 @@ GraphicsPipeline::GraphicsPipeline(const Device& device, TextureCache& texture_c
|
||||||
GenerateTransformFeedbackState();
|
GenerateTransformFeedbackState();
|
||||||
}
|
}
|
||||||
const bool in_parallel = thread_worker != nullptr;
|
const bool in_parallel = thread_worker != nullptr;
|
||||||
const auto backend = device.GetShaderBackend();
|
|
||||||
auto func{[this, sources_ = std::move(sources), sources_spirv_ = std::move(sources_spirv),
|
auto func{[this, sources_ = std::move(sources), sources_spirv_ = std::move(sources_spirv),
|
||||||
shader_notify, backend, in_parallel,
|
shader_notify, backend, in_parallel,
|
||||||
force_context_flush](ShaderContext::Context*) mutable {
|
force_context_flush](ShaderContext::Context*) mutable {
|
||||||
|
@ -559,15 +559,13 @@ void GraphicsPipeline::ConfigureImpl(bool is_indexed) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsPipeline::ConfigureTransformFeedbackImpl() const {
|
void GraphicsPipeline::ConfigureTransformFeedbackImpl() const {
|
||||||
glTransformFeedbackStreamAttribsNV(num_xfb_attribs, xfb_attribs.data(), num_xfb_strides,
|
glTransformFeedbackAttribsNV(num_xfb_attribs, xfb_attribs.data(), GL_SEPARATE_ATTRIBS);
|
||||||
xfb_streams.data(), GL_INTERLEAVED_ATTRIBS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsPipeline::GenerateTransformFeedbackState() {
|
void GraphicsPipeline::GenerateTransformFeedbackState() {
|
||||||
// TODO(Rodrigo): Inject SKIP_COMPONENTS*_NV when required. An unimplemented message will signal
|
// TODO(Rodrigo): Inject SKIP_COMPONENTS*_NV when required. An unimplemented message will signal
|
||||||
// when this is required.
|
// when this is required.
|
||||||
GLint* cursor{xfb_attribs.data()};
|
GLint* cursor{xfb_attribs.data()};
|
||||||
GLint* current_stream{xfb_streams.data()};
|
|
||||||
|
|
||||||
for (size_t feedback = 0; feedback < Maxwell::NumTransformFeedbackBuffers; ++feedback) {
|
for (size_t feedback = 0; feedback < Maxwell::NumTransformFeedbackBuffers; ++feedback) {
|
||||||
const auto& layout = key.xfb_state.layouts[feedback];
|
const auto& layout = key.xfb_state.layouts[feedback];
|
||||||
|
@ -575,15 +573,6 @@ void GraphicsPipeline::GenerateTransformFeedbackState() {
|
||||||
if (layout.varying_count == 0) {
|
if (layout.varying_count == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
*current_stream = static_cast<GLint>(feedback);
|
|
||||||
if (current_stream != xfb_streams.data()) {
|
|
||||||
// When stepping one stream, push the expected token
|
|
||||||
cursor[0] = GL_NEXT_BUFFER_NV;
|
|
||||||
cursor[1] = 0;
|
|
||||||
cursor[2] = 0;
|
|
||||||
cursor += XFB_ENTRY_STRIDE;
|
|
||||||
}
|
|
||||||
++current_stream;
|
|
||||||
|
|
||||||
const auto& locations = key.xfb_state.varyings[feedback];
|
const auto& locations = key.xfb_state.varyings[feedback];
|
||||||
std::optional<u32> current_index;
|
std::optional<u32> current_index;
|
||||||
|
@ -619,7 +608,6 @@ void GraphicsPipeline::GenerateTransformFeedbackState() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
num_xfb_attribs = static_cast<GLsizei>((cursor - xfb_attribs.data()) / XFB_ENTRY_STRIDE);
|
num_xfb_attribs = static_cast<GLsizei>((cursor - xfb_attribs.data()) / XFB_ENTRY_STRIDE);
|
||||||
num_xfb_strides = static_cast<GLsizei>(current_stream - xfb_streams.data());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsPipeline::WaitForBuild() {
|
void GraphicsPipeline::WaitForBuild() {
|
||||||
|
|
|
@ -154,9 +154,7 @@ private:
|
||||||
|
|
||||||
static constexpr std::size_t XFB_ENTRY_STRIDE = 3;
|
static constexpr std::size_t XFB_ENTRY_STRIDE = 3;
|
||||||
GLsizei num_xfb_attribs{};
|
GLsizei num_xfb_attribs{};
|
||||||
GLsizei num_xfb_strides{};
|
|
||||||
std::array<GLint, 128 * XFB_ENTRY_STRIDE * Maxwell::NumTransformFeedbackBuffers> xfb_attribs{};
|
std::array<GLint, 128 * XFB_ENTRY_STRIDE * Maxwell::NumTransformFeedbackBuffers> xfb_attribs{};
|
||||||
std::array<GLint, Maxwell::NumTransformFeedbackBuffers> xfb_streams{};
|
|
||||||
|
|
||||||
std::mutex built_mutex;
|
std::mutex built_mutex;
|
||||||
std::condition_variable built_condvar;
|
std::condition_variable built_condvar;
|
||||||
|
|
|
@ -68,6 +68,7 @@ void UtilShaders::ASTCDecode(Image& image, const StagingBufferMap& map,
|
||||||
std::span<const VideoCommon::SwizzleParameters> swizzles) {
|
std::span<const VideoCommon::SwizzleParameters> swizzles) {
|
||||||
static constexpr GLuint BINDING_INPUT_BUFFER = 0;
|
static constexpr GLuint BINDING_INPUT_BUFFER = 0;
|
||||||
static constexpr GLuint BINDING_OUTPUT_IMAGE = 0;
|
static constexpr GLuint BINDING_OUTPUT_IMAGE = 0;
|
||||||
|
program_manager.LocalMemoryWarmup();
|
||||||
|
|
||||||
const Extent2D tile_size{
|
const Extent2D tile_size{
|
||||||
.width = VideoCore::Surface::DefaultBlockWidth(image.info.format),
|
.width = VideoCore::Surface::DefaultBlockWidth(image.info.format),
|
||||||
|
|
Loading…
Reference in a new issue