diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp b/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp index a59adb4793..b4625f0157 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp @@ -64,6 +64,7 @@ static int s_fps = 0; static u32 s_blendMode; static u32 s_LastAA; static bool IS_AMD; +static float m_fMaxPointSize; static char *st; @@ -329,6 +330,9 @@ Renderer::Renderer() D3D::BeginFrame(); D3D::SetRenderState(D3DRS_SCISSORTESTENABLE, true); D3D::dev->CreateOffscreenPlainSurface(s_backbuffer_width,s_backbuffer_height, D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM, &ScreenShootMEMSurface, NULL ); + D3D::SetRenderState(D3DRS_POINTSCALEENABLE,false); + m_fMaxPointSize = D3D::GetCaps().MaxPointSize; + } Renderer::~Renderer() @@ -1301,7 +1305,15 @@ void Renderer::SetLineWidth() // We can't change line width in D3D unless we use ID3DXLine float fratio = xfregs.viewport.wd != 0 ? Renderer::EFBToScaledXf(1.f) : 1.0f; float psize = bpmem.lineptwidth.linesize * fratio / 6.0f; + //little hack to compensate scalling problems in dx9 must be taken out when scalling is fixed. + psize *= 2.0f; + if (psize > m_fMaxPointSize) + { + psize = m_fMaxPointSize; + } D3D::SetRenderState(D3DRS_POINTSIZE, *((DWORD*)&psize)); + D3D::SetRenderState(D3DRS_POINTSIZE_MIN, *((DWORD*)&psize)); + D3D::SetRenderState(D3DRS_POINTSIZE_MAX, *((DWORD*)&psize)); } void Renderer::SetSamplerState(int stage, int texindex) diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp index 88fcca27cf..925617f3f5 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp @@ -158,7 +158,7 @@ void VertexManager::PrepareDrawBuffers(u32 stride) int TdataSize = IndexGenerator::GetTriangleindexLen(); int LDataSize = IndexGenerator::GetLineindexLen(); int PDataSize = IndexGenerator::GetPointindexLen(); - int IndexDataSize = TdataSize + LDataSize + PDataSize; + int IndexDataSize = TdataSize + LDataSize; DWORD LockMode = D3DLOCK_NOOVERWRITE; m_vertex_buffer_cursor--; m_vertex_buffer_cursor = m_vertex_buffer_cursor - (m_vertex_buffer_cursor % stride) + stride; @@ -199,10 +199,6 @@ void VertexManager::PrepareDrawBuffers(u32 stride) memcpy(pIndices, LIBuffer, LDataSize * sizeof(u16)); pIndices += LDataSize; } - if(PDataSize) - { - memcpy(pIndices, PIBuffer, PDataSize * sizeof(u16)); - } m_index_buffers[m_current_index_buffer]->Unlock(); if(m_current_stride != stride || m_vertex_buffer_cursor == 0) { @@ -256,17 +252,20 @@ void VertexManager::DrawVertexBuffer(int stride) } if (points > 0) { - if (FAILED(D3D::dev->DrawIndexedPrimitive( - D3DPT_POINTLIST, - basevertex, - 0, - numverts, - StartIndex, - points))) + //DrawIndexedPrimitive does not support point list so we have to draw the points one by one + for (int i = 0; i < points; i++) { - DumpBadShaders(); + if (FAILED(D3D::dev->DrawPrimitive( + D3DPT_POINTLIST, + basevertex + PIBuffer[i], + 1))) + { + DumpBadShaders(); + } + INCSTAT(stats.thisFrame.numDrawCalls); } - INCSTAT(stats.thisFrame.numIndexedDrawCalls); + + } }