d3d12: Report sample positions
Reviewed-by: Sil Vilerino <sivileri@microsoft.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14624>
This commit is contained in:
parent
173e373803
commit
aef777c95d
|
@ -2151,6 +2151,77 @@ d3d12_memory_barrier(struct pipe_context *pctx, unsigned flags)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
d3d12_get_sample_position(struct pipe_context *pctx, unsigned sample_count, unsigned sample_index,
|
||||
float *positions)
|
||||
{
|
||||
/* Sample patterns transcribed from
|
||||
* https://docs.microsoft.com/en-us/windows/win32/api/d3d11/ne-d3d11-d3d11_standard_multisample_quality_levels
|
||||
*/
|
||||
static const int sample_pattern_1sample[2] = { 0, 0 };
|
||||
static const int sample_pattern_2samples[2][2] = {
|
||||
{ 4, 4 },
|
||||
{ -4, -4 },
|
||||
};
|
||||
static const int sample_pattern_4samples[4][2] = {
|
||||
{ -2, -6 },
|
||||
{ 6, -2 },
|
||||
{ -6, 2 },
|
||||
{ 2, 6 },
|
||||
};
|
||||
static const int sample_pattern_8samples[8][2] = {
|
||||
{ 1, -3 },
|
||||
{ -1, 3 },
|
||||
{ 5, 1 },
|
||||
{ -3, -5 },
|
||||
{ -5, 5 },
|
||||
{ -7, -1 },
|
||||
{ 3, 7 },
|
||||
{ 7, -7 },
|
||||
};
|
||||
static const int sample_pattern_16samples[16][2] = {
|
||||
{ 1, 1 },
|
||||
{ -1, -3 },
|
||||
{ -3, 2 },
|
||||
{ 4, -1 },
|
||||
{ -5, -2 },
|
||||
{ 2, 5 },
|
||||
{ 5, 3 },
|
||||
{ 3, -5 },
|
||||
{ -2, 6 },
|
||||
{ 0, -7 },
|
||||
{ -4, -6 },
|
||||
{ -6, 4 },
|
||||
{ -8, 0 },
|
||||
{ 7, -4 },
|
||||
{ 6, 7 },
|
||||
{ -7, -8 },
|
||||
};
|
||||
const int *samples;
|
||||
switch (sample_count) {
|
||||
case 1:
|
||||
default:
|
||||
samples = sample_pattern_1sample;
|
||||
break;
|
||||
case 2:
|
||||
samples = sample_pattern_2samples[sample_index];
|
||||
break;
|
||||
case 4:
|
||||
samples = sample_pattern_4samples[sample_index];
|
||||
break;
|
||||
case 8:
|
||||
samples = sample_pattern_8samples[sample_index];
|
||||
break;
|
||||
case 16:
|
||||
samples = sample_pattern_16samples[sample_index];
|
||||
break;
|
||||
}
|
||||
|
||||
/* GL coords go from 0 -> 1, D3D from -0.5 -> 0.5 */
|
||||
for (unsigned i = 0; i < 2; ++i)
|
||||
positions[i] = (float)(samples[i] + 8) / 16.0f;
|
||||
}
|
||||
|
||||
struct pipe_context *
|
||||
d3d12_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
|
||||
{
|
||||
|
@ -2235,6 +2306,8 @@ d3d12_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
|
|||
|
||||
ctx->base.memory_barrier = d3d12_memory_barrier;
|
||||
|
||||
ctx->base.get_sample_position = d3d12_get_sample_position;
|
||||
|
||||
ctx->gfx_pipeline_state.sample_mask = ~0;
|
||||
|
||||
d3d12_context_surface_init(&ctx->base);
|
||||
|
|
Loading…
Reference in New Issue