From 580cd2539c53a134244a7fc259816c245e2495ff Mon Sep 17 00:00:00 2001 From: Nolan Check Date: Mon, 14 Mar 2011 09:48:12 +0000 Subject: [PATCH] Yikes, I have no idea how this happened. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7341 8ced0084-cf51-0410-be5f-012b33b47a6e --- .../Src/LineGeometryShader.cpp | 226 ------------------ .../Plugin_VideoDX11/Src/LineGeometryShader.h | 57 ----- .../Src/PointGeometryShader.cpp | 217 ----------------- .../Src/PointGeometryShader.h | 57 ----- 4 files changed, 557 deletions(-) diff --git a/Source/Plugins/Plugin_VideoDX11/Src/LineGeometryShader.cpp b/Source/Plugins/Plugin_VideoDX11/Src/LineGeometryShader.cpp index 0053d32065..e851602142 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/LineGeometryShader.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/LineGeometryShader.cpp @@ -224,229 +224,3 @@ bool LineGeometryShader::SetShader(u32 components, float lineWidth, float texOff } } -// Copyright (C) 2003 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "LineGeometryShader.h" - -#include -#include "D3DBase.h" -#include "D3DShader.h" -#include "VertexShaderGen.h" - -namespace DX11 -{ - -union LineGSParams -{ - struct - { - FLOAT LineWidth; // In units of 1/6 of an EFB pixel - FLOAT TexOffset; - }; - // Constant buffers must be a multiple of 16 bytes in size. - u8 pad[16]; // Pad to the next multiple of 16 bytes -}; - -static const char LINE_GS_COMMON[] = -// The struct VS_OUTPUT used by the vertex shader goes here. -"// dolphin-emu line geometry shader common part\n" - -"cbuffer cbParams : register(b0)\n" -"{\n" - "struct\n" // Should match LineGSParams above - "{\n" - "float LineWidth;\n" - "float TexOffset;\n" - "} Params;\n" -"}\n" - -"[maxvertexcount(4)]\n" -"void main(line VS_OUTPUT input[2], inout TriangleStream outStream)\n" -"{\n" - // Pretend input[0] is on the bottom and input[1] is on top. - // We generate vertices to the left and right. - - // Correct w coordinate so screen-space math will work - "VS_OUTPUT l0 = input[0];\n" - "l0.pos /= l0.pos.w;\n" - "VS_OUTPUT r0 = l0;\n" - "VS_OUTPUT l1 = input[1];\n" - "l1.pos /= l1.pos.w;\n" - "VS_OUTPUT r1 = l1;\n" - - // GameCube/Wii's line drawing algorithm is a little quirky. It does not - // use the correct line caps. Instead, the line caps are vertical or - // horizontal depending the slope of the line. - - "float2 offset;\n" - "float2 to = input[1].pos.xy - input[0].pos.xy;\n" - // FIXME: What does real hardware do when line is at a 45-degree angle? - // FIXME: Lines aren't drawn at the correct width. See Twilight Princess map. - "if (abs(to.y) > abs(to.x)) {\n" - // Line is more tall. Extend geometry left and right. - // Lerp Params.LineWidth/2 from [0..640] to [-1..1] - "offset = float2(Params.LineWidth/640, 0);\n" - "} else {\n" - // Line is more wide. Extend geometry up and down. - // Lerp Params.LineWidth/2 from [0..528] to [1..-1] - "offset = float2(0, -Params.LineWidth/528);\n" - "}\n" - - "l0.pos.xy -= offset;\n" - "r0.pos.xy += offset;\n" - "l1.pos.xy -= offset;\n" - "r1.pos.xy += offset;\n" - -"#ifndef NUM_TEXCOORDS\n" -"#error NUM_TEXCOORDS not defined\n" -"#endif\n" - - // Apply TexOffset to all tex coordinates in the vertex -"#if NUM_TEXCOORDS >= 1\n" - "r0.tex0.x += Params.TexOffset;\n" - "r1.tex0.x += Params.TexOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 2\n" - "r0.tex1.x += Params.TexOffset;\n" - "r1.tex1.x += Params.TexOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 3\n" - "r0.tex2.x += Params.TexOffset;\n" - "r1.tex2.x += Params.TexOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 4\n" - "r0.tex3.x += Params.TexOffset;\n" - "r1.tex3.x += Params.TexOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 5\n" - "r0.tex4.x += Params.TexOffset;\n" - "r1.tex4.x += Params.TexOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 6\n" - "r0.tex5.x += Params.TexOffset;\n" - "r1.tex5.x += Params.TexOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 7\n" - "r0.tex6.x += Params.TexOffset;\n" - "r1.tex6.x += Params.TexOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 8\n" - "r0.tex7.x += Params.TexOffset;\n" - "r1.tex7.x += Params.TexOffset;\n" -"#endif\n" - - "outStream.Append(l0);\n" - "outStream.Append(r0);\n" - "outStream.Append(l1);\n" - "outStream.Append(r1);\n" -"}\n" -; - -LineGeometryShader::LineGeometryShader() - : m_ready(false), m_paramsBuffer(NULL) -{ } - -void LineGeometryShader::Init() -{ - m_ready = false; - - HRESULT hr; - - // Create constant buffer for uploading data to geometry shader - - D3D11_BUFFER_DESC bd = CD3D11_BUFFER_DESC(sizeof(LineGSParams), - D3D11_BIND_CONSTANT_BUFFER); - hr = D3D::device->CreateBuffer(&bd, NULL, &m_paramsBuffer); - CHECK(SUCCEEDED(hr), "create line geometry shader params buffer"); - D3D::SetDebugObjectName(m_paramsBuffer, "line geometry shader params buffer"); - - m_ready = true; -} - -void LineGeometryShader::Shutdown() -{ - m_ready = false; - - for (ComboMap::iterator it = m_shaders.begin(); it != m_shaders.end(); ++it) - { - SAFE_RELEASE(it->second); - } - m_shaders.clear(); - - SAFE_RELEASE(m_paramsBuffer); -} - -bool LineGeometryShader::SetShader(u32 components, float lineWidth, float texOffset) -{ - if (!m_ready) - return false; - - // Make sure geometry shader for "components" is available - ComboMap::iterator shaderIt = m_shaders.find(components); - if (shaderIt == m_shaders.end()) - { - // Generate new shader. Warning: not thread-safe. - static char code[16384]; - char* p = code; - p = GenerateVSOutputStruct(p, components, API_D3D11); - p += sprintf(p, "\n%s", LINE_GS_COMMON); - - std::stringstream numTexCoordsStr; - numTexCoordsStr << xfregs.numTexGen.numTexGens; - - INFO_LOG(VIDEO, "Compiling line geometry shader for components 0x%.08X (num texcoords %d)", - components, xfregs.numTexGen.numTexGens); - - D3D_SHADER_MACRO macros[] = { - { "NUM_TEXCOORDS", numTexCoordsStr.str().c_str() }, - { NULL, NULL } - }; - ID3D11GeometryShader* newShader = D3D::CompileAndCreateGeometryShader(code, unsigned int(strlen(code)), macros); - if (!newShader) - { - WARN_LOG(VIDEO, "Line geometry shader for components 0x%.08X failed to compile", components); - // Add dummy shader to prevent trying to compile again - m_shaders[components] = NULL; - return false; - } - - shaderIt = m_shaders.insert(std::make_pair(components, newShader)).first; - } - - if (shaderIt != m_shaders.end()) - { - if (shaderIt->second) - { - LineGSParams params = { 0 }; - params.LineWidth = lineWidth; - params.TexOffset = texOffset; - D3D::context->UpdateSubresource(m_paramsBuffer, 0, NULL, ¶ms, 0, 0); - - D3D::context->GSSetShader(shaderIt->second, NULL, 0); - D3D::context->GSSetConstantBuffers(0, 1, &m_paramsBuffer); - - return true; - } - else - return false; - } - else - return false; -} - -} diff --git a/Source/Plugins/Plugin_VideoDX11/Src/LineGeometryShader.h b/Source/Plugins/Plugin_VideoDX11/Src/LineGeometryShader.h index 0330ef4ed7..0cb43e8a75 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/LineGeometryShader.h +++ b/Source/Plugins/Plugin_VideoDX11/Src/LineGeometryShader.h @@ -55,60 +55,3 @@ private: } #endif -// Copyright (C) 2003 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _LINEGEOMETRYSHADER_H -#define _LINEGEOMETRYSHADER_H - -#include "VideoCommon.h" - -struct ID3D11Buffer; -struct ID3D11GeometryShader; - -namespace DX11 -{ - -// This class manages a collection of line geometry shaders, one for each -// vertex format. -class LineGeometryShader -{ - -public: - - LineGeometryShader(); - - void Init(); - void Shutdown(); - // Returns true on success, false on failure - bool SetShader(u32 components, float lineWidth, float texOffset); - -private: - - bool m_ready; - - ID3D11Buffer* m_paramsBuffer; - - typedef std::map ComboMap; - - ComboMap m_shaders; - -}; - -} - -#endif diff --git a/Source/Plugins/Plugin_VideoDX11/Src/PointGeometryShader.cpp b/Source/Plugins/Plugin_VideoDX11/Src/PointGeometryShader.cpp index 3ba714b57f..db2800bcbb 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/PointGeometryShader.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/PointGeometryShader.cpp @@ -215,220 +215,3 @@ bool PointGeometryShader::SetShader(u32 components, float pointSize, float texOf } } -// Copyright (C) 2003 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "PointGeometryShader.h" - -#include -#include "D3DBase.h" -#include "D3DShader.h" -#include "VertexShaderGen.h" - -namespace DX11 -{ - -union PointGSParams -{ - struct - { - FLOAT PointSize; // In units of 1/6 of an EFB pixel - FLOAT TexOffset; - }; - // Constant buffers must be a multiple of 16 bytes in size. - u8 pad[16]; // Pad to the next multiple of 16 bytes -}; - -static const char POINT_GS_COMMON[] = -// The struct VS_OUTPUT used by the vertex shader goes here. -"// dolphin-emu point geometry shader common part\n" - -"cbuffer cbParams : register(b0)\n" -"{\n" - "struct\n" // Should match PointGSParams above - "{\n" - "float PointSize;\n" - "float TexOffset;\n" - "} Params;\n" -"}\n" - -"[maxvertexcount(4)]\n" -"void main(point VS_OUTPUT input[1], inout TriangleStream outStream)\n" -"{\n" - // Correct w coordinate so screen-space math will work - "VS_OUTPUT ptLL = input[0];\n" - "ptLL.pos /= ptLL.pos.w;\n" - "VS_OUTPUT ptLR = ptLL;\n" - "VS_OUTPUT ptUL = ptLL;\n" - "VS_OUTPUT ptUR = ptLL;\n" - - // Distance from center to upper right vertex - "float2 offset = float2(Params.PointSize/640, -Params.PointSize/528);\n" - - "ptLL.pos.xy += float2(-1,-1) * offset;\n" - "ptLR.pos.xy += float2(1,-1) * offset;\n" - "ptUL.pos.xy += float2(-1,1) * offset;\n" - "ptUR.pos.xy += offset;\n" - - "float2 texOffset = float2(Params.TexOffset, Params.TexOffset);\n" - -"#ifndef NUM_TEXCOORDS\n" -"#error NUM_TEXCOORDS not defined\n" -"#endif\n" - - // Apply TexOffset to all tex coordinates in the vertex -"#if NUM_TEXCOORDS >= 1\n" - "ptLL.tex0.xy += float2(0,1) * texOffset;\n" - "ptLR.tex0.xy += texOffset;\n" - "ptUR.tex0.xy += float2(1,0) * texOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 2\n" - "ptLL.tex1.xy += float2(0,1) * texOffset;\n" - "ptLR.tex1.xy += texOffset;\n" - "ptUR.tex1.xy += float2(1,0) * texOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 3\n" - "ptLL.tex2.xy += float2(0,1) * texOffset;\n" - "ptLR.tex2.xy += texOffset;\n" - "ptUR.tex2.xy += float2(1,0) * texOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 4\n" - "ptLL.tex3.xy += float2(0,1) * texOffset;\n" - "ptLR.tex3.xy += texOffset;\n" - "ptUR.tex3.xy += float2(1,0) * texOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 5\n" - "ptLL.tex4.xy += float2(0,1) * texOffset;\n" - "ptLR.tex4.xy += texOffset;\n" - "ptUR.tex4.xy += float2(1,0) * texOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 6\n" - "ptLL.tex5.xy += float2(0,1) * texOffset;\n" - "ptLR.tex5.xy += texOffset;\n" - "ptUR.tex5.xy += float2(1,0) * texOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 7\n" - "ptLL.tex6.xy += float2(0,1) * texOffset;\n" - "ptLR.tex6.xy += texOffset;\n" - "ptUR.tex6.xy += float2(1,0) * texOffset;\n" -"#endif\n" -"#if NUM_TEXCOORDS >= 8\n" - "ptLL.tex7.xy += float2(0,1) * texOffset;\n" - "ptLR.tex7.xy += texOffset;\n" - "ptUR.tex7.xy += float2(1,0) * texOffset;\n" -"#endif\n" - - "outStream.Append(ptLL);\n" - "outStream.Append(ptLR);\n" - "outStream.Append(ptUL);\n" - "outStream.Append(ptUR);\n" -"}\n" -; - -PointGeometryShader::PointGeometryShader() - : m_ready(false), m_paramsBuffer(NULL) -{ } - -void PointGeometryShader::Init() -{ - m_ready = false; - - HRESULT hr; - - // Create constant buffer for uploading data to geometry shader - - D3D11_BUFFER_DESC bd = CD3D11_BUFFER_DESC(sizeof(PointGSParams), - D3D11_BIND_CONSTANT_BUFFER); - hr = D3D::device->CreateBuffer(&bd, NULL, &m_paramsBuffer); - CHECK(SUCCEEDED(hr), "create point geometry shader params buffer"); - D3D::SetDebugObjectName(m_paramsBuffer, "point geometry shader params buffer"); - - m_ready = true; -} - -void PointGeometryShader::Shutdown() -{ - m_ready = false; - - for (ComboMap::iterator it = m_shaders.begin(); it != m_shaders.end(); ++it) - { - SAFE_RELEASE(it->second); - } - m_shaders.clear(); - - SAFE_RELEASE(m_paramsBuffer); -} - -bool PointGeometryShader::SetShader(u32 components, float pointSize, float texOffset) -{ - if (!m_ready) - return false; - - // Make sure geometry shader for "components" is available - ComboMap::iterator shaderIt = m_shaders.find(components); - if (shaderIt == m_shaders.end()) - { - // Generate new shader. Warning: not thread-safe. - static char code[16384]; - char* p = code; - p = GenerateVSOutputStruct(p, components, API_D3D11); - p += sprintf(p, "\n%s", POINT_GS_COMMON); - - std::stringstream numTexCoordsStr; - numTexCoordsStr << xfregs.numTexGen.numTexGens; - - INFO_LOG(VIDEO, "Compiling point geometry shader for components 0x%.08X (num texcoords %d)", - components, xfregs.numTexGen.numTexGens); - - D3D_SHADER_MACRO macros[] = { - { "NUM_TEXCOORDS", numTexCoordsStr.str().c_str() }, - { NULL, NULL } - }; - ID3D11GeometryShader* newShader = D3D::CompileAndCreateGeometryShader(code, unsigned int(strlen(code)), macros); - if (!newShader) - { - WARN_LOG(VIDEO, "Point geometry shader for components 0x%.08X failed to compile", components); - // Add dummy shader to prevent trying to compile again - m_shaders[components] = NULL; - return false; - } - - shaderIt = m_shaders.insert(std::make_pair(components, newShader)).first; - } - - if (shaderIt != m_shaders.end()) - { - if (shaderIt->second) - { - PointGSParams params = { 0 }; - params.PointSize = pointSize; - params.TexOffset = texOffset; - D3D::context->UpdateSubresource(m_paramsBuffer, 0, NULL, ¶ms, 0, 0); - - D3D::context->GSSetShader(shaderIt->second, NULL, 0); - D3D::context->GSSetConstantBuffers(0, 1, &m_paramsBuffer); - - return true; - } - else - return false; - } - else - return false; -} - -} diff --git a/Source/Plugins/Plugin_VideoDX11/Src/PointGeometryShader.h b/Source/Plugins/Plugin_VideoDX11/Src/PointGeometryShader.h index 1f6385374f..688bfcc216 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/PointGeometryShader.h +++ b/Source/Plugins/Plugin_VideoDX11/Src/PointGeometryShader.h @@ -55,60 +55,3 @@ private: } #endif -// Copyright (C) 2003 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _POINTGEOMETRYSHADER_H -#define _POINTGEOMETRYSHADER_H - -#include "VideoCommon.h" - -struct ID3D11Buffer; -struct ID3D11GeometryShader; - -namespace DX11 -{ - -// This class manages a collection of point geometry shaders, one for each -// vertex format. -class PointGeometryShader -{ - -public: - - PointGeometryShader(); - - void Init(); - void Shutdown(); - // Returns true on success, false on failure - bool SetShader(u32 components, float pointSize, float texOffset); - -private: - - bool m_ready; - - ID3D11Buffer* m_paramsBuffer; - - typedef std::map ComboMap; - - ComboMap m_shaders; - -}; - -} - -#endif