mirror of https://github.com/RPCS3/rpcs3.git
d3d12: Use ComPtr<> instead of manually releasing some structures
This commit is contained in:
parent
9cb88b3a8d
commit
09cc127dd9
|
@ -3,12 +3,15 @@
|
|||
|
||||
#include <d3d12.h>
|
||||
#include <cassert>
|
||||
#include <wrl/client.h>
|
||||
#include "utilities/Log.h"
|
||||
#include "Emu/Memory/vm.h"
|
||||
#include "Emu/RSX/GCM.h"
|
||||
|
||||
#pragma comment (lib, "dxgi.lib")
|
||||
|
||||
using namespace Microsoft::WRL;
|
||||
|
||||
#define SAFE_RELEASE(x) if (x) x->Release();
|
||||
|
||||
// From DX12 D3D11On12 Sample (MIT Licensed)
|
||||
|
|
|
@ -279,7 +279,7 @@ std::vector<D3D12_VERTEX_BUFFER_VIEW> D3D12GSRender::UploadVertexBuffers(bool in
|
|||
{
|
||||
std::vector<D3D12_VERTEX_BUFFER_VIEW> result;
|
||||
const std::vector<VertexBufferFormat> &vertexBufferFormat = FormatVertexData(m_vertex_data);
|
||||
m_IASet = getIALayout(m_device, vertexBufferFormat, m_vertex_data);
|
||||
m_IASet = getIALayout(m_device.Get(), vertexBufferFormat, m_vertex_data);
|
||||
|
||||
const u32 data_offset = indexed_draw ? 0 : m_draw_array_first;
|
||||
|
||||
|
@ -302,7 +302,7 @@ std::vector<D3D12_VERTEX_BUFFER_VIEW> D3D12GSRender::UploadVertexBuffers(bool in
|
|||
vertexBuffer = It->second;
|
||||
else
|
||||
{
|
||||
vertexBuffer = createVertexBuffer(vbf, m_vertex_data, m_device, m_vertexIndexData);
|
||||
vertexBuffer = createVertexBuffer(vbf, m_vertex_data, m_device.Get(), m_vertexIndexData);
|
||||
m_vertexCache[key] = vertexBuffer;
|
||||
}
|
||||
|
||||
|
|
|
@ -242,8 +242,7 @@ D3D12GSRender::D3D12GSRender()
|
|||
D3D12_COMMAND_QUEUE_DESC copyQueueDesc = {}, graphicQueueDesc = {};
|
||||
copyQueueDesc.Type = D3D12_COMMAND_LIST_TYPE_COPY;
|
||||
graphicQueueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;
|
||||
ThrowIfFailed(m_device->CreateCommandQueue(©QueueDesc, IID_PPV_ARGS(&m_commandQueueCopy)));
|
||||
ThrowIfFailed(m_device->CreateCommandQueue(&graphicQueueDesc, IID_PPV_ARGS(&m_commandQueueGraphic)));
|
||||
ThrowIfFailed(m_device->CreateCommandQueue(&graphicQueueDesc, IID_PPV_ARGS(m_commandQueueGraphic.GetAddressOf())));
|
||||
|
||||
g_descriptorStrideSRVCBVUAV = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
|
||||
g_descriptorStrideDSV = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_DSV);
|
||||
|
@ -266,7 +265,7 @@ D3D12GSRender::D3D12GSRender()
|
|||
swapChain.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
|
||||
swapChain.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
|
||||
|
||||
ThrowIfFailed(dxgiFactory->CreateSwapChain(m_commandQueueGraphic, &swapChain, (IDXGISwapChain**)&m_swapChain));
|
||||
ThrowIfFailed(dxgiFactory->CreateSwapChain(m_commandQueueGraphic.Get(), &swapChain, (IDXGISwapChain**)m_swapChain.GetAddressOf()));
|
||||
m_swapChain->GetBuffer(0, IID_PPV_ARGS(&m_backBuffer[0]));
|
||||
m_swapChain->GetBuffer(1, IID_PPV_ARGS(&m_backBuffer[1]));
|
||||
|
||||
|
@ -277,9 +276,9 @@ D3D12GSRender::D3D12GSRender()
|
|||
rttDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
|
||||
rttDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
m_device->CreateDescriptorHeap(&heapDesc, IID_PPV_ARGS(&m_backbufferAsRendertarget[0]));
|
||||
m_device->CreateRenderTargetView(m_backBuffer[0], &rttDesc, m_backbufferAsRendertarget[0]->GetCPUDescriptorHandleForHeapStart());
|
||||
m_device->CreateRenderTargetView(m_backBuffer[0].Get(), &rttDesc, m_backbufferAsRendertarget[0]->GetCPUDescriptorHandleForHeapStart());
|
||||
m_device->CreateDescriptorHeap(&heapDesc, IID_PPV_ARGS(&m_backbufferAsRendertarget[1]));
|
||||
m_device->CreateRenderTargetView(m_backBuffer[1], &rttDesc, m_backbufferAsRendertarget[1]->GetCPUDescriptorHandleForHeapStart());
|
||||
m_device->CreateRenderTargetView(m_backBuffer[1].Get(), &rttDesc, m_backbufferAsRendertarget[1]->GetCPUDescriptorHandleForHeapStart());
|
||||
|
||||
// Common root signatures
|
||||
for (unsigned textureCount = 0; textureCount < 17; textureCount++)
|
||||
|
@ -331,16 +330,16 @@ D3D12GSRender::D3D12GSRender()
|
|||
m_device->CreateRootSignature(0,
|
||||
rootSignatureBlob->GetBufferPointer(),
|
||||
rootSignatureBlob->GetBufferSize(),
|
||||
IID_PPV_ARGS(&m_rootSignatures[textureCount]));
|
||||
IID_PPV_ARGS(m_rootSignatures[textureCount].GetAddressOf()));
|
||||
}
|
||||
|
||||
m_perFrameStorage[0].Init(m_device);
|
||||
m_perFrameStorage[0].Init(m_device.Get());
|
||||
m_perFrameStorage[0].Reset();
|
||||
m_perFrameStorage[1].Init(m_device);
|
||||
m_perFrameStorage[1].Init(m_device.Get());
|
||||
m_perFrameStorage[1].Reset();
|
||||
|
||||
initConvertShader();
|
||||
m_outputScalingPass.Init(m_device);
|
||||
m_outputScalingPass.Init(m_device.Get());
|
||||
|
||||
D3D12_HEAP_PROPERTIES hp = {};
|
||||
hp.Type = D3D12_HEAP_TYPE_DEFAULT;
|
||||
|
@ -354,14 +353,14 @@ D3D12GSRender::D3D12GSRender()
|
|||
IID_PPV_ARGS(&m_dummyTexture))
|
||||
);
|
||||
|
||||
m_readbackResources.Init(m_device, 1024 * 1024 * 128, D3D12_HEAP_TYPE_READBACK, D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS);
|
||||
m_UAVHeap.Init(m_device, 1024 * 1024 * 128, D3D12_HEAP_TYPE_DEFAULT, D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES);
|
||||
m_readbackResources.Init(m_device.Get(), 1024 * 1024 * 128, D3D12_HEAP_TYPE_READBACK, D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS);
|
||||
m_UAVHeap.Init(m_device.Get(), 1024 * 1024 * 128, D3D12_HEAP_TYPE_DEFAULT, D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES);
|
||||
|
||||
m_rtts.Init(m_device);
|
||||
m_rtts.Init(m_device.Get());
|
||||
|
||||
m_constantsData.Init(m_device, 1024 * 1024 * 64, D3D12_HEAP_TYPE_UPLOAD, D3D12_HEAP_FLAG_NONE);
|
||||
m_vertexIndexData.Init(m_device, 1024 * 1024 * 384, D3D12_HEAP_TYPE_UPLOAD, D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS);
|
||||
m_textureUploadData.Init(m_device, 1024 * 1024 * 256, D3D12_HEAP_TYPE_UPLOAD, D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS);
|
||||
m_constantsData.Init(m_device.Get(), 1024 * 1024 * 64, D3D12_HEAP_TYPE_UPLOAD, D3D12_HEAP_FLAG_NONE);
|
||||
m_vertexIndexData.Init(m_device.Get(), 1024 * 1024 * 384, D3D12_HEAP_TYPE_UPLOAD, D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS);
|
||||
m_textureUploadData.Init(m_device.Get(), 1024 * 1024 * 256, D3D12_HEAP_TYPE_UPLOAD, D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS);
|
||||
}
|
||||
|
||||
D3D12GSRender::~D3D12GSRender()
|
||||
|
@ -378,22 +377,12 @@ D3D12GSRender::~D3D12GSRender()
|
|||
m_convertRootSignature->Release();
|
||||
m_perFrameStorage[0].Release();
|
||||
m_perFrameStorage[1].Release();
|
||||
m_commandQueueGraphic->Release();
|
||||
m_commandQueueCopy->Release();
|
||||
m_backbufferAsRendertarget[0]->Release();
|
||||
m_backBuffer[0]->Release();
|
||||
m_backbufferAsRendertarget[1]->Release();
|
||||
m_backBuffer[1]->Release();
|
||||
m_rtts.Release();
|
||||
for (unsigned i = 0; i < 17; i++)
|
||||
m_rootSignatures[i]->Release();
|
||||
for (auto &tmp : m_texToClean)
|
||||
tmp->Release();
|
||||
for (auto &tmp : m_texturesCache)
|
||||
tmp.second->Release();
|
||||
m_swapChain->Release();
|
||||
m_outputScalingPass.Release();
|
||||
m_device->Release();
|
||||
unloadD3D12FunctionPointers();
|
||||
}
|
||||
|
||||
|
@ -559,7 +548,7 @@ void D3D12GSRender::Draw()
|
|||
return;
|
||||
}
|
||||
|
||||
commandList->SetGraphicsRootSignature(m_rootSignatures[m_PSO->second]);
|
||||
commandList->SetGraphicsRootSignature(m_rootSignatures[m_PSO->second].Get());
|
||||
commandList->OMSetStencilRef(m_stencil_func_ref);
|
||||
|
||||
// Constants
|
||||
|
@ -821,7 +810,7 @@ void D3D12GSRender::Flip()
|
|||
resourceToFlip = m_rtts.m_currentlyBoundRenderTargets[0];
|
||||
}
|
||||
|
||||
commandList->ResourceBarrier(1, &getResourceBarrierTransition(m_backBuffer[m_swapChain->GetCurrentBackBufferIndex()], D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));
|
||||
commandList->ResourceBarrier(1, &getResourceBarrierTransition(m_backBuffer[m_swapChain->GetCurrentBackBufferIndex()].Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));
|
||||
|
||||
D3D12_VIEWPORT viewport =
|
||||
{
|
||||
|
@ -893,7 +882,7 @@ void D3D12GSRender::Flip()
|
|||
if (m_rtts.m_currentlyBoundRenderTargets[0] != nullptr)
|
||||
commandList->DrawInstanced(4, 1, 0, 0);
|
||||
|
||||
commandList->ResourceBarrier(1, &getResourceBarrierTransition(m_backBuffer[m_swapChain->GetCurrentBackBufferIndex()], D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT));
|
||||
commandList->ResourceBarrier(1, &getResourceBarrierTransition(m_backBuffer[m_swapChain->GetCurrentBackBufferIndex()].Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT));
|
||||
if (isFlipSurfaceInLocalMemory(m_surface_color_target) && m_rtts.m_currentlyBoundRenderTargets[0] != nullptr)
|
||||
commandList->ResourceBarrier(1, &getResourceBarrierTransition(m_rtts.m_currentlyBoundRenderTargets[0], D3D12_RESOURCE_STATE_GENERIC_READ, D3D12_RESOURCE_STATE_RENDER_TARGET));
|
||||
ThrowIfFailed(commandList->Close());
|
||||
|
|
|
@ -230,6 +230,17 @@ struct GarbageCollectionThread
|
|||
class D3D12GSRender : public GSRender
|
||||
{
|
||||
private:
|
||||
/** D3D12 structures.
|
||||
* Note: they should be declared in reverse order of destruction
|
||||
*/
|
||||
ComPtr<ID3D12Device> m_device;
|
||||
ComPtr<ID3D12CommandQueue> m_commandQueueGraphic;
|
||||
ComPtr<struct IDXGISwapChain3> m_swapChain;
|
||||
ComPtr<ID3D12Resource> m_backBuffer[2];
|
||||
ComPtr<ID3D12DescriptorHeap> m_backbufferAsRendertarget[2];
|
||||
// m_rootSignatures[N] is RS with N texture/sample
|
||||
ComPtr<ID3D12RootSignature> m_rootSignatures[17];
|
||||
|
||||
/**
|
||||
* Mutex protecting m_texturesCache and m_Textoclean access
|
||||
* Memory protection fault catch can be generated by any thread and
|
||||
|
@ -253,8 +264,6 @@ private:
|
|||
|
||||
PipelineStateObjectCache m_cachePSO;
|
||||
std::pair<ID3D12PipelineState *, size_t> *m_PSO;
|
||||
// m_rootSignatures[N] is RS with N texture/sample
|
||||
ID3D12RootSignature *m_rootSignatures[17];
|
||||
|
||||
struct
|
||||
{
|
||||
|
@ -346,22 +355,15 @@ private:
|
|||
RenderTargets m_rtts;
|
||||
|
||||
std::vector<D3D12_INPUT_ELEMENT_DESC> m_IASet;
|
||||
ID3D12Device* m_device;
|
||||
|
||||
size_t g_descriptorStrideSRVCBVUAV;
|
||||
size_t g_descriptorStrideDSV;
|
||||
size_t g_descriptorStrideRTV;
|
||||
size_t g_descriptorStrideSamplers;
|
||||
ID3D12CommandQueue *m_commandQueueCopy;
|
||||
ID3D12CommandQueue *m_commandQueueGraphic;
|
||||
|
||||
// Used to fill unused texture slot
|
||||
ID3D12Resource *m_dummyTexture;
|
||||
|
||||
struct IDXGISwapChain3 *m_swapChain;
|
||||
//BackBuffers
|
||||
ID3D12Resource* m_backBuffer[2];
|
||||
ID3D12DescriptorHeap *m_backbufferAsRendertarget[2];
|
||||
|
||||
size_t m_lastWidth, m_lastHeight, m_lastDepth;
|
||||
public:
|
||||
GSFrameBase2 *m_frame;
|
||||
|
|
|
@ -10,8 +10,9 @@
|
|||
#define TO_STRING(x) #x
|
||||
|
||||
void Shader::Compile(const std::string &code, SHADER_TYPE st)
|
||||
{ HRESULT hr;
|
||||
Microsoft::WRL::ComPtr<ID3DBlob> errorBlob;
|
||||
{
|
||||
HRESULT hr;
|
||||
ComPtr<ID3DBlob> errorBlob;
|
||||
switch (st)
|
||||
{
|
||||
case SHADER_TYPE::SHADER_TYPE_VERTEX:
|
||||
|
@ -27,9 +28,6 @@ void Shader::Compile(const std::string &code, SHADER_TYPE st)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool D3D12GSRender::LoadProgram()
|
||||
{
|
||||
if (!m_cur_fragment_prog)
|
||||
|
@ -287,7 +285,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, m_rootSignatures));
|
||||
m_PSO = m_cachePSO.getGraphicPipelineState(m_cur_vertex_prog, m_cur_fragment_prog, prop, std::make_pair(m_device.Get(), m_rootSignatures));
|
||||
return m_PSO != nullptr;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
#pragma once
|
||||
#if defined (DX12_SUPPORT)
|
||||
|
||||
#include <d3d12.h>
|
||||
#include <wrl/client.h>
|
||||
#include "D3D12.h"
|
||||
#include "../Common/ProgramStateCache.h"
|
||||
#include "D3D12VertexProgramDecompiler.h"
|
||||
#include "D3D12FragmentProgramDecompiler.h"
|
||||
#include "Utilities/File.h"
|
||||
|
||||
|
||||
|
||||
struct D3D12PipelineProperties
|
||||
{
|
||||
D3D12_PRIMITIVE_TOPOLOGY_TYPE Topology;
|
||||
|
@ -66,7 +63,7 @@ public:
|
|||
~Shader() {}
|
||||
|
||||
u32 id;
|
||||
Microsoft::WRL::ComPtr<ID3DBlob> bytecode;
|
||||
ComPtr<ID3DBlob> bytecode;
|
||||
std::vector<size_t> FragmentConstantOffsetCache;
|
||||
size_t m_textureCount;
|
||||
|
||||
|
@ -86,7 +83,7 @@ struct D3D12Traits
|
|||
typedef Shader FragmentProgramData;
|
||||
typedef std::pair<ID3D12PipelineState *, size_t> PipelineData;
|
||||
typedef D3D12PipelineProperties PipelineProperties;
|
||||
typedef std::pair<ID3D12Device *, ID3D12RootSignature **> ExtraData;
|
||||
typedef std::pair<ID3D12Device *, ComPtr<ID3D12RootSignature> *> ExtraData;
|
||||
|
||||
static
|
||||
void RecompileFragmentProgram(RSXFragmentProgram *RSXFP, FragmentProgramData& fragmentProgramData, size_t ID)
|
||||
|
@ -145,7 +142,7 @@ struct D3D12Traits
|
|||
graphicPipelineStateDesc.PS.BytecodeLength = fragmentProgramData.bytecode->GetBufferSize();
|
||||
graphicPipelineStateDesc.PS.pShaderBytecode = fragmentProgramData.bytecode->GetBufferPointer();
|
||||
|
||||
graphicPipelineStateDesc.pRootSignature = extraData.second[fragmentProgramData.m_textureCount];
|
||||
graphicPipelineStateDesc.pRootSignature = extraData.second[fragmentProgramData.m_textureCount].Get();
|
||||
result->second = fragmentProgramData.m_textureCount;
|
||||
|
||||
graphicPipelineStateDesc.BlendState = pipelineProperties.Blend;
|
||||
|
|
|
@ -59,66 +59,66 @@ void D3D12GSRender::PrepareRenderTargets(ID3D12GraphicsCommandList *copycmdlist)
|
|||
{
|
||||
case CELL_GCM_SURFACE_TARGET_0:
|
||||
{
|
||||
ID3D12Resource *rttA = m_rtts.bindAddressAsRenderTargets(m_device, copycmdlist, 0, address_a, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
ID3D12Resource *rttA = m_rtts.bindAddressAsRenderTargets(m_device.Get(), copycmdlist, 0, address_a, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
m_clear_surface_color_r / 255.0f, m_clear_surface_color_g / 255.0f, m_clear_surface_color_b / 255.0f, m_clear_surface_color_a / 255.0f);
|
||||
m_device->CreateRenderTargetView(rttA, &rttViewDesc, Handle);
|
||||
break;
|
||||
}
|
||||
case CELL_GCM_SURFACE_TARGET_1:
|
||||
{
|
||||
ID3D12Resource *rttB = m_rtts.bindAddressAsRenderTargets(m_device, copycmdlist, 0, address_b, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
ID3D12Resource *rttB = m_rtts.bindAddressAsRenderTargets(m_device.Get(), copycmdlist, 0, address_b, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
m_clear_surface_color_r / 255.0f, m_clear_surface_color_g / 255.0f, m_clear_surface_color_b / 255.0f, m_clear_surface_color_a / 255.0f);
|
||||
m_device->CreateRenderTargetView(rttB, &rttViewDesc, Handle);
|
||||
break;
|
||||
}
|
||||
case CELL_GCM_SURFACE_TARGET_MRT1:
|
||||
{
|
||||
ID3D12Resource *rttA = m_rtts.bindAddressAsRenderTargets(m_device, copycmdlist, 0, address_a, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
ID3D12Resource *rttA = m_rtts.bindAddressAsRenderTargets(m_device.Get(), copycmdlist, 0, address_a, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
m_clear_surface_color_r / 255.0f, m_clear_surface_color_g / 255.0f, m_clear_surface_color_b / 255.0f, m_clear_surface_color_a / 255.0f);
|
||||
m_device->CreateRenderTargetView(rttA, &rttViewDesc, Handle);
|
||||
Handle.ptr += g_RTTIncrement;
|
||||
ID3D12Resource *rttB = m_rtts.bindAddressAsRenderTargets(m_device, copycmdlist, 1, address_b, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
ID3D12Resource *rttB = m_rtts.bindAddressAsRenderTargets(m_device.Get(), copycmdlist, 1, address_b, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
m_clear_surface_color_r / 255.0f, m_clear_surface_color_g / 255.0f, m_clear_surface_color_b / 255.0f, m_clear_surface_color_a / 255.0f);
|
||||
m_device->CreateRenderTargetView(rttB, &rttViewDesc, Handle);
|
||||
}
|
||||
break;
|
||||
case CELL_GCM_SURFACE_TARGET_MRT2:
|
||||
{
|
||||
ID3D12Resource *rttA = m_rtts.bindAddressAsRenderTargets(m_device, copycmdlist, 0, address_a, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
ID3D12Resource *rttA = m_rtts.bindAddressAsRenderTargets(m_device.Get(), copycmdlist, 0, address_a, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
m_clear_surface_color_r / 255.0f, m_clear_surface_color_g / 255.0f, m_clear_surface_color_b / 255.0f, m_clear_surface_color_a / 255.0f);
|
||||
m_device->CreateRenderTargetView(rttA, &rttViewDesc, Handle);
|
||||
Handle.ptr += g_RTTIncrement;
|
||||
ID3D12Resource *rttB = m_rtts.bindAddressAsRenderTargets(m_device, copycmdlist, 1, address_b, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
ID3D12Resource *rttB = m_rtts.bindAddressAsRenderTargets(m_device.Get(), copycmdlist, 1, address_b, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
m_clear_surface_color_r / 255.0f, m_clear_surface_color_g / 255.0f, m_clear_surface_color_b / 255.0f, m_clear_surface_color_a / 255.0f);
|
||||
m_device->CreateRenderTargetView(rttB, &rttViewDesc, Handle);
|
||||
Handle.ptr += g_RTTIncrement;
|
||||
ID3D12Resource *rttC = m_rtts.bindAddressAsRenderTargets(m_device, copycmdlist, 2, address_c, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
ID3D12Resource *rttC = m_rtts.bindAddressAsRenderTargets(m_device.Get(), copycmdlist, 2, address_c, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
m_clear_surface_color_r / 255.0f, m_clear_surface_color_g / 255.0f, m_clear_surface_color_b / 255.0f, m_clear_surface_color_a / 255.0f);
|
||||
m_device->CreateRenderTargetView(rttC, &rttViewDesc, Handle);
|
||||
break;
|
||||
}
|
||||
case CELL_GCM_SURFACE_TARGET_MRT3:
|
||||
{
|
||||
ID3D12Resource *rttA = m_rtts.bindAddressAsRenderTargets(m_device, copycmdlist, 0, address_a, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
ID3D12Resource *rttA = m_rtts.bindAddressAsRenderTargets(m_device.Get(), copycmdlist, 0, address_a, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
m_clear_surface_color_r / 255.0f, m_clear_surface_color_g / 255.0f, m_clear_surface_color_b / 255.0f, m_clear_surface_color_a / 255.0f);
|
||||
m_device->CreateRenderTargetView(rttA, &rttViewDesc, Handle);
|
||||
Handle.ptr += g_RTTIncrement;
|
||||
ID3D12Resource *rttB = m_rtts.bindAddressAsRenderTargets(m_device, copycmdlist, 1, address_b, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
ID3D12Resource *rttB = m_rtts.bindAddressAsRenderTargets(m_device.Get(), copycmdlist, 1, address_b, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
m_clear_surface_color_r / 255.0f, m_clear_surface_color_g / 255.0f, m_clear_surface_color_b / 255.0f, m_clear_surface_color_a / 255.0f);
|
||||
m_device->CreateRenderTargetView(rttB, &rttViewDesc, Handle);
|
||||
Handle.ptr += g_RTTIncrement;
|
||||
ID3D12Resource *rttC = m_rtts.bindAddressAsRenderTargets(m_device, copycmdlist, 2, address_c, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
ID3D12Resource *rttC = m_rtts.bindAddressAsRenderTargets(m_device.Get(), copycmdlist, 2, address_c, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
m_clear_surface_color_r / 255.0f, m_clear_surface_color_g / 255.0f, m_clear_surface_color_b / 255.0f, m_clear_surface_color_a / 255.0f);
|
||||
m_device->CreateRenderTargetView(rttC, &rttViewDesc, Handle);
|
||||
Handle.ptr += g_RTTIncrement;
|
||||
ID3D12Resource *rttD = m_rtts.bindAddressAsRenderTargets(m_device, copycmdlist, 3, address_d, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
ID3D12Resource *rttD = m_rtts.bindAddressAsRenderTargets(m_device.Get(), copycmdlist, 3, address_d, m_surface_clip_w, m_surface_clip_h, m_surface_color_format,
|
||||
m_clear_surface_color_r / 255.0f, m_clear_surface_color_g / 255.0f, m_clear_surface_color_b / 255.0f, m_clear_surface_color_a / 255.0f);
|
||||
m_device->CreateRenderTargetView(rttD, &rttViewDesc, Handle);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ID3D12Resource *ds = m_rtts.bindAddressAsDepthStencil(m_device, copycmdlist, address_z, m_surface_clip_w, m_surface_clip_h, m_surface_depth_format, 1., 0);
|
||||
ID3D12Resource *ds = m_rtts.bindAddressAsDepthStencil(m_device.Get(), copycmdlist, address_z, m_surface_clip_w, m_surface_clip_h, m_surface_depth_format, 1., 0);
|
||||
|
||||
D3D12_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc = {};
|
||||
switch (m_surface_depth_format)
|
||||
|
|
|
@ -758,7 +758,7 @@ size_t D3D12GSRender::UploadTextures(ID3D12GraphicsCommandList *cmdlist)
|
|||
}
|
||||
else
|
||||
{
|
||||
vramTexture = uploadSingleTexture(m_textures[i], m_device, cmdlist, m_textureUploadData);
|
||||
vramTexture = uploadSingleTexture(m_textures[i], m_device.Get(), cmdlist, m_textureUploadData);
|
||||
m_texturesCache[texaddr] = vramTexture;
|
||||
|
||||
u32 s = (u32)align(getTextureSize(m_textures[i]), 4096);
|
||||
|
|
Loading…
Reference in New Issue