mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-14 01:27:00 +00:00
Remove fragment program
This commit is contained in:
parent
67f1f0fea3
commit
1e431edf09
@ -314,7 +314,7 @@ void D3D12GSRender::FillVertexShaderConstantsBuffer()
|
||||
void D3D12GSRender::FillPixelShaderConstantsBuffer()
|
||||
{
|
||||
// Get constant from fragment program
|
||||
const std::vector<size_t> &fragmentOffset = m_cachePSO.getFragmentConstantOffsetsCache(m_cur_fragment_prog);
|
||||
const std::vector<size_t> &fragmentOffset = m_cachePSO.getFragmentConstantOffsetsCache(&fragment_program);
|
||||
size_t bufferSize = fragmentOffset.size() * 4 * sizeof(float) + 1;
|
||||
// Multiple of 256 never 0
|
||||
bufferSize = (bufferSize + 255) & ~255;
|
||||
@ -333,7 +333,7 @@ void D3D12GSRender::FillPixelShaderConstantsBuffer()
|
||||
bool isCommandBufferSetConstant = false;
|
||||
for (const auto& entry : fragment_constants)
|
||||
{
|
||||
size_t fragmentId = entry.first - m_cur_fragment_prog->offset;
|
||||
size_t fragmentId = entry.first - fragment_program.offset;
|
||||
if (fragmentId == offsetInFP)
|
||||
{
|
||||
isCommandBufferSetConstant = true;
|
||||
@ -346,7 +346,7 @@ void D3D12GSRender::FillPixelShaderConstantsBuffer()
|
||||
}
|
||||
if (!isCommandBufferSetConstant)
|
||||
{
|
||||
auto data = vm::ps3::ptr<u32>::make(m_cur_fragment_prog->addr + (u32)offsetInFP);
|
||||
auto data = vm::ps3::ptr<u32>::make(fragment_program.addr + (u32)offsetInFP);
|
||||
|
||||
u32 c0 = (data[0] >> 16 | data[0] << 16);
|
||||
u32 c1 = (data[1] >> 16 | data[1] << 16);
|
||||
|
@ -310,6 +310,7 @@ private:
|
||||
// Copy of RTT to be used as texture
|
||||
std::unordered_map<u32, ID3D12Resource* > m_texturesRTTs;
|
||||
|
||||
RSXFragmentProgram fragment_program;
|
||||
PipelineStateObjectCache m_cachePSO;
|
||||
std::pair<ID3D12PipelineState *, size_t> *m_PSO;
|
||||
|
||||
|
@ -52,16 +52,10 @@ void D3D12GSRender::notifyRasterizerStateChange()
|
||||
|
||||
bool D3D12GSRender::LoadProgram()
|
||||
{
|
||||
if (m_PSO != nullptr)
|
||||
return true;
|
||||
|
||||
if (!m_cur_fragment_prog)
|
||||
{
|
||||
LOG_WARNING(RSX, "LoadProgram: m_cur_shader_prog == NULL");
|
||||
return false;
|
||||
}
|
||||
|
||||
m_cur_fragment_prog->ctrl = m_shader_ctrl;
|
||||
u32 shader_program = rsx::method_registers[NV4097_SET_SHADER_PROGRAM];
|
||||
fragment_program.offset = shader_program & ~0x3;
|
||||
fragment_program.addr = rsx::get_address(fragment_program.offset, (shader_program & 0x3) - 1);
|
||||
fragment_program.ctrl = rsx::method_registers[NV4097_SET_SHADER_CONTROL];
|
||||
|
||||
if (!m_cur_vertex_prog)
|
||||
{
|
||||
@ -306,7 +300,7 @@ bool D3D12GSRender::LoadProgram()
|
||||
|
||||
prop.IASet = m_IASet;
|
||||
|
||||
m_PSO = m_cachePSO.getGraphicPipelineState(m_cur_vertex_prog, m_cur_fragment_prog, prop, std::make_pair(m_device.Get(), m_rootSignatures));
|
||||
m_PSO = m_cachePSO.getGraphicPipelineState(m_cur_vertex_prog, &fragment_program, prop, std::make_pair(m_device.Get(), m_rootSignatures));
|
||||
return m_PSO != nullptr;
|
||||
}
|
||||
|
||||
|
@ -1062,7 +1062,7 @@ void GLGSRender::InitVertexData()
|
||||
|
||||
void GLGSRender::InitFragmentData()
|
||||
{
|
||||
if (!m_cur_fragment_prog)
|
||||
/* if (!m_cur_fragment_prog)
|
||||
{
|
||||
LOG_ERROR(RSX, "InitFragmentData: m_cur_shader_prog == NULL");
|
||||
return;
|
||||
@ -1088,7 +1088,7 @@ void GLGSRender::InitFragmentData()
|
||||
float f3 = (float&)c3;
|
||||
glUniform4f(l, f0, f1, f2, f3);
|
||||
checkForGlError("glUniform4f " + name + fmt::format(" %u [%f %f %f %f]", l, f0, f1, f2, f3));
|
||||
}
|
||||
}*/
|
||||
|
||||
/* for (const RSXTransformConstant& c : m_fragment_constants)
|
||||
{
|
||||
@ -1111,7 +1111,7 @@ void GLGSRender::InitFragmentData()
|
||||
|
||||
bool GLGSRender::LoadProgram()
|
||||
{
|
||||
if (!m_cur_fragment_prog)
|
||||
/* if (!m_cur_fragment_prog)
|
||||
{
|
||||
LOG_WARNING(RSX, "LoadProgram: m_cur_shader_prog == NULL");
|
||||
return false;
|
||||
@ -1127,7 +1127,7 @@ bool GLGSRender::LoadProgram()
|
||||
|
||||
GLProgram *result = m_prog_buffer.getGraphicPipelineState(m_cur_vertex_prog, m_cur_fragment_prog, nullptr, nullptr);
|
||||
m_program.id = result->id;
|
||||
m_program.Use();
|
||||
m_program.Use();*/
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -938,16 +938,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||
|
||||
// Shader
|
||||
case NV4097_SET_SHADER_PROGRAM:
|
||||
{
|
||||
m_cur_fragment_prog = &m_fragment_progs[m_cur_fragment_prog_num];
|
||||
|
||||
const u32 a0 = ARGS(0);
|
||||
m_cur_fragment_prog->offset = a0 & ~0x3;
|
||||
m_cur_fragment_prog->addr = rsx::get_address(m_cur_fragment_prog->offset, (a0 & 0x3) - 1);
|
||||
m_cur_fragment_prog->ctrl = 0x40;
|
||||
notifyProgramChange();
|
||||
break;
|
||||
}
|
||||
|
||||
case NV4097_SET_SHADER_CONTROL:
|
||||
{
|
||||
@ -2146,7 +2138,6 @@ void RSXThread::End()
|
||||
|
||||
m_indexed_array.Reset();
|
||||
fragment_constants.clear();
|
||||
m_cur_fragment_prog_num = 0;
|
||||
|
||||
m_clear_surface_mask = 0;
|
||||
m_begin_end = 0;
|
||||
@ -2274,8 +2265,6 @@ void RSXThread::Init(const u32 ioAddress, const u32 ioSize, const u32 ctrlAddres
|
||||
local_mem_addr = localAddress;
|
||||
|
||||
m_cur_vertex_prog = nullptr;
|
||||
m_cur_fragment_prog = nullptr;
|
||||
m_cur_fragment_prog_num = 0;
|
||||
|
||||
m_used_gcm_commands.clear();
|
||||
|
||||
|
@ -156,9 +156,7 @@ public:
|
||||
std::unordered_map<u32, color4_base<f32>> transform_constants;
|
||||
std::unordered_map<u32, color4_base<f32>> fragment_constants;
|
||||
|
||||
u32 m_shader_ctrl, m_cur_fragment_prog_num;
|
||||
RSXFragmentProgram m_fragment_progs[rsx::limits::fragment_count];
|
||||
RSXFragmentProgram* m_cur_fragment_prog;
|
||||
u32 m_shader_ctrl;
|
||||
RSXVertexProgram m_vertex_progs[rsx::limits::vertex_count];
|
||||
RSXVertexProgram* m_cur_vertex_prog;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user