New upstream version 18.0.1+dfsg1
This commit is contained in:
parent
6efda2859e
commit
f2cf6cce50
1337 changed files with 41178 additions and 84670 deletions
|
|
@ -40,13 +40,12 @@ void gs_vertex_shader::GetBuffersExpected(
|
|||
|
||||
gs_vertex_shader::gs_vertex_shader(gs_device_t *device, const char *file,
|
||||
const char *shaderString)
|
||||
: gs_shader (device, GS_SHADER_VERTEX),
|
||||
: gs_shader (device, gs_type::gs_vertex_shader, GS_SHADER_VERTEX),
|
||||
hasNormals (false),
|
||||
hasColors (false),
|
||||
hasTangents (false),
|
||||
nTexUnits (0)
|
||||
{
|
||||
vector<D3D11_INPUT_ELEMENT_DESC> inputs;
|
||||
ShaderProcessor processor(device);
|
||||
ComPtr<ID3D10Blob> shaderBlob;
|
||||
string outputString;
|
||||
|
|
@ -55,20 +54,23 @@ gs_vertex_shader::gs_vertex_shader(gs_device_t *device, const char *file,
|
|||
processor.Process(shaderString, file);
|
||||
processor.BuildString(outputString);
|
||||
processor.BuildParams(params);
|
||||
processor.BuildInputLayout(inputs);
|
||||
GetBuffersExpected(inputs);
|
||||
processor.BuildInputLayout(layoutData);
|
||||
GetBuffersExpected(layoutData);
|
||||
BuildConstantBuffer();
|
||||
|
||||
Compile(outputString.c_str(), file, "vs_4_0", shaderBlob.Assign());
|
||||
|
||||
hr = device->device->CreateVertexShader(shaderBlob->GetBufferPointer(),
|
||||
shaderBlob->GetBufferSize(), NULL, shader.Assign());
|
||||
data.resize(shaderBlob->GetBufferSize());
|
||||
memcpy(&data[0], shaderBlob->GetBufferPointer(), data.size());
|
||||
|
||||
hr = device->device->CreateVertexShader(data.data(), data.size(),
|
||||
NULL, shader.Assign());
|
||||
if (FAILED(hr))
|
||||
throw HRError("Failed to create vertex shader", hr);
|
||||
|
||||
hr = device->device->CreateInputLayout(inputs.data(),
|
||||
(UINT)inputs.size(), shaderBlob->GetBufferPointer(),
|
||||
shaderBlob->GetBufferSize(), layout.Assign());
|
||||
hr = device->device->CreateInputLayout(layoutData.data(),
|
||||
(UINT)layoutData.size(),
|
||||
data.data(), data.size(), layout.Assign());
|
||||
if (FAILED(hr))
|
||||
throw HRError("Failed to create input layout", hr);
|
||||
|
||||
|
|
@ -78,7 +80,7 @@ gs_vertex_shader::gs_vertex_shader(gs_device_t *device, const char *file,
|
|||
|
||||
gs_pixel_shader::gs_pixel_shader(gs_device_t *device, const char *file,
|
||||
const char *shaderString)
|
||||
: gs_shader(device, GS_SHADER_PIXEL)
|
||||
: gs_shader(device, gs_type::gs_pixel_shader, GS_SHADER_PIXEL)
|
||||
{
|
||||
ShaderProcessor processor(device);
|
||||
ComPtr<ID3D10Blob> shaderBlob;
|
||||
|
|
@ -93,10 +95,13 @@ gs_pixel_shader::gs_pixel_shader(gs_device_t *device, const char *file,
|
|||
|
||||
Compile(outputString.c_str(), file, "ps_4_0", shaderBlob.Assign());
|
||||
|
||||
hr = device->device->CreatePixelShader(shaderBlob->GetBufferPointer(),
|
||||
shaderBlob->GetBufferSize(), NULL, shader.Assign());
|
||||
data.resize(shaderBlob->GetBufferSize());
|
||||
memcpy(&data[0], shaderBlob->GetBufferPointer(), data.size());
|
||||
|
||||
hr = device->device->CreatePixelShader(data.data(), data.size(),
|
||||
NULL, shader.Assign());
|
||||
if (FAILED(hr))
|
||||
throw HRError("Failed to create vertex shader", hr);
|
||||
throw HRError("Failed to create pixel shader", hr);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -157,11 +162,11 @@ void gs_shader::BuildConstantBuffer()
|
|||
constantSize += size;
|
||||
}
|
||||
|
||||
memset(&bd, 0, sizeof(bd));
|
||||
|
||||
if (constantSize) {
|
||||
D3D11_BUFFER_DESC bd;
|
||||
HRESULT hr;
|
||||
|
||||
memset(&bd, 0, sizeof(bd));
|
||||
bd.ByteWidth = (constantSize+15)&0xFFFFFFF0; /* align */
|
||||
bd.Usage = D3D11_USAGE_DYNAMIC;
|
||||
bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
|
||||
|
|
@ -196,6 +201,22 @@ void gs_shader::Compile(const char *shaderString, const char *file,
|
|||
else
|
||||
throw HRError("Failed to compile shader", hr);
|
||||
}
|
||||
|
||||
#ifdef DISASSEMBLE_SHADERS
|
||||
ComPtr<ID3D10Blob> asmBlob;
|
||||
|
||||
if (!device->d3dDisassemble)
|
||||
return;
|
||||
|
||||
hr = device->d3dDisassemble((*shader)->GetBufferPointer(),
|
||||
(*shader)->GetBufferSize(), 0, nullptr, &asmBlob);
|
||||
|
||||
if (SUCCEEDED(hr) && !!asmBlob && asmBlob->GetBufferSize()) {
|
||||
blog(LOG_INFO, "=============================================");
|
||||
blog(LOG_INFO, "Disassembly output for shader '%s':\n%s",
|
||||
file, asmBlob->GetBufferPointer());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void gs_shader::UpdateParam(vector<uint8_t> &constData,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue