diff --git a/plugins/GSdx/GSRendererCL.cpp b/plugins/GSdx/GSRendererCL.cpp index f6615ec0f0..d5896fd7c7 100644 --- a/plugins/GSdx/GSRendererCL.cpp +++ b/plugins/GSdx/GSRendererCL.cpp @@ -74,7 +74,7 @@ typedef struct #pragma pack(pop) -static GSVector4 GSRendererCL::m_pos_scale; +GSVector4 GSRendererCL::m_pos_scale; void GSRendererCL::InitVectors() { @@ -98,7 +98,8 @@ GSRendererCL::GSRendererCL() m_tc_pages[i] = GSVector4i::xffffffff(); } - memset(m_rw_pages_rendering, 0, sizeof(m_rw_pages_rendering)); + for (auto& page_ref : m_rw_pages_rendering) + page_ref = 0; #define InitCVB(P) \ m_cvb[P][0][0] = &GSRendererCL::ConvertVertexBuffer
; \
@@ -573,7 +574,10 @@ void GSRendererCL::Sync(int reason)
m_rw_pages[1][i] = GSVector4i::zero();
}
- for(int i = 0; i < MAX_PAGES; i++) ASSERT(m_rw_pages_rendering[i] == 0);
+#ifndef NDEBUG
+ for(auto page_ref : m_rw_pages_rendering)
+ ASSERT(page_ref == 0);
+#endif
m_synced = true;
}
@@ -793,7 +797,7 @@ void GSRendererCL::Enqueue()
auto job = next++;
uint32 cur_prim_count = (*job)->prim_count;
- uint32 next_prim_count = next != m_jobs.end() ? (*next)->prim_count : 0;
+ //uint32 next_prim_count = next != m_jobs.end() ? (*next)->prim_count : 0;
total_prim_count += cur_prim_count;
@@ -1234,7 +1238,11 @@ void GSRendererCL::UsePages(uint32* p)
{
for(int index = 0; index < 32; index++)
{
- _InterlockedIncrement16((short*)&m_rw_pages_rendering[index | o] + l);
+ //_InterlockedIncrement16((short*)&m_rw_pages_rendering[index | o] + l);
+ if (l == 0)
+ m_rw_pages_rendering[index | o] += 1;
+ else
+ m_rw_pages_rendering[index | o] += 0x10000;
*p++ = index | o;
}
@@ -1245,7 +1253,11 @@ void GSRendererCL::UsePages(uint32* p)
{
mask &= ~(1 << index);
- _InterlockedIncrement16((short*)&m_rw_pages_rendering[index | o] + l);
+ //_InterlockedIncrement16((short*)&m_rw_pages_rendering[index | o] + l);
+ if (l == 0)
+ m_rw_pages_rendering[index | o] += 1;
+ else
+ m_rw_pages_rendering[index | o] += 0x10000;
*p++ = index | o;
}
@@ -1265,14 +1277,16 @@ void GSRendererCL::ReleasePages(uint32* pages)
for(; *p != GSOffset::EOP; p++)
{
- _InterlockedDecrement16((short*)&m_rw_pages_rendering[*p] + 0);
+ m_rw_pages_rendering[*p] -= 1;
+ //_InterlockedDecrement16((short*)&m_rw_pages_rendering[*p] + 0);
}
p++;
for(; *p != GSOffset::EOP; p++)
{
- _InterlockedDecrement16((short*)&m_rw_pages_rendering[*p] + 1);
+ m_rw_pages_rendering[*p] -= 0x10000;
+ //_InterlockedDecrement16((short*)&m_rw_pages_rendering[*p] + 1);
}
}
@@ -1439,7 +1453,7 @@ bool GSRendererCL::SetupParameter(TFXJob* job, TFXParameter* pb, GSVertexCL* ver
bool mipmap = IsMipMapActive();
- GIFRegTEX0 TEX0 = m_context->GetSizeFixedTEX0(m_vt.m_min.t.xyxy(m_vt.m_max.t), m_vt.IsLinear(), mipmap);
+ GIFRegTEX0 TEX0 = m_context->GetSizeFixedTEX0(s_n, m_vt.m_min.t.xyxy(m_vt.m_max.t), m_vt.IsLinear(), mipmap);
GSVector4i r;
@@ -1902,7 +1916,7 @@ GSRendererCL::CL::CL()
if(devs.empty())
{
- throw new std::exception("OpenCL device not found");
+ throw new std::runtime_error("OpenCL device not found");
}
vector