Sunshine latest
Self-hosted game stream host for Moonlight.
display_vram.cpp File Reference

Definitions for handling video ram. More...

#include <cmath>
#include <d3dcompiler.h>
#include <directxmath.h>
#include <libavcodec/avcodec.h>
#include <libavutil/hwcontext_d3d11va.h>
#include <AMF/core/Factory.h>
#include <boost/algorithm/string/predicate.hpp>
#include "display.h"
#include "misc.h"
#include "src/config.h"
#include "src/logging.h"
#include "src/nvenc/nvenc_config.h"
#include "src/nvenc/nvenc_d3d11_native.h"
#include "src/nvenc/nvenc_d3d11_on_cuda.h"
#include "src/nvenc/nvenc_utils.h"
#include "src/video.h"
Include dependency graph for display_vram.cpp:

Classes

class  platf::dxgi::d3d_avcodec_encode_device_t
 
class  platf::dxgi::d3d_base_encode_device
 
class  platf::dxgi::d3d_nvenc_encode_device_t
 
struct  platf::dxgi::d3d_base_encode_device::encoder_img_ctx_t
 
struct  platf::dxgi::img_d3d_t
 
struct  platf::dxgi::texture_lock_helper
 

Macros

#define compile_pixel_shader_helper(x)
 
#define compile_vertex_shader_helper(x)
 
#define create_pixel_shader_helper(x, y)
 
#define create_vertex_shader_helper(x, y)
 
#define SUNSHINE_SHADERS_DIR   SUNSHINE_ASSETS_DIR "/shaders/directx"
 

Typedefs

using frame_t = util::safe_ptr<AVFrame, free_frame>
 

Functions

blob_t platf::dxgi::compile_pixel_shader (LPCSTR file)
 
blob_t platf::dxgi::compile_shader (LPCSTR file, LPCSTR entrypoint, LPCSTR shader_model)
 
blob_t platf::dxgi::compile_vertex_shader (LPCSTR file)
 
int platf::dxgi::init ()
 
blend_t platf::dxgi::make_blend (device_t::pointer device, bool enable, bool invert)
 
template<class T >
buf_t platf::dxgi::make_buffer (device_t::pointer device, const T &t)
 
util::buffer_t< std::uint8_t > platf::dxgi::make_cursor_alpha_image (const util::buffer_t< std::uint8_t > &img_data, DXGI_OUTDUPL_POINTER_SHAPE_INFO shape_info)
 
util::buffer_t< std::uint8_t > platf::dxgi::make_cursor_xor_image (const util::buffer_t< std::uint8_t > &img_data, DXGI_OUTDUPL_POINTER_SHAPE_INFO shape_info)
 
bool platf::dxgi::set_cursor_texture (device_t::pointer device, gpu_cursor_t &cursor, util::buffer_t< std::uint8_t > &&cursor_img, DXGI_OUTDUPL_POINTER_SHAPE_INFO &shape_info)
 

Variables

blob_t platf::dxgi::convert_yuv420_packed_uv_type0_ps_hlsl
 
blob_t platf::dxgi::convert_yuv420_packed_uv_type0_ps_linear_hlsl
 
blob_t platf::dxgi::convert_yuv420_packed_uv_type0_ps_perceptual_quantizer_hlsl
 
blob_t platf::dxgi::convert_yuv420_packed_uv_type0_vs_hlsl
 
blob_t platf::dxgi::convert_yuv420_packed_uv_type0s_ps_hlsl
 
blob_t platf::dxgi::convert_yuv420_packed_uv_type0s_ps_linear_hlsl
 
blob_t platf::dxgi::convert_yuv420_packed_uv_type0s_ps_perceptual_quantizer_hlsl
 
blob_t platf::dxgi::convert_yuv420_packed_uv_type0s_vs_hlsl
 
blob_t platf::dxgi::convert_yuv420_planar_y_ps_hlsl
 
blob_t platf::dxgi::convert_yuv420_planar_y_ps_linear_hlsl
 
blob_t platf::dxgi::convert_yuv420_planar_y_ps_perceptual_quantizer_hlsl
 
blob_t platf::dxgi::convert_yuv420_planar_y_vs_hlsl
 
blob_t platf::dxgi::convert_yuv444_packed_ayuv_ps_hlsl
 
blob_t platf::dxgi::convert_yuv444_packed_ayuv_ps_linear_hlsl
 
blob_t platf::dxgi::convert_yuv444_packed_vs_hlsl
 
blob_t platf::dxgi::convert_yuv444_packed_y410_ps_hlsl
 
blob_t platf::dxgi::convert_yuv444_packed_y410_ps_linear_hlsl
 
blob_t platf::dxgi::convert_yuv444_packed_y410_ps_perceptual_quantizer_hlsl
 
blob_t platf::dxgi::convert_yuv444_planar_ps_hlsl
 
blob_t platf::dxgi::convert_yuv444_planar_ps_linear_hlsl
 
blob_t platf::dxgi::convert_yuv444_planar_ps_perceptual_quantizer_hlsl
 
blob_t platf::dxgi::convert_yuv444_planar_vs_hlsl
 
blob_t platf::dxgi::cursor_ps_hlsl
 
blob_t platf::dxgi::cursor_ps_normalize_white_hlsl
 
blob_t platf::dxgi::cursor_vs_hlsl
 

Detailed Description

Definitions for handling video ram.

Macro Definition Documentation

◆ compile_pixel_shader_helper

#define compile_pixel_shader_helper ( x)
Value:
if (!(x##_hlsl = compile_pixel_shader(SUNSHINE_SHADERS_DIR "/" #x ".hlsl"))) \
return -1;

◆ compile_vertex_shader_helper

#define compile_vertex_shader_helper ( x)
Value:
if (!(x##_hlsl = compile_vertex_shader(SUNSHINE_SHADERS_DIR "/" #x ".hlsl"))) \
return -1;

◆ create_pixel_shader_helper

#define create_pixel_shader_helper ( x,
y )
Value:
if (FAILED(status = device->CreatePixelShader(x->GetBufferPointer(), x->GetBufferSize(), nullptr, &y))) { \
BOOST_LOG(error) << "Failed to create pixel shader " << #x << ": " << util::log_hex(status); \
return -1; \
}

◆ create_vertex_shader_helper

#define create_vertex_shader_helper ( x,
y )
Value:
if (FAILED(status = device->CreateVertexShader(x->GetBufferPointer(), x->GetBufferSize(), nullptr, &y))) { \
BOOST_LOG(error) << "Failed to create vertex shader " << #x << ": " << util::log_hex(status); \
return -1; \
}