From a822166fcabb5dd4805fd5b156dbdff10bacf031 Mon Sep 17 00:00:00 2001 From: izzy2lost Date: Thu, 19 Mar 2026 13:45:50 -0400 Subject: [PATCH] minor tweaks and bump version --- android/app/build.gradle.kts | 4 ++-- hw/xbox/mcpx/apu/apu.c | 2 +- hw/xbox/mcpx/apu/dsp/gp_ep.c | 12 ++++++++++-- hw/xbox/nv2a/pgraph/gl/constants.h | 7 +++++-- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index b6e2b27c11..fd318e4921 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -30,8 +30,8 @@ android { minSdk = 26 targetSdk = 36 - versionCode = 21 - versionName = "1.2.0" + versionCode = 22 + versionName = "1.2.1" ndk { abiFilters += listOf("arm64-v8a") diff --git a/hw/xbox/mcpx/apu/apu.c b/hw/xbox/mcpx/apu/apu.c index 7860d68aed..f61ec7d96b 100644 --- a/hw/xbox/mcpx/apu/apu.c +++ b/hw/xbox/mcpx/apu/apu.c @@ -302,8 +302,8 @@ static void monitor_sink_cb(void *opaque, uint8_t *stream, int free_b) if (avail >= free_b) { break; } - qemu_cond_broadcast(&s->cond); sleep_ns(500000); + qemu_cond_broadcast(&s->cond); if (!runstate_is_running()) { memset(stream, 0, free_b); return; diff --git a/hw/xbox/mcpx/apu/dsp/gp_ep.c b/hw/xbox/mcpx/apu/dsp/gp_ep.c index 7cd38fdd9a..3c3b33dd57 100644 --- a/hw/xbox/mcpx/apu/dsp/gp_ep.c +++ b/hw/xbox/mcpx/apu/dsp/gp_ep.c @@ -53,7 +53,11 @@ static void scatter_gather_rw(MCPXAPUState *d, hwaddr sge_base, unsigned int bytes_to_copy = TARGET_PAGE_SIZE - offset_in_page; while (len > 0) { - assert(page_entry <= max_sge); + if (page_entry > max_sge) { + fprintf(stderr, "scatter_gather_rw: page_entry %u exceeds max_sge %u," + " addr=0x%x\n", page_entry, max_sge, addr); + break; + } uint32_t prd_address = ldl_le_phys(&address_space_memory, sge_base + page_entry * 8 + 0); @@ -66,7 +70,11 @@ static void scatter_gather_rw(MCPXAPUState *d, hwaddr sge_base, bytes_to_copy = len; } - assert(paddr + bytes_to_copy < memory_region_size(d->ram)); + if (paddr + bytes_to_copy >= memory_region_size(d->ram)) { + fprintf(stderr, "scatter_gather_rw: paddr 0x%" HWADDR_PRIx + " out of RAM bounds\n", paddr); + break; + } if (dir) { memcpy(&d->ram_ptr[paddr], ptr, bytes_to_copy); diff --git a/hw/xbox/nv2a/pgraph/gl/constants.h b/hw/xbox/nv2a/pgraph/gl/constants.h index ac9e4e781e..431df59928 100644 --- a/hw/xbox/nv2a/pgraph/gl/constants.h +++ b/hw/xbox/nv2a/pgraph/gl/constants.h @@ -32,12 +32,15 @@ #define NV2A_GL_Z16_INTERNAL GL_DEPTH_COMPONENT16 #define NV2A_GL_Z16_TYPE GL_UNSIGNED_SHORT #define NV2A_GL_Z16_FLOAT_TYPE GL_UNSIGNED_SHORT +/* GLES requires GL_DEPTH24_STENCIL8 when format=GL_DEPTH_STENCIL */ +#define NV2A_GL_DEPTH_X8_Y24_INTERNAL GL_DEPTH24_STENCIL8 #else #define NV2A_GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8 #define NV2A_GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_8_8_8_8_REV #define NV2A_GL_Z16_INTERNAL GL_DEPTH_COMPONENT32F #define NV2A_GL_Z16_TYPE GL_HALF_FLOAT #define NV2A_GL_Z16_FLOAT_TYPE GL_HALF_FLOAT +#define NV2A_GL_DEPTH_X8_Y24_INTERNAL GL_DEPTH_COMPONENT #endif static const GLenum pgraph_texture_min_filter_gl_map[] = { @@ -258,11 +261,11 @@ static const ColorFormatInfo kelvin_color_format_gl_map[66] = { {2, false, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, {GL_RED, GL_ZERO, GL_ZERO, GL_ZERO}, true}, [NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_DEPTH_X8_Y24_FIXED] = - {4, true, GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, + {4, true, NV2A_GL_DEPTH_X8_Y24_INTERNAL, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, {GL_RED, GL_ONE, GL_ZERO, GL_ZERO}, true}, [NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_DEPTH_X8_Y24_FLOAT] = /* FIXME: Uses fixed-point format to match surface format hack below. */ - {4, true, GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, + {4, true, NV2A_GL_DEPTH_X8_Y24_INTERNAL, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, {GL_RED, GL_ONE, GL_ZERO, GL_ZERO}, true}, [NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_DEPTH_Y16_FIXED] = {2, true, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT,