diff --git a/tests/d3d11/test_d3d11_triangle.cpp b/tests/d3d11/test_d3d11_triangle.cpp index aa951007..797c3011 100644 --- a/tests/d3d11/test_d3d11_triangle.cpp +++ b/tests/d3d11/test_d3d11_triangle.cpp @@ -16,22 +16,25 @@ struct Vertex { float x, y, z, w; }; +struct Color { + uint8_t r, g, b, a; +}; + const std::string g_vertexShaderCode = "Buffer buf : register(t0);\n" "struct vs_out {\n" " float4 pos : SV_POSITION;\n" " float4 color : COLOR;\n" - " uint vid : VID;\n" - " uint iid : IID;\n" "};\n" "vs_out main(float4 vsIn : IN_POSITION,\n" " uint vid : SV_VERTEXID,\n" " uint iid : SV_INSTANCEID) {\n" " vs_out result;\n" " result.pos = vsIn;\n" - " result.color = buf[vid];\n" - " result.vid = vid;\n" - " result.iid = iid;\n" + " result.color.x = buf[vid].x;\n" + " result.color.y = buf[iid * 3].y;\n" + " result.color.z = buf[0].z;\n" + " result.color.w = 1.0f;\n" " return result;\n" "}\n"; @@ -39,13 +42,9 @@ const std::string g_pixelShaderCode = "struct vs_out {\n" " float4 pos : SV_POSITION;\n" " float4 color : COLOR;\n" - " uint vid : VID;\n" - " uint iid : IID;\n" "};\n" - "cbuffer c_buffer { float4 ccolor[2]; };\n" "float4 main(vs_out ps_in) : SV_TARGET {\n" " return ps_in.color;\n" -// " return 0.5f * (ccolor[min(ps_in.vid, 1u)] + ccolor[min(ps_in.iid, 1u)]);\n" "}\n"; class TriangleApp { @@ -162,37 +161,39 @@ public: if (FAILED(m_device->CreateBuffer(&indexDesc, &indexDataInfo, &m_indexBuffer))) throw DxvkError("Failed to create index buffer"); - std::array constantData = {{ - { 0.03f, 0.03f, 0.03f, 1.0f }, - { 1.00f, 0.00f, 0.00f, 1.0f }, - { 1.00f, 1.00f, 0.00f, 1.0f }, + std::array resourceData = {{ + { 0x20, 0x20, 0x20, 0xFF }, + { 0x20, 0x20, 0x20, 0xFF }, + { 0x20, 0x20, 0x20, 0xFF }, + { 0xFF, 0xFF, 0x00, 0xFF }, + { 0xFF, 0xFF, 0x00, 0xFF }, + { 0xFF, 0xFF, 0x00, 0xFF }, }}; - D3D11_BUFFER_DESC constantDesc; - constantDesc.ByteWidth = sizeof(Vertex) * constantData.size(); - constantDesc.Usage = D3D11_USAGE_IMMUTABLE; - constantDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER - | D3D11_BIND_SHADER_RESOURCE; - constantDesc.CPUAccessFlags = 0; - constantDesc.MiscFlags = 0; - constantDesc.StructureByteStride = 0; + D3D11_BUFFER_DESC resourceDesc; + resourceDesc.ByteWidth = sizeof(Color) * resourceData.size(); + resourceDesc.Usage = D3D11_USAGE_IMMUTABLE; + resourceDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE; + resourceDesc.CPUAccessFlags = 0; + resourceDesc.MiscFlags = 0; + resourceDesc.StructureByteStride = 0; - D3D11_SUBRESOURCE_DATA constantDataInfo; - constantDataInfo.pSysMem = constantData.data(); - constantDataInfo.SysMemPitch = 0; - constantDataInfo.SysMemSlicePitch = 0; + D3D11_SUBRESOURCE_DATA resourceDataInfo; + resourceDataInfo.pSysMem = resourceData.data(); + resourceDataInfo.SysMemPitch = 0; + resourceDataInfo.SysMemSlicePitch = 0; - if (FAILED(m_device->CreateBuffer(&constantDesc, &constantDataInfo, &m_constantBuffer))) - throw DxvkError("Failed to create constant buffer"); + if (FAILED(m_device->CreateBuffer(&resourceDesc, &resourceDataInfo, &m_resourceBuffer))) + throw DxvkError("Failed to create resource buffer"); - D3D11_SHADER_RESOURCE_VIEW_DESC constantViewDesc; - constantViewDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT; - constantViewDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER; - constantViewDesc.Buffer.FirstElement = 0; - constantViewDesc.Buffer.NumElements = 3; + D3D11_SHADER_RESOURCE_VIEW_DESC resourceViewDesc; + resourceViewDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + resourceViewDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER; + resourceViewDesc.Buffer.FirstElement = 0; + resourceViewDesc.Buffer.NumElements = resourceData.size(); - if (FAILED(m_device->CreateShaderResourceView(m_constantBuffer.ptr(), &constantViewDesc, &m_constantView))) - throw DxvkError("Failed to create texel buffer view"); + if (FAILED(m_device->CreateShaderResourceView(m_resourceBuffer.ptr(), &resourceViewDesc, &m_resourceView))) + throw DxvkError("Failed to create resource buffer view"); Com vertexShaderBlob; Com pixelShaderBlob; @@ -266,9 +267,9 @@ public: m_context->ClearRenderTargetView(m_bufferView.ptr(), color); m_context->VSSetShader(m_vertexShader.ptr(), nullptr, 0); - m_context->VSSetShaderResources(0, 1, &m_constantView); m_context->PSSetShader(m_pixelShader.ptr(), nullptr, 0); - m_context->PSSetConstantBuffers(0, 1, &m_constantBuffer); + + m_context->VSSetShaderResources(0, 1, &m_resourceView); UINT vsStride = sizeof(Vertex); UINT vsOffset = 0; @@ -344,8 +345,8 @@ private: Com m_buffer; Com m_bufferView; - Com m_constantBuffer; - Com m_constantView; + Com m_resourceBuffer; + Com m_resourceView; Com m_indexBuffer; Com m_vertexBuffer; Com m_vertexFormat;