Commit d46d7d13 authored by Alexandre Julliard's avatar Alexandre Julliard

Revert "wined3d: Simplify the get_write_mask and get_swizzle functions."

This reverts commit a9f658f6.
parent f9f6a4d5
...@@ -209,11 +209,14 @@ static const char * const shift_tab[] = { ...@@ -209,11 +209,14 @@ static const char * const shift_tab[] = {
static void shader_arb_get_write_mask(const DWORD param, char *write_mask) { static void shader_arb_get_write_mask(const DWORD param, char *write_mask) {
char *ptr = write_mask; char *ptr = write_mask;
if ((param & WINED3DSP_WRITEMASK_ALL) != WINED3DSP_WRITEMASK_ALL) {
*ptr++ = '.'; *ptr++ = '.';
if (param & WINED3DSP_WRITEMASK_0) *ptr++ = 'x'; if (param & WINED3DSP_WRITEMASK_0) *ptr++ = 'x';
if (param & WINED3DSP_WRITEMASK_1) *ptr++ = 'y'; if (param & WINED3DSP_WRITEMASK_1) *ptr++ = 'y';
if (param & WINED3DSP_WRITEMASK_2) *ptr++ = 'z'; if (param & WINED3DSP_WRITEMASK_2) *ptr++ = 'z';
if (param & WINED3DSP_WRITEMASK_3) *ptr++ = 'w'; if (param & WINED3DSP_WRITEMASK_3) *ptr++ = 'w';
}
*ptr = '\0'; *ptr = '\0';
} }
...@@ -223,15 +226,28 @@ static void shader_arb_get_swizzle(const DWORD param, BOOL fixup, char *swizzle_ ...@@ -223,15 +226,28 @@ static void shader_arb_get_swizzle(const DWORD param, BOOL fixup, char *swizzle_
* and z components. */ * and z components. */
const char *swizzle_chars = fixup ? "zyxw" : "xyzw"; const char *swizzle_chars = fixup ? "zyxw" : "xyzw";
char *ptr = swizzle_str; char *ptr = swizzle_str;
DWORD swizzle = (param & WINED3DSP_SWIZZLE_MASK) >> WINED3DSP_SWIZZLE_SHIFT;
size_t i = 0;
*ptr++ = '.';
/* swizzle bits fields: wwzzyyxx */ /* swizzle bits fields: wwzzyyxx */
for (i = 0; i < 4; ++i) { DWORD swizzle = (param & WINED3DSP_SWIZZLE_MASK) >> WINED3DSP_SWIZZLE_SHIFT;
*ptr++ = swizzle_chars[swizzle & 0x3]; DWORD swizzle_x = swizzle & 0x03;
swizzle >>= 2; DWORD swizzle_y = (swizzle >> 2) & 0x03;
DWORD swizzle_z = (swizzle >> 4) & 0x03;
DWORD swizzle_w = (swizzle >> 6) & 0x03;
/* If the swizzle is the default swizzle (ie, "xyzw"), we don't need to
* generate a swizzle string. Unless we need to our own swizzling. */
if ((WINED3DSP_NOSWIZZLE >> WINED3DSP_SWIZZLE_SHIFT) != swizzle || fixup) {
*ptr++ = '.';
if (swizzle_x == swizzle_y && swizzle_x == swizzle_z && swizzle_x == swizzle_w) {
*ptr++ = swizzle_chars[swizzle_x];
} else {
*ptr++ = swizzle_chars[swizzle_x];
*ptr++ = swizzle_chars[swizzle_y];
*ptr++ = swizzle_chars[swizzle_z];
*ptr++ = swizzle_chars[swizzle_w];
} }
}
*ptr = '\0'; *ptr = '\0';
} }
......
...@@ -722,11 +722,14 @@ static void shader_glsl_get_register_name( ...@@ -722,11 +722,14 @@ static void shader_glsl_get_register_name(
static void shader_glsl_get_write_mask(const DWORD param, char *write_mask) { static void shader_glsl_get_write_mask(const DWORD param, char *write_mask) {
char *ptr = write_mask; char *ptr = write_mask;
if ((param & WINED3DSP_WRITEMASK_ALL) != WINED3DSP_WRITEMASK_ALL) {
*ptr++ = '.'; *ptr++ = '.';
if (param & WINED3DSP_WRITEMASK_0) *ptr++ = 'x'; if (param & WINED3DSP_WRITEMASK_0) *ptr++ = 'x';
if (param & WINED3DSP_WRITEMASK_1) *ptr++ = 'y'; if (param & WINED3DSP_WRITEMASK_1) *ptr++ = 'y';
if (param & WINED3DSP_WRITEMASK_2) *ptr++ = 'z'; if (param & WINED3DSP_WRITEMASK_2) *ptr++ = 'z';
if (param & WINED3DSP_WRITEMASK_3) *ptr++ = 'w'; if (param & WINED3DSP_WRITEMASK_3) *ptr++ = 'w';
}
*ptr = '\0'; *ptr = '\0';
} }
...@@ -736,15 +739,28 @@ static void shader_glsl_get_swizzle(const DWORD param, BOOL fixup, char *swizzle ...@@ -736,15 +739,28 @@ static void shader_glsl_get_swizzle(const DWORD param, BOOL fixup, char *swizzle
* and z components. */ * and z components. */
const char *swizzle_chars = fixup ? "zyxw" : "xyzw"; const char *swizzle_chars = fixup ? "zyxw" : "xyzw";
char *ptr = swizzle_str; char *ptr = swizzle_str;
DWORD swizzle = (param & WINED3DSP_SWIZZLE_MASK) >> WINED3DSP_SWIZZLE_SHIFT;
size_t i = 0;
*ptr++ = '.';
/* swizzle bits fields: wwzzyyxx */ /* swizzle bits fields: wwzzyyxx */
for (i = 0; i < 4; ++i) { DWORD swizzle = (param & WINED3DSP_SWIZZLE_MASK) >> WINED3DSP_SWIZZLE_SHIFT;
*ptr++ = swizzle_chars[swizzle & 0x3]; DWORD swizzle_x = swizzle & 0x03;
swizzle >>= 2; DWORD swizzle_y = (swizzle >> 2) & 0x03;
DWORD swizzle_z = (swizzle >> 4) & 0x03;
DWORD swizzle_w = (swizzle >> 6) & 0x03;
/* If the swizzle is the default swizzle (ie, "xyzw"), we don't need to
* generate a swizzle string. Unless we need to our own swizzling. */
if ((WINED3DSP_NOSWIZZLE >> WINED3DSP_SWIZZLE_SHIFT) != swizzle || fixup) {
*ptr++ = '.';
if (swizzle_x == swizzle_y && swizzle_x == swizzle_z && swizzle_x == swizzle_w) {
*ptr++ = swizzle_chars[swizzle_x];
} else {
*ptr++ = swizzle_chars[swizzle_x];
*ptr++ = swizzle_chars[swizzle_y];
*ptr++ = swizzle_chars[swizzle_z];
*ptr++ = swizzle_chars[swizzle_w];
} }
}
*ptr = '\0'; *ptr = '\0';
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment