Changeset 81081 in vbox for trunk/src/VBox/Additions/WINNT
- Timestamp:
- Sep 30, 2019 1:39:49 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 133686
- Location:
- trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/gallium/ogltest
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/gallium/ogltest/Makefile.kmk
r77646 r81081 25 25 26 26 ogltest_TEMPLATE = VBOXR3STATIC 27 ogltest_INCS = \ 28 $(PATH_ROOT)/src/VBox/Devices/Graphics/vmsvga_glext 27 29 ogltest_SOURCES = \ 28 30 ogltest.cpp \ -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/gallium/ogltest/oglrender.cpp
r79745 r81081 129 129 130 130 131 /* 132 * DrawArraysInstanced. Uses shaders from a guest. 133 */ 134 class OGLRenderDrawArrays : public OGLRender 135 { 136 static const int cArrays = 4; 137 138 struct VertexAttribDesc 139 { 140 GLint size; 141 GLenum type; 142 GLboolean normalized; 143 GLsizei stride; 144 }; 145 146 static VertexAttribDesc aVertexAttribs[cArrays]; 147 GLuint vbNames[cArrays]; 148 149 GLuint vertexShader; 150 GLuint fragmentShader; 151 GLuint program; 152 153 virtual HRESULT InitRender(); 154 virtual HRESULT DoRender(); 155 }; 156 157 static const GLchar *apszVertexShader[] = 158 { 159 " #version 120\n" 160 " #extension GL_EXT_gpu_shader4 : enable\n" 161 " uniform vec4 VC[2048];\n" 162 " uniform vec4 posFixup;\n" 163 " void order_ps_input(in vec4[12]);\n" 164 " vec4 OUT[12];\n" 165 " vec4 R0;\n" 166 " vec4 R1;\n" 167 " vec4 R2;\n" 168 " attribute vec4 attrib0;\n" 169 " attribute vec4 attrib1;\n" 170 " attribute vec4 attrib2;\n" 171 " attribute vec4 attrib3;\n" 172 " vec4 tmp0;\n" 173 " vec4 tmp1;\n" 174 " bool p0[4];\n" 175 " uniform vec4 VC1 = { 0.000000, 0.000000, 1.00000, 1.000000 };\n" 176 " uniform vec4 VLC2 = { 1.000000, -1.000000, 0.500000, 0.000000 };\n" 177 " const float FLT_MAX = 1e38;\n" 178 " void main() {" 179 " R0.xy = (attrib0.xy);\n" 180 " R0.yzw = (R0.yyy * attrib2.xyz);\n" 181 " R0.xyz = ((attrib1.xyz * R0.xxx) + R0.yzw);\n" 182 " R0.xyz = (R0.xyz + attrib3.xyz);\n" 183 " R1.xyzw = (R0.xzyz * VC1.zxwy); // (R0.xzyz * VC[1].zxwy);\n" 184 " R1.xy = (R1.yw + R1.xz);\n" 185 " R2.xy = (R1.xy * VLC2.xy);\n" 186 " R2.zw = (R0.zz * VLC2.zx);\n" 187 " OUT[1].xyw = (R0.xyz);\n" 188 " OUT[1].z = (VLC2.w);\n" 189 " OUT[0].xyzw = (R2.xyzw);\n" 190 " gl_Position.xyzw = OUT[0].xyzw;\n" 191 " gl_FogFragCoord = 0.0;\n" 192 " //gl_Position.y = gl_Position.y * posFixup.y;\n" 193 " //gl_Position.xy += posFixup.zw * gl_Position.ww;\n" 194 " //gl_Position.z = gl_Position.z * 2.0 - gl_Position.w;\n" 195 " }\n" 196 }; 197 198 static const char *passthrough_vshader[] = 199 { 200 " #version 120\n" 201 " vec4 R0;\n" 202 " attribute vec4 attrib0;\n" 203 " attribute vec4 attrib1;\n" 204 " attribute vec4 attrib2;\n" 205 " attribute vec4 attrib3;\n" 206 " void main(void)\n" 207 " {\n" 208 " R0 = attrib0;\n" 209 " R0.w = 1.0;\n" 210 " R0.z = 0.0;\n" 211 " gl_Position = R0;\n" 212 " }\n" 213 }; 214 215 static const GLchar *apszFragmentShader[] = 216 { 217 " #version 120\n" 218 " #extension GL_EXT_gpu_shader4 : enable\n" 219 " uniform vec4 PC[2048];\n" 220 " varying vec4 IN[31];\n" 221 " vec4 tmp0;\n" 222 " vec4 tmp1;\n" 223 " bool p0[4];\n" 224 " uniform vec4 PLC0;\n" 225 " const float FLT_MAX = 1e38;\n" 226 " void main() {" 227 " gl_FragData[0].xyzw = vec4(1.0, 1.0, 1.0, 1.0); //(PLC0.xyzw);\n" 228 " }\n" 229 }; 230 231 /* static */ OGLRenderDrawArrays::VertexAttribDesc OGLRenderDrawArrays::aVertexAttribs[OGLRenderDrawArrays::cArrays] = 232 { 233 {2, GL_FLOAT, GL_FALSE, 8 }, 234 {4, GL_FLOAT, GL_FALSE, 0 }, 235 {4, GL_FLOAT, GL_FALSE, 0 }, 236 {4, GL_FLOAT, GL_FALSE, 0 } 237 }; 238 239 /* Triangle fan. */ 240 static float aAttrib0[] = 241 { 242 0.0f, 200.0f, 243 300.0f, 200.0f, 244 300.0f, 400.0f, 245 0.0f, 400.0f 246 }; 247 248 static float aAttrib0a[] = 249 { 250 -1.0f, -1.0f, 251 1.0f, -1.0f, 252 0.0f, 0.0f, 253 0.0f, 2.0f 254 }; 255 256 static float aAttrib1[] = 257 { 258 // 1 / (w / 2) 259 0.001556f, 0.000000f, 0.000000f, 1.000000f, 260 }; 261 262 static float aAttrib2[] = 263 { 264 // 1/ (h / 2) 265 0.000000f, -0.001874f, 0.000000f, 1.000000f, 266 }; 267 268 static float aAttrib3[] = 269 { 270 -1.000000f, 1.000000f, 1.000000f, 1.000000f, 271 }; 272 273 HRESULT OGLRenderDrawArrays::InitRender() 274 { 275 glClearColor(0.0, 0.0, 1.0, 1.0); 276 277 int success; 278 char szInfoLog[1024]; 279 280 vertexShader = glCreateShader(GL_VERTEX_SHADER); 281 GL_CHECK_ERROR(); 282 glShaderSource(vertexShader, 1, apszVertexShader, NULL); 283 GL_CHECK_ERROR(); 284 glCompileShader(vertexShader); 285 GL_CHECK_ERROR(); 286 glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success); 287 GL_CHECK_ERROR(); 288 if (!success) 289 { 290 glGetShaderInfoLog(vertexShader, sizeof(szInfoLog), NULL, szInfoLog); 291 GL_CHECK_ERROR(); 292 TestShowError(E_FAIL, szInfoLog); 293 }; 294 295 fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); 296 GL_CHECK_ERROR(); 297 glShaderSource(fragmentShader, 1, apszFragmentShader, NULL); 298 GL_CHECK_ERROR(); 299 glCompileShader(fragmentShader); 300 GL_CHECK_ERROR(); 301 glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success); 302 GL_CHECK_ERROR(); 303 if (!success) 304 { 305 glGetShaderInfoLog(fragmentShader, sizeof(szInfoLog), NULL, szInfoLog); 306 GL_CHECK_ERROR(); 307 TestShowError(E_FAIL, szInfoLog); 308 }; 309 310 program = glCreateProgram(); 311 GL_CHECK_ERROR(); 312 glAttachShader(program, vertexShader); 313 GL_CHECK_ERROR(); 314 glAttachShader(program, fragmentShader); 315 GL_CHECK_ERROR(); 316 glLinkProgram(program); 317 GL_CHECK_ERROR(); 318 glGetProgramiv(program, GL_LINK_STATUS, &success); 319 if(!success) 320 { 321 glGetProgramInfoLog(program, sizeof(szInfoLog), NULL, szInfoLog); 322 GL_CHECK_ERROR(); 323 TestShowError(E_FAIL, szInfoLog); 324 } 325 326 glUseProgram(program); 327 GL_CHECK_ERROR(); 328 329 glGenBuffers(cArrays, vbNames); 330 GL_CHECK_ERROR(); 331 332 struct AttribData 333 { 334 GLsizeiptr size; 335 const GLvoid * data; 336 }; 337 338 static struct AttribData attribData[cArrays] = 339 { 340 { sizeof(aAttrib0), aAttrib0 }, 341 { sizeof(aAttrib1), aAttrib1 }, 342 { sizeof(aAttrib2), aAttrib2 }, 343 { sizeof(aAttrib3), aAttrib3 }, 344 }; 345 346 GLuint index; 347 for (index = 0; index < cArrays; ++index) 348 { 349 glBindBuffer(GL_ARRAY_BUFFER, vbNames[index]); 350 GL_CHECK_ERROR(); 351 352 glBufferData(GL_ARRAY_BUFFER, attribData[index].size, attribData[index].data, GL_DYNAMIC_DRAW); 353 GL_CHECK_ERROR(); 354 355 glEnableVertexAttribArray(index); 356 GL_CHECK_ERROR(); 357 glVertexAttribPointer(index, aVertexAttribs[index].size, aVertexAttribs[index].type, 358 aVertexAttribs[index].normalized, aVertexAttribs[index].stride, 359 (const GLvoid *)(uintptr_t)0); 360 GL_CHECK_ERROR(); 361 362 GLuint const divisor = aVertexAttribs[index].stride ? 363 0 : /* Once per vertex. */ 364 1; /* Once for one (1) set of vertices (or instance). */ 365 glVertexAttribDivisor(index, divisor); 366 GL_CHECK_ERROR(); 367 } 368 369 glBindBuffer(GL_ARRAY_BUFFER, 0); 370 GL_CHECK_ERROR(); 371 372 return S_OK; 373 } 374 375 HRESULT OGLRenderDrawArrays::DoRender() 376 { 377 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 378 379 glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, 1); 380 GL_CHECK_ERROR(); 381 382 glFlush(); 383 return S_OK; 384 } 385 386 131 387 OGLRender *CreateRender(int iRenderId) 132 388 { … … 136 392 case 0: pRender = new OGLRenderTriangle(); break; 137 393 case 1: pRender = new OGLRenderTexture2D(); break; 394 case 2: pRender = new OGLRenderDrawArrays(); break; 138 395 default: 139 396 break; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/gallium/ogltest/oglrender.h
r77646 r81081 29 29 #include <GL/gl.h> 30 30 #include <GL/glu.h> 31 #include <glext.h> 31 32 32 33 inline void TestShowError(HRESULT hr, const char *pszString) … … 35 36 MessageBoxA(0, pszString, 0, 0); 36 37 } 38 /* Expand __LINE__ number to a string. */ 39 #define OGLTEST_S(n) #n 40 #define OGLTEST_N2S(n) OGLTEST_S(n) 41 42 #define GL_CHECK_ERROR() do { if (glGetError() != GL_NO_ERROR) TestShowError((E_FAIL), __FILE__ "@" OGLTEST_N2S(__LINE__)); } while(0) 37 43 38 44 class OGLRender … … 49 55 void DeleteRender(OGLRender *pRender); 50 56 57 extern PFNGLBINDBUFFERPROC glBindBuffer; 58 extern PFNGLDELETEBUFFERSPROC glDeleteBuffers; 59 extern PFNGLGENBUFFERSPROC glGenBuffers; 60 extern PFNGLBUFFERDATAPROC glBufferData; 61 extern PFNGLMAPBUFFERPROC glMapBuffer; 62 extern PFNGLUNMAPBUFFERPROC glUnmapBuffer; 63 extern PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; 64 extern PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray; 65 extern PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; 66 extern PFNGLCREATESHADERPROC glCreateShader; 67 extern PFNGLATTACHSHADERPROC glAttachShader; 68 extern PFNGLCOMPILESHADERPROC glCompileShader; 69 extern PFNGLCREATEPROGRAMPROC glCreateProgram; 70 extern PFNGLDELETEPROGRAMPROC glDeleteProgram; 71 extern PFNGLDELETESHADERPROC glDeleteShader; 72 extern PFNGLDETACHSHADERPROC glDetachShader; 73 extern PFNGLLINKPROGRAMPROC glLinkProgram; 74 extern PFNGLSHADERSOURCEPROC glShaderSource; 75 extern PFNGLUSEPROGRAMPROC glUseProgram; 76 extern PFNGLGETPROGRAMIVPROC glGetProgramiv; 77 extern PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; 78 extern PFNGLGETSHADERIVPROC glGetShaderiv; 79 extern PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog; 80 extern PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor; 81 extern PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced; 82 51 83 #endif /* !GA_INCLUDED_SRC_WINNT_Graphics_Video_disp_wddm_gallium_ogltest_oglrender_h */ -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/gallium/ogltest/ogltest.cpp
r77646 r81081 17 17 18 18 #include "oglrender.h" 19 20 PFNGLBINDBUFFERPROC glBindBuffer; 21 PFNGLDELETEBUFFERSPROC glDeleteBuffers; 22 PFNGLGENBUFFERSPROC glGenBuffers; 23 PFNGLBUFFERDATAPROC glBufferData; 24 PFNGLMAPBUFFERPROC glMapBuffer; 25 PFNGLUNMAPBUFFERPROC glUnmapBuffer; 26 PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; 27 PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray; 28 PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; 29 PFNGLCREATESHADERPROC glCreateShader; 30 PFNGLATTACHSHADERPROC glAttachShader; 31 PFNGLCOMPILESHADERPROC glCompileShader; 32 PFNGLCREATEPROGRAMPROC glCreateProgram; 33 PFNGLDELETEPROGRAMPROC glDeleteProgram; 34 PFNGLDELETESHADERPROC glDeleteShader; 35 PFNGLDETACHSHADERPROC glDetachShader; 36 PFNGLLINKPROGRAMPROC glLinkProgram; 37 PFNGLSHADERSOURCEPROC glShaderSource; 38 PFNGLUSEPROGRAMPROC glUseProgram; 39 PFNGLGETPROGRAMIVPROC glGetProgramiv; 40 PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; 41 PFNGLGETSHADERIVPROC glGetShaderiv; 42 PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog; 43 PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor; 44 PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced; 19 45 20 46 class OGLTest … … 168 194 mhGLRC = wglCreateContext(hDC); 169 195 setCurrentGLCtx(mhGLRC); 196 197 /* Get a function address, return VERR_NOT_IMPLEMENTED on failure. */ 198 #define GLGETPROC_(ProcType, ProcName, NameSuffix) do { \ 199 ProcName = (ProcType)wglGetProcAddress(#ProcName NameSuffix); \ 200 if (!ProcName) { TestShowError(E_FAIL, #ProcName NameSuffix " missing"); } \ 201 } while(0) 202 203 GLGETPROC_(PFNGLBINDBUFFERPROC , glBindBuffer, ""); 204 GLGETPROC_(PFNGLDELETEBUFFERSPROC , glDeleteBuffers, ""); 205 GLGETPROC_(PFNGLGENBUFFERSPROC , glGenBuffers, ""); 206 GLGETPROC_(PFNGLBUFFERDATAPROC , glBufferData, ""); 207 GLGETPROC_(PFNGLMAPBUFFERPROC , glMapBuffer, ""); 208 GLGETPROC_(PFNGLUNMAPBUFFERPROC , glUnmapBuffer, ""); 209 GLGETPROC_(PFNGLENABLEVERTEXATTRIBARRAYPROC , glEnableVertexAttribArray, ""); 210 GLGETPROC_(PFNGLDISABLEVERTEXATTRIBARRAYPROC , glDisableVertexAttribArray, ""); 211 GLGETPROC_(PFNGLVERTEXATTRIBPOINTERPROC , glVertexAttribPointer, ""); 212 GLGETPROC_(PFNGLCREATESHADERPROC , glCreateShader, ""); 213 GLGETPROC_(PFNGLATTACHSHADERPROC , glAttachShader, ""); 214 GLGETPROC_(PFNGLCOMPILESHADERPROC , glCompileShader, ""); 215 GLGETPROC_(PFNGLCREATEPROGRAMPROC , glCreateProgram, ""); 216 GLGETPROC_(PFNGLDELETEPROGRAMPROC , glDeleteProgram, ""); 217 GLGETPROC_(PFNGLDELETESHADERPROC , glDeleteShader, ""); 218 GLGETPROC_(PFNGLDETACHSHADERPROC , glDetachShader, ""); 219 GLGETPROC_(PFNGLLINKPROGRAMPROC , glLinkProgram, ""); 220 GLGETPROC_(PFNGLSHADERSOURCEPROC , glShaderSource, ""); 221 GLGETPROC_(PFNGLUSEPROGRAMPROC , glUseProgram, ""); 222 GLGETPROC_(PFNGLGETPROGRAMIVPROC , glGetProgramiv, ""); 223 GLGETPROC_(PFNGLGETPROGRAMINFOLOGPROC , glGetProgramInfoLog, ""); 224 GLGETPROC_(PFNGLGETSHADERIVPROC , glGetShaderiv, ""); 225 GLGETPROC_(PFNGLGETSHADERINFOLOGPROC , glGetShaderInfoLog, ""); 226 GLGETPROC_(PFNGLVERTEXATTRIBDIVISORPROC , glVertexAttribDivisor, ""); 227 GLGETPROC_(PFNGLDRAWARRAYSINSTANCEDPROC , glDrawArraysInstanced, ""); 228 229 #undef GLGETPROC_ 230 170 231 } 171 232 else
Note:
See TracChangeset
for help on using the changeset viewer.