5389 const char *param_name;
5392 check_op_parameters[] =
5412 const char *param_name;
5416 check_vconsts_parameters[] =
5418 {
"g_Selector", {0x00000000, 0x00000002}},
5419 {
"g_Pos1", {0x80000000, 0x00000002}},
5420 {
"g_Pos2", {0x00000000, 0x00000002}},
5421 {
"m4x3column", {0x03800000, 0x00000000}},
5422 {
"m3x4column", {0x000f0000, 0x00000000}},
5423 {
"m4x3row", {0x0000f000, 0x00000000}},
5424 {
"m3x4row", {0x00700000, 0x00000000}},
5425 {
"ts1", {0x1c000000, 0x00000000}},
5426 {
"ts2", {0x0000003f, 0x00000000}},
5427 {
"arr1", {0x00000000, 0x00000001}},
5428 {
"arr2", {0x60000000, 0x00000000}},
5429 {
"ts3", {0x00000fc0, 0x00000000}},
5433 const char *param_name;
5437 check_bconsts_parameters[] =
5439 {
"mb2x3row", {0x0000001f}},
5440 {
"mb2x3column", {0x00000060}},
5446 ID3DXEffect *effect;
5449 unsigned int i, passes_count,
value;
5452 IDirect3DVertexShader9 *vshader;
5453 unsigned char buffer[256];
5460 param = effect->lpVtbl->GetParameterByName(effect,
NULL,
"g_iVect");
5461 ok(!!
param,
"GetParameterByName failed.\n");
5463 hr = effect->lpVtbl->Begin(effect, &passes_count, 0);
5469 hr = effect->lpVtbl->BeginPass(effect, 0);
5476 for (
j = 0;
j < 8; ++
j)
5481 param = effect->lpVtbl->GetParameterByName(effect,
NULL, check_op_parameters[
i].param_name);
5482 ok(!!
param,
"Failed to get parameter (test %u).\n",
i);
5483 hr = effect->lpVtbl->GetValue(effect,
param, &fvect,
sizeof(fvect));
5484 ok(
hr ==
D3D_OK,
"Failed to get parameter value, hr %#x (test %u).\n",
hr,
i);
5485 hr = effect->lpVtbl->SetValue(effect,
param, &fvect,
sizeof(fvect));
5486 ok(
hr ==
D3D_OK,
"Failed to set parameter value, hr %#x (test %u).\n",
hr,
i);
5487 hr = effect->lpVtbl->CommitChanges(effect);
5488 ok(
hr ==
D3D_OK,
"Failed to commit changes, hr %#x (test %u).\n",
hr,
i);
5491 check_op_parameters[
i].param_name);
5497 param = effect->lpVtbl->GetParameterByName(effect,
NULL, check_vconsts_parameters[
i].param_name);
5498 ok(!!
param,
"GetParameterByName failed.\n");
5503 hr = effect->lpVtbl->CommitChanges(effect);
5507 check_vconsts_parameters[
i].param_name);
5513 param = effect->lpVtbl->GetParameterByName(effect,
NULL, check_bconsts_parameters[
i].param_name);
5514 ok(!!
param,
"GetParameterByName failed.\n");
5519 hr = effect->lpVtbl->CommitChanges(effect);
5523 check_bconsts_parameters[
i].param_name);
5527 param = effect->lpVtbl->GetParameterByName(effect,
NULL,
"g_Selector");
5528 ok(!!
param,
"GetParameterByName failed.\n");
5529 fvect.
x = fvect.
y = fvect.
z = fvect.
w = 0.0f;
5530 hr = effect->lpVtbl->SetVectorArray(effect,
param, &fvect, 1);
5532 hr = effect->lpVtbl->CommitChanges(effect);
5535 check_vconsts_parameters[0].param_name);
5538 param = effect->lpVtbl->GetParameterByName(effect,
NULL,
"arr2");
5539 ok(!!
param,
"GetParameterByName failed.\n");
5540 param = effect->lpVtbl->GetParameterElement(effect,
param, 0);
5541 ok(!!
param,
"GetParameterElement failed.\n");
5542 hr = effect->lpVtbl->SetFloat(effect,
param, 92.0
f);
5544 hr = effect->lpVtbl->CommitChanges(effect);
5547 check_vconsts_parameters[10].param_name);
5550 param = effect->lpVtbl->GetParameterByName(effect,
NULL,
"arr2");
5551 ok(!!
param,
"GetParameterByName failed.\n");
5552 param = effect->lpVtbl->GetParameterElement(effect,
param, 1);
5553 ok(!!
param,
"GetParameterElement failed.\n");
5555 hr = effect->lpVtbl->SetValue(effect,
param, &fvect.
x,
sizeof(fvect.
x));
5557 hr = effect->lpVtbl->CommitChanges(effect);
5560 check_vconsts_parameters[10].param_name);
5563 param = effect->lpVtbl->GetParameterByName(effect,
NULL,
"arr2");
5564 ok(!!
param,
"GetParameterByName failed.\n");
5566 hr = effect->lpVtbl->SetFloatArray(effect,
param, &fvect.
x, 1);
5568 hr = effect->lpVtbl->CommitChanges(effect);
5571 check_vconsts_parameters[10].param_name);
5574 param = effect->lpVtbl->GetParameterByName(effect,
NULL,
"arr2");
5575 ok(!!
param,
"GetParameterByName failed.\n");
5576 param = effect->lpVtbl->GetParameterElement(effect,
param, 1);
5577 ok(!!
param,
"GetParameterElement failed.\n");
5578 hr = effect->lpVtbl->SetInt(effect,
param, 93);
5580 hr = effect->lpVtbl->CommitChanges(effect);
5583 check_vconsts_parameters[10].param_name);
5586 param = effect->lpVtbl->GetParameterByName(effect,
NULL,
"g_Pos1");
5587 ok(!!
param,
"GetParameterByName failed.\n");
5588 fvect.
x = fvect.
y = fvect.
z = fvect.
w = 0.0f;
5589 hr = effect->lpVtbl->SetVector(effect,
param, &fvect);
5591 hr = effect->lpVtbl->CommitChanges(effect);
5594 check_vconsts_parameters[1].param_name);
5597 param = effect->lpVtbl->GetParameterByName(effect,
NULL,
"ts1");
5598 ok(!!
param,
"GetParameterByName failed.\n");
5599 param = effect->lpVtbl->GetParameterElement(effect,
param, 0);
5600 ok(!!
param,
"GetParameterByName failed.\n");
5601 param = effect->lpVtbl->GetParameterByName(effect,
param,
"fv");
5602 ok(!!
param,
"GetParameterByName failed.\n");
5604 hr = effect->lpVtbl->SetValue(effect,
param, &fvect.
x,
sizeof(
float));
5606 hr = effect->lpVtbl->CommitChanges(effect);
5609 check_vconsts_parameters[7].param_name);
5611 *(
float *)&
value = 9999.0
f;
5621 param = effect->lpVtbl->GetParameterByName(effect,
NULL,
"ts2");
5622 ok(!!
param,
"GetParameterByName failed.\n");
5623 param = effect->lpVtbl->GetParameterElement(effect,
param, 0);
5624 ok(!!
param,
"GetParameterByName failed.\n");
5625 param = effect->lpVtbl->GetParameterByName(effect,
param,
"v1");
5626 ok(!!
param,
"GetParameterByName failed.\n");
5627 hr = effect->lpVtbl->GetValue(effect,
param, &fvect,
sizeof(
float) * 3);
5629 hr = effect->lpVtbl->SetValue(effect,
param, &fvect,
sizeof(
float) * 3);
5631 hr = effect->lpVtbl->CommitChanges(effect);
5635 ok(
value == 0,
"Unexpected fog density %g.\n", *(
float *)&
value);
5638 ok(*(
float *)&
value == 4.0
f,
"Unexpected fog start %g.\n", *(
float *)&
value);
5641 ok(*(
float *)&
value == 9999.0
f,
"Unexpected point scale A %g.\n", *(
float *)&
value);
5644 ok(*(
float *)&
value == 9999.0
f,
"Unexpected point scale B %g.\n", *(
float *)&
value);
5646 check_vconsts_parameters[8].param_name);
5648 *(
float *)&
value = 9999.0
f;
5658 param = effect->lpVtbl->GetParameterByName(effect,
NULL,
"ts3");
5659 ok(!!
param,
"GetParameterByName failed.\n");
5660 param = effect->lpVtbl->GetParameterByName(effect,
param,
"ts");
5661 ok(!!
param,
"GetParameterByName failed.\n");
5662 param = effect->lpVtbl->GetParameterElement(effect,
param, 1);
5663 ok(!!
param,
"GetParameterByName failed.\n");
5664 param = effect->lpVtbl->GetParameterByName(effect,
param,
"fv");
5665 ok(!!
param,
"GetParameterByName failed.\n");
5666 hr = effect->lpVtbl->GetValue(effect,
param, &fvect.
x,
sizeof(
float));
5668 hr = effect->lpVtbl->SetValue(effect,
param, &fvect.
x,
sizeof(
float));
5670 hr = effect->lpVtbl->CommitChanges(effect);
5674 ok(*(
float *)&
value == 9999.0
f,
"Unexpected fog density %g.\n", *(
float *)&
value);
5677 ok(*(
float *)&
value == 9999.0
f,
"Unexpected fog start %g.\n", *(
float *)&
value);
5680 ok(*(
float *)&
value == 4.0
f,
"Unexpected point scale A %g.\n", *(
float *)&
value);
5683 ok(*(
float *)&
value == 12.0
f,
"Unexpected point scale B %g.\n", *(
float *)&
value);
5685 check_vconsts_parameters[11].param_name);
5689 ok(
value == 1,
"Unexpected sampler 0 minfilter %u.\n",
value);
5693 ok(
value == 0,
"Unexpected sampler 1 minfilter %u.\n",
value);
5696 ok(
value == 3,
"Unexpected sampler 2 minfilter %u.\n",
value);
5698 param = effect->lpVtbl->GetParameterByName(effect,
NULL,
"g_iVect");
5699 ok(!!
param,
"GetParameterByName failed.\n");
5700 ivect[0] = ivect[1] = ivect[2] = ivect[3] = 1;
5701 hr = effect->lpVtbl->SetValue(effect,
param, ivect,
sizeof(ivect));
5704 for (
i = 0;
i < 3; ++
i)
5721 hr = effect->lpVtbl->CommitChanges(effect);
5726 ok(!vshader,
"Got non NULL vshader.\n");
5728 "selector g_iVect");
5732 ok(
value == 0,
"Unexpected sampler 0 minfilter %u.\n",
value);
5735 ok(
value == 0,
"Unexpected sampler 1 minfilter %u.\n",
value);
5739 ok(
value == 1,
"Unexpected sampler 2 minfilter %u.\n",
value);
5742 ok(
value == 0,
"Unexpected sampler 2 minfilter %u.\n",
value);
5745 ok(
value == 1,
"Unexpected sampler 0 minfilter %u.\n",
value);
5748 ok(
value == 0,
"Unexpected sampler 0 minfilter %u.\n",
value);
5751 hr = effect->lpVtbl->SetValue(effect,
param, ivect,
sizeof(ivect));
5754 hr = effect->lpVtbl->SetValue(effect,
param, ivect,
sizeof(ivect));
5756 hr = effect->lpVtbl->CommitChanges(effect);
5760 ok(!vshader,
"Got non NULL vshader.\n");
5762 "selector g_iVect");
5764 hr = effect->lpVtbl->SetValue(effect,
param, ivect,
sizeof(ivect));
5766 hr = effect->lpVtbl->CommitChanges(effect);
5770 ok(!!vshader,
"Got NULL vshader.\n");
5774 ok(fvect.
x == 0.0f && fvect.
y == 0.0f && fvect.
z == 0.0f && fvect.
w == 0.0f,
5775 "Vertex shader float constants do not match.\n");
5779 "selector g_iVect");
5781 hr = effect->lpVtbl->SetValue(effect,
param, ivect,
sizeof(ivect));
5783 hr = effect->lpVtbl->CommitChanges(effect);
5787 hr = effect->lpVtbl->EndPass(effect);
5790 hr = effect->lpVtbl->End(effect);
5793 effect->lpVtbl->Release(effect);
#define IDirect3DDevice9_GetRenderState(p, a, b)
static void test_effect_clear_vconsts(IDirect3DDevice9 *device)
static void test_effect_preshader_clear_pbool_consts(IDirect3DDevice9 *device)
#define test_effect_preshader_compare_vconsts(a, b, c)
static const DWORD test_effect_preshader_effect_blob[]
HRESULT WINAPI D3DXCreateEffect(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatalen, const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags, struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors)
static const struct @1648 test_effect_preshader_op_expected[]
#define IDirect3DDevice9_SetVertexShaderConstantF(p, a, b, c)
#define test_effect_preshader_compare_pbool_consts(a, b, c)
static const D3DXVECTOR4 test_effect_preshader_fvect_v[]
#define IDirect3DDevice9_GetVertexShaderConstantF(p, a, b, c)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define IDirect3DDevice9_GetVertexShader(p, a)
#define IDirect3DVertexShader9_Release(p)
#define IDirect3DDevice9_SetLight(p, a, b)
GLsizei const GLfloat * value
#define IDirect3DDevice9_SetVertexShader(p, a)
#define IDirect3DDevice9_SetRenderState(p, a, b)
#define test_effect_preshader_op_results(a, b, c)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static const BOOL test_effect_preshader_bconsts[]
#define D3DVERTEXTEXTURESAMPLER1
#define D3DVERTEXTEXTURESAMPLER2
#define IDirect3DDevice9_GetSamplerState(p, a, b, c)
#define IDirect3DDevice9_SetSamplerState(p, a, b, c)
#define D3DVERTEXTEXTURESAMPLER0
#define TEST_EFFECT_BITMASK_BLOCK_SIZE
static const D3DXVECTOR4 fvect_filler