Make the number of vertex outputs configurable.
Change-Id: I17ae53e5274232e9e3b482daac56d507788e822c
Reviewed-on: https://swiftshader-review.googlesource.com/5383
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/D3D9/Capabilities.hpp b/src/D3D9/Capabilities.hpp
index 321160b..1421c80 100644
--- a/src/D3D9/Capabilities.hpp
+++ b/src/D3D9/Capabilities.hpp
@@ -15,6 +15,9 @@
#ifndef D3D9_Capabilities_hpp
#define D3D9_Capabilities_hpp
+#include "Config.hpp"
+#include "MetaMacro.hpp"
+
#include <d3d9.h>
namespace D3D9
@@ -465,6 +468,23 @@
extern unsigned int textureMemory;
extern unsigned int maxAnisotropy;
+
+ enum
+ {
+ MAX_VERTEX_SHADER_CONST = 256,
+ MAX_PIXEL_SHADER_CONST = 224,
+ MAX_VERTEX_OUTPUTS = 12,
+ };
+
+ // Shader Model 3.0 requirements
+ META_ASSERT(MAX_VERTEX_SHADER_CONST >= 256);
+ META_ASSERT(MAX_PIXEL_SHADER_CONST == 224);
+ META_ASSERT(MAX_VERTEX_OUTPUTS == 12);
+
+ // Back-end minimum requirements
+ META_ASSERT(sw::VERTEX_UNIFORM_VECTORS >= MAX_VERTEX_SHADER_CONST);
+ META_ASSERT(sw::FRAGMENT_UNIFORM_VECTORS >= MAX_PIXEL_SHADER_CONST);
+ META_ASSERT(sw::MAX_VERTEX_OUTPUTS >= MAX_VERTEX_OUTPUTS);
}
#endif // D3D9_Capabilities_hpp
diff --git a/src/D3D9/Direct3DDevice9.cpp b/src/D3D9/Direct3DDevice9.cpp
index 60f9173..3414a4a 100644
--- a/src/D3D9/Direct3DDevice9.cpp
+++ b/src/D3D9/Direct3DDevice9.cpp
@@ -5800,7 +5800,7 @@
}
else // Bind directly to the output
{
- for(int i = 0; i < 12; i++)
+ for(int i = 0; i < MAX_VERTEX_OUTPUTS; i++)
{
if((usage == shader->output[i][0].usage || (usage == D3DDECLUSAGE_POSITIONT && shader->output[i][0].usage == D3DDECLUSAGE_POSITION)) &&
index == shader->output[i][0].index)
diff --git a/src/D3D9/Direct3DDevice9.hpp b/src/D3D9/Direct3DDevice9.hpp
index cf9c7d6..da78c9b 100644
--- a/src/D3D9/Direct3DDevice9.hpp
+++ b/src/D3D9/Direct3DDevice9.hpp
@@ -19,6 +19,7 @@
#include "Direct3D9.hpp"
#include "Direct3DSwapChain9.hpp"
+#include "Capabilities.hpp"
#include "Stream.hpp"
@@ -45,12 +46,6 @@
class Direct3DIndexBuffer9;
class CriticalSection;
- enum
- {
- MAX_VERTEX_SHADER_CONST = MIN(256, sw::VERTEX_UNIFORM_VECTORS),
- MAX_PIXEL_SHADER_CONST = MIN(224, sw::FRAGMENT_UNIFORM_VECTORS),
- };
-
class Direct3DDevice9 : public IDirect3DDevice9, public Unknown
{
friend CriticalSection;