From 5f9b9675eb6791f7acae317936116d1fb287e5e4 Mon Sep 17 00:00:00 2001 From: olebeck <31539311+olebeck@users.noreply.github.com> Date: Fri, 27 Jun 2025 00:38:05 +0200 Subject: [PATCH] fix Draw2DImage --- miniwin/src/d3drm/backends/gxm/.gitignore | 3 +- miniwin/src/d3drm/backends/gxm/renderer.cpp | 279 ++++++++---------- .../src/d3drm/backends/gxm/shaders/Makefile | 4 +- .../cache/clear.frag_550b7e0c6c421575.sdb | Bin 1427 -> 0 bytes .../cache/clear.vert_98a2a6664d8485bc.sdb | Bin 1525 -> 0 bytes .../cache/image.frag_ae725a8caae9bf47.sdb | Bin 1683 -> 0 bytes .../cache/main.frag_a5f9016b18a6a10c.sdb | Bin 6748 -> 0 bytes .../cache/main.vert_02c4a0c27e7c3246.sdb | Bin 2704 -> 0 bytes .../d3drm/backends/gxm/shaders/clear.vert.cg | 7 - .../d3drm/backends/gxm/shaders/clear.vert.gxp | Bin 252 -> 0 bytes .../shaders/{clear.frag.cg => color.frag.cg} | 0 .../{clear.frag.gxp => color.frag.gxp} | Bin miniwin/src/d3drm/backends/gxm/utils.h | 12 +- miniwin/src/internal/d3drmrenderer_gxm.h | 9 +- 14 files changed, 132 insertions(+), 182 deletions(-) delete mode 100644 miniwin/src/d3drm/backends/gxm/shaders/cache/clear.frag_550b7e0c6c421575.sdb delete mode 100644 miniwin/src/d3drm/backends/gxm/shaders/cache/clear.vert_98a2a6664d8485bc.sdb delete mode 100644 miniwin/src/d3drm/backends/gxm/shaders/cache/image.frag_ae725a8caae9bf47.sdb delete mode 100644 miniwin/src/d3drm/backends/gxm/shaders/cache/main.frag_a5f9016b18a6a10c.sdb delete mode 100644 miniwin/src/d3drm/backends/gxm/shaders/cache/main.vert_02c4a0c27e7c3246.sdb delete mode 100644 miniwin/src/d3drm/backends/gxm/shaders/clear.vert.cg delete mode 100644 miniwin/src/d3drm/backends/gxm/shaders/clear.vert.gxp rename miniwin/src/d3drm/backends/gxm/shaders/{clear.frag.cg => color.frag.cg} (100%) rename miniwin/src/d3drm/backends/gxm/shaders/{clear.frag.gxp => color.frag.gxp} (100%) diff --git a/miniwin/src/d3drm/backends/gxm/.gitignore b/miniwin/src/d3drm/backends/gxm/.gitignore index adb36c82..21ce5a1f 100644 --- a/miniwin/src/d3drm/backends/gxm/.gitignore +++ b/miniwin/src/d3drm/backends/gxm/.gitignore @@ -1 +1,2 @@ -*.exe \ No newline at end of file +*.exe +cache/ \ No newline at end of file diff --git a/miniwin/src/d3drm/backends/gxm/renderer.cpp b/miniwin/src/d3drm/backends/gxm/renderer.cpp index ca3355e1..c3d8cf98 100644 --- a/miniwin/src/d3drm/backends/gxm/renderer.cpp +++ b/miniwin/src/d3drm/backends/gxm/renderer.cpp @@ -29,14 +29,12 @@ bool with_razor = false; INCBIN(main_vert_gxp, "shaders/main.vert.gxp"); INCBIN(main_frag_gxp, "shaders/main.frag.gxp"); -//INCBIN(clear_vert_gxp, "shaders/clear.vert.gxp"); -INCBIN(clear_frag_gxp, "shaders/clear.frag.gxp"); +INCBIN(color_frag_gxp, "shaders/color.frag.gxp"); INCBIN(image_frag_gxp, "shaders/image.frag.gxp"); const SceGxmProgram* mainVertexProgramGxp = (const SceGxmProgram*)_inc_main_vert_gxpData; const SceGxmProgram* mainFragmentProgramGxp = (const SceGxmProgram*)_inc_main_frag_gxpData; -//const SceGxmProgram* clearVertexProgramGxp = (const SceGxmProgram*)_inc_clear_vert_gxpData; -const SceGxmProgram* clearFragmentProgramGxp = (const SceGxmProgram*)_inc_clear_frag_gxpData; +const SceGxmProgram* colorFragmentProgramGxp = (const SceGxmProgram*)_inc_color_frag_gxpData; const SceGxmProgram* imageFragmentProgramGxp = (const SceGxmProgram*)_inc_image_frag_gxpData; extern "C" int sceRazorGpuCaptureSetTrigger(int frames, const char* path); @@ -67,7 +65,7 @@ static void load_razor() { } if(with_razor) { - //sceRazorGpuCaptureEnableSalvage("ux0:data/gpu_crash.sgx"); + sceRazorGpuCaptureEnableSalvage("ux0:data/gpu_crash.sgx"); } } @@ -244,9 +242,8 @@ bool get_gxm_context(SceGxmContext** context, SceGxmShaderPatcher** shaderPatche static bool create_gxm_renderer(int width, int height, GXMRendererData* data) { const unsigned int alignedWidth = ALIGN(VITA_GXM_SCREEN_WIDTH, SCE_GXM_TILE_SIZEX); const unsigned int alignedHeight = ALIGN(VITA_GXM_SCREEN_HEIGHT, SCE_GXM_TILE_SIZEY); - - unsigned int sampleCount = alignedWidth * alignedHeight; - unsigned int depthStrideInSamples = alignedWidth; + const unsigned int sampleCount = alignedWidth * alignedHeight; + const unsigned int depthStrideInSamples = alignedWidth; if(!get_gxm_context(&data->context, &data->shaderPatcher, &data->cdramPool)) { return false; @@ -347,7 +344,7 @@ static bool create_gxm_renderer(int width, int height, GXMRendererData* data) { } // register shader programs - if(SCE_ERR(sceGxmShaderPatcherRegisterProgram, data->shaderPatcher, clearFragmentProgramGxp, &data->clearFragmentProgramId)) { + if(SCE_ERR(sceGxmShaderPatcherRegisterProgram, data->shaderPatcher, colorFragmentProgramGxp, &data->colorFragmentProgramId)) { return false; } if(SCE_ERR(sceGxmShaderPatcherRegisterProgram, data->shaderPatcher, mainVertexProgramGxp, &data->mainVertexProgramId)) { @@ -360,34 +357,6 @@ static bool create_gxm_renderer(int width, int height, GXMRendererData* data) { return false; } - - // clear shader - /* - { - GET_SHADER_PARAM(positionAttribute, clearVertexProgramGxp, "aPosition", false); - - SceGxmVertexAttribute vertexAttributes[1]; - SceGxmVertexStream vertexStreams[1]; - vertexAttributes[0].streamIndex = 0; - vertexAttributes[0].offset = 0; - vertexAttributes[0].format = SCE_GXM_ATTRIBUTE_FORMAT_F32; - vertexAttributes[0].componentCount = 2; - vertexAttributes[0].regIndex = sceGxmProgramParameterGetResourceIndex(positionAttribute); - vertexStreams[0].stride = sizeof(float)*2; - vertexStreams[0].indexSource = SCE_GXM_INDEX_SOURCE_INDEX_16BIT; - - if(SCE_ERR(sceGxmShaderPatcherCreateVertexProgram, - data->shaderPatcher, - data->clearVertexProgramId, - vertexAttributes, 1, - vertexStreams, 1, - &data->clearVertexProgram - )) { - return false; - } - } - */ - // main shader { GET_SHADER_PARAM(positionAttribute, mainVertexProgramGxp, "aPosition", false); @@ -465,12 +434,12 @@ static bool create_gxm_renderer(int width, int height, GXMRendererData* data) { // color if(SCE_ERR(sceGxmShaderPatcherCreateFragmentProgram, data->shaderPatcher, - data->clearFragmentProgramId, + data->colorFragmentProgramId, SCE_GXM_OUTPUT_REGISTER_FORMAT_UCHAR4, SCE_GXM_MULTISAMPLE_NONE, NULL, mainVertexProgramGxp, - &data->clearFragmentProgram + &data->colorFragmentProgram )) { return false; } @@ -488,7 +457,7 @@ static bool create_gxm_renderer(int width, int height, GXMRendererData* data) { data->uUseTexture = sceGxmProgramFindParameterByName(mainFragmentProgramGxp, "uUseTexture"); // int // clear uniforms - data->clearShader_uColor = sceGxmProgramFindParameterByName(clearFragmentProgramGxp, "uColor"); // vec4 + data->colorShader_uColor = sceGxmProgramFindParameterByName(colorFragmentProgramGxp, "uColor"); // vec4 // light uniforms buffer data->lightDataBuffer = sceClibMspaceMalloc(data->cdramPool, @@ -513,28 +482,28 @@ static void CreateOrthoMatrix(float left, float right, float bottom, float top, { float near = -1.0f; float far = 1.0f; - float rl = right - left; - float tb = top - bottom; - float fn = far - near; + float width = right - left; + float height = top - bottom; + float depth = far - near; - outMatrix[0][0] = 2.0f / rl; + outMatrix[0][0] = 2.0f / width; outMatrix[0][1] = 0.0f; outMatrix[0][2] = 0.0f; - outMatrix[0][3] = 0.0f; + outMatrix[0][3] = -(right + left) / width; // translation x outMatrix[1][0] = 0.0f; - outMatrix[1][1] = -2.0f / tb; + outMatrix[1][1] = 2.0f / height; outMatrix[1][2] = 0.0f; - outMatrix[1][3] = 0.0f; + outMatrix[1][3] = -(top + bottom) / height; // translation y outMatrix[2][0] = 0.0f; outMatrix[2][1] = 0.0f; - outMatrix[2][2] = -2.0f / fn; - outMatrix[2][3] = 0.0f; + outMatrix[2][2] = -2.0f / depth; + outMatrix[2][3] = -(far + near) / depth; // translation z - outMatrix[3][0] = -(right + left) / rl; - outMatrix[3][1] = -(top + bottom) / tb; - outMatrix[3][2] = -(far + near) / fn; + outMatrix[3][0] = 0.0f; + outMatrix[3][1] = 0.0f; + outMatrix[3][2] = 0.0f; outMatrix[3][3] = 1.0f; } @@ -598,7 +567,7 @@ void GXMRenderer::SetFrustumPlanes(const Plane* frustumPlanes) void GXMRenderer::SetProjection(const D3DRMMATRIX4D& projection, D3DVALUE front, D3DVALUE back) { memcpy(&m_projection, projection, sizeof(D3DRMMATRIX4D)); - m_projection[1][1] *= -1.0f; // OpenGL is upside down + m_projection[1][1] *= -1.0f; // GXM is upside down } struct TextureDestroyContextGXM { @@ -621,7 +590,7 @@ void GXMRenderer::AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* textu ); } -void convertTextureMetadata(SDL_Surface* surface, bool* supportedFormat, SceGxmTextureFormat* textureFormat, size_t* textureSize, size_t* textureAlignment) { +static void convertTextureMetadata(SDL_Surface* surface, bool* supportedFormat, SceGxmTextureFormat* textureFormat, size_t* textureSize, size_t* textureAlignment) { *supportedFormat = true; *textureAlignment = SCE_GXM_TEXTURE_ALIGNMENT; switch(surface->format) { @@ -630,6 +599,7 @@ void convertTextureMetadata(SDL_Surface* surface, bool* supportedFormat, SceGxmT *textureSize = surface->h * surface->pitch; break; } + /* crashes when opening the guestbook for some reason case SDL_PIXELFORMAT_INDEX8: { *textureFormat = SCE_GXM_TEXTURE_FORMAT_P8_ABGR; int pixelsSize = surface->h * surface->pitch; @@ -638,22 +608,13 @@ void convertTextureMetadata(SDL_Surface* surface, bool* supportedFormat, SceGxmT *textureAlignment = SCE_GXM_PALETTE_ALIGNMENT; break; } + */ default: { *supportedFormat = false; } } } -bool createRgbaCopySurface(SDL_Surface* surface, size_t *textureSize, SceGxmTextureFormat* textureFormat, SDL_Surface** copy_surf) { - *copy_surf = SDL_ConvertSurface(surface, SDL_PIXELFORMAT_ABGR8888); - if (!*copy_surf) { - return false; - } - *textureFormat = SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR; - *textureSize = (*copy_surf)->w * (*copy_surf)->h * 4; - return true; -} - Uint32 GXMRenderer::GetTextureId(IDirect3DRMTexture* iTexture) { auto texture = static_cast(iTexture); @@ -666,9 +627,6 @@ Uint32 GXMRenderer::GetTextureId(IDirect3DRMTexture* iTexture) SceGxmTextureFormat textureFormat; convertTextureMetadata(surface->m_surface, &supportedFormat, &textureFormat, &textureSize, &textureAlignment); - if(!supportedFormat) { - SDL_Log("unsupported SDL texture format %s, falling back on SDL_PIXELFORMAT_ABGR8888", SDL_GetPixelFormatName(surface->m_surface->format)); - } for (Uint32 i = 0; i < m_textures.size(); ++i) { auto& tex = m_textures[i]; @@ -676,12 +634,13 @@ Uint32 GXMRenderer::GetTextureId(IDirect3DRMTexture* iTexture) if (tex.version != texture->m_version) { void* textureData = sceGxmTextureGetData(&tex.gxmTexture); if(!supportedFormat) { - SDL_Surface* copy_surf; - if(!createRgbaCopySurface(surface->m_surface, &textureSize, &textureFormat, ©_surf)) { - return NO_TEXTURE_ID; - } - memcpy(textureData, copy_surf->pixels, textureSize); - SDL_DestroySurface(copy_surf); + SDL_ConvertPixels( + surface->m_surface->w, surface->m_surface->h, + surface->m_surface->format, + surface->m_surface->pixels, + surface->m_surface->pitch, + SDL_PIXELFORMAT_ABGR8888, textureData, surface->m_surface->pitch + ); } else { memcpy(textureData, surface->m_surface->pixels, textureSize); } @@ -698,21 +657,25 @@ Uint32 GXMRenderer::GetTextureId(IDirect3DRMTexture* iTexture) SDL_Log("Create Texture %s w=%d h=%d s=%d", SDL_GetPixelFormatName(surface->m_surface->format), textureWidth, textureHeight, textureStride); - SDL_Surface* copy_surf = nullptr; if(!supportedFormat) { - if(!createRgbaCopySurface(surface->m_surface, &textureSize, &textureFormat, ©_surf)) { - return NO_TEXTURE_ID; - } + textureAlignment = SCE_GXM_TEXTURE_ALIGNMENT; + textureSize = textureHeight * textureStride * 4; + textureFormat = SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR; } // allocate gpu memory void* textureData = sceClibMspaceMemalign(this->m_data.cdramPool, textureAlignment, textureSize); uint8_t* paletteData = nullptr; - if(copy_surf) - { - memcpy(textureData, copy_surf->pixels, textureSize); - SDL_DestroySurface(copy_surf); + if(!supportedFormat) { + SDL_Log("unsupported SDL texture format %s, falling back on SDL_PIXELFORMAT_ABGR8888", SDL_GetPixelFormatName(surface->m_surface->format)); + SDL_ConvertPixels( + surface->m_surface->w, surface->m_surface->h, + surface->m_surface->format, + surface->m_surface->pixels, + surface->m_surface->pitch, + SDL_PIXELFORMAT_ABGR8888, textureData, surface->m_surface->pitch + ); } else if(surface->m_surface->format == SDL_PIXELFORMAT_INDEX8) { @@ -733,9 +696,8 @@ Uint32 GXMRenderer::GetTextureId(IDirect3DRMTexture* iTexture) } SceGxmTexture gxmTexture; - SDL_Log("textureData: %p", textureData); SCE_ERR(sceGxmTextureInitLinearStrided, &gxmTexture, textureData, textureFormat, textureWidth, textureHeight, textureStride); - sceGxmTextureSetMinFilter(&gxmTexture, SCE_GXM_TEXTURE_FILTER_LINEAR); + //sceGxmTextureSetMinFilter(&gxmTexture, SCE_GXM_TEXTURE_FILTER_LINEAR); sceGxmTextureSetMagFilter(&gxmTexture, SCE_GXM_TEXTURE_FILTER_LINEAR); if(paletteData) { sceGxmTextureSetPalette(&gxmTexture, paletteData); @@ -902,8 +864,8 @@ void GXMRenderer::StartScene() { &this->m_data.displayBuffersSurface[this->backBufferIndex], &this->m_data.depthSurface ); - sceGxmSetViewport(this->m_data.context, 0, m_width, 0, m_height, 0, 0); this->sceneStarted = true; + // reset quad vertices buffer this->m_data.quadVertices = (Vertex*)(this->m_data.quadIndices + 4); } @@ -991,9 +953,9 @@ void GXMRenderer::SubmitDraw( transpose4x4(modelViewMatrix, modelViewMatrixTrans); transpose4x4(m_projection, projectionTrans); - SET_UNIFORM(vertUniforms, this->m_data.uModelViewMatrix, modelViewMatrixTrans, mainVertexProgramGxp); - SET_UNIFORM(vertUniforms, this->m_data.uNormalMatrix, normalMatrix, mainVertexProgramGxp); - SET_UNIFORM(vertUniforms, this->m_data.uProjectionMatrix, projectionTrans, mainVertexProgramGxp); + SET_UNIFORM(vertUniforms, this->m_data.uModelViewMatrix, modelViewMatrixTrans); + SET_UNIFORM(vertUniforms, this->m_data.uProjectionMatrix, projectionTrans); + SET_UNIFORM(vertUniforms, this->m_data.uNormalMatrix, normalMatrix); float color[4] = { appearance.color.r / 255.0f, @@ -1001,11 +963,11 @@ void GXMRenderer::SubmitDraw( appearance.color.b / 255.0f, appearance.color.a / 255.0f }; - SET_UNIFORM(fragUniforms, this->m_data.uColor, color, mainFragmentProgramGxp); - SET_UNIFORM(fragUniforms, this->m_data.uShininess, appearance.shininess, mainFragmentProgramGxp); + SET_UNIFORM(fragUniforms, this->m_data.uColor, color); + SET_UNIFORM(fragUniforms, this->m_data.uShininess, appearance.shininess); int useTexture = appearance.textureId != NO_TEXTURE_ID ? 1 : 0; - SET_UNIFORM(fragUniforms, this->m_data.uUseTexture, useTexture, mainFragmentProgramGxp); + SET_UNIFORM(fragUniforms, this->m_data.uUseTexture, useTexture); if(useTexture) { auto& texture = m_textures[appearance.textureId]; sceGxmSetFragmentTexture(this->m_data.context, 0, &texture.gxmTexture); @@ -1027,26 +989,6 @@ HRESULT GXMRenderer::FinalizeFrame() { return DD_OK; } -void orthoMatrixRowMajor(float mat[4][4], float left, float right, float bottom, float top, float nearZ, float farZ) { - memset(mat, 0, sizeof(float) * 16); - - mat[0][0] = 2.0f / (right - left); - mat[1][1] = 2.0f / (top - bottom); - mat[2][2] = -2.0f / (farZ - nearZ); - mat[3][0] = -(right + left) / (right - left); - mat[3][1] = -(top + bottom) / (top - bottom); - mat[3][2] = -(farZ + nearZ) / (farZ - nearZ); - mat[3][3] = 1.0f; -} - -void identityMatrix(float mat[4][4]) { - memset(mat, 0, sizeof(float) * 16); - mat[0][0] = 1.0f; - mat[1][1] = 1.0f; - mat[2][2] = 1.0f; - mat[3][3] = 1.0f; -} - Vertex* GXMRenderer::GetQuadVertices() { Vertex* verts = this->m_data.quadVertices; this->m_data.quadVertices += 4; @@ -1067,32 +1009,31 @@ void GXMRenderer::Clear(float r, float g, float b) { sceGxmPushUserMarker(this->m_data.context, marker); sceGxmSetVertexProgram(this->m_data.context, this->m_data.mainVertexProgram); - sceGxmSetFragmentProgram(this->m_data.context, this->m_data.clearFragmentProgram); + sceGxmSetFragmentProgram(this->m_data.context, this->m_data.colorFragmentProgram); void* vertUniforms; void* fragUniforms; sceGxmReserveVertexDefaultUniformBuffer(this->m_data.context, &vertUniforms); sceGxmReserveFragmentDefaultUniformBuffer(this->m_data.context, &fragUniforms); - float left = -m_viewportTransform.offsetX / m_viewportTransform.scale; - float right = (m_width - m_viewportTransform.offsetX) / m_viewportTransform.scale; - float top = -m_viewportTransform.offsetY / m_viewportTransform.scale; - float bottom = (m_height - m_viewportTransform.offsetY) / m_viewportTransform.scale; - D3DRMMATRIX4D projection; - orthoMatrixRowMajor(projection, left, right, bottom, top, -1.0, 1.0); + CreateOrthoMatrix(0.0, 1.0, 1.0, 0.0, projection); D3DRMMATRIX4D identity; - identityMatrix(identity); + memset(identity, 0, sizeof(identity)); + identity[0][0] = 1.0f; + identity[1][1] = 1.0f; + identity[2][2] = 1.0f; + identity[3][3] = 1.0f; Matrix3x3 normal = {{1.f, 0.f, 0.f}, {0.f, 1.f, 0.f}, {0.f, 0.f, 1.f}}; - SET_UNIFORM(vertUniforms, this->m_data.uModelViewMatrix, identity, mainVertexProgramGxp); // float4x4 - SET_UNIFORM(vertUniforms, this->m_data.uNormalMatrix, normal, mainVertexProgramGxp); // float3x3 - SET_UNIFORM(vertUniforms, this->m_data.uProjectionMatrix, projection, mainVertexProgramGxp); // float4x4 + SET_UNIFORM(vertUniforms, this->m_data.uModelViewMatrix, identity); // float4x4 + SET_UNIFORM(vertUniforms, this->m_data.uNormalMatrix, normal); // float3x3 + SET_UNIFORM(vertUniforms, this->m_data.uProjectionMatrix, projection); // float4x4 float color[] = {r,g,b,1}; - SET_UNIFORM(fragUniforms, this->m_data.clearShader_uColor, color, clearFragmentProgramGxp); + SET_UNIFORM(fragUniforms, this->m_data.colorShader_uColor, color); float x1 = 0; float y1 = 0; @@ -1117,19 +1058,22 @@ void GXMRenderer::Clear(float r, float g, float b) { } void GXMRenderer::Flip() { - if(this->sceneStarted) { - sceGxmEndScene( - this->m_data.context, - nullptr, nullptr - ); - - sceGxmPadHeartbeat( - &this->m_data.displayBuffersSurface[this->backBufferIndex], - this->m_data.displayBuffersSync[this->backBufferIndex] - ); - this->sceneStarted = false; + if(!this->sceneStarted) { + this->Clear(0,0,0); } + // end scene + sceGxmEndScene( + this->m_data.context, + nullptr, nullptr + ); + sceGxmPadHeartbeat( + &this->m_data.displayBuffersSurface[this->backBufferIndex], + this->m_data.displayBuffersSync[this->backBufferIndex] + ); + this->sceneStarted = false; + + // display GXMDisplayData displayData; displayData.address = this->m_data.displayBuffers[this->backBufferIndex]; @@ -1158,25 +1102,38 @@ void GXMRenderer::Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const S sceGxmReserveVertexDefaultUniformBuffer(this->m_data.context, &vertUniforms); sceGxmReserveFragmentDefaultUniformBuffer(this->m_data.context, &fragUniforms); - float left = -m_viewportTransform.offsetX / m_viewportTransform.scale; - float right = (m_width - m_viewportTransform.offsetX) / m_viewportTransform.scale; - float top = -m_viewportTransform.offsetY / m_viewportTransform.scale; - float bottom = (m_height - m_viewportTransform.offsetY) / m_viewportTransform.scale; + float left = -this->m_viewportTransform.offsetX / this->m_viewportTransform.scale; + float right = (this->m_width - this->m_viewportTransform.offsetX) / this->m_viewportTransform.scale; + float top = -this->m_viewportTransform.offsetY / this->m_viewportTransform.scale; + float bottom = (this->m_height - this->m_viewportTransform.offsetY) / this->m_viewportTransform.scale; + + #define virtualToNDCX(x) (((x - left) / (right - left))); + #define virtualToNDCY(y) (((y - top) / (bottom - top))); + + float x1_virtual = static_cast(dstRect.x); + float y1_virtual = static_cast(dstRect.y); + float x2_virtual = x1_virtual + dstRect.w; + float y2_virtual = y1_virtual + dstRect.h; + + float x1 = virtualToNDCX(x1_virtual); + float y1 = virtualToNDCY(y1_virtual); + float x2 = virtualToNDCX(x2_virtual); + float y2 = virtualToNDCY(y2_virtual); D3DRMMATRIX4D projection; - CreateOrthoMatrix(left, right, bottom, top, projection); - D3DRMMATRIX4D projectionTrans; - transpose4x4(projection, projectionTrans); + CreateOrthoMatrix(0.0, 1.0, 1.0, 0.0, projection); + static const Matrix3x3 normal = {{1.f, 0.f, 0.f}, {0.f, 1.f, 0.f}, {0.f, 0.f, 1.f}}; - D3DRMMATRIX4D identity = {{1.f, 0.f, 0.f, 0.f}, {0.f, 1.f, 0.f, 0.f}, {0.f, 0.f, 1.f, 0.f}, {0.f, 0.f, 0.f, 1.f}}; - Matrix3x3 normal = {{1.f, 0.f, 0.f}, {0.f, 1.f, 0.f}, {0.f, 0.f, 1.f}}; + D3DRMMATRIX4D identity; + memset(identity, 0, sizeof(identity)); + identity[0][0] = 1.0f; + identity[1][1] = 1.0f; + identity[2][2] = 1.0f; + identity[3][3] = 1.0f; - D3DRMMATRIX4D identityTrans; - transpose4x4(identity, identityTrans); - - SET_UNIFORM(vertUniforms, this->m_data.uModelViewMatrix, identityTrans, mainVertexProgramGxp); // float4x4 - SET_UNIFORM(vertUniforms, this->m_data.uNormalMatrix, normal, mainVertexProgramGxp); // float3x3 - SET_UNIFORM(vertUniforms, this->m_data.uProjectionMatrix, projectionTrans, mainVertexProgramGxp); // float4x4 + SET_UNIFORM(vertUniforms, this->m_data.uModelViewMatrix, identity); // float4x4 + SET_UNIFORM(vertUniforms, this->m_data.uNormalMatrix, normal); // float3x3 + SET_UNIFORM(vertUniforms, this->m_data.uProjectionMatrix, projection); // float4x4 const GXMTextureCacheEntry& texture = m_textures[textureId]; sceGxmSetFragmentTexture(this->m_data.context, 0, &texture.gxmTexture); @@ -1184,16 +1141,11 @@ void GXMRenderer::Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const S float texW = sceGxmTextureGetWidth(&texture.gxmTexture); float texH = sceGxmTextureGetHeight(&texture.gxmTexture); - float u1 = srcRect.x / texW; - float v1 = srcRect.y / texH; - float u2 = (srcRect.x + srcRect.w) / texW; - float v2 = (srcRect.y + srcRect.h) / texH; + float u1 = static_cast(srcRect.x) / texW; + float v1 = static_cast(srcRect.y) / texH; + float u2 = static_cast(srcRect.x + srcRect.w) / texW; + float v2 = static_cast(srcRect.y + srcRect.h) / texH; - float x1 = static_cast(dstRect.x); - float y1 = static_cast(dstRect.y); - float x2 = x1 + dstRect.w; - float y2 = y1 + dstRect.h; - Vertex* quadVertices = this->GetQuadVertices(); quadVertices[0] = Vertex{ .position = {x1, y1, 0}, .normal = {0,0,0}, .texCoord = {u1, v1}}; quadVertices[1] = Vertex{ .position = {x2, y1, 0}, .normal = {0,0,0}, .texCoord = {u2, v1}}; @@ -1212,18 +1164,17 @@ void GXMRenderer::Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const S } void GXMRenderer::Download(SDL_Surface* target) { - SDL_Surface* src = SDL_CreateSurfaceFrom( - this->m_width, this->m_height, - SDL_PIXELFORMAT_RGBA32, - this->m_data.displayBuffers[this->backBufferIndex], VITA_GXM_SCREEN_STRIDE - ); - SDL_Rect srcRect = { static_cast(m_viewportTransform.offsetX), static_cast(m_viewportTransform.offsetY), static_cast(target->w * m_viewportTransform.scale), static_cast(target->h * m_viewportTransform.scale), }; - + SDL_Surface* src = SDL_CreateSurfaceFrom( + this->m_width, this->m_height, + SDL_PIXELFORMAT_RGBA32, + this->m_data.displayBuffers[this->backBufferIndex], VITA_GXM_SCREEN_STRIDE + ); SDL_BlitSurfaceScaled(src, &srcRect, target, nullptr, SDL_SCALEMODE_NEAREST); + SDL_DestroySurface(src); } diff --git a/miniwin/src/d3drm/backends/gxm/shaders/Makefile b/miniwin/src/d3drm/backends/gxm/shaders/Makefile index 359e2bf9..56241c42 100644 --- a/miniwin/src/d3drm/backends/gxm/shaders/Makefile +++ b/miniwin/src/d3drm/backends/gxm/shaders/Makefile @@ -1,5 +1,5 @@ -shaders += main.frag.gxp main.vert.gxp image.frag.gxp -shaders += clear.frag.gxp clear.vert.gxp +shaders += main.frag.gxp main.vert.gxp +shaders += color.frag.gxp image.frag.gxp all: $(shaders) diff --git a/miniwin/src/d3drm/backends/gxm/shaders/cache/clear.frag_550b7e0c6c421575.sdb b/miniwin/src/d3drm/backends/gxm/shaders/cache/clear.frag_550b7e0c6c421575.sdb deleted file mode 100644 index 1303ead5bfaa89d1d8a2b2ffae2b1ab8ba3919da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1427 zcmV;E1#J2siwFP!000003(Z(C*V2Uj^HU{ zf-RYtYenYqC|21#!sL;PSkKc{HrERrLtMP8GX#Irv|zEddgcvQlgS{upabF|z}kg# zG7g55i;3rNq$>}8DI<%7^Yi`v`vBdf=w`F)p$z{a!OanTW5Rx$KxhiaW4Mb^a5?t2 zcQfiw$}LpxG>*!!h;Nyo*DBSh@!X0Z>iwEim7pHMa2cDAm?^Y*&Xr8SCi#C?Pp;KfkvT^u(!fwOPWUzJR`G25v4{_O9wj~{mo^bc8Bu2xCX&WEX@ z+KJoHH6WGMdYwg*mp5OY>mj(Dq zv|9$(<+#*LF-x8AiY&4Yw3}@QKyWHxbShwSD&Tw@n!Pwop_@0f8HI)Bt|}k_%uaGy z#;E2n8}~Z+aNu^#^N^yZP{OQpSh2-mr+Vn@6_Xt7TzCv3(LgfnOe)0el`@I>-d{5UU1(=?WYB z`Ze1IdlC-2=yAH70ugtU{!h$rDYI7yS7}QUQlpt=TW2P_ee79{{?@*ZA@EO%!512_ zpmqJ{UrflR{x(}*sEbZ!lu|F0S~*I#3jGj?>=VV*-)$1jG2~!-fv!~bAh?^TNbP93 z`(r}20rQ_sS?q=g_qMqCUSVpg^t*zG$H7zokUdlTON@O5h8*O04TRe?)UH-<${Rx0 h-L&~~*?8-@c0o{kSMb0;zdxrA#lzoU%2!3mi;AtPA!KnmT9H>ra{k)*IGXHKe8FO0(;*#KrOCf=4y!}u#5AegWzu(XEZWW&z%0|>oNB5#l?k#0BaWf zXzY(iLFl+U>OzAbbIT%b^}M;g@z7O_u6DZ)O7O1&)EvS$%FVYCm?onv0$&WhvF}vA z8TLl`7Rq;OMcU)Yw0Q*jY$nMWhsv zvMq5Y9fV9wK`L0Z)rdrxYZ|scDW|vcwFXH75gZbwAX>KPqqtyD10q{3>58;BOUdD$ zkkphD@I`AhNvMuU3S|`f2yK6AiP^3t)g)aCeg;}(I)!faKyj&+t3$Z$AQkLeNH?mM zZG=5IvJFUM854ar%xJ@pVC%6ub&u8JDQ3*H+j?oX#Xf_SxlJMa7nDRt8!{ASgaaj5 zrb$KcH#FY)o)AXf>sO}qp;XcYoBls=Duqg=uK5BQl_a*z-ccj2*Y`%<{`0Qq-Fe=` z_a`I&7ihUK<}7IV7@d3Mj9Zb(kTf^!=2!2oUR~Z@zFP?x7fgG4VrdpkVC^A%1EtXV zc7kr+-d^8bzkTzpV<{klb1EOLj!<=;qTelDwK?0-KPkCBL;YU=8G&-v+x?#ZJNSXzFL)OUzoo;xw#c|4`g1w#Cm(L;JyhnGZ?zz%m8% zO_l^^^lY}+769*DfPXIF;#|P<$}|Udm_iS)anllW#cVEQoa(*EF?FJtzKq>VluEJ0N#jtjIJ6dV z`I&j1ojTQ<47~kgZSgdNeSYOB^6i))ZYfDCDTjrWtD{o-r=;{Jg9GE_QbOtfEyK(d zYiWDlmk>M<(e`lJZkbjBi5tPCO%pQ(SQ!QMqd?-&jG>d!WSC1HGNDMh{Cu)snj4JC zCY2@A({v>*%p#`Z!Dq(wUEPKcgL4Hbhw5V3AP`+*ZSGmK%H9`~!Keiv%gZw0Q9J4{ zB7TFJaUr9GiU#|$BczG`B!m4$X8s&2TLuhnCK9t^@a~(}WtEYK zXQf_)`~OC^e2*D<&@{5&|IZlN+{GHz=U-Bnr*72}A8Ed=#K@^0>F4>yv@uN_n^X>` zk*T{seAe$SN5@w1RWaK_bquoDTvYd8O%@w)n-npP>`leKd)j?3F!@O4jT^J~gW$pE zfW6b;se4SBsd*`E-o`-+GQ5SUu&$+9EneE~rcOmanzVu$6Gq7xPH9TFkMIh_xFw*V b_e=WfWwm=u*s1v;;YH_9FqZ;Yj2Hj_o<8b) diff --git a/miniwin/src/d3drm/backends/gxm/shaders/cache/image.frag_ae725a8caae9bf47.sdb b/miniwin/src/d3drm/backends/gxm/shaders/cache/image.frag_ae725a8caae9bf47.sdb deleted file mode 100644 index 1b709925be7ba4a875c0d4c060516b1444f77e06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1683 zcmV;E25k8siwFP!000003)NZcZ`(Ey|DL~s)29}wUy_}NXSWEP4hWFNL6dgH>Y|_} z%H~3m8cF%lVgLJ%ddrVQ8iJt zyGs(_7UfD~?h*^lDgT8sa*G2pwrGGCr0q+*XfHOQgC;c?)T5EPAZ-4;8WsR#N&P5-QU@0vOtq`)#P(Rp2Y^AOPQ*bFhUA}m*Qjw`LP+UiW+O(4a$R$YP$J*2QA zQVK}fntCQ3gbWNJWhUzGhegQ=k&p4!R+0oF*doQ0|3TrM?SL?NudfXCp-{q{ssBBz*igQyYwio=N)prT12u5%u03dV&sz52 zp?5LtpAP%o-=X9}o8wdWIl0b(HSR?uT~eKhCx7}fxw?F~{IU|zE|~K4Dwgq?z`BoC zcR+>l*$&a&^#1zcdV2e&5OC1y6D4a9g87H{pC{AlhpS#y;MOn}E6v-bc^j=B$Yvsh z^hy%Wo0C{1;?(dRQaA{q`>?N21kyT^Bo%-x%8iC{v4naT8K`r+g?`YV%3CdNpU zjeYehw^6M9`sb6sPriQL@muGRDSo83!CbH;ATtz}L1n&t z8o7b!B6&8R!<4iWai7zxxr6ncTE?yP15MbbRG3G3R1}sluSC!dX*=i>3;_#(wSD#R2b~<_OxVk~u9gS1hI{NL{^?PKLU(hS)?;9zw8U z(QjKw5=aNGx1ot=U?p?Cf)*<)sYn5fgVL}!Jhc#2lK4bIwIN<6ae(DQEOAg-)Xo;o zDGo9*UNa$-W2@Rj@W{bs&1EaOhGtB82uUZ0QVXV&!%T^`g3>vL(y4(m=j#`M+0S7n zbYBl;zX3}71yBxhlm$(eaN5Uk4i4aqdzgKg&I`ai&0v;lM2s@8gU5iL4Q=NzP^AU* zC9ptTRMNuw0$9(iqM=P|MV&0V820v(HvtOW;-3*_roWT1)smCr!rmD4TzK34;dsil zo+5%iPGe2Xtsw>|pnsi9?2?#exd)mFITurw*-hPN69r&b>0kTis+<94qU zO*g{u7BZlG12v=BtKqa!QS`eh?2z`*eJmh#&MQ}?l14((slxg5 d@>z3vR3VR<3fPhPch%dIe*iEmc^dK>001zuNc#W) diff --git a/miniwin/src/d3drm/backends/gxm/shaders/cache/main.frag_a5f9016b18a6a10c.sdb b/miniwin/src/d3drm/backends/gxm/shaders/cache/main.frag_a5f9016b18a6a10c.sdb deleted file mode 100644 index 72c257d0d3c6a72c61b80c4b668e89a3463ea1c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6748 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 diff --git a/miniwin/src/d3drm/backends/gxm/shaders/cache/main.vert_02c4a0c27e7c3246.sdb b/miniwin/src/d3drm/backends/gxm/shaders/cache/main.vert_02c4a0c27e7c3246.sdb deleted file mode 100644 index c7044589415860ce63bab12b87b18245127f541d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2704 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 K``hPhN&o;|LT9Z2 diff --git a/miniwin/src/d3drm/backends/gxm/shaders/clear.vert.cg b/miniwin/src/d3drm/backends/gxm/shaders/clear.vert.cg deleted file mode 100644 index eb2d0f4e..00000000 --- a/miniwin/src/d3drm/backends/gxm/shaders/clear.vert.cg +++ /dev/null @@ -1,7 +0,0 @@ -void main( - float2 aPosition : POSITION, - - out float4 vPosition : POSITION -) { - vPosition = float4(aPosition, 0.0, 1.0); -} diff --git a/miniwin/src/d3drm/backends/gxm/shaders/clear.vert.gxp b/miniwin/src/d3drm/backends/gxm/shaders/clear.vert.gxp deleted file mode 100644 index 9a9339255daf8e9a0da6135319b8723ec8663daf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 252 zcmZ>d2w-4j4PgGoz`&5UY|)H8tu4MR43a<|0x$xZJAk+Vh*{vmj9_*HlwSg*LGrjj z1yI7lju|YS167m)rDLFU2$c4L(h${94u}#!vK~p8f!*a7&@~fU1($L#GK5WN6l~^T gU{F}V5TO2B0HltEn*rnp5J(KjFU~B<%+CX|0R)2=Qvd(} diff --git a/miniwin/src/d3drm/backends/gxm/shaders/clear.frag.cg b/miniwin/src/d3drm/backends/gxm/shaders/color.frag.cg similarity index 100% rename from miniwin/src/d3drm/backends/gxm/shaders/clear.frag.cg rename to miniwin/src/d3drm/backends/gxm/shaders/color.frag.cg diff --git a/miniwin/src/d3drm/backends/gxm/shaders/clear.frag.gxp b/miniwin/src/d3drm/backends/gxm/shaders/color.frag.gxp similarity index 100% rename from miniwin/src/d3drm/backends/gxm/shaders/clear.frag.gxp rename to miniwin/src/d3drm/backends/gxm/shaders/color.frag.gxp diff --git a/miniwin/src/d3drm/backends/gxm/utils.h b/miniwin/src/d3drm/backends/gxm/utils.h index 823ae8e5..d0662492 100644 --- a/miniwin/src/d3drm/backends/gxm/utils.h +++ b/miniwin/src/d3drm/backends/gxm/utils.h @@ -18,13 +18,11 @@ #define ALIGNMENT(n, a) (((a) - ((n) % (a))) % (a)) -#define SET_UNIFORM(buffer, param, value, program) \ +#define SET_UNIFORM(buffer, param, value) \ do { \ size_t __offset = sceGxmProgramParameterGetResourceIndex(param); \ void* __dst = (uint8_t*)(buffer) + (__offset * sizeof(uint32_t)); \ memcpy(__dst, reinterpret_cast(&(value)), sizeof(value)); \ - /*SDL_Log("set uniform param=%s offset=%d size=%d buffer_size=%d", \ - sceGxmProgramParameterGetName(param), __offset*4, sizeof(value), sceGxmProgramGetDefaultUniformBufferSize(program));*/ \ } while (0) #define GET_SHADER_PARAM(var, gxp, name, ret) \ @@ -33,3 +31,11 @@ SDL_Log("Failed to find param %s", name); \ return ret; \ } + +static void printMatrix4x4(float mat[4][4]) { + sceClibPrintf("mat4{\n"); + for(int i = 0; i < 4; i++) { + sceClibPrintf("%f %f %f %f\n", mat[i][0], mat[i][1], mat[i][2], mat[i][3]); + } + sceClibPrintf("}\n"); +} \ No newline at end of file diff --git a/miniwin/src/internal/d3drmrenderer_gxm.h b/miniwin/src/internal/d3drmrenderer_gxm.h index 8afac24f..77e12647 100644 --- a/miniwin/src/internal/d3drmrenderer_gxm.h +++ b/miniwin/src/internal/d3drmrenderer_gxm.h @@ -101,18 +101,17 @@ typedef struct GXMRendererData { void* stencilBufferData; SceGxmDepthStencilSurface depthSurface; - // clear shader - SceGxmShaderPatcherId clearFragmentProgramId; - SceGxmFragmentProgram* clearFragmentProgram; - // main shader SceGxmShaderPatcherId mainVertexProgramId; SceGxmShaderPatcherId mainFragmentProgramId; SceGxmShaderPatcherId imageFragmentProgramId; + SceGxmShaderPatcherId colorFragmentProgramId; + SceGxmVertexProgram* mainVertexProgram; SceGxmFragmentProgram* opaqueFragmentProgram; // 3d with no transparency SceGxmFragmentProgram* transparentFragmentProgram; // 3d with transparency SceGxmFragmentProgram* imageFragmentProgram; // 2d images, no lighting + SceGxmFragmentProgram* colorFragmentProgram; // 2d color, no lighting // main shader vertex uniforms const SceGxmProgramParameter* uModelViewMatrix; @@ -126,7 +125,7 @@ typedef struct GXMRendererData { const SceGxmProgramParameter* uColor; const SceGxmProgramParameter* uUseTexture; - const SceGxmProgramParameter* clearShader_uColor; + const SceGxmProgramParameter* colorShader_uColor; // scene light data void* lightDataBuffer;