diff --git a/src/xenia/gpu/d3d12/d3d12_command_processor.h b/src/xenia/gpu/d3d12/d3d12_command_processor.h index ba464d8e8..92e0f5c02 100644 --- a/src/xenia/gpu/d3d12/d3d12_command_processor.h +++ b/src/xenia/gpu/d3d12/d3d12_command_processor.h @@ -376,7 +376,7 @@ class D3D12CommandProcessor : public CommandProcessor { CommandAllocator* command_allocator_submitted_last_ = nullptr; ID3D12GraphicsCommandList* command_list_ = nullptr; ID3D12GraphicsCommandList1* command_list_1_ = nullptr; - std::unique_ptr deferred_command_list_ = nullptr; + std::unique_ptr deferred_command_list_; // Should bindless textures and samplers be used - many times faster // UpdateBindings than bindful (that becomes a significant bottleneck with @@ -388,14 +388,12 @@ class D3D12CommandProcessor : public CommandProcessor { // targets. bool edram_rov_used_ = false; - std::unique_ptr constant_buffer_pool_ = - nullptr; + std::unique_ptr constant_buffer_pool_; static constexpr uint32_t kViewBindfulHeapSize = 32768; static_assert(kViewBindfulHeapSize <= D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_1); - std::unique_ptr view_bindful_heap_pool_ = - nullptr; + std::unique_ptr view_bindful_heap_pool_; // Currently bound descriptor heap - updated by RequestViewBindfulDescriptors. ID3D12DescriptorHeap* view_bindful_heap_current_; // Rationale: textures have 4 KB alignment in guest memory, and there can be @@ -426,7 +424,7 @@ class D3D12CommandProcessor : public CommandProcessor { static constexpr uint32_t kSamplerHeapSize = 2000; static_assert(kSamplerHeapSize <= D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE); std::unique_ptr - sampler_bindful_heap_pool_ = nullptr; + sampler_bindful_heap_pool_; ID3D12DescriptorHeap* sampler_bindful_heap_current_; ID3D12DescriptorHeap* sampler_bindless_heap_current_ = nullptr; D3D12_CPU_DESCRIPTOR_HANDLE sampler_bindless_heap_cpu_start_; @@ -452,15 +450,15 @@ class D3D12CommandProcessor : public CommandProcessor { ID3D12RootSignature* root_signature_bindless_vs_ = nullptr; ID3D12RootSignature* root_signature_bindless_ds_ = nullptr; - std::unique_ptr shared_memory_ = nullptr; + std::unique_ptr shared_memory_; - std::unique_ptr pipeline_cache_ = nullptr; + std::unique_ptr pipeline_cache_; - std::unique_ptr texture_cache_ = nullptr; + std::unique_ptr texture_cache_; - std::unique_ptr render_target_cache_ = nullptr; + std::unique_ptr render_target_cache_; - std::unique_ptr primitive_converter_ = nullptr; + std::unique_ptr primitive_converter_; // Mip 0 contains the normal gamma ramp (256 entries), mip 1 contains the PWL // ramp (128 entries). DXGI_FORMAT_R10G10B10A2_UNORM 1D. diff --git a/src/xenia/gpu/d3d12/d3d12_graphics_system.cc b/src/xenia/gpu/d3d12/d3d12_graphics_system.cc index 835c94c07..e50bbbaac 100644 --- a/src/xenia/gpu/d3d12/d3d12_graphics_system.cc +++ b/src/xenia/gpu/d3d12/d3d12_graphics_system.cc @@ -142,6 +142,7 @@ X_STATUS D3D12GraphicsSystem::Setup(cpu::Processor* processor, stretch_pipeline_desc.VS.BytecodeLength = sizeof(fullscreen_vs); stretch_pipeline_desc.PS.pShaderBytecode = stretch_ps; stretch_pipeline_desc.PS.BytecodeLength = sizeof(stretch_ps); + // The shader will set alpha to 1, don't use output-merger to preserve it. stretch_pipeline_desc.BlendState.RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; stretch_pipeline_desc.SampleMask = UINT_MAX; diff --git a/src/xenia/gpu/d3d12/pipeline_cache.h b/src/xenia/gpu/d3d12/pipeline_cache.h index 30fd68a4e..cdc6ed5f3 100644 --- a/src/xenia/gpu/d3d12/pipeline_cache.h +++ b/src/xenia/gpu/d3d12/pipeline_cache.h @@ -247,7 +247,7 @@ class PipelineCache { uint32_t resolution_scale_; // Reusable shader translator. - std::unique_ptr shader_translator_ = nullptr; + std::unique_ptr shader_translator_; // Command processor thread DXIL conversion/disassembly interfaces, if DXIL // disassembly is enabled. @@ -344,7 +344,7 @@ class PipelineCache { // Manual-reset event set when the last queued pipeline state object is // created and there are no more pipeline state objects to create. This is // triggered by the thread creating the last pipeline state object. - std::unique_ptr creation_completion_event_ = nullptr; + std::unique_ptr creation_completion_event_; // Whether setting the event on completion is queued. Protected with // creation_request_lock_, notify_one creation_request_cond_ when set. bool creation_completion_set_event_ = false; diff --git a/src/xenia/gpu/d3d12/primitive_converter.h b/src/xenia/gpu/d3d12/primitive_converter.h index c00d29f7c..4d5c80f2d 100644 --- a/src/xenia/gpu/d3d12/primitive_converter.h +++ b/src/xenia/gpu/d3d12/primitive_converter.h @@ -107,7 +107,7 @@ class PrimitiveConverter { Memory& memory_; TraceWriter& trace_writer_; - std::unique_ptr buffer_pool_ = nullptr; + std::unique_ptr buffer_pool_; // Static index buffers for emulating unsupported primitive types when drawing // without an index buffer. diff --git a/src/xenia/gpu/d3d12/render_target_cache.h b/src/xenia/gpu/d3d12/render_target_cache.h index de3846635..cf575dcdf 100644 --- a/src/xenia/gpu/d3d12/render_target_cache.h +++ b/src/xenia/gpu/d3d12/render_target_cache.h @@ -603,7 +603,7 @@ class RenderTargetCache { // For traces only. ID3D12Resource* edram_snapshot_download_buffer_ = nullptr; std::unique_ptr - edram_snapshot_restore_pool_ = nullptr; + edram_snapshot_restore_pool_; }; } // namespace d3d12 diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/stretch_gamma_ps.cso b/src/xenia/gpu/d3d12/shaders/dxbc/stretch_gamma_ps.cso index 6a1fe6724..229d21858 100644 Binary files a/src/xenia/gpu/d3d12/shaders/dxbc/stretch_gamma_ps.cso and b/src/xenia/gpu/d3d12/shaders/dxbc/stretch_gamma_ps.cso differ diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/stretch_gamma_ps.h b/src/xenia/gpu/d3d12/shaders/dxbc/stretch_gamma_ps.h index c41cf6287..e6fd53b4f 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/stretch_gamma_ps.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/stretch_gamma_ps.h @@ -1,11 +1,11 @@ // generated from `xb buildhlsl` // source: stretch_gamma.ps.hlsl const uint8_t stretch_gamma_ps[] = { - 0x44, 0x58, 0x42, 0x43, 0x8D, 0x1B, 0xAE, 0x52, 0x96, 0x87, 0x7B, 0x8F, - 0xCB, 0xD3, 0xBC, 0x4B, 0xCF, 0xAF, 0x66, 0xA9, 0x01, 0x00, 0x00, 0x00, - 0x10, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x46, 0xCD, 0x15, 0xA8, 0x4D, 0x5B, 0xFD, 0x07, + 0x4C, 0x62, 0xA7, 0xD0, 0x61, 0x89, 0x85, 0xA6, 0x01, 0x00, 0x00, 0x00, + 0x24, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x48, 0x02, 0x00, 0x00, 0x7C, 0x02, 0x00, 0x00, - 0x74, 0x04, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xD8, 0x01, 0x00, 0x00, + 0x88, 0x04, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xD8, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2C, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0xFF, 0xFF, 0x00, 0x05, 0x00, 0x00, 0xB0, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, @@ -16,7 +16,7 @@ const uint8_t stretch_gamma_ps[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, @@ -54,8 +54,8 @@ const uint8_t stretch_gamma_ps[] = { 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5F, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0xAB, 0xAB, - 0x53, 0x48, 0x45, 0x58, 0xF0, 0x01, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x53, 0x48, 0x45, 0x58, 0x04, 0x02, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, + 0x81, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x06, 0x46, 0x6E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -67,20 +67,20 @@ const uint8_t stretch_gamma_ps[] = { 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0D, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0D, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, - 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x80, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, - 0x38, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x32, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0D, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x00, @@ -94,19 +94,21 @@ const uint8_t stretch_gamma_ps[] = { 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x05, 0xF2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, - 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x3F, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, + 0x94, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/stretch_gamma_ps.txt b/src/xenia/gpu/d3d12/shaders/dxbc/stretch_gamma_ps.txt index c4addc470..2a06727e9 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/stretch_gamma_ps.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/stretch_gamma_ps.txt @@ -17,7 +17,7 @@ // Name Type Format Dim ID HLSL Bind Count // ------------------------------ ---------- ------- ----------- ------- -------------- ------ // xe_sampler_linear_clamp sampler NA NA S0 s0 1 -// xe_texture texture float4 2d T0 t0 1 +// xe_texture texture float3 2d T0 t0 1 // xe_gamma_ramp texture float3 1d T1 t1 1 // XeStretchGammaRootConstants cbuffer NA NA CB0 cb0 1 // @@ -45,13 +45,14 @@ dcl_resource_texture1d (float,float,float,float) T1[1:1], space=0 dcl_input_ps linear v0.xy dcl_output o0.xyzw dcl_temps 2 -sample_l r0.xyzw, v0.xyxx, T0[0].xyzw, S0[0], l(0.000000) -add r1.x, -CB0[0][0].x, l(1.000000) -mul r1.y, CB0[0][0].x, l(0.500000) -mad r0.xyz, r0.xyzx, r1.xxxx, r1.yyyy +sample_l r0.xyz, v0.xyxx, T0[0].xyzw, S0[0], l(0.000000) +add r0.w, -CB0[0][0].x, l(1.000000) +mul r1.x, CB0[0][0].x, l(0.500000) +mad r0.xyz, r0.xyzx, r0.wwww, r1.xxxx sample_l r0.x, r0.x, T1[1].xyzw, S0[0], l(0.000000) sample_l r0.y, r0.y, T1[1].xyzw, S0[0], l(0.000000) sample_l r0.z, r0.z, T1[1].xyzw, S0[0], l(0.000000) -mov o0.xyzw, r0.xyzw +mov o0.xyz, r0.xyzx +mov o0.w, l(1.000000) ret -// Approximately 9 instruction slots used +// Approximately 10 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/stretch_ps.cso b/src/xenia/gpu/d3d12/shaders/dxbc/stretch_ps.cso index 1843dd639..c5a49abfd 100644 Binary files a/src/xenia/gpu/d3d12/shaders/dxbc/stretch_ps.cso and b/src/xenia/gpu/d3d12/shaders/dxbc/stretch_ps.cso differ diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/stretch_ps.h b/src/xenia/gpu/d3d12/shaders/dxbc/stretch_ps.h index 5aa4fdb1e..7f850d127 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/stretch_ps.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/stretch_ps.h @@ -1,11 +1,11 @@ // generated from `xb buildhlsl` // source: stretch.ps.hlsl const uint8_t stretch_ps[] = { - 0x44, 0x58, 0x42, 0x43, 0x84, 0x8B, 0x62, 0x99, 0x4D, 0x9D, 0x1A, 0x13, - 0x49, 0x13, 0xF7, 0x6B, 0x9F, 0x69, 0x25, 0x8A, 0x01, 0x00, 0x00, 0x00, - 0xB0, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x0B, 0x39, 0x5E, 0x9C, 0x0F, 0x3E, 0xAC, 0xF6, + 0x9E, 0xB3, 0x11, 0xC0, 0x9B, 0x25, 0x2E, 0x6E, 0x01, 0x00, 0x00, 0x00, + 0xE0, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0x48, 0x01, 0x00, 0x00, 0x7C, 0x01, 0x00, 0x00, - 0x14, 0x02, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xD8, 0x00, 0x00, 0x00, + 0x44, 0x02, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0xFF, 0xFF, 0x00, 0x05, 0x00, 0x00, 0xAF, 0x00, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, @@ -16,7 +16,7 @@ const uint8_t stretch_ps[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x72, 0x5F, 0x6C, 0x69, 0x6E, 0x65, 0x61, 0x72, 0x5F, 0x63, 0x6C, 0x61, 0x6D, 0x70, 0x00, 0x78, 0x65, 0x5F, 0x74, @@ -33,26 +33,30 @@ const uint8_t stretch_ps[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5F, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0xAB, 0xAB, 0x53, 0x48, 0x45, 0x58, - 0x90, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xC0, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x5A, 0x00, 0x00, 0x06, 0x46, 0x6E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x07, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, - 0xF2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0D, - 0xF2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0D, 0x72, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x82, 0x20, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/stretch_ps.txt b/src/xenia/gpu/d3d12/shaders/dxbc/stretch_ps.txt index ff7c711a5..8495d8f55 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/stretch_ps.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/stretch_ps.txt @@ -7,7 +7,7 @@ // Name Type Format Dim ID HLSL Bind Count // ------------------------------ ---------- ------- ----------- ------- -------------- ------ // xe_sampler_linear_clamp sampler NA NA S0 s0 1 -// xe_texture texture float4 2d T0 t0 1 +// xe_texture texture float3 2d T0 t0 1 // // // @@ -30,6 +30,9 @@ dcl_sampler S0[0:0], mode_default, space=0 dcl_resource_texture2d (float,float,float,float) T0[0:0], space=0 dcl_input_ps linear v0.xy dcl_output o0.xyzw -sample_l o0.xyzw, v0.xyxx, T0[0].xyzw, S0[0], l(0.000000) +dcl_temps 1 +sample_l r0.xyz, v0.xyxx, T0[0].xyzw, S0[0], l(0.000000) +mov o0.xyz, r0.xyzx +mov o0.w, l(1.000000) ret -// Approximately 2 instruction slots used +// Approximately 4 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/stretch.ps.hlsl b/src/xenia/gpu/d3d12/shaders/stretch.ps.hlsl index 681552587..c7a568434 100644 --- a/src/xenia/gpu/d3d12/shaders/stretch.ps.hlsl +++ b/src/xenia/gpu/d3d12/shaders/stretch.ps.hlsl @@ -1,6 +1,8 @@ -Texture2D xe_texture : register(t0); +Texture2D xe_texture : register(t0); SamplerState xe_sampler_linear_clamp : register(s0); float4 main(float2 xe_texcoord : TEXCOORD) : SV_Target { - return xe_texture.SampleLevel(xe_sampler_linear_clamp, xe_texcoord, 0.0f); + // Force alpha to 1 to make sure the surface won't be translucent. + return float4( + xe_texture.SampleLevel(xe_sampler_linear_clamp, xe_texcoord, 0.0f), 1.0f); } diff --git a/src/xenia/gpu/d3d12/shaders/stretch_gamma.ps.hlsl b/src/xenia/gpu/d3d12/shaders/stretch_gamma.ps.hlsl index cfa545aa1..a13e333a8 100644 --- a/src/xenia/gpu/d3d12/shaders/stretch_gamma.ps.hlsl +++ b/src/xenia/gpu/d3d12/shaders/stretch_gamma.ps.hlsl @@ -1,4 +1,4 @@ -Texture2D xe_texture : register(t0); +Texture2D xe_texture : register(t0); Texture1D xe_gamma_ramp : register(t1); SamplerState xe_sampler_linear_clamp : register(s0); cbuffer XeStretchGammaRootConstants : register(b0) { @@ -6,14 +6,15 @@ cbuffer XeStretchGammaRootConstants : register(b0) { }; float4 main(float2 xe_texcoord : TEXCOORD) : SV_Target { - float4 color = + float3 color = xe_texture.SampleLevel(xe_sampler_linear_clamp, xe_texcoord, 0.0f); // The center of the first texel of the LUT contains the value for 0, and the // center of the last texel contains the value for 1. - color.rgb = color.rgb * (1.0f - xe_gamma_ramp_inv_size) + - (0.5 * xe_gamma_ramp_inv_size); + color = + color * (1.0f - xe_gamma_ramp_inv_size) + (0.5 * xe_gamma_ramp_inv_size); color.r = xe_gamma_ramp.SampleLevel(xe_sampler_linear_clamp, color.r, 0.0f).r; color.g = xe_gamma_ramp.SampleLevel(xe_sampler_linear_clamp, color.g, 0.0f).g; color.b = xe_gamma_ramp.SampleLevel(xe_sampler_linear_clamp, color.b, 0.0f).b; - return color; + // Force alpha to 1 to make sure the surface won't be translucent. + return float4(color, 1.0f); } diff --git a/src/xenia/gpu/d3d12/shared_memory.h b/src/xenia/gpu/d3d12/shared_memory.h index 676803f15..86a55b2b7 100644 --- a/src/xenia/gpu/d3d12/shared_memory.h +++ b/src/xenia/gpu/d3d12/shared_memory.h @@ -212,8 +212,7 @@ class SharedMemory { std::vector upload_ranges_; void GetRangesToUpload(uint32_t request_page_first, uint32_t request_page_last); - std::unique_ptr upload_buffer_pool_ = - nullptr; + std::unique_ptr upload_buffer_pool_; // GPU-written memory downloading for traces. // Start page, length in pages. diff --git a/src/xenia/ui/d3d12/d3d12_context.h b/src/xenia/ui/d3d12/d3d12_context.h index c9f235b97..8ae3a0b2c 100644 --- a/src/xenia/ui/d3d12/d3d12_context.h +++ b/src/xenia/ui/d3d12/d3d12_context.h @@ -99,7 +99,7 @@ class D3D12Context : public GraphicsContext { // kSwapCommandAllocatorCount. ID3D12GraphicsCommandList* swap_command_list_ = nullptr; - std::unique_ptr immediate_drawer_ = nullptr; + std::unique_ptr immediate_drawer_; }; } // namespace d3d12 diff --git a/src/xenia/ui/d3d12/d3d12_immediate_drawer.cc b/src/xenia/ui/d3d12/d3d12_immediate_drawer.cc index 565bf59a7..c1bcac5e6 100644 --- a/src/xenia/ui/d3d12/d3d12_immediate_drawer.cc +++ b/src/xenia/ui/d3d12/d3d12_immediate_drawer.cc @@ -158,7 +158,7 @@ bool D3D12ImmediateDrawer::Initialize() { } { auto& root_parameter = - root_parameters[size_t(RootParameter::kViewportInvSize)]; + root_parameters[size_t(RootParameter::kViewportSizeInv)]; root_parameter.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; root_parameter.Constants.ShaderRegister = 0; root_parameter.Constants.RegisterSpace = 0; @@ -179,7 +179,7 @@ bool D3D12ImmediateDrawer::Initialize() { return false; } - // Create the pipelines. + // Create the pipeline states. D3D12_GRAPHICS_PIPELINE_STATE_DESC pipeline_desc = {}; pipeline_desc.pRootSignature = root_signature_; pipeline_desc.VS.pShaderBytecode = immediate_vs; @@ -192,10 +192,13 @@ bool D3D12ImmediateDrawer::Initialize() { pipeline_blend_desc.SrcBlend = D3D12_BLEND_SRC_ALPHA; pipeline_blend_desc.DestBlend = D3D12_BLEND_INV_SRC_ALPHA; pipeline_blend_desc.BlendOp = D3D12_BLEND_OP_ADD; - pipeline_blend_desc.SrcBlendAlpha = D3D12_BLEND_SRC_ALPHA; - pipeline_blend_desc.DestBlendAlpha = D3D12_BLEND_INV_SRC_ALPHA; + // Don't change alpha (always 1). + pipeline_blend_desc.SrcBlendAlpha = D3D12_BLEND_ZERO; + pipeline_blend_desc.DestBlendAlpha = D3D12_BLEND_ONE; pipeline_blend_desc.BlendOpAlpha = D3D12_BLEND_OP_ADD; - pipeline_blend_desc.RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; + pipeline_blend_desc.RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_RED | + D3D12_COLOR_WRITE_ENABLE_GREEN | + D3D12_COLOR_WRITE_ENABLE_BLUE; pipeline_desc.SampleMask = UINT_MAX; pipeline_desc.RasterizerState.FillMode = D3D12_FILL_MODE_SOLID; pipeline_desc.RasterizerState.CullMode = D3D12_CULL_MODE_NONE; @@ -295,6 +298,7 @@ bool D3D12ImmediateDrawer::Initialize() { // Reset the current state. current_command_list_ = nullptr; + batch_open_ = false; return true; } @@ -415,6 +419,9 @@ void D3D12ImmediateDrawer::UpdateTexture(ImmediateTexture* texture, void D3D12ImmediateDrawer::Begin(int render_target_width, int render_target_height) { + assert_null(current_command_list_); + assert_false(batch_open_); + auto device = context_.GetD3D12Provider().GetDevice(); // Use the compositing command list. @@ -479,13 +486,17 @@ void D3D12ImmediateDrawer::Begin(int render_target_width, viewport.MinDepth = 0.0f; viewport.MaxDepth = 1.0f; current_command_list_->RSSetViewports(1, &viewport); + current_scissor_.left = 0; + current_scissor_.top = 0; + current_scissor_.right = 0; + current_scissor_.bottom = 0; current_command_list_->SetGraphicsRootSignature(root_signature_); float viewport_inv_size[2]; viewport_inv_size[0] = 1.0f / viewport.Width; viewport_inv_size[1] = 1.0f / viewport.Height; current_command_list_->SetGraphicsRoot32BitConstants( - UINT(RootParameter::kViewportInvSize), 2, viewport_inv_size, 0); + UINT(RootParameter::kViewportSizeInv), 2, viewport_inv_size, 0); current_primitive_topology_ = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED; current_texture_ = nullptr; @@ -493,21 +504,18 @@ void D3D12ImmediateDrawer::Begin(int render_target_width, } void D3D12ImmediateDrawer::BeginDrawBatch(const ImmediateDrawBatch& batch) { + assert_false(batch_open_); assert_not_null(current_command_list_); - if (current_command_list_ == nullptr) { - return; - } - uint64_t current_fence_value = context_.GetSwapCurrentFenceValue(); - batch_open_ = false; + uint64_t current_fence_value = context_.GetSwapCurrentFenceValue(); // Bind the vertices. D3D12_VERTEX_BUFFER_VIEW vertex_buffer_view; vertex_buffer_view.StrideInBytes = UINT(sizeof(ImmediateVertex)); vertex_buffer_view.SizeInBytes = - batch.vertex_count * uint32_t(sizeof(ImmediateVertex)); + UINT(sizeof(ImmediateVertex)) * batch.vertex_count; void* vertex_buffer_mapping = vertex_buffer_pool_->Request( - current_fence_value, vertex_buffer_view.SizeInBytes, sizeof(uint32_t), + current_fence_value, vertex_buffer_view.SizeInBytes, sizeof(float), nullptr, nullptr, &vertex_buffer_view.BufferLocation); if (vertex_buffer_mapping == nullptr) { XELOGE("Failed to get a buffer for {} vertices in the immediate drawer", @@ -522,7 +530,7 @@ void D3D12ImmediateDrawer::BeginDrawBatch(const ImmediateDrawBatch& batch) { batch_has_index_buffer_ = batch.indices != nullptr; if (batch_has_index_buffer_) { D3D12_INDEX_BUFFER_VIEW index_buffer_view; - index_buffer_view.SizeInBytes = batch.index_count * sizeof(uint16_t); + index_buffer_view.SizeInBytes = UINT(sizeof(uint16_t)) * batch.index_count; index_buffer_view.Format = DXGI_FORMAT_R16_UINT; void* index_buffer_mapping = vertex_buffer_pool_->Request( current_fence_value, index_buffer_view.SizeInBytes, sizeof(uint16_t), @@ -541,11 +549,6 @@ void D3D12ImmediateDrawer::BeginDrawBatch(const ImmediateDrawBatch& batch) { } void D3D12ImmediateDrawer::Draw(const ImmediateDraw& draw) { - assert_not_null(current_command_list_); - if (current_command_list_ == nullptr) { - return; - } - if (!batch_open_) { // Could be an error while obtaining the vertex and index buffers. return; @@ -554,6 +557,32 @@ void D3D12ImmediateDrawer::Draw(const ImmediateDraw& draw) { auto& provider = context_.GetD3D12Provider(); auto device = provider.GetDevice(); + // Set the scissor rectangle if enabled. + D3D12_RECT scissor; + if (draw.scissor) { + scissor.left = draw.scissor_rect[0]; + scissor.top = current_render_target_height_ - + (draw.scissor_rect[1] + draw.scissor_rect[3]); + scissor.right = scissor.left + draw.scissor_rect[2]; + scissor.bottom = scissor.top + draw.scissor_rect[3]; + } else { + scissor.left = 0; + scissor.top = 0; + scissor.right = current_render_target_width_; + scissor.bottom = current_render_target_height_; + } + if (scissor.right <= scissor.left || scissor.bottom <= scissor.top) { + // Nothing is visible (used as the default current_scissor_ value also). + return; + } + if (current_scissor_.left != scissor.left || + current_scissor_.top != scissor.top || + current_scissor_.right != scissor.right || + current_scissor_.bottom != scissor.bottom) { + current_scissor_ = scissor; + current_command_list_->RSSetScissorRects(1, &scissor); + } + // Bind the texture. auto texture = reinterpret_cast(draw.texture_handle); ID3D12Resource* texture_resource; @@ -580,6 +609,7 @@ void D3D12ImmediateDrawer::Draw(const ImmediateDraw& draw) { current_command_list_->SetDescriptorHeaps(2, descriptor_heaps); } if (bind_texture) { + current_texture_ = texture; D3D12_SHADER_RESOURCE_VIEW_DESC texture_view_desc; texture_view_desc.Format = D3D12ImmediateTexture::kFormat; texture_view_desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; @@ -599,7 +629,6 @@ void D3D12ImmediateDrawer::Draw(const ImmediateDraw& draw) { provider.OffsetViewDescriptor( texture_descriptor_pool_->GetLastRequestHeapGPUStart(), texture_descriptor_index)); - current_texture_ = texture; } // Bind the sampler. @@ -616,11 +645,11 @@ void D3D12ImmediateDrawer::Draw(const ImmediateDraw& draw) { sampler_index = SamplerIndex::kNearestClamp; } if (current_sampler_index_ != sampler_index) { + current_sampler_index_ = sampler_index; current_command_list_->SetGraphicsRootDescriptorTable( UINT(RootParameter::kSampler), provider.OffsetSamplerDescriptor(sampler_heap_gpu_start_, uint32_t(sampler_index))); - current_sampler_index_ = sampler_index; } // Set whether texture coordinates need to be restricted. @@ -646,27 +675,11 @@ void D3D12ImmediateDrawer::Draw(const ImmediateDraw& draw) { return; } if (current_primitive_topology_ != primitive_topology) { + current_primitive_topology_ = primitive_topology; current_command_list_->IASetPrimitiveTopology(primitive_topology); current_command_list_->SetPipelineState(pipeline); - current_primitive_topology_ = primitive_topology; } - // Set the scissor rectangle if enabled. - D3D12_RECT scissor; - if (draw.scissor) { - scissor.left = draw.scissor_rect[0]; - scissor.top = current_render_target_height_ - - (draw.scissor_rect[1] + draw.scissor_rect[3]); - scissor.right = scissor.left + draw.scissor_rect[2]; - scissor.bottom = scissor.top + draw.scissor_rect[3]; - } else { - scissor.left = 0; - scissor.top = 0; - scissor.right = current_render_target_width_; - scissor.bottom = current_render_target_height_; - } - current_command_list_->RSSetScissorRects(1, &scissor); - // Draw. if (batch_has_index_buffer_) { current_command_list_->DrawIndexedInstanced( @@ -678,7 +691,10 @@ void D3D12ImmediateDrawer::Draw(const ImmediateDraw& draw) { void D3D12ImmediateDrawer::EndDrawBatch() { batch_open_ = false; } -void D3D12ImmediateDrawer::End() { current_command_list_ = nullptr; } +void D3D12ImmediateDrawer::End() { + assert_false(batch_open_); + current_command_list_ = nullptr; +} } // namespace d3d12 } // namespace ui diff --git a/src/xenia/ui/d3d12/d3d12_immediate_drawer.h b/src/xenia/ui/d3d12/d3d12_immediate_drawer.h index ce3fbcd84..53ae81054 100644 --- a/src/xenia/ui/d3d12/d3d12_immediate_drawer.h +++ b/src/xenia/ui/d3d12/d3d12_immediate_drawer.h @@ -54,7 +54,7 @@ class D3D12ImmediateDrawer : public ImmediateDrawer { kRestrictTextureSamples, kTexture, kSampler, - kViewportInvSize, + kViewportSizeInv, kCount }; @@ -75,8 +75,8 @@ class D3D12ImmediateDrawer : public ImmediateDrawer { D3D12_CPU_DESCRIPTOR_HANDLE sampler_heap_cpu_start_; D3D12_GPU_DESCRIPTOR_HANDLE sampler_heap_gpu_start_; - std::unique_ptr vertex_buffer_pool_ = nullptr; - std::unique_ptr texture_descriptor_pool_ = nullptr; + std::unique_ptr vertex_buffer_pool_; + std::unique_ptr texture_descriptor_pool_; uint64_t texture_descriptor_pool_heap_index_; struct PendingTextureUpload { @@ -95,6 +95,7 @@ class D3D12ImmediateDrawer : public ImmediateDrawer { int current_render_target_width_, current_render_target_height_; bool batch_open_ = false; bool batch_has_index_buffer_; + D3D12_RECT current_scissor_; D3D_PRIMITIVE_TOPOLOGY current_primitive_topology_; ImmediateTexture* current_texture_; SamplerIndex current_sampler_index_; diff --git a/src/xenia/ui/d3d12/shaders/dxbc/immediate_vs.cso b/src/xenia/ui/d3d12/shaders/dxbc/immediate_vs.cso index 81917561c..5a4a854bf 100644 Binary files a/src/xenia/ui/d3d12/shaders/dxbc/immediate_vs.cso and b/src/xenia/ui/d3d12/shaders/dxbc/immediate_vs.cso differ diff --git a/src/xenia/ui/d3d12/shaders/dxbc/immediate_vs.h b/src/xenia/ui/d3d12/shaders/dxbc/immediate_vs.h index 03a09ce46..074264ab7 100644 --- a/src/xenia/ui/d3d12/shaders/dxbc/immediate_vs.h +++ b/src/xenia/ui/d3d12/shaders/dxbc/immediate_vs.h @@ -1,8 +1,8 @@ // generated from `xb buildhlsl` // source: immediate.vs.hlsl const uint8_t immediate_vs[] = { - 0x44, 0x58, 0x42, 0x43, 0x6A, 0xC1, 0xC3, 0xE8, 0xA7, 0x09, 0x30, 0xF3, - 0x48, 0x84, 0xA3, 0x3C, 0x7D, 0x90, 0xA1, 0x09, 0x01, 0x00, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0xC3, 0x3E, 0x79, 0xCB, 0x09, 0x65, 0x04, 0xF0, + 0x71, 0x43, 0x47, 0x45, 0xAC, 0xE1, 0xA9, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00, 0xC4, 0x01, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00, 0x64, 0x03, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x18, 0x01, 0x00, 0x00, @@ -21,8 +21,8 @@ const uint8_t immediate_vs[] = { 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x76, - 0x69, 0x65, 0x77, 0x70, 0x6F, 0x72, 0x74, 0x5F, 0x69, 0x6E, 0x76, 0x5F, - 0x73, 0x69, 0x7A, 0x65, 0x00, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x32, 0x00, + 0x69, 0x65, 0x77, 0x70, 0x6F, 0x72, 0x74, 0x5F, 0x73, 0x69, 0x7A, 0x65, + 0x5F, 0x69, 0x6E, 0x76, 0x00, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x32, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC5, 0x00, 0x00, 0x00, diff --git a/src/xenia/ui/d3d12/shaders/dxbc/immediate_vs.txt b/src/xenia/ui/d3d12/shaders/dxbc/immediate_vs.txt index fe5f8134f..fbda7ff07 100644 --- a/src/xenia/ui/d3d12/shaders/dxbc/immediate_vs.txt +++ b/src/xenia/ui/d3d12/shaders/dxbc/immediate_vs.txt @@ -7,7 +7,7 @@ // cbuffer $Globals // { // -// float2 xe_viewport_inv_size; // Offset: 0 Size: 8 +// float2 xe_viewport_size_inv; // Offset: 0 Size: 8 // // } // diff --git a/src/xenia/ui/d3d12/shaders/immediate.vs.hlsl b/src/xenia/ui/d3d12/shaders/immediate.vs.hlsl index 7c3e22530..a79da7b1c 100644 --- a/src/xenia/ui/d3d12/shaders/immediate.vs.hlsl +++ b/src/xenia/ui/d3d12/shaders/immediate.vs.hlsl @@ -1,4 +1,4 @@ -float2 xe_viewport_inv_size : register(b0); +float2 xe_viewport_size_inv : register(b0); struct XeVertexShaderInput { float2 position : POSITION; @@ -15,7 +15,7 @@ struct XeVertexShaderOutput { XeVertexShaderOutput main(XeVertexShaderInput input) { XeVertexShaderOutput output; output.position = float4( - input.position * xe_viewport_inv_size * float2(2.0, -2.0) + + input.position * xe_viewport_size_inv * float2(2.0, -2.0) + float2(-1.0, 1.0), 0.0, 1.0); output.texcoord = input.texcoord; output.color = input.color;