blob: 44be7db2b7caddb0a0c19d8b3c3e9d0a505b3960 [file] [log] [blame]
José Fonseca944088e2012-11-20 14:47:03 +00001/**************************************************************************
2 *
3 * Copyright 2011 Jose Fonseca
4 * All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 *
24 **************************************************************************/
25
26
27#include <stdio.h>
28
29#include <iostream>
30
José Fonseca1df5ed82014-06-13 10:45:46 +010031#include "com_ptr.hpp"
José Fonseca1592ad22012-12-04 13:04:14 +000032#include "d3d10imports.hpp"
33#include "d3d10state.hpp"
José Fonseca6f4fd6a2015-03-05 15:43:01 +000034#include "dxgistate_so.hpp"
José Fonseca944088e2012-11-20 14:47:03 +000035
36
37namespace d3dstate {
38
39
José Fonseca1d4fd142012-11-28 15:06:22 +000040const GUID
41GUID_D3DSTATE = {0x7D71CAC9,0x7F58,0x432C,{0xA9,0x75,0xA1,0x9F,0xCF,0xCE,0xFD,0x14}};
42
43
José Fonseca1d4fd142012-11-28 15:06:22 +000044static void
Jose Fonsecae8ba0792015-05-01 12:38:03 +010045dumpRasterizerState(StateWriter &writer, ID3D10Device *pDevice)
Jose Fonsecac435c1e2015-03-19 20:00:27 +000046{
47 com_ptr<ID3D10RasterizerState> pRasterizerState;
48
49 pDevice->RSGetState(&pRasterizerState);
Jose Fonsecae8ba0792015-05-01 12:38:03 +010050 writer.beginMember("RasterizerState");
51 dumpStateObjectDesc(writer, pRasterizerState);
52 writer.endMember(); // RasterizerState
Jose Fonsecac435c1e2015-03-19 20:00:27 +000053}
54
55
56static void
Jose Fonsecae8ba0792015-05-01 12:38:03 +010057dumpBlendState(StateWriter &writer, ID3D10Device *pDevice)
José Fonseca6f4fd6a2015-03-05 15:43:01 +000058{
59 com_ptr<ID3D10BlendState> pBlendState;
60 FLOAT BlendFactor[4];
61 UINT SampleMask;
62
63 pDevice->OMGetBlendState(&pBlendState, BlendFactor, &SampleMask);
Jose Fonsecac435c1e2015-03-19 20:00:27 +000064
Jose Fonsecae8ba0792015-05-01 12:38:03 +010065 writer.beginMember("BlendState");
66 dumpStateObjectDesc(writer, pBlendState);
67 writer.endMember(); // BlendState
Zack Rusin1cb7b772018-02-09 11:36:11 -050068
Jose Fonsecae8ba0792015-05-01 12:38:03 +010069 writer.beginMember("BlendFactor");
70 writer.beginArray();
71 writer.writeFloat(BlendFactor[0]);
72 writer.writeFloat(BlendFactor[1]);
73 writer.writeFloat(BlendFactor[2]);
74 writer.writeFloat(BlendFactor[3]);
75 writer.endArray();
76 writer.endMember(); // BlendFactor
José Fonseca6f4fd6a2015-03-05 15:43:01 +000077
Jose Fonsecae8ba0792015-05-01 12:38:03 +010078 writer.writeIntMember("SampleMask", SampleMask);
José Fonseca6f4fd6a2015-03-05 15:43:01 +000079}
80
81
82static void
Jose Fonsecae8ba0792015-05-01 12:38:03 +010083dumpDepthStencilState(StateWriter &writer, ID3D10Device *pDevice)
Zack Rusinacca7d22015-03-18 22:47:17 -040084{
85 com_ptr<ID3D10DepthStencilState> pDepthStencilState;
86 UINT stencilRef;
87
88 pDevice->OMGetDepthStencilState(&pDepthStencilState, &stencilRef);
Jose Fonsecae8ba0792015-05-01 12:38:03 +010089 writer.beginMember("DepthStencilState");
90 dumpStateObjectDesc(writer, pDepthStencilState);
91 writer.endMember(); // DepthStencilState
92 writer.writeIntMember("StencilRef", stencilRef);
Zack Rusinacca7d22015-03-18 22:47:17 -040093}
94
95
96static void
Zack Rusin4398f8b2015-06-29 15:40:42 -040097dumpViewports(StateWriter &writer, ID3D10Device *pDevice)
98{
99 D3D10_VIEWPORT vps[D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE];
100 UINT numViewports = 0, i;
101
102 pDevice->RSGetViewports(&numViewports, NULL);
103 pDevice->RSGetViewports(&numViewports, vps);
104
105 writer.beginMember("Viewports");
106 writer.beginArray();
107 for (i = 0; i < numViewports; ++i) {
108 dumpStateObject(writer, vps[i]);
109 }
110 writer.endArray();
111 writer.endMember();
112}
113
114
115static void
116dumpScissors(StateWriter &writer, ID3D10Device *pDevice)
117{
118 D3D10_RECT rects[D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE];
119 UINT numRects = 0, i;
120
121 pDevice->RSGetScissorRects(&numRects, NULL);
122 pDevice->RSGetScissorRects(&numRects, rects);
123
124 writer.beginMember("Scissors");
125 writer.beginArray();
126 for (i = 0; i < numRects; ++i) {
127 dumpStateObject(writer, rects[i]);
128 }
129 writer.endArray();
130 writer.endMember();
131}
132
133
134static void
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100135dumpParameters(StateWriter &writer, ID3D10Device *pDevice)
José Fonseca6f4fd6a2015-03-05 15:43:01 +0000136{
137 // TODO: dump description of current bound state
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100138 writer.beginMember("parameters");
139 writer.beginObject();
José Fonseca6f4fd6a2015-03-05 15:43:01 +0000140
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100141 dumpRasterizerState(writer, pDevice);
142 dumpBlendState(writer, pDevice);
143 dumpDepthStencilState(writer, pDevice);
Zack Rusin4398f8b2015-06-29 15:40:42 -0400144 dumpViewports(writer, pDevice);
145 dumpScissors(writer, pDevice);
José Fonseca6f4fd6a2015-03-05 15:43:01 +0000146
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100147 writer.endObject();
148 writer.endMember(); // parameters
José Fonseca6f4fd6a2015-03-05 15:43:01 +0000149}
150
151
152static void
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100153dumpShaders(StateWriter &writer, ID3D10Device *pDevice)
José Fonseca1d4fd142012-11-28 15:06:22 +0000154{
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100155 writer.beginMember("shaders");
156 writer.beginObject();
José Fonseca1d4fd142012-11-28 15:06:22 +0000157
José Fonseca1df5ed82014-06-13 10:45:46 +0100158 com_ptr<ID3D10VertexShader> pVertexShader;
José Fonseca1d4fd142012-11-28 15:06:22 +0000159 pDevice->VSGetShader(&pVertexShader);
160 if (pVertexShader) {
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100161 dumpShader<ID3D10DeviceChild>(writer, "VS", pVertexShader);
José Fonseca1d4fd142012-11-28 15:06:22 +0000162 }
163
José Fonseca1df5ed82014-06-13 10:45:46 +0100164 com_ptr<ID3D10GeometryShader> pGeometryShader;
José Fonseca377c2772012-11-28 17:24:42 +0000165 pDevice->GSGetShader(&pGeometryShader);
166 if (pGeometryShader) {
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100167 dumpShader<ID3D10DeviceChild>(writer, "GS", pGeometryShader);
José Fonseca377c2772012-11-28 17:24:42 +0000168 }
169
José Fonseca1df5ed82014-06-13 10:45:46 +0100170 com_ptr<ID3D10PixelShader> pPixelShader;
José Fonseca1d4fd142012-11-28 15:06:22 +0000171 pDevice->PSGetShader(&pPixelShader);
172 if (pPixelShader) {
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100173 dumpShader<ID3D10DeviceChild>(writer, "PS", pPixelShader);
José Fonseca1d4fd142012-11-28 15:06:22 +0000174 }
175
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100176 writer.endObject();
177 writer.endMember(); // shaders
José Fonseca1d4fd142012-11-28 15:06:22 +0000178}
179
Zack Rusin1cb7b772018-02-09 11:36:11 -0500180static void
181dumpConstantBuffers(StateWriter &writer, ID3D10Device *pDevice)
182{
183 ID3D10Buffer *pConstantBuffers[D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT];
184
185 pDevice->VSGetConstantBuffers(0, ARRAYSIZE(pConstantBuffers), pConstantBuffers);
186 dumpBuffers(writer, "VS", ARRAYSIZE(pConstantBuffers), pConstantBuffers);
187
188 pDevice->GSGetConstantBuffers(0, ARRAYSIZE(pConstantBuffers), pConstantBuffers);
189 dumpBuffers(writer, "GS", ARRAYSIZE(pConstantBuffers), pConstantBuffers);
190
191 pDevice->PSGetConstantBuffers(0, ARRAYSIZE(pConstantBuffers), pConstantBuffers);
192 dumpBuffers(writer, "PS", ARRAYSIZE(pConstantBuffers), pConstantBuffers);
193}
194
José Fonseca1d4fd142012-11-28 15:06:22 +0000195
José Fonseca944088e2012-11-20 14:47:03 +0000196void
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100197dumpDevice(StateWriter &writer, ID3D10Device *pDevice)
José Fonseca944088e2012-11-20 14:47:03 +0000198{
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100199 dumpParameters(writer, pDevice);
José Fonseca944088e2012-11-20 14:47:03 +0000200
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100201 dumpShaders(writer, pDevice);
José Fonseca65ba4972012-11-28 12:56:01 +0000202
Zack Rusin1cb7b772018-02-09 11:36:11 -0500203 dumpConstantBuffers(writer, pDevice);
204
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100205 dumpTextures(writer, pDevice);
José Fonseca65ba4972012-11-28 12:56:01 +0000206
Jose Fonsecae8ba0792015-05-01 12:38:03 +0100207 dumpFramebuffer(writer, pDevice);
José Fonseca944088e2012-11-20 14:47:03 +0000208}
209
210
211} /* namespace d3dstate */