mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-22 07:54:15 +01:00
[tests] Removed dxvk-triangle test
This commit is contained in:
parent
1164ed30c3
commit
64eb0f909d
@ -1,3 +0,0 @@
|
|||||||
test_dxvk_deps = [ dxvk_dep ]
|
|
||||||
|
|
||||||
executable('dxvk-triangle', files('test_dxvk_triangle.cpp'), dependencies: test_dxvk_deps, install: true)
|
|
@ -1,301 +0,0 @@
|
|||||||
#include <dxvk_framebuffer.h>
|
|
||||||
#include <dxvk_instance.h>
|
|
||||||
#include <dxvk_main.h>
|
|
||||||
#include <dxvk_surface.h>
|
|
||||||
|
|
||||||
#include <cstring>
|
|
||||||
#include <fstream>
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include <windowsx.h>
|
|
||||||
|
|
||||||
namespace dxvk {
|
|
||||||
Logger Logger::s_instance("dxvk-triangle.log");
|
|
||||||
}
|
|
||||||
|
|
||||||
using namespace dxvk;
|
|
||||||
|
|
||||||
const uint32_t vsCode[] = {
|
|
||||||
0x07230203,0x00010000,0x00080001,0x00000024,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0007000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000d,0x0000001b,0x00030003,
|
|
||||||
0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b,
|
|
||||||
0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x0000000b,0x00000000,0x505f6c67,
|
|
||||||
0x7469736f,0x006e6f69,0x00070006,0x0000000b,0x00000001,0x505f6c67,0x746e696f,0x657a6953,
|
|
||||||
0x00000000,0x00070006,0x0000000b,0x00000002,0x435f6c67,0x4470696c,0x61747369,0x0065636e,
|
|
||||||
0x00070006,0x0000000b,0x00000003,0x435f6c67,0x446c6c75,0x61747369,0x0065636e,0x00030005,
|
|
||||||
0x0000000d,0x00000000,0x00060005,0x0000001b,0x565f6c67,0x65747265,0x646e4978,0x00007865,
|
|
||||||
0x00050005,0x0000001e,0x65646e69,0x6c626178,0x00000065,0x00050048,0x0000000b,0x00000000,
|
|
||||||
0x0000000b,0x00000000,0x00050048,0x0000000b,0x00000001,0x0000000b,0x00000001,0x00050048,
|
|
||||||
0x0000000b,0x00000002,0x0000000b,0x00000003,0x00050048,0x0000000b,0x00000003,0x0000000b,
|
|
||||||
0x00000004,0x00030047,0x0000000b,0x00000002,0x00040047,0x0000001b,0x0000000b,0x0000002a,
|
|
||||||
0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,
|
|
||||||
0x00040017,0x00000007,0x00000006,0x00000004,0x00040015,0x00000008,0x00000020,0x00000000,
|
|
||||||
0x0004002b,0x00000008,0x00000009,0x00000001,0x0004001c,0x0000000a,0x00000006,0x00000009,
|
|
||||||
0x0006001e,0x0000000b,0x00000007,0x00000006,0x0000000a,0x0000000a,0x00040020,0x0000000c,
|
|
||||||
0x00000003,0x0000000b,0x0004003b,0x0000000c,0x0000000d,0x00000003,0x00040015,0x0000000e,
|
|
||||||
0x00000020,0x00000001,0x0004002b,0x0000000e,0x0000000f,0x00000000,0x0004002b,0x00000008,
|
|
||||||
0x00000010,0x00000003,0x0004001c,0x00000011,0x00000007,0x00000010,0x0004002b,0x00000006,
|
|
||||||
0x00000012,0x00000000,0x0004002b,0x00000006,0x00000013,0x3f000000,0x0004002b,0x00000006,
|
|
||||||
0x00000014,0x3f800000,0x0007002c,0x00000007,0x00000015,0x00000012,0x00000013,0x00000012,
|
|
||||||
0x00000014,0x0004002b,0x00000006,0x00000016,0xbf000000,0x0007002c,0x00000007,0x00000017,
|
|
||||||
0x00000013,0x00000016,0x00000012,0x00000014,0x0007002c,0x00000007,0x00000018,0x00000016,
|
|
||||||
0x00000016,0x00000012,0x00000014,0x0006002c,0x00000011,0x00000019,0x00000015,0x00000017,
|
|
||||||
0x00000018,0x00040020,0x0000001a,0x00000001,0x0000000e,0x0004003b,0x0000001a,0x0000001b,
|
|
||||||
0x00000001,0x00040020,0x0000001d,0x00000007,0x00000011,0x00040020,0x0000001f,0x00000007,
|
|
||||||
0x00000007,0x00040020,0x00000022,0x00000003,0x00000007,0x00050036,0x00000002,0x00000004,
|
|
||||||
0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000001d,0x0000001e,0x00000007,
|
|
||||||
0x0004003d,0x0000000e,0x0000001c,0x0000001b,0x0003003e,0x0000001e,0x00000019,0x00050041,
|
|
||||||
0x0000001f,0x00000020,0x0000001e,0x0000001c,0x0004003d,0x00000007,0x00000021,0x00000020,
|
|
||||||
0x00050041,0x00000022,0x00000023,0x0000000d,0x0000000f,0x0003003e,0x00000023,0x00000021,
|
|
||||||
0x000100fd,0x00010038
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint32_t fsCode[] = {
|
|
||||||
0x07230203,0x00010000,0x00080001,0x0000000c,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0006000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000009,0x00030010,0x00000004,
|
|
||||||
0x00000007,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,
|
|
||||||
0x00040005,0x00000009,0x6f6c6f63,0x00000072,0x00040047,0x00000009,0x0000001e,0x00000000,
|
|
||||||
0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,
|
|
||||||
0x00040017,0x00000007,0x00000006,0x00000004,0x00040020,0x00000008,0x00000003,0x00000007,
|
|
||||||
0x0004003b,0x00000008,0x00000009,0x00000003,0x0004002b,0x00000006,0x0000000a,0x3f800000,
|
|
||||||
0x0007002c,0x00000007,0x0000000b,0x0000000a,0x0000000a,0x0000000a,0x0000000a,0x00050036,
|
|
||||||
0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0003003e,0x00000009,
|
|
||||||
0x0000000b,0x000100fd,0x00010038
|
|
||||||
};
|
|
||||||
|
|
||||||
class TriangleApp {
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
TriangleApp(HINSTANCE instance, HWND window)
|
|
||||||
: m_dxvkInstance (new DxvkInstance()),
|
|
||||||
m_dxvkAdapter (m_dxvkInstance->enumAdapters().at(0)),
|
|
||||||
m_dxvkDevice (m_dxvkAdapter->createDevice(getDeviceFeatures())),
|
|
||||||
m_dxvkSurface (m_dxvkAdapter->createSurface(instance, window)),
|
|
||||||
m_dxvkSwapchain (m_dxvkDevice->createSwapchain(m_dxvkSurface,
|
|
||||||
DxvkSwapchainProperties {
|
|
||||||
VkSurfaceFormatKHR { VK_FORMAT_B8G8R8A8_SRGB, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR },
|
|
||||||
VK_PRESENT_MODE_FIFO_KHR,
|
|
||||||
VkExtent2D { 640, 480 },
|
|
||||||
})),
|
|
||||||
m_dxvkContext (m_dxvkDevice->createContext()) {
|
|
||||||
|
|
||||||
DxvkInputAssemblyState iaState;
|
|
||||||
iaState.primitiveTopology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
|
|
||||||
iaState.primitiveRestart = VK_FALSE;
|
|
||||||
m_dxvkContext->setInputAssemblyState(iaState);
|
|
||||||
|
|
||||||
m_dxvkContext->setInputLayout(0, nullptr, 0, nullptr);
|
|
||||||
|
|
||||||
DxvkRasterizerState rsState;
|
|
||||||
rsState.enableDepthClamp = VK_FALSE;
|
|
||||||
rsState.enableDiscard = VK_FALSE;
|
|
||||||
rsState.polygonMode = VK_POLYGON_MODE_FILL;
|
|
||||||
rsState.cullMode = VK_CULL_MODE_BACK_BIT;
|
|
||||||
rsState.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE;
|
|
||||||
rsState.depthBiasEnable = VK_FALSE;
|
|
||||||
rsState.depthBiasConstant = 0.0f;
|
|
||||||
rsState.depthBiasClamp = 0.0f;
|
|
||||||
rsState.depthBiasSlope = 0.0f;
|
|
||||||
m_dxvkContext->setRasterizerState(rsState);
|
|
||||||
|
|
||||||
DxvkMultisampleState msState;
|
|
||||||
msState.sampleMask = 0xffffffff;
|
|
||||||
msState.enableAlphaToCoverage = VK_FALSE;
|
|
||||||
msState.enableAlphaToOne = VK_FALSE;
|
|
||||||
msState.enableSampleShading = VK_FALSE;
|
|
||||||
msState.minSampleShading = 0.0f;
|
|
||||||
m_dxvkContext->setMultisampleState(msState);
|
|
||||||
|
|
||||||
DxvkDepthStencilState dsState;
|
|
||||||
dsState.enableDepthTest = VK_FALSE;
|
|
||||||
dsState.enableDepthWrite = VK_FALSE;
|
|
||||||
dsState.enableDepthBounds = VK_FALSE;
|
|
||||||
dsState.enableStencilTest = VK_FALSE;
|
|
||||||
dsState.depthCompareOp = VK_COMPARE_OP_ALWAYS;
|
|
||||||
dsState.stencilOpFront = VkStencilOpState();
|
|
||||||
dsState.stencilOpBack = VkStencilOpState();
|
|
||||||
dsState.depthBoundsMin = 0.0f;
|
|
||||||
dsState.depthBoundsMax = 1.0f;
|
|
||||||
m_dxvkContext->setDepthStencilState(dsState);
|
|
||||||
|
|
||||||
DxvkLogicOpState loState;
|
|
||||||
loState.enableLogicOp = VK_FALSE;
|
|
||||||
loState.logicOp = VK_LOGIC_OP_NO_OP;
|
|
||||||
m_dxvkContext->setLogicOpState(loState);
|
|
||||||
|
|
||||||
DxvkBlendMode blendMode;
|
|
||||||
blendMode.enableBlending = VK_FALSE;
|
|
||||||
blendMode.colorSrcFactor = VK_BLEND_FACTOR_ONE;
|
|
||||||
blendMode.colorDstFactor = VK_BLEND_FACTOR_ZERO;
|
|
||||||
blendMode.colorBlendOp = VK_BLEND_OP_ADD;
|
|
||||||
blendMode.alphaSrcFactor = VK_BLEND_FACTOR_ONE;
|
|
||||||
blendMode.alphaDstFactor = VK_BLEND_FACTOR_ZERO;
|
|
||||||
blendMode.alphaBlendOp = VK_BLEND_OP_ADD;
|
|
||||||
blendMode.writeMask = VK_COLOR_COMPONENT_R_BIT
|
|
||||||
| VK_COLOR_COMPONENT_G_BIT
|
|
||||||
| VK_COLOR_COMPONENT_B_BIT
|
|
||||||
| VK_COLOR_COMPONENT_A_BIT;
|
|
||||||
|
|
||||||
for (uint32_t i = 0; i < DxvkLimits::MaxNumRenderTargets; i++)
|
|
||||||
m_dxvkContext->setBlendMode(i, blendMode);
|
|
||||||
|
|
||||||
m_dxvkVertexShader = m_dxvkDevice->createShader(
|
|
||||||
VK_SHADER_STAGE_VERTEX_BIT, 0, nullptr,
|
|
||||||
SpirvCodeBuffer(_countof(vsCode), vsCode));
|
|
||||||
|
|
||||||
m_dxvkFragmentShader = m_dxvkDevice->createShader(
|
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT, 0, nullptr,
|
|
||||||
SpirvCodeBuffer(_countof(fsCode), fsCode));
|
|
||||||
}
|
|
||||||
|
|
||||||
~TriangleApp() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void run() {
|
|
||||||
auto sync1 = m_dxvkDevice->createSemaphore();
|
|
||||||
auto sync2 = m_dxvkDevice->createSemaphore();
|
|
||||||
|
|
||||||
auto fb = m_dxvkSwapchain->getFramebuffer(sync1);
|
|
||||||
auto fbSize = fb->size();
|
|
||||||
|
|
||||||
m_dxvkContext->beginRecording(
|
|
||||||
m_dxvkDevice->createCommandList());
|
|
||||||
m_dxvkContext->bindFramebuffer(fb);
|
|
||||||
|
|
||||||
VkViewport viewport;
|
|
||||||
viewport.x = 0.0f;
|
|
||||||
viewport.y = 0.0f;
|
|
||||||
viewport.width = 640.0f;
|
|
||||||
viewport.height = 480.0f;
|
|
||||||
viewport.minDepth = 0.0f;
|
|
||||||
viewport.maxDepth = 1.0f;
|
|
||||||
|
|
||||||
VkRect2D scissor;
|
|
||||||
scissor.offset.x = 0;
|
|
||||||
scissor.offset.y = 0;
|
|
||||||
scissor.extent.width = 640;
|
|
||||||
scissor.extent.height = 480;
|
|
||||||
|
|
||||||
m_dxvkContext->setViewports(1, &viewport, &scissor);
|
|
||||||
|
|
||||||
m_dxvkContext->bindShader(
|
|
||||||
VK_SHADER_STAGE_VERTEX_BIT,
|
|
||||||
m_dxvkVertexShader);
|
|
||||||
|
|
||||||
m_dxvkContext->bindShader(
|
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT,
|
|
||||||
m_dxvkFragmentShader);
|
|
||||||
|
|
||||||
VkClearAttachment clearAttachment;
|
|
||||||
clearAttachment.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
|
||||||
clearAttachment.colorAttachment = 0;
|
|
||||||
clearAttachment.clearValue.color.float32[0] = 0.0f;
|
|
||||||
clearAttachment.clearValue.color.float32[1] = 0.0f;
|
|
||||||
clearAttachment.clearValue.color.float32[2] = 0.0f;
|
|
||||||
clearAttachment.clearValue.color.float32[3] = 1.0f;
|
|
||||||
|
|
||||||
VkClearRect clearArea;
|
|
||||||
clearArea.rect = VkRect2D { { 0, 0 }, fbSize.width, fbSize.height };
|
|
||||||
clearArea.baseArrayLayer = 0;
|
|
||||||
clearArea.layerCount = fbSize.layers;
|
|
||||||
|
|
||||||
m_dxvkContext->clearRenderTarget(
|
|
||||||
clearAttachment,
|
|
||||||
clearArea);
|
|
||||||
m_dxvkContext->draw(3, 1, 0, 0);
|
|
||||||
|
|
||||||
auto fence = m_dxvkDevice->submitCommandList(
|
|
||||||
m_dxvkContext->endRecording(), sync1, sync2);
|
|
||||||
m_dxvkSwapchain->present(sync2);
|
|
||||||
m_dxvkDevice->waitForIdle();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VkPhysicalDeviceFeatures getDeviceFeatures() const {
|
|
||||||
VkPhysicalDeviceFeatures features;
|
|
||||||
std::memset(&features, 0, sizeof(features));
|
|
||||||
return features;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
Rc<DxvkInstance> m_dxvkInstance;
|
|
||||||
Rc<DxvkAdapter> m_dxvkAdapter;
|
|
||||||
Rc<DxvkDevice> m_dxvkDevice;
|
|
||||||
Rc<DxvkSurface> m_dxvkSurface;
|
|
||||||
Rc<DxvkSwapchain> m_dxvkSwapchain;
|
|
||||||
Rc<DxvkContext> m_dxvkContext;
|
|
||||||
|
|
||||||
Rc<DxvkShader> m_dxvkVertexShader;
|
|
||||||
Rc<DxvkShader> m_dxvkFragmentShader;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
LRESULT CALLBACK WindowProc(HWND hWnd,
|
|
||||||
UINT message,
|
|
||||||
WPARAM wParam,
|
|
||||||
LPARAM lParam);
|
|
||||||
|
|
||||||
int WINAPI WinMain(HINSTANCE hInstance,
|
|
||||||
HINSTANCE hPrevInstance,
|
|
||||||
LPSTR lpCmdLine,
|
|
||||||
int nCmdShow) {
|
|
||||||
HWND hWnd;
|
|
||||||
WNDCLASSEXW wc;
|
|
||||||
ZeroMemory(&wc, sizeof(WNDCLASSEX));
|
|
||||||
wc.cbSize = sizeof(WNDCLASSEX);
|
|
||||||
wc.style = CS_HREDRAW | CS_VREDRAW;
|
|
||||||
wc.lpfnWndProc = WindowProc;
|
|
||||||
wc.hInstance = hInstance;
|
|
||||||
wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
|
|
||||||
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
|
|
||||||
wc.lpszClassName = L"WindowClass1";
|
|
||||||
RegisterClassExW(&wc);
|
|
||||||
|
|
||||||
hWnd = CreateWindowExW(0,
|
|
||||||
L"WindowClass1",
|
|
||||||
L"Our First Windowed Program",
|
|
||||||
WS_OVERLAPPEDWINDOW,
|
|
||||||
300, 300,
|
|
||||||
640, 480,
|
|
||||||
nullptr,
|
|
||||||
nullptr,
|
|
||||||
hInstance,
|
|
||||||
nullptr);
|
|
||||||
ShowWindow(hWnd, nCmdShow);
|
|
||||||
|
|
||||||
MSG msg;
|
|
||||||
|
|
||||||
TriangleApp app(hInstance, hWnd);
|
|
||||||
|
|
||||||
try {
|
|
||||||
while (true) {
|
|
||||||
if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) {
|
|
||||||
TranslateMessage(&msg);
|
|
||||||
DispatchMessage(&msg);
|
|
||||||
|
|
||||||
if (msg.message == WM_QUIT)
|
|
||||||
return msg.wParam;
|
|
||||||
} else {
|
|
||||||
app.run();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (const dxvk::DxvkError& e) {
|
|
||||||
Logger::err(e.message());
|
|
||||||
return msg.wParam;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
|
|
||||||
switch (message) {
|
|
||||||
case WM_CLOSE:
|
|
||||||
PostQuitMessage(0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
|
||||||
}
|
|
@ -1,4 +1,3 @@
|
|||||||
subdir('d3d11')
|
subdir('d3d11')
|
||||||
subdir('dxbc')
|
subdir('dxbc')
|
||||||
subdir('dxgi')
|
subdir('dxgi')
|
||||||
subdir('dxvk')
|
|
Loading…
x
Reference in New Issue
Block a user