tests/d3dbc: Add some tests for nrm instructions.

These are adapted from Wine's test_nrm_instruction() d3d9 test by
Paul Gofman.
This commit is contained in:
Henri Verbeet
2025-11-23 01:12:00 +01:00
parent 54aa285b30
commit 2b31efe03a
Notes: Henri Verbeet 2025-11-27 22:06:01 +01:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1847
3 changed files with 152 additions and 1 deletions

View File

@@ -429,6 +429,7 @@ format_info[] =
{"r32g32b32a32-float", 16, DXGI_FORMAT_R32G32B32A32_FLOAT},
{"r32g32b32a32-sint", 16, DXGI_FORMAT_R32G32B32A32_SINT},
{"r32g32b32a32-uint", 16, DXGI_FORMAT_R32G32B32A32_UINT},
{"r32g32b32-float", 12, DXGI_FORMAT_R32G32B32_FLOAT},
{"r32g32-float", 8, DXGI_FORMAT_R32G32_FLOAT},
{"r32g32-sint", 8, DXGI_FORMAT_R32G32_SINT},
{"r32g32-uint", 8, DXGI_FORMAT_R32G32_UINT},
@@ -510,16 +511,23 @@ static void parse_require_directive(struct shader_runner *runner, const char *li
{
enum shader_cap shader_cap;
bool less_than = false;
bool equal = false;
unsigned int i;
if (match_string(line, "shader model >=", &line)
|| (equal = match_string(line, "shader model =", &line))
|| (less_than = match_string(line, "shader model <", &line)))
{
for (i = 0; i < ARRAY_SIZE(sm_strings_dot); ++i)
{
if (match_string(line, sm_strings_dot[i], &line))
{
if (less_than)
if (equal)
{
runner->maximum_shader_model = min(runner->maximum_shader_model, i);
runner->minimum_shader_model = max(runner->minimum_shader_model, i);
}
else if (less_than)
{
if (!i)
fatal_error("Shader model < '%s' is invalid.\n", line);